じゃあ、おうちで学べる

思考を呼び覚ます このコードに、君は抗えるか。

2023年 俺が愛した本たち 技術書編

この記事は、3-shake Advent Calendar 2023 2日目のエントリ記事です。

はじめに

2023年がそろそろ幕を閉じようとしています。年末に差し掛かると、時間が流れる水のように止まらないことを感じながら、過ぎ去った一年を振り返るのは、私にとって欠かせない習慣です。この一年も、技術書の海に身を投じて、多くの本に心を奪われ、狂気のような積読を重ねました。積めば技術力が向上すると信じている。現代科学では解明できない電波が(諸説あり)積み上がった本からは出ていてこれらが私の知識の山となりました。が、来年はこの山を一歩一歩登り、購入する本の数を読む本の数に下回らせることを心に誓います。2023年は、特に技術の世界で学びは終わりがないことを実感した年でした。読書を通じて得た知識と経験は、来年もまた新たな知識の旅へと私を導くでしょう。

昨年の読んだ本 syu-m-5151.hatenablog.com

有用情報

昨年惜しまれつつ終了したACM会員特典、O'Reilly Online Learningの読み放題サブスクが、2023年に復活しました!これは大きなニュースですね。新しい年間料金は$174と少々お高くなってしまいましたが、通常の$499と比較するとかなりの節約です。ちなみに、私は5月に$499でこのサブスクを手に入れました。興味がある方は、ACM登録ページより登録が可能です。ACM Professional Membership(年間$99)にACM Skills Bundle Add-On(追加$75)を組み合わせることで、O'Reilly Online Learning、Skillsoft Percipioのeラーニング、PluralsightのIT技術学習プラットフォームといった3つの学習コンテンツのサブスクを登録できます。

2023年に読んでよかった技術書

2023年は、読書から得た知識をソフトウェアエンジニアとしての実務経験に結びつけ、いくつかのイベントで登壇する機会に恵まれました。これらの登壇では、本で学んだ理論やアイデアを実際の業務に応用し、それらを共有することで得られた知見が非常に貴重なものでした。今後も、この経験を活かして、より多くの人々と知識を共有し、相互に学び合う機会を創出していきたいと考えています。また、2023年に私が特に愛読した本を紹介し、読書を通じたさらなる知見の共有を図っていく予定です。これらの本が、皆さんの技術的な成長や新しい洞察を得るための一助となれば幸いです。

speakerdeck.com

サイトリライアビリティワークブック

『サイトリライアビリティワークブック ―SREの実践方法』は、『SRE サイトリライアビリティエンジニアリング』の実践編として、SRE(サイトリライアビリティエンジニアリング)を組織やプロジェクトに導入する際に必要な具体的な方法や手順を詳しく解説した本です。Google内部での技術的ノウハウに加え、Evernote、The Home Depot、New York Timesなど、様々な企業での事例を紹介しています。

本書は、クラウド環境など制御できない環境での信頼性の高いサービスの実行方法、サービスレベル目標に基づくサービスの作成・監視・運用、運用チームをSREに変換する方法、新規開発や既存サービスにおけるSREの始め方などをカバーしています。また、SREとDevOpsの関係性についても詳しく触れています。

この本は、前作『SRE サイトリライアビリティエンジニアリング』と対になる本であり、前作が原理と哲学を紹介するのに対し、本書はそれらの原理の適用方法に焦点を当てています。また、Googleだけでなく、さまざまな企業でのSREプラクティスについても解説しています。

本書は前作と比較して内容が身近で読みやすく、SREの理解をさらに深めることができます。基本的な用語や他社の事例が分かりやすく説明されており、SREの実践に関して具体的かつ実用的な内容が盛り込まれています。

さらに、分散システムの信頼性に関する知識を深めたい方には、『Go言語による分散サービス―信頼性、拡張性、保守性の高いシステムの構築』がおすすめです。この本は『Distributed Services with Go』の翻訳版であり、2022年8月に発売されました。また、『Designing Data-Intensive Applications』も非常に役立ちここ数年で最も読んでよかった技術書の一冊です。このはデータ集約型アプリケーションの設計における核心的な概念と技術を網羅的に解説し、信頼性の高い分散システム構築に必要な知識が詳細に説明されています。時間を巻き戻して本を読む順番を選べるなら、もっと早く手に取りたかったと感じています。翻訳版である『データ指向アプリケーションデザイン』も知っておくと有益です。関連するイベントの詳細はこちらで確認できます。イベントは既に終了していますが、本の内容を深く理解し、専門家から新しい視点や知見を得る絶好の機会です。このイベントに参加することで、読書体験がより充実したものになることは間違いありません。

  • 動画

