『Design It! ― プログラマーのためのアーキテクティング入門』

翻訳を担当した書籍『Design It! ― プログラマーのためのアーキテクティング入門』(オライリー・ジャパン)が11月25日に発売になります。本書は2017年にPragmatic Bookshelfより出版されたMichael Keeling著『Design It!: From Programmer to Software Architect』の全訳です。Pragmatic Bookshelfファンにはおなじみの「... It!」シリーズの一冊で、日本語で読める「... It!」シリーズとしては4冊目の書籍となります。

O'Reilly Japan - Design It!

本書は、設計スキルを成長させたいプログラマーに向けたアーキテクティングの入門書です。ソフトウェアアーキテクチャの基礎とデザイン思考の考え方から始まり、ソフトウェアアーキテクトとして、チームと共に優れたソフトウェアを作り上げていく方法を包括的に解説します。本書を読むことで、適切なステークホルダーを特定してニーズを理解する方法、アーキテクチャ上重要な要求に基づいて技術やアーキテクチャを適切に選択する方法、アーキテクチャを軽量かつ効果的に評価する方法、チームのアーキテクト力を高める方法などを学べます。モダンなアーキテクチャ設計のための実践的な手法が詰まった本書は、より良いプログラマー、技術リーダー、そしてソフトウェアアーキテクトになるために必携の一冊です。平鍋健児氏による「日本語版序文」を収録。

本書のテーマは、ソフトウェアをデザインすることです。主にアーキテクトの役割に焦点をあて、ソフトウェアの根幹となる部分、すなわち、ソフトウェアアーキテクチャをいかにデザインしていくかについての書籍となっています。そして、原書の「From Programmer To Software Architect(プログラマーからソフトウェアアーキテクトへの道)」というサブタイトルが示すように、今日のソフトウェア開発の現場で、新しい人たちがどうやってアーキテクト的な責任に踏み込んでいったらよいかというガイドにもなっています。

本書が良いなあと思うのは、とりあえずこれ一冊あれば、ビジネスを支えるソフトウェアのアーキテクティングにどう取り組んでいったらいいかの地図とコンパスを手に入れられるようになっているところです。

目次

第Ⅰ部 ソフトウェアアーキテクチャ入門

1章 ソフトウェアアーキテクトになる
    1.1 ソフトウェアアーキテクトが行うこと
    1.2 ソフトウェアアーキテクチャとは何か
    1.3 チームのアーキテクトになる
    1.4 素晴らしいソフトウェアを作り上げる
    1.5 ケーススタディ: Lionheartプロジェクト
    1.6 次にやること 

2章 デザイン思考の基礎
    2.1 デザイン思考の4つの原則
    2.2 デザインマインドセットを身に付ける
    2.3 Think、Do、Check
    2.4 次にやること

第Ⅱ部 アーキテクチャ設計の基礎

3章 デザイン戦略を立てる
    3.1 満足のいく設計を見つける
    3.2 どれくらい前払いの設計を行うかを決める
    3.3 リスクに道案内させる
    3.4 設計計画を立てる
    3.5 Lionheartプロジェクト:ここまでのあらすじ
    3.6 次にやること 

4章 ステークホルダーに共感する
    4.1 適切な人たちと話をする
    4.2 ステークホルダーマップを作る
    4.3 ビジネス目標を発見する
    4.4 Lionheartプロジェクト:ここまでのあらすじ
    4.5 次にやること 

5章 アーキテクチャ上重要な要求を掘り下げる
    5.1 制約によって設計の選択肢を絞る
    5.2 品質特性を定義する
    5.3 機能要求の分類を探す
    5.4 それ以外のアーキテクチャに影響するものを見つけ出す
    5.5 必要な情報を掘り下げる
    5.6 ASRワークブックを組み立てる
    5.7 Lionheartプロジェクト:ここまでのあらすじ
    5.8 次にやること

6章 アーキテクチャを選ぶ(君がアーキテクチャに選ばれる前に)
    6.1 選択肢を広げるために発散させ、決定するために収束させる
    6.3 制約を受け入れる
    6.2 望ましい品質特性を促進する
    6.4 機能的責務を要素に割り当てる
    6.5 変化に向けて設計する
    6.6 Lionheartプロジェクト:ここまでのあらすじ
    6.7 次にやること 

7章 パターンで土台を作る
    7.1 アーキテクチャパターンとは
    7.2 レイヤー(Layers)
    7.3 ポートとアダプター(Ports and Adapters)
    7.4 パイプとフィルター(Pipe and Filter)
    7.5 サービス指向アーキテクチャ(Service-Oriented Architecture)
    7.6 パブリッシュ・サブスクライブ(Publish-Subscribe)
    7.7 共有データ(Shared-Data)
    7.8 多層(Multi-Tier)
    7.9 コンピタンスセンター(Center of Competence)
    7.10 オープンソース型の貢献(Open Source Contribution)
    7.11 巨大な泥団子(Big Ball of Mud)
    7.12 新しいパターンを発見する
    7.13 Lionheartプロジェクト:ここまでのあらすじ
    7.14 次にやること 

8章 意味のあるモデルで複雑さを扱う
    8.1 アーキテクチャを見通す
    8.2 メタモデルを記述する
    8.3 コード内にモデルを構築する
    8.4 Lionheartプロジェクト:ここまでのあらすじ
    8.5 次にやること

9章 アーキテクチャデザインスタジオを開く
    9.1 アーキテクチャデザインスタジオを計画する
    9.2 適切なデザインアクティビティを選択する
    9.3 適切な参加者を招く
    9.4 グループを管理する
    9.5 リモートチームと実施する
    9.6 Lionheartプロジェクト:ここまでのあらすじ
    9.7 次にやること 

