#えむけーろぐ

間違った事を書いていたらやさしく教えてください

golangでAPIサーバ書いてた

先週、8月13日(日)に東京に来て、14日(月)から17日(木)まで、Liaroのお手伝いさんとしてgolangで社内向けツールのAPIサーバを書いていた。もっと早く記事書こうと思ってたけど、土日のオープンキャンパスやらなんやらで忙しかったので今投下しておく。

f:id:mktakuyax:20170817122807j:plain

Liaroは、苫小牧高専の4個上の先輩(ぼくが1年生のときの5年生)であるhanaken_nが作った会社で、まぁだいたい機械学習やらDeep Learningやらをやっている渋谷のミクシィがない側にあるスタートアップだ。

Liaro

やっている事的にはPython一択なのだけど、会社としてPython以外の選択肢もほしかったらしく、「ちょっとgolang試してみたいから社内ツール4日くらいで作ってよ」と言われた。

僕自身も、なんか作るってなったらとりあえずRubyで書くけど、Ruby以外の選択肢は持っておきたいなと思ってgolang入門だけして放置していたところだったので、実際に動くモノを仕事として作る機会が降ってきてさらに小遣い稼ぎにもなってラッキーという感じ。

Webアプリケーションフレームワークとしては、gin-gonic/ginを採用した。net/httpとその他細々したライブラリで頑張る人も多かったけど、某golangやってる知り合いに「WAF何使ってるの」と聞いたところ「ginかecho」と言われたので、なんとなくginにしてみた。書いてみた感想は、Sinatra書いてるときの気持ちと近いなというところか。

ORMは、jinzhu/gormを使った。理由はなんだったかな……忘れたけど、たぶんgolangちゃんとやってなかったときからなんとなく名前は聞いていたからだと思う。そもそもgolangの構造体とORMって相性悪いのではという話を小耳に挟んでいたのだけど、実際そうなのかもと思いつつ……。とはいえ僕はActive Recordしか知らないだけだろと言われればそうな気もする。

golang自体を書いていた感想としては、まぁ、「型つらい」が一番だ。ずっとRuby書いてたんだからそりゃそうだという感じだろう。いつか、型に感謝する日が来るのだろうか。

完成したコードは恐ろしいクソコードになった。マトモにモノ作るの初めてな言語で、しかも期間が4日間しかないんだから仕方ないでしょうという言い訳は一応しておく。4日ぶっつづけて書いた結果、「ここはもっとDRYにできるな」とか、「エラーハンドリングもっとこうすりゃいいじゃん」というところが見えてきたので、これからリファクタリングする。(と思う)

 

今回得た学びというか体験としては、「自分の中でgolangという選択肢が増えた」ということもあるが、それ以上に「golangで一本アプリ作ったぞ」という自信を得たということだ。今回Liaroのお手伝いをしにいくにあたって一番心配だったのが、「僕がgolang書いてて躓いたときに助けを求められる人が社内にいない」ということだった。

ぼくがはじめてLOUPEでRubyを触ってWebアプリケーションを書きはじめたときは、メンター的な頼れる存在がいたし、その他のインターン・バイト先でもメンター的存在がずっといて、そういう存在無しでやっていけるようになったのは僕の中である程度Ruby/Railsかけるぞという自信を持てるようになってからだ。

今回はそうではなくて、マトモにモノを作ったことのない言語で、はじめて触るフレームワーク、そしてすぐ近くに頼れる存在がいないという状況で、クソコードとはいえ一本アプリを作ったということが、自分の中での精神的なブレイクスルーとなったような気がする。

今後もたぶんなんか作るってなったらRuby使うと思うけど、golangという選択肢があるということ、そして新しい言語でいきなりなんかやるということも不可能ではないということを胸に、明日からは某インターンRubyを書きます。

mktakuya先生の次回作にご期待ください!