www.youtube.com

  • 発表資料

speakerdeck.com

ちょっと脱線してしまいましたが総じて、『サイトリライアビリティワークブック ―SREの実践方法』は、SREを導入し、SREの考え方をプロダクト開発に導入しようとしている人にとって有益な情報が豊富に含まれています。

英語版を読みたい方のために、Googleが無料で公開しているリンクは以下です。

sre.google

Software Requirements Essentials

「私は過去 10 年間でベストセラーになった要件エンジニアリングの本 10 冊を読んだことがあります。この 1 冊には、それらの 10 冊を合わせたものよりも有益な情報が簡潔に記載されています。」--Mike Cohn, author of User Stories Applied and co-founder, Scrum Alliance

この表現が過剰ではないことがわかる一冊である。はやく読みたかった本つながりで。『Software Requirements Essentials: Core Practices for Successful Business Analysis』は、要件開発と管理における20のコアプラクティスを紹介する重要な本です。著者のKarl WiegersとCandase Hokansonは、伝統的なプロジェクトからアジャイルプロジェクトまで、あらゆるアプリケーションドメインにおいて、優れた価値を提供する可能性が最も高いプラクティスに焦点を当てています。これらのコアプラクティスは、チームがビジネス問題を理解し、適切な参加者を巻き込み、より良い解決策を明確にし、コミュニケーションを改善し、最も価値のある機能を適切な順序で実装し、変化と成長に適応するのに役立ちます。

これもサブスクで読めるのでおすすめです。ソフトウェア要求 第3版 を読むほど時間がないのであればおすすめです。 learning.oreilly.com

ソフトウェア要求 第3版 の本も読めます(原書)。やっててよかったO'Reillyサブスク learning.oreilly.com

この本はソフトウェア要求 第3版を簡潔で焦点を絞った内容であり、「どのように」するかについての実用的な詳細がほどよく含まれているため、すべてのプロジェクト参加者におすすめできます。本書を使用することで、チーム全体が重要な概念、用語、技術、理論について共通の理解を築き、プロジェクトごとにより効果的に協力できます。

主な内容には、問題の明確化、ビジネス目標の定義、ソリューションの境界設定、利害関係者と意思決定者の特定、ユーザータスク、イベント、応答の調査、データの概念と関係の評価、品質属性の取り扱い、要件の分析、モデリング、優先順位付け、要件の明確かつ整理された方法での記述、要件のレビュー、テスト、変更管理などが含まれています。

本当に良い内容だったのですが自分が本として言及するには深すぎる内容だったのでざっくり雰囲気を知りたい人はこちらのブログを確認してほしいです。

agnozingdays.hatenablog.com

システム障害対応 実践ガイド

『3カ月で改善!システム障害対応 実践ガイド』は、システム障害対応とプロセス改善の実践的なアプローチを提供する画期的な本です。著者の野村浩司氏と松浦修治氏は、それぞれNTTデータリクルートでの豊富な経験を基に、実際の業務に即した方法を提供しています。本書の大きな特徴は、障害対応の具体的な手法を「メソッド化」している点です。理論だけでなく、「どうすればいいのか?」という実践的な問いに答えており、情報システム担当者や運用リーダーにとって最適な内容となっています。また、本書は障害対応の本質的価値にも触れています。障害対応の改善は、顧客満足度従業員満足度、そして財務観点からもプラスの効果をもたらします。この点を丁寧に説明しており、運用担当者のモチベーション向上にも寄与する内容です。大規模な障害対応経験がない方でも、対応のイメージがつかめるように工夫されています。障害対応の難所にも言及し、読者が共感しやすい内容となっています。

システム障害が起こりうるすべての現場の人々に推奨されるこの本は、システム障害対応をどのように捉え、判断し、対応するべきかについてのフローや表を豊富に掲載しています。これらは特にシステム障害マニュアルが整備されていないチームにとって非常に有用です。

1000件以上の事例を分析し生み出されたこのメソッドは、障害対応改善のための役立つ雛形と共に、3カ月での改善を可能にします。インシデント分析から障害訓練まで、各プロセスに役立つ情報が満載です。システム障害対応における課題の特定から改善ステップまで、具体的なガイダンスを提供し、障害対応を改善するための実践的な指針を提供します。

