CA Wise

Tech Blog

Tech Blogトップに戻る

golang.tokyo#6

2017.06.05

  • このエントリーをはてなブックマークに追加
  • Pocket
kotaking
kotakingエンジニア

6/1(木)golang.tokyo #6 が開催されました。 今回は渋谷ヒカリエにあるDeNAさんに会場を提供していただきました。ありがとうございます。毎回多数の方にご応募をいただき、golang.tokyoの認知度と人気の高さが伺えます。今回、会場に来れなかった方のためにも、当日の様子をレポートしていきたいと思います。

golang.tokyo #6

会場

DeNAさんが入居する渋谷ヒカリエ。驚く程広くてきれいなエントランスでした! golang.tokyo_01.JPG

タイムテーブル

時間 内容
19:10 ~ 開場・受付
19:30 ~ 19:35 オープニング
19:35 ~ 19:55 登壇(発表+質疑応答)
19:55 ~ 20:25 登壇(発表+質疑応答)
20:25 ~ 20:55 休憩
20:55 ~ 21:05 LT1
21:05 ~ 21:15 LT2
21:15 ~ 21:25 LT3
21:25 ~ 21:35 LT4
21:40 ~ 22:10 終了

挨拶

DeNAの放地さんから開会の挨拶です。DeNAさんと言えばPerlのイメージがありましたが、最近ではGCP + Goを積極的に採用しているとのことでした。著名なIT企業が次々とGoを採用することで、こういったコミュニティがどんどん活発になっていくのはいいですね!

DeNAさんでGoを採用・検討中のプロジェクト

  • オープンプラットフォーム事業
  • オートモーティブ事業
  • ゲーム事業
  • ネットサービスインキュベーション事業
  • AIシステム

多岐に渡ってGoを採用している事がうかがえますね。

登壇

それでは早速、登壇いただいた方の発表内容を紹介したいと思います。

メルカリ ソウゾウ / 上田さん

サーバサイドエンジニアとして日々Goを書いていて、Go Conference主催者でGCPUG運営スタッフでもある上田さん。 今回は先日アメリカで開催されたGopher Fest 2017に行った時のレポートを発表していただきました。

行われたセッション一覧

  • The State of Go
  • Event Sourcing
  • Upspin
  • Adding Context to NATS

今回は上記セッションのうち、The State of Goについての詳細を発表していただきました。 (Gopher Fest 2017とは、Google I/Oに合わせて開催されるイベントであり。Googleのお膝元で行われます)

  • Go開発状況
    • Go1.9が8月上旬リリース予定
  • 安全にリファクタリングするには?

通常だと、、、

  • 新APIの追加 → コード変更 → 旧API削除
  • 定数の場合(一時対比で可能)
  • 関数の場合(ラップすれば可能)
  • 型の場合(難しい)

