文化からツールまでを扱ったタイトルに違わぬ大著『Googleのソフトウェアエンジニアリング』を読んだ
昨年11月末に発売された『Googleのソフトウェアエンジニアリング』を読みました。
細かい内容についての感想はTwitterの方に放流しているので、ブログでは簡単に。
とりあえず一周した。17章以降は基本「いやーGoogleさんすごいっす」という感じだったが、ところどころ役立つ話があったし、「エンジニアリングを発展させていった先の一つの形がこうなのか」という面白さは大きかった。逆に前半は実践的にかなり勉強になったのでちゃんと復習しよう…… #swebookjp
— こま (@koma_koma_d) 2022年1月3日
全体の構成
書籍全体の構成は、以下のようになっています。 分量としては、「第4部 ツール」が最も大きな部分を占めています。 第2部から第4部について少しずつ感想を書きます。
- 第1部 主題(p.1 ~ p.30)
- 1章 ソフトウェアエンジニアリングとは何か
- 第2部 文化(p.31 ~ p.164)
- 2章 チームでうまく仕事をするには
- 3章 知識共有
- 4章 公正のためのエンジニアリング
- 5章 チームリーダー入門
- 6章 スケールするリーダー
- 7章 エンジニアリング生産性の計測
- 第3部 プロセス(p.165 ~ p.374)
- 8章 スタイルガイドとルール
- 9章 コードレビュー
- 10章 ドキュメンテーション
- 11章 テスト概観
- 12章 ユニットテスト
- 13章 テストダブル
- 14章 大規模テスト
- 15章 廃止
- 第4部 ツール(p.375 ~ p.632)
- 16章 バージョンコントロールとブランチ管理
- 17章 Code Search
- 18章 ビルドシステムとビルド哲学
- 19章 GoogleのコードレビューツールCritique
- 20章 静的解析
- 21章 依存関係管理
- 22章 大規模変更
- 23章 継続的インテグレーション
- 24章 継続的デリバリー
- 25章 サービスとしてのコンピュート
- 第5部 結論(p.633 ~ p.636)
- あとがき
「第2部 文化」について
有名な HRT(謙虚、尊敬、信頼) の原則の話から始まり、同僚とのコラボレーションやリーダーシップ、マネジメントの話をしています。
第2章、第5章の執筆担当者はBrian Fitzpatrickで、この方は『Team Geek』の共著者でもあります。内容的にも、HRTに関する部分や、リーダーシップに関する部分などは、『Team Geek』の改訂版とも言える内容になっています。
エンジニア組織の文化の話は自分は関心のある領域で、どの章も面白く読んだのですが、中でも印象的だったのは第4章の「公正のためのエンジニアリング」です。分量としては多くないのですが、Google が(過去の失敗も踏まえつつ)どのようにダイバーシティなどの課題に取り組んでいるのかなどが書かれていて、面白く読みました。日本の企業では Google ほどこの論点についての課題感は強くなりづらいと思いますが、この書籍で丸々一章がこのテーマのために割かれたのは意味のあることだと思います。
p.94 「最後に、未来の卓越したエンジニアを目指すなら、バイアスと差別によって最も影響を受けるユーザーに対してまず配慮すべきである。」は、かなり強いメッセージだなと思った。「公正のためのエンジニアリング」というのが章としてあるのは素晴らしいよね。
— こま (@koma_koma_d) 2022年1月3日
「第3部 プロセス」について
スタイルガイド、コードレビュー、ドキュメンテーション、テスト、廃止について取り上げています。Google のテストについては、『テストから見えてくるグーグルのソフトウェア開発』(未読です)という本があるほか、 Google Testing Blog でもアウトプットを見ることができますが、本書ではかなり紙幅を割いて説明がされています。
第3部で説明されているプロセスは、第4部で説明されるGoogleのツールと結びついている側面が相当あるのですが、第3部は細かいツールの話をしないようにして記述されているので、Google で働いていない人にとっても参考になる内容が多く含まれていると感じました。
「第4部 ツール」について
第4部では、Google のエンジニアリング(特に第3部で説明されているプロセス)を支えるツール(基本的には社内ツールですが、一部オープンソース版のあるものもあります)が説明されています。正直、自分の仕事に直接役立てようと思って読むのは難しいことが多かったですが、どういう考えに基づいてそれらのツールが設計・運用されているかというのは面白く読みました。
ひとつだけ取り上げると、タスクベースのビルドツールとアーティファクトベースのビルドツールの話は面白かったです。Maven や Rake といった従来のビルドツールは、大多数がタスクベースで、タスクベースであるがための課題を抱えており、それらの課題をどのようにBlaze(そのオープンソース版がBazel)などのアーティファクトベースのビルドツールが解決していくのか、ということが分かりやすく説明されています。Bazel を使ってみたくなりました。
おわりに
『Googleのソフトウェアエンジニアリング』、全部で600頁超の大著ですが、細かく章立てされているので、少しずつ読み進めるのには適した書籍だと思います。また、章ごとに執筆担当者の違う書籍にありがちな全体のつながりの悪さはそこまでなく、部という単位ではかなりまとまりを感じました。
かなり幅広いテーマについて一定程度の深さで話をしている書籍ですので、これからは広く参照されていくことになりそうだなと思いました。自分も一回では到底消化しきれていないので、これから折に触れて手に取ろうと思います。