また、SREの観点からいうと『Implementing Service Level Objectives』は、SLO文化をゼロから構築するための具体的なガイダンスを提供する貴重な本です。著者のAlex Hidalgoは、ユーザーの視点からサービスの信頼性を測定するSLIの定義、SLO目標の選択と統計的分析、エラーバジェットの利用方法など、SLOベースのアプローチに必要なツールとリソースの構築について詳しく説明しています。このガイドは、SLOデータを活用して経営陣やユーザーに意味のあるレポートを作成する方法を含め、SLOの実装に関わる全てのステークホルダーにとって非常に価値ある本なので読んでほしいです。この分野では「Webエンジニアのための監視システム実装ガイド」、「運用設計の教科書 ~現場で困らないITサービスマネジメントの実践ノウハウ」などもとてもおもしろかったのでおすすめです。

learning.oreilly.com

国内でもIncident Responseの勉強会があったり、Awesome Incident Responseなどがあるので一読して見るのがよいかなって思いました。

incident-response.connpass.com

コンテナセキュリティ

『コンテナセキュリティ:コンテナ化されたアプリケーションを保護する要素技術』は、Liz Riceによる原著『Container Security: Fundamental Technology Concepts that Protect Containerized Applications』の翻訳版で、コンテナセキュリティに関する深い理解を提供してくれる本です。

www.youtube.com

この本は、コンテナへの攻撃経路、Linuxの構造、コンテナの堅牢化、設定ミスによるセキュリティ侵害のリスク、コンテナイメージビルドのベストプラクティスなど、コンテナセキュリティに関する要素技術を幅広くカバーしています。開発者、運用者、セキュリティ専門家にとって、コンテナセキュリティの理解を深めるための優れた本であり、翻訳を担当しました。

一方で、同様の本もリリースされております。『基礎から学ぶコンテナセキュリティ――Dockerを通して理解するコンテナの攻撃例と対策』は、森田浩平著による、コンテナセキュリティの基本から応用までを解説した本です。Dockerの普及に伴い、コンテナ技術が広く使用されていますが、そのセキュリティ面についての理解が不十分な点が多々あります。この本は、コンテナ利用時のセキュリティ上の問題を防ぎ、安全に活用するための基本的なガイダンスを提供します。コンテナ型仮想化の概要、コンテナの主要な攻撃ルート、堅牢なコンテナイメージの作り方、セキュアなコンテナ環境の構築など、実践的な内容が盛り込まれています。ちなみにContainer Security Book というこれから Linux コンテナのセキュリティを学びたい人のための文書を公開しているのでこちらを最初に読んでみるのが良いかと思います。

これらの本は、コンテナセキュリティに関心が高いエンジニアにとって、理論と実践のバランスを持ち、現代のコンテナ環境で必要とされる重要な知識とスキルを提供します。コンテナ技術のセキュリティ面に関する包括的な理解を深めるために、有益です。

ちなみに『Docker: Up & Running, 3rd Edition』が2023年にリリースされました。コンテナ技術に関するめちゃくちゃ有用な本です。この最新版は、Sean KaneとKarl Matthiasによって、Dockerの登場から約10年間の大きな変化に対応して大幅に更新されています。知識の新陳代謝のためにもぜひ、読んでみてください。この本では、DockerやLinuxコンテナがクラウドサービスやKubernetesとどのように統合されるか、OCIイメージの構築、Linuxコンテナのデプロイと管理、依存関係管理やアプリケーションのデプロイワークフローの単純化、本番環境でのLinuxコンテナのデプロイとテストの実用的なテクニックなど、広範囲にわたるトピックが取り上げられています。BuildKit、マルチアーキテクチャイメージサポート、ルートレスコンテナなど、新機能の追加カバレッジもあります。

learning.oreilly.com

Terraform: Up and Running, 3rd Edition

『Terraform: Up and Running, 3rd Edition』は、Terraformについての優れた入門書です。とりあえず、何も考えずにTerraform を書くなら読んでほしいです。本書は、Terraformを使用して、様々なクラウドや仮想化プラットフォームでインフラをコードとして定義、立ち上げ、管理する方法を示しています。著者Yevgeniy (Jim) Brikmanは、Terraformのシンプルで宣言的なプログラミング言語を通じて、インフラを数コマンドでデプロイおよび管理する方法を示すコード例を提供しています。

この第3版は、Terraform 1.0に対応するために大幅に拡張され、最新の情報が追加されています。Terraformの基本から、大量のトラフィックをサポートし、大規模な開発チームを運営できるフルスタックの実行まで、システム管理者、DevOpsエンジニア、初心者開発者が素早く学べる内容になっています。

