golang.tokyo #5

April 27, 2017
golang study event

2017年4月27日(木)に行われた、golang.tokyo #5に参加してきました。今回はブログ参加枠でエントリーしたので、参加してきた記事を書こうと思います。イベントの詳細は、connpassに記載がある通り、さかなのオブジェで話題の株式会社メルカリ様で行われました。

※上記引用は本勉強会とは関係なし。バランスシートの借方が充実してそうな雰囲気!

会場・雰囲気

  • メルカリさんのイベントスペース広い。
  • 140名くらい収容できそう。
  • 18Fの受付でドリンク類をもらい、軽食が並んでいる。
  • この配布方法なら、人手が少なくても大丈夫なので真似したい。

勉強会のコンセプト

  • GCPUG Tokyoさんとの共同開催。
  • とはいえ、通常通り、登壇x2とLTの構成。
  • いつもは倍率高いが、今日は定員割れ
  • 連休前だからかも。
  • 初心者割合はぼちぼち高い。

登壇1. GO*GAE

※スライド公開待ち※

株式会社カブクの吉海将太さんによる発表。インフラ構築からサーバサイドまで携わっているそう。Pepperアプリの開発もしていたとか。以下登壇内容。

  • GAEとは?
  • Goだと高速に開発できる
  • App Engineを使いたくなる発表
  • GAEの種類
  • GoのVersionは1.6
  • スピンアップが早いのが特徴
  • 好きなdocker imageを使える
  • GCEのVMが起ち上がる
  • SE(Standard Environment)とFE(Flexible Environment)どっちがいいの?(SEがよい)
  • バイナリ使いたいならFEしかない。
  • オートスケール/ロギング/モニタリング/バージョニングがSEの機能
  • ベータ/好きなライブラリをインストールできる/何でも動く/CGOが動くがFEの機能
  • google.golang.org/appengine パッケージが提供されている
  • Google Cloud Datastore APIを使うためのパッケージが、datastore package。使ってみると、面倒なので、ラッパーであるgoonを使うのが良い(メリットはコード量が少なくなること)。
  • 非同期処理を行うためのパッケージが、taskqueue。
  • Golangは、ログレベルがない!(SEのlogパッケージを使えば、ログレベルが提供される)
  • aetestというテストするためのモジュールがある。HTTP通信のテストをする際に利用するらしい。
  • FEは標準で1.8が使える。自前でDockerImageを用意すれば、好きなバージョンが使える。
  • Linuxの64bitのアプリケーションなら何でも動く。へぇぇ。
  • SE用のGAEのパッケージは使えない。ロギングはログレベルなし。標準出力・標準エラーでログを出そう、という点がFEのデメリット。
  • 自前のDocker Imageならば、localとproductionの差異がない。
  • デプロイするときに、imageを事前にpushする必要がある(gcr.ioなど?)
  • 構成例の話。SEとFEを使っている。
  • SEは最大60secでタイムアウトする。
  • TaskQueueのワーカーは、結局SEで実行するので、タイムアウト制限の対象となる。
  • TaskQueueはFEで利用できない。そのため、SEでリクエストを受けて、FEで解析する構成となった。
  • ディスパッチで割り振れる。簡単なYAMLの設定で振り分けられる感じ。
  • つらかったことは、Go分からない(普段はPython)。モックする方法がわかりにくい(Interface定義する必要あるの?)。SEはコンテキストを渡す必要があるので面倒。
  • よかったことは、gofmtいいね!型定義いいね!goroutineいいね!
  • 結論としては、GoでWebアプリ作りたいならGAEは良い選択肢。GO * GAEは他の言語に比べて最速。

登壇2. GAE/GOの勘どころ

株式会社ソウゾウの主森理さんによる発表。登壇1と同じ話になるという事故が発生した。

  • GAEはソウゾウに入ってから始めた。
  • awesome goにライブラリが2つ載っている(PR出せば載せてくれるらしい)
  • GAEは独自のルールが多い。
  • FEを使う場面は、ネットワーク起因の要求がある場合と一時的なディスク書き込みが必要な場合(SEだとtmpfileが作れない)。
  • SEはGo1.6.4。unsafe packageは基本的に使えない。build appengineの認知が低い。
  • contextがないと何もできないのがSE。
  • もうすぐ1.8がSEに来るかも。
  • Google社内は、SEで1.8が使えている。
  • 4月末に使えるようになるかも。
  • DBどうするの?(Cloud Datastoreを使う。BigTableベースのNoSQLだけどmongoぽく使うと死ぬ。Cloud SQLも使える)
  • 公式のdatastoreパッケージが使わない方がよい。必ずwrapして使った方がよい。NoSQLなので、自由にスキーマが組めるので危険。goon使うのがいい(中身を確認したうえで)。
  • Google Cloud Datastoreデザインパターンはなかなか難しく、設計力が要求されるとのこと。
  • SEだとdep, glide, gvt使えないだとー!!!!(vendorディレクトリも使えない)
  • Configurationは、Twelve-Factor Appにあるように、環境変数使うべし。
  • Testはdirenv使おう

LT1. Datastore/Go のデータ設計と struct の振る舞いについて

Datastore/Go のデータ設計と struct の振る舞いについて from pospome

LT2. Context アンチパターン

@timakinさん(グノシー)による発表。

LT3. ASTのライブコーディング

登壇者が病欠とのことで、急遽tenntennさんによるAST(抽象構文木)のライブコーディングが始まりました。Shinjuku.goでも発表されていましたけれど、正直、ASTよくわからない勢です。すみません。

感想

  • GAE使ってみようと思った。
  • でも特殊な知見が豊富ぽくてゲッソリしそうな気がした。
  • 1.8がcomingしたら始めようと思いマス
  • 業務で使えるの羨ましさある