進化的アーキテクチャ ―絶え間ない変化を支える

Book description

現代におけるエンタープライズアーキテクチャは、もはや静的な計画をあてにすることはできなくなっています。そしてソフトウェア開発エコシステムは、ツールやフレームワーク、技術イノベーションの流れと共に絶え間なく変化しています。こうした状況の中で、いったん構築したシステムを成長させていくには、さまざまな変化に適応しながら進化するアーキテクチャをシステムに組み込む必要があります。本書は、そうしたアーキテクチャを「進化的アーキテクチャ」と名付け、その構築に必要な考え方や技術、実践方法などについて解説するものです。

Table of contents

  1. 大扉
  2. 原書大扉
  3. クレジット
  4. 本書への推薦の言葉
  5. 訳者まえがき
  6. マーチン・ファウラーによる序文
  7. はじめに
  8. 1章 ソフトウェアアーキテクチャ
    1. 1.1 進化的アーキテクチャ
      1. 1.1.1 全てがひっきりなしに変化していく中で、長期的な計画がどれくらい可能か
      2. 1.1.2 いったん構築したアーキテクチャを経年劣化から防ぐにはどうすればよいか
    2. 1.2 漸進的な変更
    3. 1.3 誘導的な変更
    4. 1.4 アーキテクチャの多重な次元
    5. 1.5 コンウェイの法則
      1. PenultimateWidgetsの紹介と、彼らが逆コンウェイ戦略を取る機会
    6. 1.6 なぜ進化なのか
    7. 1.7 まとめ
  9. 2章 適応度関数
    1. 2.1 適応度関数とは
    2. 2.2 分類
      1. 2.2.1 アトミック vs ホリスティック
      2. 2.2.2 トリガー式 vs 継続的
      3. 2.2.3 静的 vs 動的
      4. 2.2.4 自動 vs 手動
      5. 2.2.5 一時的なもの
      6. 2.2.6 創発よりも意図的
      7. 2.2.7 ドメイン特化なもの
    3. 2.3 早い段階で適応度関数を特定する
    4. 2.4 適応度関数を見直す
      1. PenultimateWidgetsとエンタープライズアーキテクチャスプレッドシート
  10. 3章 漸進的な変更を支える技術
    1. 3.1 構成要素
      1. 3.1.1 テスト可能
      2. 3.1.2 デプロイメントパイプライン
      3. 継続的インテグレーション vs デプロイメントパイプライン
      4. PenultimateWidgetsのデプロイメントパイプライン
      5. 本番環境におけるQA
      6. 3.1.3 適応度関数の分類を組み合わせる
      7. 3.1.4 ケーススタディ:60回/日のデプロイごとのアーキテクチャ再構築
      8. 3.1.5 目標の衝突
      9. 3.1.6 ケーススタディ:PenultimateWidgetsの請求書発行サービスに適応度関数を追加する
    2. 3.2 仮説駆動開発とデータ駆動開発
    3. 3.3 ケーススタディ:移植するのは何か
  11. 4章 アーキテクチャ上の結合
    1. 4.1 モジュール性
    2. 4.2 アーキテクチャ量子と粒度
      1. ドメイン駆動設計の境界づけられたコンテキスト
      2. モノリシックなListing
    3. 4.3 アーキテクチャスタイルの進化可能性
      1. 4.3.1 巨大な泥団子
      2. 4.3.2 モノリス(一枚岩)
      3. 4.3.3 イベント駆動アーキテクチャ
      4. 4.3.4 サービス指向アーキテクチャ
      5. 「無共有」と適切な結合
      6. 4.3.5 「サーバーレス」アーキテクチャ
    4. 4.4 量子の大きさをコントロールする
    5. 4.5 ケーススタディ:コンポーネント循環を防ぐ
  12. 5章 進化的データ
    1. 5.1 進化的なデータベース設計
      1. 5.1.1 スキーマを進化させる
      2. 5.1.2 共有データベース統合
    2. 5.2 不適切なデータ結合
      1. DBA、ベンダー、ツールチェイン
      2. 5.2.1 2相コミットトランザクション
      3. 5.2.2 データの年齢と質
    3. 5.3 ケーススタディ:PenultimateWidgetsのルーティングを進化させる
  13. 6章 進化可能なアーキテクチャの構築
    1. 6.1 仕組み
      1. 6.1.1 ① 進化の影響を受ける次元を特定する
      2. 6.1.2 ② それぞれの次元に対して適応度関数を定義する
      3. 6.1.3 ③ デプロイメントパイプラインを使って適応度関数を自動化する
    2. 6.2 グリーンフィールドプロジェクト
    3. 6.3 既存のアーキテクチャを改良する
      1. 6.3.1 適切な結合と凝集
      2. 6.3.2 開発プラクティス
      3. 6.3.3 適応度関数
      4. リファクタリングと再構築
      5. 6.3.4 COTSとの関わり合い
    4. 6.4 アーキテクチャの移行
      1. 6.4.1 移行手順
      2. 6.4.2 モジュール相互作用を進化させる
    5. 6.5 進化的アーキテクチャ構築のための手引き
      1. 6.5.1 不要な変数を取り除く
      2. スノーフレークの危険性
      3. 6.5.2 決定を可逆にする
      4. 6.5.3 予測可能ではなく進化可能を選ぶ
      5. 6.5.4 腐敗防止層を構築する
      6. 6.5.5 ケーススタディ:サービステンプレート
      7. 6.5.6 犠牲的アーキテクチャの構築
      8. 6.5.7 外部の変更を軽減する
      9. インターネットを壊した11行のコード
      10. 6.5.8 ライブラリのアップデートとフレームワークのアップデート
      11. 6.5.9 スナップショットよりも継続的デリバリーを選ぶ
      12. 6.5.10 内部的にサービスをバージョン付けする
    6. 6.6 ケーススタディ:PenultimateWidgetsの評価サービスの進化
  14. 7章 進化的アーキテクチャの落とし穴とアンチパターン
    1. 7.1 技術アーキテクチャ
      1. 7.1.1 アンチパターン:ベンダーキング
      2. 7.1.2 落とし穴:抽象化の欠如
      3. 7.1.3 アンチパターン:ラスト10%の罠
      4. IBMのサンフランシスコプロジェクト
      5. 7.1.4 アンチパターン:コード再利用の乱用
      6. 7.1.5 ケーススタディ:PenultimateWidgetsにおける再利用
      7. 7.1.6 落とし穴:レジュメ駆動開発
    2. 7.2 漸進的な変更
      1. 7.2.1 アンチパターン:不適切なガバナンス
      2. 強制的な分離
      3. 7.2.2 ケーススタディ:PenultimateWidgetsにおけるゴルディロックスガバナンス
      4. 7.2.3 落とし穴:リリース速度の欠如
    3. 7.3 ビジネス上の関心事
      1. 7.3.1 落とし穴:製品のカスタマイズ
      2. 7.3.2 アンチパターン:レポート機能
      3. 7.3.3 落とし穴:計画範囲
  15. 8章 進化的アーキテクチャの実践
    1. 8.1 組織的要因
      1. 8.1.1 機能横断型チーム
      2. DevOpsの自動化による新しいリソースの発見
      3. 8.1.2 ビジネス能力を中心とした組織化
      4. 8.1.3 プロジェクトよりもプロダクト
      5. Amazonの「2枚のピザ」チーム
      6. 8.1.4 外部変化の取り扱い
      7. 8.1.5 チームメンバー間の結びつき
    2. 8.2 チーム結合特性
      1. 8.2.1 文化
      2. 8.2.2 実験の文化
    3. 8.3 CFOと予算
    4. 8.4 企業規模の適応度関数を構築する
      1. ケーススタディ:オープンソースライブラリの合法性
      2. 8.4.1 ケーススタディ:プラットフォームとしてのPenultimateWidgets
    5. 8.5 どこから始めるか
      1. 8.5.1 低い位置にぶらさがったフルーツ
      2. 8.5.2 最大限の価値
      3. 8.5.3 テスト
      4. 8.5.4 インフラストラクチャ
      5. インフラストラクチャはアーキテクチャに影響を与える
      6. 8.5.5 ケーススタディ:PenultimateWidgetsにおけるエンタープライズアーキテクチャ
    6. 8.6 将来の展望
      1. 8.6.1 AIを使った適応度関数
      2. 8.6.2 生成的テスト
    7. 8.7 なぜやるか(あるいは、なぜやらないか)
      1. 8.7.1 企業が進化的アーキテクチャの構築を決断すべきなのはなぜか
      2. 8.7.2 ケーススタディ:PenultimateWidgetsにおける選択的なスケール
      3. 8.7.3 企業が進化的アーキテクチャの構築を決断すべきでないのはなぜか
      4. 8.7.4 他者の説得
      5. 8.7.5 ケーススタディ:コンサルティング柔道
    8. 8.8 ビジネスケース
      1. 8.8.1 「未来はすでにここにある」
      2. 8.8.2 壊すことなく素早く動く
      3. 8.8.3 リスクを減らす
      4. 8.8.4 新しい能力
    9. 8.9 進化的アーキテクチャの構築
  16. 参考文献
  17. 著者・訳者紹介
  18. 奥付

