見出し画像

「詳解Go言語Webアプリケーション開発」を写経しながら読んでみた

こんにちは。レスキューナウシステム部のコウです。
レスキューナウではバックエンドにGo言語を使用しています。直近のキャリアはアプリエンジニアなんですが、プロジェクトの開発全般を見ることになったのでGo言語をキャッチアップしているところです。

Goの書籍は色々とあるのですが、Webアプリ開発にちょうど良いのがないかなーと思ってた時に「詳解Go言語Webアプリケーション開発」というドンピシャな本を見つけてたので写経しながら読んでみました。

本書の概要

本書は前半でWebアプリケーション開発の事前知識としてGoの設計思想や知っていると便利な標準パッケージの機能について紹介し、後半でGoを用いたWebアプリケーションのコードをハンズオン形式で解説します。
また、本書ではベテランGopherが暗黙知的に行なっているイディオムの解説や、標準パッケージやメジャーなサードパーティOSSを使った実践的なコーディングテクニックを紹介しています。

まさに欲しかった、かゆいところに手が届く本ではないか!と思って読み進めました。

良かったところ

良かったところ👍
✔︎なぜ必要なのか、なぜそう書くのかをしっかりを説明している
✔︎引用・補足情報が豊富
✔︎コラムが充実している
✔︎まず動くコードを書いて、少しずつリファクタリングしながら進められる
✔︎そのまま動かせるサンプルコードがある

それぞれ解説していきます。

なぜ必要なのか、なぜそう書くのかをしっかり説明している

他言語からGoに移ってきた時に、最初になんだろうこれ?と思うのがcontext.Contextじゃないかなと思います。僕はそうでした。ずっとバケツリレーしてるけど、使わなくても渡しておくものなの?みたいなことが疑問でした。

context.Contextの役割はこちらです。

・キャンセルやデッドラインを伝播させる
・リクエストあるいはトランザクションスコープのメタデータを関数やゴルーチン間で伝播させる

本書ではこのcontext.Contextパッケージの説明に15Pほどさいていて、きちんと説明されています。

さらに、なぜ「context」パッケージを使うのか?ということにも、その理由が説明されています。

こういうところをしっかり抑えていくことが、良いコードを書くうえでとても大事だと思っているので、素晴らしいなと思いました。

引用・補足情報が豊富

この様な補足が随所にあります。

APIインターフェースのコメントには何を書くべきか、書くべきではないのかは書籍『A Philosophy of Software Design, 2nd Edition』の「13.5 interface documentation」などが参考になります。

Goのドキュメント、ライブラリの紹介はもちろんですが、いわゆるWebアプリケーションを設計する上で知っておくべき知識たちを紹介してくれているのはとても良いなと思いました。

他の技術書でもこういった参照情報は載っていますが、本書はかなり豊富に載せてくれているなと思いました。

手元のメモから一部載せておきます。

コラムが充実している

インターフェース定義にXxxメソッドをただ1つだけ持つインターフェースは慣例としてサフィックスのerをつけてXxxerという名前にします。(以下略)

Go言語での慣例だったり、過去の経緯だったりといろんな情報を載せてくれています。本編と直接関係ないと言うことでコラムになっていると思いますが、結構大事なことだったり、それ知りたかったーって情報が載っています。

コラムを読んでいくだけでも、結構面白い発見があります。

まず動くコードを書いて、少しずつリファクタリングしながら進められる

本書のハンズオンでは、「なぜそうするのか理解しながら進める」ということが重要視されています。

そのため、まず最初に最低限の機能のみ(あるいは保守性が無考慮)のコードをあえて書くところから始めます。実務ではいきなり完成系のコードを書いてしまいがちですが、あえてある要求を最低限満たすだけのコードを書くことで問題点を確認し、その問題点を解決するためのコードとしてインクリメンタルに実装に改良を重ねていきます。

一つ一つ丁寧に開発してくので、とても理解が進みました。
また、最初からDocker環境、GitHub CIを使いつつ、テストを書きながら実装を進めていくことになります。この辺の周辺技術も、実際に業務で開発する時に役立つと思います。

