Go Conference 2018 Spring にて発表した内容の内側 ~How to write Go code~

先週の土曜日に開催された Go Conference 2018 Spring にて『How to write Go code』というタイトルにて発表してきました。

最近はエンジニアリング組織関連やCTOのイベントにて登壇することが多かった気がしており、Goの勉強会に参加したのは半年振りくらいで、大きなイベントは一年振りでした。

一年前の Go Conference 2017 Spring での発表スライド

さて、今回は『こんなコードを書いたぜ〜?』や『こんなサービスしてるんだぜ〜?』のような発表ではなく、”How to write Go code” というタイトルで発表しております。

Talk’s Motivation & Goal

「こういう風なトークの形も在るんだ」と感慨深いものがあった。 — GoCon に参加して本当に良かった話 — アルパカ三銃士

というお声をもらった通り、発表するまでは『このような発表で良いのかな?』と思っていたのですが、社内でGoの勉強会を行っているときに思考のプロセスとして、『なぜ、その結果に至ったのか』というのをGoのドキュメントなどを踏まえて伝えており、案外、ここを知らない人が多かったのが動機でした。

Talk's Goal

『Goでコードを書くときに活用するべきリソースや言語思想への理解を深めてもらいたい』を持ち帰ってもらえればと思い、時間の制約上ライブコーディングではなく、ライブブラウジングを行いました。(次回、時間があればライブコーディングをどこかで行いたいものです)

発表内容とその内側

発表はライブで行っていたのでスライドだけでは伝わりにくいと思いますので補足をしていきます。

Who I am.

今更ですが、エウレカでCTOをしている kaneshin (kaneshin on GitHub) です。エウレカは Pairs を PHP から Go にフルスクラッチを行っており、また、関連するマイクロサービスとして決済サービスや投稿監視システムを構築しており、そのサービスも Go で書かれております。
話は変わりますが、メルカリさんの発表にて決済サービスのマイクロサービスについてお話をしておりましたが、エウレカでは2年前に同じようなことを決済サービス実装者の Takuma Morikawa が話していたので、『あぁ、大変だよね』と思いながら聞いておりました。

愚者は経験から学び、賢者は歴史に学ぶ

Pairs で Go フルスクラッチをしていたときは、まさに愚者でした。当時は何が正しい設計なのかがわからないまま、毎週金曜日にリファクタリングをする日を設けて常に自分たちの経験からアップデートを行っていました。まさに愚者だね!
このフルスクラッチでの経験と、それ以降に学んできた Go のリソースを最大限に活用して効率的に Go を書くことで賢者になってもらえればと思っています。

リソースの活用

発表でお伝えしたリソースは下記の4つをメインに話をさせていただきました。

さて、これらをの活用方法ですが

golang.org/

golang.org/

ページのヘッダーにリンクが存在していますが、ここに様々な情報が掲載されています。
Documents には初学者の人に読んでもらいたい Go の書き方、より Go らしいコードの書き方、プロファイルなどのツールの使い方、wikiにも同様の情報がありますが、ここは重要なものが記載されているので初めて Go 言語に触れる方には必ず読んでいただきたいです。
Go のアップデートや Go の機能追加でブログなども更新されますので、他のリンクもあまりご覧になっていない方にはぜひ読んで頂きたいです。

godoc.org/

godoc.org/

golang.org の Packages を使うことが多い人も多いと思いますが、ここは標準パッケージ以外の GitHub 上にあるパッケージも参照することができます。
必要あれば Example や File への参照がこのページで完結できるので、ここだけでパッケージのキャッチアップをすることが可能です。むしろ、ここでキャッチアップできないような自作パッケージは公開しないようにしましょう。(自戒も込めて)
標準パッケージであれば、[https://golang.org/pkg/net/http ] [検索] のように golang.org/pkg/hoge をタイプする人も多いでしょう。もしくはエディタのプラグインで参照する方もいるかと思います。

github.com/golang/go/wiki

Wikiはぜひお時間があればひたすらに眺め続けて欲しいと思っています。例えば、テスト (Testing) について、昔はよく話題にあがっていたと思っていますが、大体の内容は https://github.com/golang/go/wiki/LearnTesting に書かれています。
このように、Wiki 内で検索するだけで必要なリソースへアクセスすることが可能なので、ぜひ何か (IDE Plugins, Concurrency, Database, API Server, …) に困った際は、ネットで記事を探す前に Wiki 内で検索をしてみてください。

Go Proverbs

Go Proverbs

最後に、Go Proverbs という Rob Pike が Gopherfest にて発表したポエム的なものがあります。
Go の思想のようなものにも捉えることができることがあるので、ここを踏まえつつコードを書くのは 『Go らしさ』を表現することができると思っていますし、このポエムの背景を知ることは Go へのスキルアップへと繋がるかと思っております。


おわりに

ひさしぶりに Go の勉強会に参加して、非常に楽しい一日となりました。残念ながら次の日の準備をしないといけなかったため、先に離脱してしまいましたが、次の機会があればあまり聞けないような話を持って登壇しようかなと思います。

Like what you read? Give kaneshin a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.