Product information

  • Title: 進化的アーキテクチャ ―絶え間ない変化を支える
  • Author(s): Neal Ford, Rebecca Parsons, Patrick Kua, 島田 浩二
  • Release date: August 2018
  • Publisher(s): O'Reilly Japan, Inc.
  • ISBN: 9784873118567

You might also like

book

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化

by Susan J. Fowler, 佐藤 直生, 長尾 高弘

UberのSRE(サイト信頼性エンジニア、サイトリライアビリティエンジニア)として、マイクロサービスの本番対応向上を担当していた著者が、その取り組みから得られた知見をまとめたものです。モノリス(一枚岩)を複数のマイクロサービスに分割した後に、安定性、信頼性、スケーラビリティ、耐障害性、パフォーマンス、監視、ドキュメント、大惨事対応を備えたシステムにするために必要な原則と標準に焦点を当て、本番対応力のあるマイクロサービスを構築する手法を紹介します。本書で採用している原則と標準は、マイクロサービスだけなく多くのサービスやアプリケーションの改善にも威力を発揮します。

book

デザインスプリント ―プロダクトを成功に導く短期集中実践ガイド

by Richard Banfield, C. Todd Lombardo, Trace Wax, 安藤 幸央, 佐藤 伸哉, 牧野 聡

本書はGV(旧Google Ventures)およびGoogleで提唱しているデザイン思考「デザインスプリント」の概念とその手順を実践的に解説。デザインスプリントではプロダクトやサービスのアイデアを短時間で作り上げ、ユーザーに示して評価してもらい、アイデア創出からプロトタイピング、ユーザーテストと評価までをわずか5日間で完了させるためのプロセスが定められています。本書では組織でデザインスプリントを実践するために必要な事柄を紹介し、多くのリソースを投入する前にプロダクトやサービスのアイデアを検討し、チームメンバー、ステークホルダー、そしてユーザーを巻き込みながら短期間でより良いユーザー体験を作り上げる方法を伝授します。

