LOG IN

Hello Gophers, Hello Golang.tokyo #1

by godgarden
このエントリーをはてなブックマークに追加

こんばんは。早いもので2016年もあと僅かとなりました。
ラストスパートでいつも頑張ってます。

Golang.tokyoとは

先日、株式会社メルカリのオフィスで開催された第一回 golang.tokyo #1に参加してきました。初心者向けの勉強会が多い中 golang.tokyo では中級者以上の業務で使っている、使おうとしている方が対象の実践向けの勉強会でした。40名の定員に対して160名を超える応募があり、国内でもGoに関心を持つエンジニアが増えてきたなーと感じます。私が所属している会社でもGo言語を使ったプロジェクトがちらほら立ち上がったりしています。せっかく参加してきたので物覚えの悪い頭と戦いながら、覚えている内容を自身の整理も兼ねて書きます。メモ程度なのでご容赦ください。
(※Go言語マスコットのGopherの原作者はRenee Frenchさんです)

記念すべき第一回の登壇者

tenntenn/株式会社ソウゾウ/モデレーター

メルカリ/ソウゾウ所属。サーバサイドエンジニアとして日々Goを書いている。 Go Conference主催者。GopherCon2016スピーカー。 大学時代にGoに出会い、それ以来のめり込む。 社内外で自ら勉強会を開催し、Goの普及に取り組んでいる。マスコットのGopherの絵を描くのも好き。
http://golangtokyo.connpass.com/event/39965/

y_matsuwitter/株式会社Gunosy

新規事業開発室担当、執行役員。 iOS/Android/サーバサイド/インフラなど幅広く開発を担当。 2014年始めにGo言語の導入を進め、現在では社内の殆どのプロダクトでGo言語を利用しています。
http://golangtokyo.connpass.com/event/39965/

辻 純/株式会社サイバーエージェント

アドテクスタジオ、CAリワードに所属しています。 ここ1年半ほど、広告配信サーバーや、バックエンドのバッチ処理などをGoで書いています。
http://golangtokyo.connpass.com/event/39965/

大谷 祐司/株式会社インテリジェンス

Go言語が大好きなエンジニアです。 最近は新規サービスをecho+pongo2+gormで開発しています。
http://golangtokyo.connpass.com/event/39965/

松木 雅幸(id:Songmu)/株式会社はてな

Mackerelのディレクター兼はてな東京オフィスのチーフエンジニア。Perlのエンジニアだが最近はGoが多い。Mackerelの開発では主にScalaとGoを活用。最近「みんなのGo言語」という本を書きました(共著)。
http://golangtokyo.connpass.com/event/39965/

kaneshin/株式会社エウレカ

株式会社エウレカ 執行役員CTO 2010年に東京理科大学を卒業後、組込み系企業へ入社し品質保証を従事。 2011年に退職してカナダへ留学した後、2012年にエウレカへ入社。
http://golangtokyo.connpass.com/event/39965/

Goの情報をいち早くキャッチアップしたい方はフォローしておくとGoの情報が入ってきて良いかもしれません。私もちゃっかりとフォローさせて頂いております。

トークセッション

手元のメモと記憶をベースに書き起こしているため聞き間違いがありましたら申し訳ありません。修正しますのでご連絡いただけると幸いです。

Q. メンバーの教育はどうしていますか?

ソウゾウ 上田さん

前職のKlabでは7時間ぶっ続けでGoを教える新卒研修をしたりしました。

ソウゾウでは Go FRIDAY という共有会の場があってそこで知識を共有したりしています。

サイバーエージェント 辻さん

まずは  A Tour of Go をやってもらったり、tenntennさんが書かれているQiitaの記事で Go言語の初心者が見ると幸せになれる場所 を読んでもらったりしています。

読書やLTやコードリーディングをしてもらったり。後は実践あるのみで、書いてもらってレビューでフィードバックしたり。

気をつけている点は、Go経験のある人をレビュワーに入れるようにしてGoぽくない書き方をフィードバックしてます。その時にネットの情報などを添えてコメントするように気をつけています

Goフライデーの仕組みはいいなっと思いました。ちなみに弊社ではコードレビューや、週2で「プログラミング言語Go」の輪読会をし、持ち回りで解説するような取組みを始めました。

Q. IDEやデバッグはどうしていますか?

はてな 松木さん

Intellij, atom, vim, emacs など色々使っている人がいる。プラグインが豊富なのでプラグイン入れてもらって各自に任せています。

デバッグは普通にprintデバッグなどでしたり。TDD的なやりかたで開発を進めたりしています。

インテリジェンス 大谷さん

Intellijを使っている人が多いです。保存時に自動でgofmtやgoimportsをかけたり。デバッグはprintデバッグをしたり。

ソウゾウはIntellijが多いかもしれない。vimは意外と少ないかも

Gunosy 松本さん

delveというデバッグツールもあります

