API Gateway を使った小さなアプリケーションを立ち上げる機会があり、前々から使ってみたい欲求があったGo言語のランタイムを選択して実装した。SAM CLI が充実しているおかげでつつがなく実装を終えることはできたが、Go言語そのものに対する興味はさらに増すだけであったため、発行日が比較的近く、評判もいい『みんなのGo言語』を通読した。これはその書評記事である。

改訂2版 みんなのGo言語 (https://gihyo.jp/book/2019/978-4-297-10727-7)

 筆者のレベルとしては、典型的な入門者になる。つまり、 A Tour of Go を終え、 Effective Go を通読し、あとは都度ドキュメントを参照しつつ無害なアプリケーションをひとつ作った程度に過ぎない。ドキュメントを読みながらひたすらにコードを書きまくる…というのは聞こえのカッコヨサはあれど、どうしても無駄も多くなる。

 そこにきて本書は、実践的なパターンケースに満ちた構成となっていて、実用的な勉強となった。通り一遍の文法解説プラスアルファにとどまらず、各章で細かいところは徹底的に細かいやり方で主題が深められている。

 もっとも、巻頭ではっきり宣言されている通り、文法についての記述は皆無である。実際、環境構築を解説した第1章を終えるや否や、第2章ではツールのマルチプラットフォーム化に話題が移り、ニッチな tips の紹介が始まるあたり、入門書として勧めるべき書籍とはいえないだろう。

 形式としては、WEB+DB PRESS の特集企画のような印象、といえばわかりやすいだろうか。全体としては読み物としても楽しめつつ、読者のレベルに応じて、おのおの必要な部分を模倣ないし写経する、というくらいの、付かず離れずの距離感で読むのが適当かと思う。Go言語という大きな主題はあるが、各章は執筆陣がおのおの自由に取り組んだ印象がある。映画でいえば、それ自体がパッケージされた一本のオムニバス映画というよりも、テーマで縛った映画祭プログラムのような構成という印象である。

便利に読ませてもらった箇所

 難し過ぎたり、実践的すぎてまだこちらが参考にできるレベルにないトピックも多いなかで、ビギナーを自認する僕にとっておおいに参考となった箇所を挙げる。

開発環境の整備(第1章)

 外でもないここで学んだと胸を張って言えるものを、安直ながら列挙のスタイルで書く。少なくともこれらの技を知ることができたというだけでも、本書を手にとった意義があったとすら言ってもいいほど参考にさせてもらった。

 包み隠さず告白すると、どうも執筆者自身の自作ツールが広告されているように見えてしまい、ちょっと嫌な感じにはじめは受け止めていた。しかしそこで投げ出しても仕方ないのであまり親切でない指示に従っていく、すると結果的に驚くほど便利なツールでいずれもたちまち気に入ることになった。

 大学時代の指導教官との演習にタイムスリップしたようで笑ってしまった。高い視座から与えられる助言は往々にして不親切なように聞こえるが、それは不親切なのではなく、こちらの無知さ加減とか、つまらないプライドのせいで、素直に助言を聞きとることができずに不親切とレッテルを貼って処理するのだ。慎ましく学ぶべきことを思い出させてくれたことも、ここでの学びのひとつと数えていいかもしれない。

テストの実践的テクニック集(第6章)

 冒頭にも書いた、 Lambda の Go ランタイムで実装した小さなアプリケーションで壁にぶつかったまさにその内容に触れられており、この上なく便利に読むことができた。具体的には、 SDK から DynamoDB を呼び出す API リクエストの部分をうまいことスタブしようとしてつまずいていたのであった。インターフェースを実装することで API を実行するクライアントを簡単に置き換え可能にし、単純な単体テストとして処理可能にする…。小手先のテクニックという以上の、広汎なパターンに応用可能なボキャブラリをひとつ与えてもらった思いだ。

 このように、実に痒いところに手の届くテスト時のベストプラクティス集となっていて、現実には未経験でもなんとなく勘所となりそうなポイントが要点ごとにまとめられている。繰り返しリファレンス的に参照するべき章であることは間違いないだろうと思う。たとえば、 TestMain を利用してデータベースをセットアップするというパターンは、読了後すでに実践する機会を持った。同じように、この先コーディングを実践していくにあたって、何度も読み返して参考にし、少しずつ時間をかけて身につけていくべき知識がまとめられた章と感じている。

ORMとWEBフレームワークを使った REST API 実装のチュートリアル(第7章)

 各論や tips からは離れて、機械的に手を動かして動くものを作っていく唯一の章となる。

 ORMにせよWEBフレームワークにせよ、ツールの選択肢は無数にある中で、ここでは筆者の判断で gorp と echo を使って実装することになる。ここの判断はたいへんありがたかった。というのは、たとえば Ruby であれば Rails と ActiveRecord という鉄板の選択肢がある。他方、今回であればGo言語をゼロから学んでいるように、新しい環境に入門しようとしてまず大変なのは、何を知るべきかをまだ知らないことに尽きる。これさえできれば大丈夫、という安全牌はきっとない。それはいいことだ。しかしまず何からやるべきか、という決断は、初学者にはときに重すぎる。この文脈で、筆者がフレームワークとORMをあらかじめ選定してくれた上でチュートリアルを進めるという形式は、たいへんありがたく受け止めた。

 本章で触れられるように、アプリケーションコードとデータベースドライバの間に立つインターフェースとして実装されている database/sql の仕様からして、ドライバーを付け替えて別のデータベースで簡単なアプリを動かしてみる、というのは、このチュートリアルをひとまず終えた者にとって、そう難しくはないはずだ。同じようにフレームワークについても、まず echo を試すチュートリアルを終えた上で、別のフレームワークもいろいろ試してみようという動機を与えられる。このようにして、次の一歩を踏み出すだけの新しい自信を持った自分を感じて、本書を知る前の自分に比較してみると、明らかに力強い意思さえをも得られたことを実感する。

終わりに

 ひとまず通読してみて、理解度としてはおよそ半分くらいかなと感じる。それだけ濃密にGo言語という題目の多彩な側面を見せられることになるし、木と森の両方を意識しながら読み進めることになる。しかし第一義には読み物として、実体験に根ざした工夫の数々に触れることができるのはとてもよい。

 理解できないと判断せざるを得なかった事柄についても、意気消沈するというのではなく、むしろフロンティアの輪郭をなぞってクルーズ船から観光させてもらったような気分だ。地に足をつけて実践することができるようになるまではまだ時間が必要そうだが、そういう世界があることを認識することがまずは大切だろう。

 一方で、新しい言語を学ぶに当たって、いくら公式のリソースやドキュメントが充実していて、それを利用して学ぶことが推奨されているとはいっても、凡庸なプログラマが徒手空拳で学びとれることはたかが知れている、と実感した。その点書籍はいい。百戦錬磨の先達が蓄積した知見があり、それが編集されて書籍として発行されているという事実には、ずっしりとした安心感がある。

 執筆陣について、いずれの方も個人的な繋がりは持たず、どのような人物像なのかもさっぱりアイデアはもたない。しかし各章冒頭の著者プロフィールからブログを拝見しにいってみて、ときに10年以上の蓄積がある書き手であることをみると、そこに威厳を感じずにはいられない。それだけの積み重ねがあった上で、いまこちらの手元にある書籍の執筆をされているとなると、これはもう立派な権威である。ただただ尊敬するばかりだ。

 そうした高い視座を持つ執筆陣の肩に乗せてもらい、明らかに見える世界は広がった。楽しむことができるだけの道具も手にできたと思う。あとはこの新しい道具を使って、少しずつかつ淡々と仕事を重ねていくことになる。

 普通の開発者がGo言語を始めるための補助輪として、『改訂2版 みんなのGo言語』はうってつけの一冊であり、おおいに推薦する。