こんにちわ。まつしん(@matsushin11)です。
フリーランスになって約半年が経ちました。
ここ数年は仕事で開発するプログラミング言語としてはRuby(Rails)がメインだったのですが、フリーランスとしての価値を高めるためにGoの学習を進めていたので何をしたか、実際にやってみてどうだったかの振り返り記事になります。
Contents
何故Goなのか
まず何故Goを勉強することにしたのか?
- 今後需要が伸びそうだから
- 仕事で使うから
今後需要が伸びそうだから
Twitterをしているエンジニアの方はよく知っていると思いますが、勝又健太(@poly_soft)さんがGoを推しています。
またQiitaの記事も読みましたがGoを習得すべき理由が丁寧に書かれておりとても納得のできる内容となっていました。
>1. Java
>2. Python
>3. JavaScript
>4. C
>5. Scala「仕事」ではなく「学び」と考えるならこのラインナップに異論はないですが、日本のWeb業界で「キャリアを飛躍的に伸ばす」ことを目的とするなら
1.Ruby(PHP)
2.Go
3.Scalaこの順序が個人的にはお薦めですね(^.^)https://t.co/TRBxtr3TFA
— 勝又健太@エンジニア系Youtuber (@poly_soft)
昨日投稿した「全ての開発者が学ぶべき5つの言語」に対する「別視点の意見」という感じですが、日本のWeb業界においてエンジニアが爆速で成長するために「Ruby->Go->Scala」という習得順序が最適である理由を分かりやすく説明してみましたので是非読んでみてくださ〜い(^.^)https://t.co/uoxnaeYLKA
— 勝又健太@エンジニア系Youtuber (@poly_soft)
ちなみにYouTubeでも話していますね。
上記の話の中でもありますが、人気サービスの「メルカリ」でも採用されているということもあって「Go + マイクロサービス」の流れが来ているのかなと感じています。
他にも「Gunosy」「Freee」「DeNA」「クックパッド」等の人気サービスでも採用されています。であれば、今後も需要が伸びることが予想されます。
仕事で使うから
現在関わっている案件でRailsを使って開発をしているのですが、その案件のサービスのメインの部分はGoで作られています。
なのでGoでも開発できればプロジェクトの中のプログラマとしての価値が高まることになります。
Go学習でやったこと
では、ここからやったことを振り返ってみます。
- NEMとGoの記事書いた
- 仕事で少し触る
- 書籍1冊目
- 書籍2冊目(途中まで)
- APIアプリ作成
Goを使ったNEMの記事書いた
まずはとにかく入門したいということで、簡単な処理を書いてみることにしました。
で、そのタイミングがnem Advent Calendar 2018の時期でした。
NEMも応援しているのでちょうどnemgoというライブラリもあるみたいだし、じゃあ一緒にやっちゃえということでプログラムを組んで記事にしました。
結果として動くものを作りながら学べたのでまずは楽しくGoに入門することができました。
仕事で少し触る
次に、仕事で事前にGoやりたいとアピールをしていたのでまずは簡単なタスクを割り振ってもらいコードリーディングやリファクタをしつつコードの改修を行いました。
実際に稼働しているプロジェクトのコードなのでかなり勉強になりました。
やはり早く理解していくには実際に仕事として取り組んでみるのが最短だと改めて感じました。
自分一人でいきなり何か作ろうと思った際に実現したい処理をどういう構成でどうコードに落とし込めば良いか参考になるパターンが全くないと時間がかかってしまいますよね。
書籍1冊目「スターティングGo言語」を読む
まずは入門書として「スターティングGo言語」
色々入門としてどの書籍が良いか調べた結果紹介されている頻度が高かったため選びました。
で、1冊まるっと読みきったのですが、基本的なことは網羅されているのでプロジェクトのコードリーディングとの相乗効果で理解が深まったように思えます。
特にチャネルとインターフェースが役に立ちました。
書籍2冊目「Go言語による並行処理」を読む(途中まで)
次に読み始めたのが「Go言語による並行処理」
こちらは仕事でGoを使っている方々にどの書籍が良いかと聞いた結果挙げてもらった書籍になります。内容はSyncパッケージやチャネルを使った並行処理のパターンや大規模開発での並行処理についてです。
なかなか書かれていることが難しくまだ半分くらい読んだところで止まっています。ただ並行処理についてサンプルコードを動かしながら詳細に学べるので入門の次のステップとしては良さそうです。
引き続き少しづつ読み進めていこうとは思っています。
APIの作成
最後に集大成の成果物としてAPI「qiitan-api」を作成しました。利用したフレームワークは「Gin」です。
以前Qiitaのコピーアプリ「Qiitan」をRailsで作成したのですが、そのAPIになります。
Go学習用のポートフォリオだいたいできてきた。
キャッシュを利用したAPI。かなり良い勉強になってる・・。で、まだ終わりではなくてREADMEの整備とECSで動かすところまで続けたい。
— まつしん@フリープログラマ (@matsushin11)
動作としてはDBから値をとって返すシンプルなAPIになります。またバックグランドで定期的にキャッシュを作成して、API利用時にキャッシュがあればDBを参照せずそのままキャッシュを返す仕組みです。
環境としてはDocker、キャッシュ保管用にAerospikeを使ってみました。
ただ、最終的にはECS環境で稼働させたかったのですがそこまではできず、ローカル環境で動作するところまでです。
ECSは追って学習していきたい…。
以上がやってきたことになります。
最後に
学習の流れとして実際のプロジェクトのコードを見つつ書籍を読んで基本を理解して、応用としてアプリ(今回はAPI)を実装するということをしました。
なかなか良い流れで進めたのではないかと思います。特に自分が設計した通りに0からAPIが動くところまで実装しきれた。というのは自信がつきました。
ある程度コードを読んで動きを理解でき、かつ書けるようにもなった気がするので、次は仕事として請けることを目指しても良いかなと考えています。
コメントを残す