そのまま動かせるサンプルコードがある

Docker環境も揃っているので、環境構築も特に詰まることなく動かせると思います。

読んでるだけで分からなくなったら、とりあえずサンプルコードを参照して動かしてみるということをやっていました。

改善されると嬉しい点

基本的にとても良い本だと思ったのですが、この辺が改善されるとさらに嬉しいなと言うところも載せておきます。

改善されると嬉しい点💡
✔︎日本語が難しいところがある
✔︎コードサンプルにはファイル名がほしい
✔︎表記間違いがちょくちょくある

  • 日本語が難しいところがある

    • 最初は自分がGoの理解が足らないからなのかなと思ったのですが、他のメンバーに聞いてもやや読みにくい所はあったみたいです。

  • コードサンプルにはファイル名がほしい

    • 写経しながら読んでたのですが、コードサンプルがどのファイルか分からず迷うことがありました。サンプルコードを見ながら読むのであれば問題ないかもしれません。

  • 表記間違いがちょくちょくある

    • Go初心者にはちょっと辛いところがありました

    • ただ、ちゃんとアップデートされてますし、後述する正誤表を参照すれば問題ないと思います

補足情報

僕は8割ほど読み終わった後に気づいたのですが、正誤表とフィードバックする場所が用意されています。これから読む方は、先に一通り目を通しておくと読み進めやすくなると思います。

正誤表

指摘・質問はGitHub Discussionsで受け付けていました。この使い方良いですね。

https://github.com/budougumi0617/go_todo_app/discussions

電子書籍で買う場合の注意点

僕は書籍は基本的に電子で買うようにしてるのですが、Kindleだと固定レイアウトでした。

固定レイアウトだけならまだ良いのですが、iPad、macアプリのKindleで縦スクロールができなくて、これが結構辛かったです。

写経しながら読もうとすると、サンプルコードがページをまたがったときにつらかったです。また、単純にノートPCの様な小さいディスプレイだとかなり字が小さくなります。拡大はできますが、そうするとページの行き来がかなり大変です。

縦スクロールで読みたい場合はこちらのPDF、EPUBをお勧めします。(最初Kindleで買いましたが、我慢できずにこちらも買ってしまいました)

ちなみにEPUBも固定レイアウト(EPUBはリフローと思い込んでいました)でしたが、iPad、macのBooksアプリで縦スクロールできています。

技術書の読み進め方

最後に、自分の技術書の読み進め方を簡単に紹介したいと思います。

Craftでのメモ

特に難しいことはしていなくて、こんな流れで読んでいます。

  1. お気に入りのメモアプリにページを1つ作る

  2. 気になったこと、分からないことはどんどん上からメモしていく

  3. 以上!

綺麗にまとめる必要はなくて、あとから思い出すためのindexくらいの感覚でメモしています。

メモアプリにはcraftを使っています。

シンプルなのが気に入っています。また、最近のアップデートで背景のスタイルを選べるようになりました。写真スタイルの背景が気に入ってよく使っています。

まとめ

全体的に、なぜそうするのかがしっかりと説明されているのが、とても素敵だなと思いました。

時間をかけて写経しつつ読み進めたのですが、まだ理解が追いついていないところはあるので、何度も読み返したいなと思っています。

Web開発の入門ではないので、初学者には少し難易度が高いかなと思います。他の言語でバックエンド開発をしたことがあって、GoでのWebアプリ開発を始めてみようと思う方にはおすすめできる内容となっているので、ぜひ読んでみてください。

最後に

現在、レスキューナウでは、災害情報の提供、災害情報を活用した安否確認サービスなどのWebサービスの開発エンジニアを募集しています!
社員・フリーランスに関わらず、参画後に安心してご活躍できることを目指し、応募された方の特性・ご希望にマッチしたチームをご紹介します。
ちょっと話を聞いてみたい、ぜひ応募したい、など、当社にご興味を持っていただけましたら、お気軽にエントリーください!!