今後は、、、

  • Alias Declarations(型のエイリアスを定義できる。Ver1.9から出来る)
    • 完全に同じ型
    • キャスト不要
    • エイリアスの方ではメソッド定義は出来ない
  • 言語仕様の変更
  • 標準ライブラリの変更
    • math/bits が追加された
    • sync.Map スレッドセーフなマップが可能になった
    • html / template がより安全に
    • os.Exec(重複する環境変数を削除するようになった。1番後ろのものが優先されるようになった(上書きされるようになった)
  • Runtime改善
  • ツール類の変更
  • コンパイラの速度改善
  • エラーメッセージが優しくなった笑
  • go doc フィールドにリンクが貼れるようになった
  • go testの改善(「go test ./...」でvendorディレクトリを無視するようになった!)
  • テスト関数一覧を表示可能になった
Gopher Fest 2017参加レポート from Takuya Ueda

DeNA / 村田さん

普段は主に Golang + Google App Engine による、ソーシャルゲームプラットフォームのバックエンドAPIの開発を行っている村田さん。

golang.tokyo_02.JPG

AndApp とは、PCでスマホのゲームを遊べる。
ブログ

マイクロサービスでフレームワークにはこだわらない。

▼Ginについて
シンプルで扱いやすい。GAEでのサンプルがあるので使いやすい。
GAEとGinのコンテキストがあるが、gin.Contextからappengine.Contextが派生で作れる。もちろんcancelも伝搬できる。

ワイルドカードパスの扱いが使いづらいので、一部でEchoを取り入れた しかし、Echoの開発が早く、破壊的な変更もある v3の時に標準contextを使わなくなってしまったため、v2のまま使った

  • 教訓
    • フレームにはこだわらないのがいいhttpパッケージが優れてる
    • フレームワークを使わなくてもコードの統一感はでる

独自エラー型定義 nil型問題にはまった。独自インターフェースのnilが合わない

  • 教訓
    • 素直にerrorインターフェースを使えば良かった。キャストが面倒なら便利関数を用意すればよかった
    • テストも標準errorの方が使いやすい

regex compile / reflection遅い問題 前提:JSON Schemaを使用している gojsonschema packageを使った話

  • packageを使ったがパフォーマンスが悪かった
  • バリデート周りで劣化していた
  • parseSchemaが遅い
  • regexマッチを毎回作成していた
  • reflectionを多用していた
  • 教訓
    • コストの高い処理に敏感である必要がある。ライブラリの選定時にもここを意識することは大事
  • 非対称暗号は遅い
  • go1.6のcrypto/rsaが貧弱
  • AppEngineのサンドボックス環境の都合上cgoが使えなかった
  • go/phpで回避
  • 教訓まとめ
    • フレームワークにこだわらない
    • インターフェースは尊重する
    • regex compile / reflectionは遅い
    • 非対称暗号は遅い

困ったらシンプルにいこう
コンパイル言語だからとはいえ、速度を過信しないようにとのことでした

LT

面白法人カヤック / Konboiさん

ゲームの開発には欠かせないあれをシュッと見る。CSV!

golang.tokyo_03.JPG

  • マスターデータでよく使う
  • GoogleSpreadSheetで管理
  • 調査系のデータもCSVで管理
  • ゲーム外のcampaign報酬付与のデータもCSVでやりとりする
  • CSVだとカラム幅が統一されていないので見づらい

そこでGolangでviewerを作った ターミナル上でテーブル形式で見れる。limitやfilterが使える

[感想]

このライブラリは本当にイケてました。 自分自身もターミナルでCSVのデータを確認することが多々あるのですが、整形だけでなくlimitやfilterが使えるという事で、DB風に扱う事ができる素晴らしいライブラリでした

ツール https://github.com/Konboi/csviewer

KLab / 鎌田さん

Go Code Review Commentsを翻訳した話

http://qiita.com/knsh14/items/8b73b31822c109d4c497

tenntennさんにコードレビューをしてもらいつつ、勧められたのがきっかけ。
初学者でも訳すことで正解から入れるのでおすすめ。

[感想]

Goは誰が書いても同じようなコードになると言われていますが、こういったガイドラインはとても重要だと思います。チーム開発の時でもメンバーに一読してもらった方がGoらしさを保てていいですね。

エウレカ / Mr, James

ScalaからGo

関数型開発はGoでできるか?
→ No!(Genericsがないので難しい)

関数型言語の考え方はGoで使えるか?
→ Yes!

  • 関数型開発とは何か?
  • 副作用がないこと
  • 関数の副作用がテストしにくくなりバグの原因になる
  • Scalaが好き
  • Scalaの方が長期成長があるけど、Goの方がみんな同じコードが書けて企業への導入がしやすい
  • 副作用がないコードの方が奇麗に感じる。バグが混入しづらい
ScalaからGoへ from James Neve

マネーフォワード / 鈴木さん

Crypto in Go

Security周りをメインとしている鈴木さんの発表です。

paper.dropbox.com

Goにおける暗号アルゴリズムを利用する

平文は固定長とは限らない

  • ECBモード
  • 平文を固定長に切る
  • 頻度分析により解析が可能
  • 尻切れ問題は解決されない

色々な問題があり、パディングとメッセージ認証(HMAC)が追加された。

AES + PKCS#7パディング + HMAC
  • Goの標準関数には用意されていない
  • 実装するのは面倒
AES + GCM
  • 機密モード + 認証モードが一つになったもの → GCM
  • アメリカ国立標準技術研究所がTLSv1.2で利用することを義務付けている

最後に

6回目を迎えたgolang.tokyoですが、毎回異なるコンセプトで充実した内容に仕上がってます。リピーターの方が多いのも納得ですね。Go Festのフィードバックを聞けるのもgolang.tokyoならでは。発表いただいた皆さん、そして会場を快く提供いただいたDeNAさん、ありがとうございました。今後もgolang.tokyo盛り上げていきますので、みなさん奮ってご参加くださいね。