blog.takurinton.dev

Golangとの半年

2021-01-14

こんにちは

どうも,僕です.

2021年1月の時点でGolangと出会ってから半年が経ちました.この半年,様々なことを感じ,Golangを通して様々なことを学びました.その過程の振り返りと今後どうしていきたいかを自分自身の振り返りとして残していきたいと思います.

また,この記事を通じてGolangを新しく学ぶ人や新しい言語を習得する人にとって何か力になれればいいなと思っています.

前提

前提として,まずこの半年ずっとGolangを書いていたわけではありません.量だけで言えばTypeScriptやPythonの方が多かったように感じます.

TypeScriptはフロントエンドでの開発.Pythonは機械学習で使用していました.

また,Golang力はまだまだ未熟なので大したことはできません.

そこらへんを抑えた上でお願いします.

Golangとの軌跡

軌跡とかカッコつけましたがただの振り返りです.

ここまでの半年間を1ヶ月ごとに振り返っていきたいと思います.

1ヶ月目(7月)

7月の下旬.夏の暑い日,僕はGolangと出会いました.(かっこいい)

きっかけはVOYAGE GROUPのTreasureというインターンの事前課題をやるために書き始めました.課題の内容はDockerを立ち上げて簡単なREST APIで実装されたGolangとpreactのプロジェクトのエンドポイントを増やしていい感じにするというものでした.そこまで難しい処理ではなかったのですが全く知らない言語だったので異様につまづいていたのを覚えています.

また,それに向けて7月中旬くらいに[A Tour of Go](https://go-tour-jp.appspot.com/list)というサイトで少しだけ練習をしました.まあそれでもわからなかったんだけど.

そんな感じであたふたしながら書いていた記憶があります.

幸い,質問しやすい環境でしたのでわからないことはSlackやPRで聞きながらなんとかしました.

2ヶ月目(8月)

Treasureしてました.Golangに関する講義があり,基礎的な部分からwebsocketを実装するまで幅広く教わることができました.

ただ,チーム開発ではフロントエンド書いてたのでGolangを書いたというよりは教わったという方が適切かも.

3ヶ月目(9月)

8月はGolang書いていませんでしたが,9月はたくさん書きました.インターンシップです.

9月は[CAの就業型のインターン](https://www.takurinton.com/post/18)に参加し,Ameba事業本部というところでDSP周りの開発を行っていました.Golang全くわからないけど書けるようにはなりたかったので,事前面談の時メンターさんにGolangやりたいですと伝えました.今思えば相当強気に出たなと思います.

インターン期間中はGolangでのコーディングがメインになっていました.メンターさんと年齢が近かったことが不幸中の幸いで(終わってみれば幸い中の幸いだった)そもそものGolangの言語仕様の話やプロジェクト全体のコードのこと,さらには細かいメソッドのことやそのメソッドの使用用途/存在してる意味まで多岐にわたって教えていただきました.業務が忙しい中自分のSlackのメッセージに秒速で返信してくれてとても成長する手助けをしていただきました.

ここら辺でやっと

if err != nil

を習得しました(ぇ

9月はGolangという言語のレベルとしてもソフトウェア全体に関するレベルとしても成長することができたと思っています.やったぜ!

4ヶ月目(10月)

単純人間なので学んだことはすぐアウトプットしたくなります.そのため,CAのインターンで得たことをアウトプットしようと思いポートフォリオのバックエンドの部分を作り替えました.

元々Djangoで実装をしていましたが,そのほぼ全ての部分をGolangで書き換えました.また,ログをとったりエラーハンドリングも割と真面目にやったと思います.

管理者画面とマイグレーションの部分だけはDjangoを今でも使用していますが,その他の部分はGolang + gormで実装をしています.

DBと接続できなかったときのdeferの処理についてハマったり構造体の参照範囲についてハマったりしていましたがCAのメンターさんや某ましくん,某とさくんに助けてもらいながらなんとか頑張って実装をしていたのを思い出して涙腺が崩壊しています.

この月は主にポートフォリオ周りの個人開発としてGolangを使用していました.

5ヶ月目(11月)

レポートやら試験勉強やらに追われてほぼ実装していませんでした.PythonやTSは書いてたけどね.

6ヶ月目(12月)

前回のブログの記事にしたJWTの実装

やwasmをGolangでやるみたいなことをしていました.JWTは暗号化アルゴリズムやシークレットキー以外の部分は全部自分で実装しないといけなかったり,wasmも簡単な実装なのに手こずったりしながらですが楽しく実装できました.

Golangを書いてるとソフトウェアの本質が理解できるよなあと改めて実感したのがここらへんです.楽しい1ヶ月でした(死ぬほど忙しかったけど)

また,やっとGolangと少しだけ仲良くできるようになってきました.

ここら辺で名前付き戻り値の存在を知りました.(嘘です

最近は書いてないです.webpack周りの勉強をしています.いや,ちょっとだけ書いてるかも.

ここまでやってみて感じたこと

ここまで半年間Golangを書いてきて,文法3種類くらいしかないのによく言語として成り立ってるよなあと思いました(そんなことはない

冗談は置いておいて,すごくシンプルに書くことができるが故にIQの低下が防げないと感じました.その分ソフトウェア開発をする上での汎用的な知識が必要になったりしてきてとても面白いなと感じました.

また,名前付き戻り値がとても好きだなと感じました.最初に宣言をしておくことで参照によるメモリの消費を抑えることができますし,適切に使用すれば処理速度も上がります.さらにgRPCやWebsocket,GraphQLやwasmなどの幅広い分野に使用することができるようなライブラリのサポートが充実しており,シンプルな文法なので応用や適用がしやすいこともメリットかなと感じます.

なんか違うよってことがあったらコメントください.所詮ペーペーが書いてるものなので.ぴえん.

これからやっていきたいこと

これからはより実務に近いコードをセキュアに書いていくことをやっていきたいです.せっかくここまでGolangを勉強してきてこの先書かないのはもったいないですし,来月からエンジニアバイトもスタートするのでそこでどのような開発をするかは分かりませんが一生懸命実装をしていけるように頑張ります.

まとめ

以上がここ半年間Golangを触ってきた素人の感想でした.

これからGolangを習得する人はぜひ一生懸命取り組んでみてください!Golangは個人的には好きな言語なので推していきます!

また,もうすでに知ってるよ!という人は僕に知見を共有してください.泣いて喜びます.

これからもみんなで協力して開発をしていけたらなと思います.

おしまい(´∀`)