10章 設計判断を可視化する
    10.1 異なる視点からアーキテクチャを示す
    10.2 素晴らしい図を描く
    10.3 Lionheartプロジェクト:ここまでのあらすじ
    10.4 次にやること 

11章 アーキテクチャを記述する
    11.1 全体像を語る
    11.2 状況に応じた記述方法を選ぶ
    11.3 聴衆に配慮する
    11.4 ステークホルダーの関心事を中心にビューを構成する
    11.5 判断の論理的根拠を説明する
    11.6 Lionheartプロジェクト:ここまでのあらすじ
    11.7 次にやること 

12章 アーキテクチャに通知表をつける
    12.1 評価し、そこから学ぶ
    12.2 設計をテストする
    12.3 評価ワークショップを開く
    12.4 早くから評価を始め、頻繁に継続的に評価する
    12.5 Lionheartプロジェクト:ここまでのあらすじ
    12.6 次にやること 

13章 チームのアーキテクト力を強める
    13.1 アーキテクチャ思考を促進する
    13.2 意思決定を促し、スキルの成長を促進する
    13.3 安全に実践する機会を作り出す
    13.4 設計権限を委譲する
    13.5 共にアーキテクチャを設計する
    13.6 Lionheartプロジェクト:大団円
    13.7 次にやること 

第Ⅲ部 アーキテクトの道具箱

14章 問題理解のアクティビティ
    アクティビティ 1 たった一つを選ぶ 
    アクティビティ 2 共感マップ 
    アクティビティ 3 GQMワークショップ 
    アクティビティ 4 ステークホルダーインタビュー 
    アクティビティ 5 前提リスト 
    アクティビティ 6 品質特性ウェブ 
    アクティビティ 7 ミニ品質特性ワークショップ 
    アクティビティ 8 POV Madlib 
    アクティビティ 9 応答測定のたたき台 
    アクティビティ 10 ステークホルダーマップ

15章 潜在的な解決策を探るアクティビティ
    アクティビティ 11 アーキテクチャの擬人化
    アクティビティ 12 アーキテクチャフリップブック 
    アクティビティ 13 CRCカード
    アクティビティ 14 概念マップ 
    アクティビティ 15 分割統治 
    アクティビティ 16 イベントストーミング 
    アクティビティ 17 グループポスター 
    アクティビティ 18 ラウンドロビン設計 
    アクティビティ 19 ホワイトボードジャム 

16章 設計をタンジブルにするアクティビティ
    アクティビティ 20 アーキテクチャデシジョンレコード 
    アクティビティ 21 アーキテクチャ俳句 
    アクティビティ 22 コンテキスト図 
    アクティビティ 23 まずこれを読もうリスト
    アクティビティ 24 インセプションデッキ 
    アクティビティ 25 モジュール分解図 
    アクティビティ 26 選ばなかった道 
    アクティビティ 27 学習か判断のためのプロトタイプ 
    アクティビティ 28 シーケンス図
    アクティビティ 29 システムメタファー 

17章 設計の選択肢を評価するアクティビティ
    アクティビティ 30 アーキテクチャブリーフィング 
    アクティビティ 31 コードレビュー 
    アクティビティ 32 意思決定マトリクス 
    アクティビティ 33 振る舞いの観察 
    アクティビティ 34 質問-意見-懸念 
    アクティビティ 35 リスクストーミング 
    アクティビティ 36 サニティチェック 
    アクティビティ 37 シナリオウォークスルー
    アクティビティ 38 スケッチして比較

今日では、事業会社に所属し、そのビジネスを支えるソフトウェアの開発に携わるソフトウェア開発者も増えてきています。一方で、ソフトウェアをビジネスとうまく調和させた形で作り上げていく、ビジネス領域の人たちと一緒になってソフトウェアを育てていくという部分では課題がある組織もまだまだ多くあると感じています。そして、そうした課題に影響を与えているものの一つには、組織構造やこれまでのキャリアからくる無意識の線引きに影響され、私たちの側が旧来通りのソフトウェア開発のアプローチ(発注=仕様を決める側と受注=作る側)にとどまってしまっているケースも多くあると考えています。

本書は、プログラマーがそうした壁を破って、ビジネスと調和したソフトウェアをチームでデザインしていくためのヒントが得られる一冊です。

訳者後書きにも書いたことなのですが、この「... It!」シリーズというのは、自分にとって思い入れのあるシリーズで、10年ほど前の自分にとって『Ship It!』をはじめとするこのシリーズの書籍たちを「今世界のどこかで、こうやったやり方や考え方で開発していっている人たちが実際にいる!」という感覚を持ちながら日本語で読めたことは、プログラマーとしての世界観を形成していくにあたって大事な経験でした。今回のぼくの仕事が、これまでの書籍を翻訳してこられた方々のように十分にうまくできたかはわかりませんが、願わくば、当時のぼくと同じような気持ちで本書から何かを受け取ってくれる人に、この本が届くといいなと思っています。

本書の出だしは、次のような一行からはじまります。

ソフトウェアアーキテクチャとは、素晴らしいソフトウェアを構築するための土台だ。もちろん、アーキテクチャが素晴らしいからといって、ソフトウェアの成功が保証されるわけではない。しかし、多くの場合、誤ったアーキテクチャは失敗につながる。ソフトウェアアーキテクチャはとても重要なものだ。だからこそ、すべてのソフトウェア開発者はそれをどう設計するかを知る必要がある。

ぜひ、たくさんの方に読んでいただけると嬉しいです。

Design It! ―プログラマーのためのアーキテクティング入門

Design It! ―プログラマーのためのアーキテクティング入門