この記事は、ハシゴ Advent Calendar 2020の 6 日目の記事です。
11 月から担当プロジェクトが変わり、現在絶賛 Golang で API を書いています。で、Golang 初めてだし、新規で API 書くのめちゃくちゃ久しぶりだしで、色々迷走したりしてるんですが、この 1 ヶ月の間にやったことやらをつらつらと書いていこうと思います。
先に言っておきますが、この記事はポエムです。
やったこと
とりあえずざっと以下をやりました。
まずは安定の A Tour of Go。これは結構前に流し読みしたことあったんですが、完全に記憶から抜け落ちていたので、また流し読みしました。
スターティング Go 言語は、Golang そのものについて一歩深く学べる本でした。実際ここまで使うか?と思う内容もありますが、Tour of Go の次くらいに日本語でサクサクっと内容を頭に入れたい人にはオススメです(僕のことです)。スターティングとは言いつつもそこそこニッチなところまでカバーしてあるので、またそのうち読み返すと思います。
Go プログラミング実践入門は、なんか、Kindle セールしてたので買ってしまいました…。一応流し読みしましたが、標準ライブラリ縛りで Golang を理解していく本なので、もう少し Golang に精通してから読み直したいです。
Effective Goもそのうち読もうと思ってますが、まだそのレベルに至ってないので、大事に温めてます。
いざ実践
11 月頭くらいから今日時点で、紆余曲折ありながら色々試した結果、以下のような道をたどっていました。
- micro service で頑張ってみる
- 諦めて Gin でモノリスなものを組み始める
- 色々ツラみが出てきたので goa に乗り換える
まず micro service ベースでという話もあり、参考にできるコードベースを見ながら色々と試していました。が、Golang 初心者、micro service 童貞には結構キツく、あんまり時間的な余裕もなかったので、一旦 micro service の文脈は忘れることにしました。
micro service を忘れた後はなんかすごく気が楽になった気がして、Gin を使って CRUD 書いて、「完全に理解した」を連発して、テストも書いて、と、一通りいい感じサクサクっと組めました。もちろん認証付き API も余裕で組めました。
が、ここで諸事情のため、Swagger が必須で必要なことに気づきます(遅。
Gin で Swagger というと、アノテーション的に書いて生成することはできるんですが、それだと実装に強制力があるわけでも無いし、普通に手で Swagger 書くのと何も変わらなくて、全然うれしくないし、むしろめんどくさいです。
そこで goa に乗り換えました。
goa は DSL で API の設計をするだけで、雛形コードは全部生成してくれるので、ビジネスロジックだけ書けば API が完成します。DSL 自体を覚える学習コストはまぁ無視できるわけではないですが、ここ 2-3 日触った感想としては、悪くはなさそうです。
gorm 連携は goa v1 系しかプラグインがないので、そのあたりは若干手間になる部分もありそうですが、ひとまずは goa で突っ走ってみようかというところです。
この間約 1 ヶ月程度、結構慌ただしい。
Golang 楽しい
ポインタとかは「おう、久しぶりやんけ」って感じなので、脳死で使えるようになるまでは結構掛かりそうだし、goroutine とかは全然まだ触ってすらいませんが、全体的な書き味としては、結構気に入ってます。
しばらく書いていきたい!という気持ちもあって、GoLand にも課金しましたし、今後も新規開発時には積極的に Golang 推していきたいですね。
脳死で使いつつコアなところも踏み込みたいので、出来ればしばらくは書き続けたい感じはあります。
おわりに
僕と一緒に Golang 書きましょう!!!!1