book

データサイエンス講義

by Rachel Schutt, Cathy O'Neil, 瀬戸山 雅人, 石井 弓美子, 河内 崇, 河内 真理子, 古畠 敦, 木下 哲也, 竹田 正和, 佐藤 正士, 望月 啓充

コロンビア大学のデータサイエンス入門講義をベースとした本書では、データサイエンスを行う上で、どのようなプロセスが必要か、データサイエンティストとしてはどのようなスキルセットが必要で、どのような思考方法を選択する必要があるのかを実例とともに紹介します。Google、Microsoft、Facebookをはじめとした有名企業で使われているアルゴリズムや分析手法の紹介など、興味深い話題や事例を豊富に収録。幅広い解説で、データサイエンティストの参考になるトピックが満載の一冊です。

book

Unityによるモバイルゲーム開発 ―作りながら学ぶ2D/3Dゲームプログラミング入門

by Jon Manning, Paris Buttfield-Addison, 鈴木 久貴, あんどうやすし, 江川 崇, 安藤 幸央, 高橋 憲一

第I部でUnityの基本を押さえたあと、第II部と第III部でAndroidとiOSモバイル端末向けの2Dゲームと3Dゲームを開発します。この2つのゲームを作ることで、初学者でも本書を通してUnityによるモバイルゲーム開発の基本を体系的に学べます。第IV部はUnityで開発するなら知っておきたい機能や情報源です。「本格的なゲーム」を2つ作る過程でUnityの機能を無理なく学べる本書は、Unityの各機能を説明するためにサンプルゲームをただたくさん作る内容の書籍とは異なり、その先を見据えた本格的な入門書です。日本語版では、Unity Hubの使い方とVisual Studio 2017 Communityによるデバッグについての解説を巻末付録として収録しました。