本書の最大の特徴は、ただコードをコピー&ペーストするのではなく、読者自身に実際に作業を行わせることを強く推奨している点です。実際に手を動かして学ぶことが、Terraformの理解を深める最善の方法だと著者は語っています。また、gitやdockerなど、本書で使用されるすべての技術について、読者が日常業務で別のツールを使用している場合でもついていけるようにミニチュートリアルが用意されています。

さらに、本書は、IaC(Infrastructure as Code)とDevOpsの実践、Terraform、パブリッククラウド、バージョンコントロールの統合、プロビジョニングツールを通じてインフラを作成・デプロイする効果について、基本から細かなニュアンスまでをわかりやすく説明しています。実際にコードを書いてテストする経験は、初心者にとって非常に価値のある学びの機会となります。

Infrastructure as Code の3版もEarly Releaseされています(翻訳されて...)。 learning.oreilly.com

Terraformは進化し続けており、最新機能は絶えず追加されています。例えばTerraform v1.6のtestが追加されますが本書では一切触れられておりません。そのため、最新のリリースや動向に注意を払い続けることが重要です。また、HashiCorpがTerraformを含む自社製品のライセンスをオープンソースから変更したこともあり、今後もその動向に注目する必要があるでしょう。

総じて、TerraformやIaCを学び、理解し、実践したい人にとって、非常におすすめの入門 本です。

翻訳本が2023年11月21日に出ましたね。幸せです。

Efficient Go

『Efficient Go: Data-Driven Performance Optimization』は、計測方法や目的設定から方法から始まり、様々なレベルでの効率を最適化する方法、CPUやメモリなどの一般的なリソースを効果的に使用する技術、Prometheus、Jaeger、Parcaなどのオープンソースプロジェクトを通じてメトリクス、ログ、トレーシング、(連続的な)プロファイリングによる効率評価方法、go testpprofbenchstatk6などのツールを使用して信頼性のあるマイクロおよびマクロベンチマークを作成する技術に至るまで、幅広い内容が網羅されています。また、Goの機能であるスライス、ジェネリクス、ゴルーチン、割り当てセマンティクス、ガベージコレクションなどを効率的に使用する方法についても解説されており、記事として散見されるものがまとめて読めることと自体に勝ちがある。加えて最適化の限界を超えると、得るものと失うものが等しくなるみたないマインドセットの部分も含めてとても価値があるのでGoやシステムの最適化を目指す方には必読の内容かと思います。

Kubernetes Best Practices, 2nd Edition

Kubernetes Best Practices, 2nd Edition』は、Kubernetesを活用してアプリケーションを構築するプロセスに焦点を当てた実践的なガイドです。著者たちは、分散システム、エンタープライズアプリケーション開発、オープンソース分野での豊富な経験を活かし、最新のKubernetesの機能や新しいツールに関する知見を提供しています。この本は、Kubernetesの基本概念に精通しているが、最新のベストプラクティスに迅速に対応したい開発者やアーキテクトに最適です。また、既にある程度の知識を持っている方にとって、知識を更新し、新たな視点を得るためのデトックスにも役立ちます。入門書を読みたいならKubernetes: Up and Running, 3rd Editionを読めばよいとおもいます。最新のKubernetesの機能、新しいツール、および廃止された機能についてカバーされており、意外と知らなかったり古くなっている知識があったので知識のデトックスにもオススメです。

一方で、『Kubernetes Patterns, 2nd Edition』は、クラウドネイティブアプリケーションの設計と実装におけるパターンと原則に重点を置いています。著者のBilgin IbryamとRoland Hussは、再利用可能なパターンとKubernetesに特化した解決策を提供し、具体的なコード例を通じてこれらのパターンを実演します。読者は、コンテナベースのクラウドネイティブアプリケーションの構築と運用に関する基本原則や、より複雑なトピックを含む様々なパターンを学ぶことができます。

個人的にはKubernetes Best Practices, 2nd Editionは良識ある大人が寄ってきてKubernetesについて手取り足取り教えてくれる本。 learning.oreilly.com

Kubernetes Patterns, 2nd Edition はKubernetes について知りたいって言ったら勢いよくオタクが寄ってきてその全てを教えて去っていく本。 learning.oreilly.com

総じて、『Kubernetes Best Practices』はKubernetesの進んだ使い方やベストプラクティスに焦点を当てており、『Kubernetes Patterns』はKubernetesを用いたアプリケーション設計における具体的なパターンと原則に重点を置いています。どちらの本も、Kubernetesの利用を最大限に活かしたいと考える技術者にとって読んで損のない二冊だと思います。

ルールズ・オブ・プログラミング

