LoginSignup
30
29

More than 5 years have passed since last update.

1行もGo書いたこと無いけどGo Conference Winter 2015に参加したので資料をまとめた

Last updated at Posted at 2015-12-06

普段はRailsとかPHPでウェブサービスを作ったり保守してます。
パフォーマンスを求める処理とかWebAPIなどをミドルウェアのチューニングやキャッシュでやるのもやっぱり辛いよねって話が社内で上がってたのでようやく重い腰を上げまして、Goの勉強を本格的に始めようと思っていた矢先カンファレンスが開催されるっつーんで突撃したというわけです。

正直なところキャンセル待ちが出るほどのイベントなのにこんな素人が当選してしまったので懺悔も込めて資料とかまとめました。

キーノート

発表者 Andrew Gerrand

x/mobile gaming

ライブコーティングでランゲー作り始めた。

通常セッション

Goが支えるインフラストラクチャーサービス

発表者 @yosida95

Goで作ったサービス

  • Gehirn RS2 Plus
    仮想マシンに常駐し、設定ファイル編集 コマンド実行 ユーザの環境をアップデートを行う箇所をGoで作成

  • Gehirn MTA
    SMTPサーバをGoでフルスクラッチで作成

  • Gehirn DNS

なぜGoを使うのか

  1. 標準ライブラリが充実している
  2. 並列処理を用意に記述出来る
  3. 複数の返り値 / exceptionがない
  4. そのため例外をつまみ損なうことがないので、エラーを必ず処理出来る
  5. バイナリファイル一つだけ配布するだけでユーザに配布しやすいし、デプロイするときもS3に配置してサーバがDLして完了
  6. スケールしやすい。
  7. デプロイしやすい、ネットワークサーバを書きやすい
  8. memberlist
  9. raft

Goはインフラサービスで生きる

  • 大量のデーモン
    配布・デプロイが用意

  • 膨大な処理やリソース分散コンピューティング
    クラスタリング

  • ネットワークサービス
    SMTP DNSが堅牢にかける

gomobileでピアノの作り方

発表者 @nobonobo

発表資料 HOW TO MAKE THE PIANO

gomobileへの不満はアイコン付けたい、iOSへのビルドめんどい!
ビルドツール作った!

Middlewares for log-collection in Go

発表者 cubicdaiya

発表資料 Introduce log collector in Go into production

Introduction to golang.org

発表者 @qt_luigi

告知

GDG Shikokuで講師募集中

golang.orgの紹介

https://golang.org
http://golang-jp.org
http://blog.golang.org
とかとかとか

Webフレームワーク比較

発表者 @najeira

フレームワーク

  • Gin
  • Echo
  • Kami
  • Goji
  • Vibe
  • Gocraft
  • Gorrilla
  • Martini
ベンチマークしてみた

Get/gopherを送ってHelo Gopeherを返す
(ns/op)
1. Gin 734
2. Echo
3. Kami
4. Goji
5. Vibe
6. http(標準モジュール)
7. Gocraft
8. Gorrilla
9. Martini 5823

allocの値も計測していたけどやはりGinが一番だった。
まとめるとGinとEchoがパフォーマンス良いけど、結果は全部nsなのでGoすげぇ早い。
Ginは3年近く開発されているので、だいぶ枯れてきた印象。
おすすめのフレームワークを聞かれたらとりあえずGin使っとけ。

ISUCON戦記

発表者 @y_matsuwitter

発表資料

ISUCON2015予選の問題

基本チューニング

GOMAXPAROCS
GOGC
text/template削除
UnixDomainSocket化

プロセスキャッシュ
初期データはdumpして起動時にデータ構造を非正規化を行いメモリ上へキャッシュ
データ長が大きいデータはメモリにのっけられないので、Redisに乗っけた
Go => MySQL間のシリアライズコスト削減

ISUCONに勝つために

サーバのチューニングはパズルみたいなもの
メモリやCPUを誰にどれだけ割り当てて計算コストを削るか
どの行為が一番スコア高いのかを判断しスコアの低い処理に対応時間を減らす

FINAL FANTASY Record Keeperを支えたGolang

発表者 @shibu_jp

発表資料

ゲーム内のマスターデータ(アイテムや必殺技やテキストなど)をGoogleDrive上のスプレッドシートで管理していて、これらをゲームサーバが使えるフォーマットに変換するツールをGoで作成している。
文字列のdiffを抽出してうまいことマージしてくれるモジュール面白そう。

GoライブラリAPIの変更を知る (Diff'ing Go library API changes)

発表者 @motemen

発表資料

メソッドの引数変更などを検知して、バージョンアップに対応出来るかチェックしてくれるツール、gompatibleを作った

go/typesを使って実装している
今後はgo/typesを使って実装しているとWebインターフェースを作りたい
個人的にRubyで同じ機能を満たす物がほしい...スクリプト言語だと引数の数くらいしか検知出来ないから難しいか...

実戦へのGo導入

発表者 @songmu

発表資料

資料を見れば全てわかる。すごい。

Goのレガシーコードと戦った話

発表者 @k_yokomi

レガシーコード改善ガイド

レガシーコードとは理解できず、変更の難しいコードを指す俗語

レガシーコードの紹介

Goが悪いってわけじゃないよ

  1. テストコードが無い
    コードを変えるよりもまずテストコード書く

  2. ローカルファイルを読みまくる
    ローカルファイルをS3にアップロード
    保険としてローカルファイルは消さずにS3のファイル読めなかった場合に使う

  3. 例外をにぎり潰す
    ログに出そうぜ

  4. goroutineの乱用
    パフォーマンス要求された上でのgoroutineなのか?
    そもそも要求仕様から確認しなおして本当に必要なのか見直す。

  5. 社内共通ライブラリ的な共通パッケージ
    API依存しているものはinternalに移動

改善のためにやったこと

金曜日をリファクタリングDayとする
CircleCIで自動テスト
Coverailsでカバレッジを可視化
gomockを導入

まとめ

Goでもレガシーコードが生まれる、ちゃんとテスト書こうぜ

GoBGP : yet another BGP implementation written in Go!

発表者 石田 渉

Border Gateway Protocolって何?

インターネットを動かすためのルーティングプロトコル
もともとインターネットで使われているプロトコルだったが、VM上やデータセンターのルーティングでもつかわれるようになっている。

なぜGoで書き直すか

GoBGP
ネットワークの運用が時代錯誤
APIが不順分のためネットワークを運用自動化を行おうとするとtelnetとexpectで頑張らなければならない。
http://www.slideshare.net/taijitsuchiya5

まとめ

今まで泥臭い運用が多かったネットワークの世界にビックウェーブが来る予感

関連リンク

togetter
なぜGojiからkamiへ?

30
29
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
29