Goと過ごした1年間

今日で仕事納めだったので、振り返っておく。

今年はGoのコードをたくさん書けた1年間だったと思う。

  • サービス基盤の一部をGoで開発した
  • 新人研修の主な言語としてGoを教えた
  • 既存のRailsで作ったサイトのリプレースをGoでやった
  • 社内で使うツールをGoで作っている
  • goaを触り始めた

サービス基盤の開発

去年の後半から始まって、今年の3月末にリリースが完了した。モバイルアプリ用のpush配信周りの実装を担当したが、APNSに関連してHTTP/2を使ったやりとりとかも経験できて面白かった。

周囲の特に上司の理解と協力もあって、社内でGoを使ったプロジェクトの実績が作れたのは大きかった。 前例ができたからか、以降「Goでやります」と言いやすくなったし、リプレースのプロジェクトにもつながったと思う。

新人研修

自分のチームに配属になったのが6月からで、それからGoを教えて、社内で使うツールを作ってもらった。とりあえず年末を目処にそこそこ使える形のあるものはできたので良かったと思う。

研修が始まる前には、プログラミング自体を経験したことがない、という人にGoを教材としてプログラミングを教えることが正解なのかどうか、かなり悩んだ。

現状Goでの、プログラミングが未経験という人に向けた情報が少ないと思う。なので、参考になる事例も見当たらず、本当に研修を全うできるのか?という不安があった。

正直言うと(本人にも伝えたが)途中で辛くなって、Railsでなんかパッと動くやつを課題に設定した方が、研修としては面白かったのでは?とか思ったこともあって、モチベーションが低かった時もあった。

最終的には、そこそこのコードは普通に書けるねという感じになってきているし、良かったと思う。

研修をしてわかったことは、新人でもGoで書いたコードは普通に質が高いというか、誰が書いても同じようなコードになるのが不思議だなと。瑣末なところはもちろん色々あるんだけど、おかしなコードを書いているってことは感じたことがない。

リプレース

Railsで作ったサイトをリプレースした。もともと小規模なサイトだったので、Goで一から作ろうということになって、3サイトをリプレースした。

リリースしてからリソースのグラフをたまに見ているが、Railsで起きていた徐々にメモリ消費が増えていくということもなく、安定している。

サーバーのスペックを落としても充分さばけると思うし、お客さんの費用に直結するので、省リソースでサイトが運用できるというのは良いことだと思う。

ついでに社内のサービスと接続するためのAPIクライアントも作れたので、ますますGoでプロジェクトを進めやすくなった。

社内ツールもろもろ

chatops(ってもう死語?)とかその辺でslackのbot作ったりとか、他にも細々としたツールを作っていて、なんか作る時にはGoで作るようにしている。

やっぱりポータビリティというか、コンパイルしてコピーして動くっていう手軽さは大きい。

goa

Goでウェブアプリケーション作るときに、あまり大きな(リフレクションを使うような黒魔術的)フレームワークは採用したくない。でもチーム開発する以上ある程度のルールは必要で、goaを使えばその辺を解消できると思う。

例えば、基本的なバリデーションとか細々した実装がそこそこあってちょっとしんどい、みたいなところがラクできそう。

goa自体はAPIサーバーを前提としていると思うけど、管理画面とかHTMLを返したいし、その辺を独自ジェネレーターとかDSL拡張とかで対応できないか試行錯誤しているところ。

apexと組み合わせてAWS lambdaで動かしたりしたい。

おわりに

特にまとめはない。

Goをやるぞ!と言って実際に実績が積めているのは大変嬉しいことだし、もっと社内でも普及活動をしていこうと思う。