読者です 読者をやめる 読者になる 読者になる

kodama-tech.blog

技術的なこといろんなこと書きます。golangに関すること多めです。

【イベントレポ】golang.tokyo #2に参加してきました。

こんにちは、こだまです。
今回はイベントレポです。

golang.tokyo #とは
Go言語の導入企業のメンバーが集まり、Go言語の普及を推進するコミュニティです。
トークイベント、ハンズオン、etcのイベントを開催していく予定です!
(引用元 https://golangtokyo.connpass.com )

ちなみに、前回の模様は
https://developers.eure.jp/event/study_event_golang_tokyo_1/
に詳しく書かれていますので、ご参考にしてください。

前回も参加表明したのですが、まあ倍率が非常に高い。。。
今回、参加ができて非常に嬉しかったです。

さてさて、今回はLTが5本、テーマは「実務で使える!テストの話をしよう!」でした。
ちょうど業務でテストフェーズに入ったところでこの内容、神からの思し召し以外の何物でも無いですね。

今日は、そんな5本のLTの中身を紹介します。

1人目 @deeeetさんによる「テストしやすいGoコードのデザイン」

f:id:shu_hey:20161213201531j:plain

テストしやすいGoコードのデザイン

ご本人も仰っていましたが、非常に思想の強い話でした。笑
前提として、良いテストを書くためには、良いコードを書くことが大事である。
そして、golangのテストはとにかくTDT(Table Driven Tests)を使用することを推奨していました。つまりTDTが書けない/書きにくいコードは良いコードではないと。
では、TDTが書けないコードとは、deeeeetさん曰く以下の3つが原因とのことでした。

・明確な入力がない
・明確な出力がない
・外部への依存を抽象化できていない

つまり「gopherよ、明示的であれ!」(by @deeeetさん)とのことです。
発表の中身は、どうすればテストの書きやすいコードになるかということを実例を用いながらレクチャーしていく、といったものでした。
具体的な内容は資料をご覧いただけると良いかなと思います。

個人的に、良いなと思ったものは、本題のテストについては、「グローバル変数を避ける」という話でした。
確かに、たったいまそれに悩まされている。。。
それと、

speakerdeck.com

peter.bourgon.org

こちらの参考になる資料の紹介も有益な情報だなと思いました。

2人目 @Songmuさんによる「MackarelにおけるGoのお話」

f:id:shu_hey:20161213201553j:plain そもそもMacharelとは?
https://mackerel.io/ja/
はてなさんが提供しているサーバー監視サービスです。
サーバーのコア部分はscalaでそれ以外はgoで書いているそうです。

本セッションのテーマは大きく2つ
・Mackarelのお話
・middlewareのテストについて

まず一つめ。
Mackarelの印象的な特徴は、やはりエンジニアがハックできる余地を残している、という点でしたね。
エンジニア心を刺激するというか、こういうオープンイノベーション的な発想は、これからの社会で広く普及していくだろうなと思いました。
持ち回りでプルリクのレビューをしているとのことでしたが、こういう作業もスキルアップにつながる素敵な取り組みだなと思いました。
具体的なサービスについては、公式にお任せします。笑

そして二つめ。
middlewareのテストではどうしてもmockやinterfaceで対応していても賄いきれない部分が出てきてしまいます。そんな時はサードパーティライブラリに頼ったり。
ちなみに@Songmuさんオススメは
mysqlであればgo-test-mysqld
redisであればgo-test-redisserver
だそうです。
まあ、でもそんなことするよりもdockerでコンテナ作っちゃえば良くないですか??
っていうのは納得感満載でしたね。立ち上げからダウンまでDockerfileでさくっとできちゃいますし。
(はあ、Dockerの勉強しなきゃ・・・)

いったん懇親会

はてなさんがピザと飲み物を用意してくれました。
はてなさん、ありがとうございます。
いつもブログもお世話になっています。
(最近お酒を飲んでいなかったせいか、手元が狂いこの後のメモにだいぶ苦戦しました)
f:id:shu_hey:20161213201619j:plain この後は、お酒を飲みながら、ピザを食べながらLTを楽しみました。
f:id:shu_hey:20161213201638j:plain

3人目 @timakinさんによる「Plain db import with Go」

f:id:shu_hey:20161213204121j:plain

speakerdeck.com

timakin/gopliというtomlファイルを使ってDBをインポートするライブラリを作成されたそうです。
個人情報の隠蔽等にも取り組んでいるそうで、非常に実用しやすい作りになっているそうです。
一度お世話になろうかな。

4人目 @osamingoさんによる「GoではじめるJSON-RPC入門」

f:id:shu_hey:20161213202743j:plain

speakerdeck.com

JSON RPCというものを初めて聞いたのですが、仕様がペライチで書かれているという非常に簡単なものだそうです。
そして、goは標準パッケージに入っているという驚き。
@osamingoさんもosamingo/jsonrpcという自作ライブラリを作られたそうです。
これでJSON RPCマスターを目指しましょう。

5人目 @東郷さん「Continuous Deployment with Go on AWS EC2」 f:id:shu_hey:20161213203020j:plain

speakerdeck.com

よく聞くContinuous Integrationとか、Continuous Deliveryとかと同じように、もういっそDeployまで自動化しちゃおうよ!という話でした。
もうほんとに人がいらなくなりますね。笑
この作業をしている際に、本番環境とローカル環境の違いに悩まれたそうです。
詳しくは資料に記載してありますが、そこで取った解決策として、
Dockerの上にDockerを立てる、ということでした。
そんなこともできるのか、くじらさんすげえ!!って心の中で叫んでいました。

感想

LT5本というなかなかのボリュームでした。加えて、どれもこれもとても面白かったです! いやあ、参加できてとてもよかった。
どうしても実装に注力しすぎて蔑ろにしがちなテスト、けどちゃんと書いていないと本番で痛い目みたり、、、
今回の話でテスト書くのが少し楽しくなりました。 みなさん、お疲れ様でした!!
ちなみに、次回は1月下旬に開催予定だそうです。

(その時もブログ書きますので参加したいなという小さなアピール)