意外と皆さんデバッガーを使ってデバッグするよりprintデバッグが多いんだなと感じました。
私のチームでもIntellijを使っている方が多く、唯一熱狂的なVimmerの新卒がvimで書いてます。

Q. コーディング規約は?レビューの指針は?Golintに従っていますか?

サイバーエージェント 辻さん

GoCodeReviewComments を準じたり。思想的に変数名は短くしましょうなど気をつけています。golintは...ベストエフォートになってます。出来る限り対応するようにくらいです。

golint, govetは基本対応するようにしていて、CIで回してエラーが出るとこけるようにしています。

MackerelはOSSで公開しているのでgolintでチェックしてもらった方が角が立たないというメリットも...笑

gometalinter というのもあるけど、対応するのは大変かも

Q. Webフレームワークやテンプレートエンジン、ORMについて

サイバーエージェント 辻さん

Webフレームワークは echo を使っています。

Goのテンプレートエンジンは辛いので使っていない。やるとすればフロントはReactなどの言語と組み合わせて使う

ORM周りは gorp + squirrel (※ 聞き間違いでなければ)を使ってる

エウレカ 金子さん

ペアーズははじめ revel を使ってた。今はginを使っています。

別のものでは gorilla/mux を使ってたりもしています。

ORMは xorm を使っています。PR出すと結構スピーディーにマージしてくれる。gormを使っているプロジェクトもあります。

Webフレームワークはechoを使っていて開発中の案件でテンプレートエンジンにpongo2を使っています。

Q. エラー処理はどうしていますか?

ソウゾウ 上田さん

pkg/errorsを使っています。コンテキストをそのまま返しても分からないものをラップして返したり。

同じく pkg/errorsは使っていて外部パッケージでまともなエラーが返ってこない時にラップしたり。

goroutineなど 複数のエラーの内、一つでもコケたら駄目って場合などに sync/errgroupが良いと聞く

エラー処理知らないことも多く勉強しなきゃなと思いました。
会場に参加者として来られていた deeeet さんが書かれたerrgroupの記事があるよと話題に出てました。

Q. Gitなどに上がっているオススメのライブラリはありますか?

Goオールスターズ2 でも話した aws-sdk-go やDDD的実装で参考になったのは google/go-github  があります。

makefileも書き方は、私があげているソースが参考になれば。

motemen氏や deeeet氏の新作を参考にしています。

Q. ロガーはどうしていますか?

サイバーエージェント 辻さん

logrus を使ってます。Uberの zapがパフォーマンスが良いと聞きますが、使い勝手がよくないとも。気になってる。

メルカリのプッシュ通知システムのgaurunではzapを採用しているようなので参考になりそう。

Q. パッケージをどのように分けていますか?

前提としてマイクロサービスで作っているため、そこまで大きくならないため迷うことは少ないかもしれません。

ドメイン軸で切ることが多いです(ニュースやユーザーなど)
その中で役割ごと(repositoryなど)にファイルを分けたり。

マイクロサービスの場合、横断的なパッケージの扱いに迷うことがありますが、これがベストとは言えないとですが、変更コストが大きいため極力サービス内に閉じ込めるようにしています。

フレームワークの構成に準じてます。

サイバーエージェント 辻さん

MVC + serviceの形を取っています。

GunosyのDDDの事例は先日のGoオールスターズ2でもお話されていましたので、気になる方は別のエントリーでまとめた記事を見てください。

Q.テストどうしてますか?- テストフレームワーク/ツール/DB周り

はじめは標準のエラーパッケージで頑張っていましたが、段々辛くなってきたので testify は使うようになりました。

DB周りは lestrratさんの go-test-mysqldを使ったりしています。

DBはちゃんと立てるべき派で、モックはロジックの正しさは担保出来ますが環境や設定で挙動が異なることを避けたいので、堅実に立ててやるべき派です。

fixturesを使ってます。yamlで定義したデータを投入してデータを取り出せるかなど。ただ、かなりのテストコードがあるので30分くらいかかってしまい辛くなっています。

今あるものを消してモックを使うようにしたいですが、良いモックライブラリがなければ自分で作ろうと思っています。

各社、様々で勉強になりました。
当日に参加されていたタイムリーな記事を公開していたdeeetさんも軽く話していました。

Q. リファクタしたいところ/Goのイマイチな点は?

テンプレートエンジンが嫌われていることはよく分かりました。フロントは得意な言語に任せましょう。

最後に

私が気になったセッションをザザザとまとめたので拙い文章ご容赦ください。当日の雰囲気については togetter で別の方がまとめてくれているのでそちらを見ると伝わりやすいかと思います。

この記事が何かの縁になってGoに興味を持ってくれる方が少しでも出てくるといいなと思います。
それでは、楽しいエンジニアライフを!

戦利品

メルカリアッテのキャラ ニャッテくんとGopherくん。嬉しい!でもいつ着ようか

このエントリーをはてなブックマークに追加

godgarden
OTHER SNAPS