『ルールズ・オブ・プログラミング ―より良いコードを書くための21のルール』は、大ヒットゲーム『Ghost of Tsushima』の開発現場で培われた、ゲーム制作スタジオSucker Punch Productionsの共同創設者であるChris Zimmermanによる、すべてのプログラマーにとって必読のプログラミング哲学です。この本では、プログラミングに関する21の本質的なルールが紹介されており、単純化とバランスの取り方、バグの扱い、命名の重要性、一般化のプロセス、最適化のタイミング、コードレビューの価値、失敗の回避、実行されないコードの対応、複雑性の管理など、プログラミングにおける幅広いトピックにわたる洞察が提供されています。

C++で書かれたコード例を用いながらも、C++の知識がない読者でも理解できるよう配慮されており、PythonJavaScriptプログラマー向けのC++コード読解法も掲載されています。この本は、入門書では決してないですがトレードオフを意識したことがある全てのプログラマーにとってプログラミングの日々の課題を解決し、優れたコードを書くための実践的なガイドとして推奨されます。あと、この本はWIP: 2023年 俺が愛した本たち 非技術書編 - じゃあ、おうちで学べるでも紹介したプログラマー脳 ~優れたプログラマーになるための認知科学に基づくアプローチ』の後に読んだのでそれらの制約やルールは人間の脳や認識の制約によって成り立っているものだなって思いました。

こちらは、『ルールズ・オブ・プログラミング』を2倍楽しむための1つのルール というイベントの動画があるのでぜひご覧いただきたいです。

www.youtube.com

『Good Code, Bad Code』は、Googleのテックリードである著者が、高品質なコードを書くための「コーディングの4つのゴール」と「品質6つの柱」を提案しています。この本は、コードの読みやすさ、誤用の防止、モジュール化、再利用性、テストのしやすさなど、日々の開発業務で直面する課題に対して、具体的で実践的なアドバイスを提供しています。著者の経験に基づいたアプローチは、プログラミングにおける理想論ではなく、現実的で実用的な解決策を提示しています。この本は、コードの品質を高めるための具体的な手法として「コーディングの4つのゴール」と「品質6つの柱」を提示しています。

「コーディングの4つのゴール」には、1) 正しく動くこと、2) 正しく動作し続けること、3) 要件の変更に対応しやすいこと、4) 車輪の再発明をしないこと、が含まれます。これらのゴールは、コードの堅牢性と信頼性を保ちながら、変化に柔軟に対応できることを重視しています。

また、「コード品質の6つの柱」は、1) 読みやすさ、2) 想定外の事態をなくす、3) 誤用しにくいコードを書く、4) モジュール化、5) 再利用・汎用化のしやすさ、6) テストのしやすさと適切なテスト、に焦点を当てています。これらは、コードを効果的かつ効率的に管理するための基本的な要素であり、エンジニアが日々の開発業務で直面する課題を解決するための実践的なアドバイスを提供しています。

あと、忘れてほしくないのが我らがKent Beck先生の『Tidy First?』(日本語訳:まずは整理整頓)です。この実践的ガイドでは、エクストリーム・プログラミング創始者でありソフトウェアパターンの先駆者である著者が、コードを読みやすく整理する「タイディング(Tidying)」の適切なタイミングと場所を提案しており、大きな関数や複雑なシステムを小さなステップで安全に改善する方法、ソフトウェア設計の理論的な側面と実践的なスキルの融合など、人間関係の観点からのソフトウェア設計を深く掘り下げています。この本は、単にコードを綺麗にするテクニックを教えるだけでなく、ソフトウェアの品質を向上させ、開発プロセスを効果的かつ効率的にするための全体的な視野を提供してくれます。技術コンサルティングを行う上で、この本を参考にする機会が多く、多くのプロジェクトでその洞察とアプローチが非常に役立ちました。

learning.oreilly.com

これらの本に本当に優劣とかないですが同系統の書籍なので一緒に紹介させていただきました。

さいごに

今年一年を通して読み漁った数々の技術書は、私にとって新たな知識の扉を開く鍵となりました。それぞれの本が持つ独自の視点や深い洞察は、技術者としての私の視野を広げ、思考を豊かにしてくれました。皆さんからのおすすめの本も、来年の読書リストに加えて楽しみにしています。読書は単なる趣味ではなく、私たちの知識を形成し、成長させる重要な行為です。皆さんも、来年は私と一緒に、新たな知識の探求に挑戦してみませんか? それでは、2024年も充実した読書ライフをお過ごし下さい。読書を通じて、皆さんが新しい自分を発見し、さらなる成長を遂げる一年となりますように。