参加記録 Go Conference 2014 autumn

Go Conference 2014 autumnに参加しました。
togetterまとめ
大体スライドが公開されているので、正確な内容はそちらをどうぞ。

#まとめ

  • Go言語のシンプルさへのこだわりが凄い
  • 開発陣の徳の高さが凄い
    • 難しい部分は俺らに任せておけ!的な
  • 明日から使えるGo言語的な情報が盛りだくさん
    • エラーを_で無視して済みません…(´・_・`)
  • 椅子が痛い
    • 1時間半じゃなくて、1時間ごとぐらいに休憩を挟んでほしかったです…
  • 英語頑張ろう
    • 日本語スライドありがたや…

#Keynote1: Rob Pike (@rob_pike) (45min) スライドは未公開?

Go言語の設計者ロブ・パイクさんのGo言語の思想とかについての話です。

Go言語がいかに単純さ(≒簡潔さ)を重要視しているかについてとても示唆のある話をしていただけました。
他の言語が相互に機能を取り込み、ほぼ同じ機能を持つように進化していっているのに対し、
Goは1.0の時点で言語の機能を固定し、機能をとても少なく持つようにしたそうです。
書く楽しさはなくなるけど、代わりに保守のしやすさを選んだとのことです。

プレゼンの中で特にハッとさせられたのは、単純なコードと簡潔なコードとは異なるということです。
言語の機能を使って、数行程度でいろんな事に対応しようとすると、コードの量自体は少なくて済みますが、
必要とする前提知識が増え、かつその数行を完全に理解するのにとても時間がかかります。
おそらく、適当な言語のワンライナーを理解するのに必要な知識と時間を想像すれば大体わかると思います。

簡潔な記述でも理解するのが大変な複雑な事ができるため、
簡潔なコード≠単純なコードと言えるのかなと思いました。

また、Goではコード側ができる限り簡単になるように、
複雑な事を可能な限り言語側で隠蔽しているとも言われていました。
実際、GoのGCや並行処理、パッケージなどは設計や実装自体は凄く複雑にも関わらず、
使う側からはそれほど大変さを感じることなく使えます。

ここ(複雑な部分)は俺にまかせろーといった感じで、開発者の方々には頭が下がります…

#Keynote2: Goに入ってはGoに従え @fumitoshi_ukai (45min) 資料

Google社内でGo Readability Approverをされている@fumitoshi_ukaiさんの発表です。

Go言語らしく書くにはどうすればいいのか?といった思想的な部分と、
ダメな例と良い例を挙げてひたすら赤ペン先生をする発表でした。

これがGo言語のやり方か!となりっぱなしで、まさに明日から使えるGo言語といった感じなので、
是非ともスライドが公開されるといいなーと思います。

LT1

Gardener & Go

資料

@nuki_ponさんが某位置情報ゲームの色をした、GoCon Tシャツを作ってくださったそうです。
GoCon 2014 Autumn Tシャツ | FreeGufo メール便対

セッション

##App Engine for Golang Performance 資料

@sinmetalさんのGAEとMVM上でのGoとJavaの速度比較です。
Goは基本的に倍ぐらい速く、JavaはJavaらしくJVMの起動に時間がかかるといった結果みたいです。

##Golang @ISUCON 資料

@y_matsuwitterさんのISUCONでGo言語を使った話です。
ISUCONでやった、Go言語の様々な効率化についてまとめられていました。

話を聞くとかなり複雑な事をしているようですが、スライドのコードだととても簡単そうで凄いです。

##mackerel-agent 徹底解説 資料

@Songmuさんによる、mackerel-agentのソースコード解説です。
NewRelicっぽいサービスですが、OSSな分色々出来そうで夢が広がる感じです。

##Why my Go program is slow? 資料

@methaneさんによるCPUプロファイリングについての発表です。
アセンブラまで出してくれるpprofの凄さをひしひしと感じます…

また、Goでは他の関数呼び出しのない末端の関数をインライン展開してくれるので、
関数に分けると早かったり、
関数呼び出しで呼び出し側が使っているレジスタを全部待避するので、
呼び出された側が使った分だけ待避する?Cよりも関数呼び出しは遅いなど、
Goの速度についてしっかりと説明されています。

##Golang JP Community 資料
資料2

@qt_luigiさんの日本のGo言語コミュニティの話でした。
いくつか知っているものもありましたが、思った以上に大量にあって驚きました…

##(タイトルメモり損ねました…GengoでGoの利用事例なお話) PHPのAPIをGoに置き換えていったら、500msが10msになったというお話です。
クリティカルな所ではなく影響の少ないところから、
一気にではなく少しずつ置き換えていくといいそうです。

Goで作られたデプロイツールが便利そうでした。
https://github.com/gengo/goship

##NSQ-Centric Architecture 資料

gureguさんのNSQの話です。

bit.lyが作ったGo製のメッセージキューであるNSQを使って、
チャットアプリを作った発表でした。

##(Go言語のコンパイラをハックした話) 参考資料

@moriyoshitさんがGo言語で寿司関数を作りたいがために?w Goのコンパイラをハックしたのと、
コンパイラの中についてのお話でした。

教科書通りのコンパイラの作りしてるんだなーという印象でした。
魔境と噂のGCCとかはどうなってるんだろう…と思いました。

LT

nginx-build

https://speakerdeck.com/cubicdaiya/nginx-build
NginxをビルドするためのツールのDLと、ビルドをやってくれるツールを書いたそうです。
バイナリ単体で配布できますし、こういう用途には便利そうな感じ…

(楽天でTerraformを使てる話)

AWSとかのインスタンスをコードから立ち上げられるTerraformを利用して、
楽天社内でinfrastructure as codeを進めている話です。

##ビルドパイプラインツールをGoで作った話 資料

個人的にはJenkinsでビルドパイプラインっぽいのを作るのには、
いろんな点からうんざりしていたので、なんか凄い便利そうで気になります!   似たようなのを作ろうと画策していたので、先を越された感はありますが…

##go/parser, go/astの話 資料

Goの抽象構文木を生成する標準パッケージの紹介と、可視化するツールを作ったお話です。
Goのlintではここで紹介した技術を使って実装しているらしいです。

##Unit-testing programs depend on I/O in Go 資料

表題の通り、I/Oに依存したテストについてのお話です。
Keynote2の@fumitoshi_ukaiさんも言っていたように、
データを読み書きするだけでファイルとしての挙動が不要な場合は、
os.Fileではなくio.Readerio.Writerを使うと、ファイル以外の引数も与えられるため、
汎用性が上がり、テストもしやすいそうです。

##(consul.ioの話) https://consul.io/を使うと、色々はかどるらしいが…
ごめんなさい理解できてないです(´・_・`)

##Togetterまとめ Togetterは遙か彼方の地から遠隔で@yukotanさんがまとめてくれたそうです。
振り返る際にとてもお世話になったので、感謝の限りです。