アーキテクチャの進化から学ぶ、
プラットフォームエンジニアリングへのアプローチ
鈴⽊雄介
⽇本Javaユーザーグループ
⾃⼰紹介
鈴⽊雄介
• ⽇本Javaユーザーグループ
»CCC運営委員⻑/サブリーダー
• SNS
»@yusuke_arclamp
»http://arclamp.hatenablog.com/
• Graat(グラーツ)
» グロース・アーキテクチャ&チームス株式会社
» 代表取締役 社⻑
• アイムデジタルラボ
» 三越伊勢丹グループ
» 取締役
1
アジェンダ
2
• はじめに
• Agile
• Cloud
• DevOps
• Microservices
• Cloud Native
• Platform
• まとめ
はじめに
DXに必要な能⼒
変化に素早く対応し続ける能⼒
4
企業が競争上の優位性を確⽴するに
は、常に変化する顧客・社会の課題を
とらえ、「素早く」変⾰「し続ける」
能⼒を⾝に付けることが重要である
経済産業省 DXレポート2
https://www.meti.go.jp/press/2020/12/20201228004/20201228004.html
変化に素早く対応し続ける能⼒
ITとして能⼒を発揮する
• どちらも重要ではあるが、右が重要になっていく
5
安定して効率的に
対応し続ける能⼒
変化に素早く
対応し続ける能⼒
変化に素早く対応し続ける能⼒
アーキテクチャの進化から学ぶ
• いかに「変化に素早く対応し続ける能⼒」を発揮するかを
考えるために歴史を学ぼう
»Agile
»Cloud
»DevOps
»Microservices
»Cloud Native
»Platform
6
Agile
Agile
変化へ対応するための開発プロセス
• アジャイルソフトウェア宣⾔(2001)
8
プロセスやツールよりも個⼈と対話を、
包括的なドキュメントよりも動くソフトウェアを、
契約交渉よりも顧客との協調を、
計画に従うことよりも変化への対応を
左記のことがらに価値があることを認めながらも、私たち
は右記のことがらにより価値をおく。
Agile
変化に素早く対応し続ける
• 顧客や社会の変化から、次にやる
べきことを決めて、素早く対応す
るサイクルを回し続けていく
• そのためには「やりたいこと」を
安全に素早く変えられるようにす
る必要がある
9
9
ITも含め
実現する
顧客や
環境の
変化
ビジネスとして
やりたいこと
ITも含め
実現する
顧客や
環境の
変化
ビジネスとして
やりたいこと
ITも含め
実現する
顧客や
環境の
変化
ビジネスとして
やりたいこと
ITも含め
顧客や
環境の
変化
ビジネスとして
やりたいこと
Agile
Scrum
• 電⾞にたとえて理解する
»出発ホームから定期的に出発
»①出発ホームには、乗客が⼀列に並んで待
っている
»②電⾞が来たら、定員まで乗せて出発
»③出発した電⾞は乗り降り禁⽌
»④次の電⾞が来るまで、出発ホームの乗客
は並び替え⾃由
10
出発ホーム
d c b a
出発ホーム
d c b a
出発ホーム
d
c b a
定員:2名
①
f
e
定員:2名
②
③
④
補⾜
対応表
11
電⾞の説明 スクラム⽤語 説明
電⾞の運⾏ スプリント 繰り返し続ける作業期間。1ヶ⽉以内の決まった
⻑さ
出発ホーム プロダクトバックログ これからやりたいことを優先順に並べたリスト
の乗客 プロダクトバックログアイテム そのリストの1⾏
電⾞に乗る スプリントプランニング スプリントの開始時に、このスプリントでやる
ことを決めるイベント
電⾞ スプリントバックログ このスプリントで実施するタスクのリスト。
スプリントプランニングでプロダクトバックロ
グからアイテムを移動させてくる
の乗客 スプリントバックログアイテム そのリストの1⾏
Agile
Scrum
• 「やりたいこと」と「今やるべきこと」
が分離されている
»出発した電⾞は出発ホームを気にしない
▸開発チームはスプリントに集中
▸ビジネス側は、好きに「やりたいこと」を変える
»ウォーターフォールは初期の計画を基準に管
理するため、本質的に変更が苦⼿
▸計画の変更は必ず開発に影響を与える
12
12
開発者
ビジネス
(PO)
案件A
案件B
案件C
案件D
案件F
案件C
案件D
案件E
案件A
案件B
計画
成果
案件F
案件C
案件D
案件E
案件F
案件E
案件D
案件G
ス
プ
リ
ン
ト
期
間
レビュー
案件F
案件D
案件E
案件G
案件F
案件F
案件D
計画
ス
プ
リ
Agile
Agileがもたらしたもの
• ビジネスとITの関係を改善する
»ビジネス側が「やりたいこと」を安全に変更することができる
▸開発チームは、それに影響を受けずに成熟していける
»いつまでに準備すればいいか、いつ出来上がるのかが明確
▸ビジネス側は、それに向けて判断と準備を進めていく
»これを持続可能な状態に維持する
13
Agile
課題:モノリス
• 調整が素早さを削ぐ
»影響調査
»リグレッションテスト
»リリース調整
14
Haystack Rock at 8:30am by Brenda Dobbs
https://www.flickr.com/photos/bugldy99/45583127204/
機能
A
機能
B
機能
C
Cloud
Cloud
巨⼤な仮想化インフラを「利⽤」する
• 2006年:Google社元CEO エリック・シュミットが名付け
»『すべてが雲の中のどこかにあればいい』
• The NIST Definition of Cloud Computing
»必要な時にセルフサービスで利⽤できる
»ネットワークを通じて利⽤できる
»リソースは共有され、必要な分が割り当てられる
»いつでも必要なだけの量を調達することができる
»利⽤状況に応じて課⾦される
16
参考
クラウド・コンピューティングの定義
17
オンデマンド・ セルフサービス
(On-demand self-service)
ユーザは、各サービスの提供者と直接やりとりすることなく、必要に応じ、⾃動的に、サーバーの稼
働時間やネットワークストレージのようなコンピューティング能⼒を⼀⽅的に設定できる。
幅広いネットワークアクセス
(Broad network access)
コンピューティング能⼒は、ネットワークを通じて利⽤可能で、標準的な仕組みで接続可能であり、
そのことにより、様々なシンおよびシッククライアントプラットフォーム(例えばモバイルフォン、
タブレット、ラップトップ コンピュータ、ワークステーション)からの利⽤を可能とする。
リソースの共⽤
(Resource pooling)
サービスの提供者のコンピューティングリソースは集積され、複数のユーザにマルチテナントモデル
を利⽤して提供される。様々な物理的・仮想的リソースは、ユーザの需要に応じてダイナミックに割
り当てられたり 再割り当てされたりする。物理的な所在場所に制約されないという考え⽅で、ユーザ
は⼀般的に、提供されるリソースの正確な所在地を知ったりコントロールしたりできないが、場合に
よってはより抽象的なレベル (例:国、州、データセンタ)で特定可能である。リソースの例として
は、ストレージ、処理能⼒、メモリ、およびネットワーク帯域が挙げられる。
スピーディな拡張性
(Rapid elasticity)
コンピューティング能⼒は、伸縮⾃在に、場合によっては⾃動で割当ておよび提供が可能で、需要に
応じて即座にスケールアウト/スケールインできる。ユーザにとっては、多くの場合、割当てのため
に利⽤可能な能⼒は無尽蔵で、いつでもどんな量でも調達可能のように⾒える。
サービスが 計測可能であること
(Measured Service)
クラウドシステムは、計測能⼒1を利⽤して、サービスの種類(ストレージ、処理能⼒、帯域、実利⽤
中のユーザアカウント数)に適した管理レベルでリソースの利⽤をコントロールし最適化する。リ
ソースの利⽤状況はモニタされ、コントロールされ、報告される。それにより、サービスの利⽤結果
がユーザにもサービス提供者にも明⽰できる。
1. 通常、従量課⾦(pay-per-use)または従量請求
(charge-per-use)ベースで計算される。
The NIST Definition of Cloud Computing
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-145.pdf
⽇本語訳 https://www.ipa.go.jp/files/000025366.pdf
Cloud
Cloudがもたらしたもの
• IaC(Infrastructure as Code)
»インフラ構成をコードで表現できる
»アプリケーションだけではなく、稼働環境を含めてサービスそのも
のがコードになる
• PaaS(Platform as a Service)
»インフラだけではなく、ミドルウェアや実⾏環境もサービス
▸スケールだけではなく、機能性もターンキーで利⽤できる
ü クラスタ、⾃動デプロイ
18
DevOps
DevOps
開発♡運⽤
• 「Devopsdays Ghent 2009」の
開催をきっかけに定着
• 開発と運⽤は仲が悪かった
»最⼤の運⽤リスクは変化の受⼊
»でも、変化に素早く対応し続けられ
るようにならないといけない
20
DevOps
DevOpsがもたらたしたもの
• 運⽤をセルフサービスにする
»素早く対応するに部署間のやり取りは無駄
»開発がツールを使って運⽤作業を実施すればいい
▸インフラ構築、ビルド&デプロイ、スケール変更、監視&予測、障害復旧...
21
成果物
アプリ
Dev Ops 成果物
Dev
SRE
Ops
ツール
インフラ
アプリ
インフラ
DevOpsエンジニア
Microservices
Microservices
マイクロサービスアーキテクチャ
• 2014年:「Microservceis」 by James Lewis
• モノリスを解決する
»機能間での調整を減らせば、全体として変化に対応しやすくなる
▸影響調査、リグレッションテスト、リリース調整
23
機能
A
機能
B
機能
C
機能
A
機能
B
機能
C
Microservices
マイクロサービスの特徴 from “Microservices”
»サービスによるコンポーネント化
»ビジネス視点でのチーム分割
»プロジェクトではなくプロダクト
»スマートなエンドポイントと単純なパイプ(API連携)
»分散ガバナンス(脱標準化)
»分散データ管理
»インフラの⾃動化
»障害のための設計
»進化的設計
24
←DevOpsな部分
←アジャイルな部分
Microservices
http://martinfowler.com/articles/microservices.html
←
疎結合にする
ためのコツ
Microservices
疎結合にする≒変更の伝播を制限する
• 機能的にも⾮機能的にも伝播させない
»WebAPI(同期/⾮同期)を通じて連携する
»データを共有しない
»サーバもデータベースも共有しない
25
サービスA サービスB サービスC
DB A DB B DB C
Microservices
リリース調整を排除する
• 無停⽌リリース(ブルーグリーンデプロイメント)
• 連携先サービスがダウンしても稼働できるようにする
»サーキットブレーカー
26
サービスA
サービスB
v1.0
サービスB
v1.1
サービスA サービスB
障害
障害を伝播
させない
Microservices
Microservicesがもたらしたもの
• ⼤規模システムでアジャイルを回す仕組み
»システムを複数の疎結合なサービス群に分割することで、サービス
単位に独⽴したリズムで変更が可能に
»⼀括再構築ではなく、部分から変えていくことが可能に
27
システムA
機能A
機能B
機能C
システムB
機能D
機能E
機能F
サービスA
サービスB
サービスC
サービスD
サービスE
サービスF
システム全体
補⾜
Microservicesは万能ではない
• GitHubの元CTO Jason Warne⽒
»この10年、アーキテクチャ設計における
最⼤の間違いは「すべてをマイクロサー
ビスにしようとすること」だ
»モノリスからマイクロサービスは以下の
ように連続的だ
»モノリス > アプリ > サービス > マイク
ロサービス
28
https://twitter.com/jasoncwarner/status/1592227285024636928
補⾜
マイクロサービス化に取り組む
• Netflixは2008年からAWS化し、2016年1⽉に移⾏完了
»Netflixのクラウド移⾏が完了 - About Netflix
▸最も簡単な移⾏⽅法はリフトだが、問題や制約もついてくる
▸クラウドネイティブに技術を⾒直し、モノリシックアプリケーションをマイ
クロサービスに移⾏した
▸最後になったのは課⾦や顧客のデータ管理の機能
• 「⼀括再構築でマイクロサービスに取り組む」のは危険
»段階的にマイクロサービス化していく
29
Cloud Native
Cloud Native
Cloud Native
• 2015年:Cloud Native Computing Foundation設⽴
»Kubernetes 1.0のリリースと同時に設⽴
»Cloud Native Definition v1.0
▸クラウドネイティブ技術<中略>の代表例に、コンテナ、サービスメッシュ
、マイクロサービス、イミュータブルインフラストラクチャ、および宣⾔型
API
▸回復性、管理⼒、および可観測性のある疎結合システムが実現
▸堅牢な⾃動化と組み合わせることで、エンジニアはインパクトのある変更を
最⼩限の労⼒で頻繁かつ予測どおりに⾏う
31
CNCF Cloud Native Definition v1.0
https://github.com/cncf/toc/blob/main/DEFINITION.md
Cloud Native Computing Foundation
https://www.cncf.io/
Cloud Native
Cloud Native Trail Map
» コンテナ化
» CI/CD
» オーケストレーション&アプリ定義
» オブザーバビリティ
» サービスメッシュ
» ポリシー、セキュリティ
» 分散データベース&ストレージ
» ストリーミング&メッセージング
» コンテナレジストリ&ランタイム
» ソフトウェアディストリビューシ
ョン
32
Cloud Native Trail Map
https://raw.githubusercontent.com/cncf/trailmap/master/CNCF_TrailMap_latest.pdf
Cloud Native
Cloud Native
Landscape
• 1000近い関連製品
» プロビジョニング
» ランタイム
» オーケストレーション
» サーバレス
» オブザーバビリティ
» プラットフォーム
» ...
33
Kubernetes
Cloud Native
現在進⾏形で様々な技術が成⻑中
• コンテナ+サーバレス
»コンテナを稼働させるためのサーバレス環境
▸Gitレポジトリからデプロイ&スケールまで。常駐型もバッチ型も対応
• サービスメッシュ
»サービス間連携を管理するための仕組み
▸ルーティング、セキュリティ&ポリシー、監視、レジリエンスなど
34
Platform
Platform
プラットフォームとは?
• 2018年: Internal Developer Platform (IDP)
36
内部開発者プラットフォーム (IDP) は、運⽤チームによって構成され、開発
者によって使⽤されます。運⽤チームは、どのリソースをどの環境で、また
はどのような要求で起動するかを指定します。また、アプリケーション構成
のベースライン テンプレートを設定し、アクセス許可を管理します。これに
より、環境やリソースのスピンアップなどの定期的なタスクを⾃動化し、標
準を適⽤することでセットアップの保守が容易になります。開発チームは、
構成の変更、デプロイ、スピンによって⾃律性を獲得します
What is an Internal Developer Platform (IDP)? | Internal Developer Platform
https://internaldeveloperplatform.org/what-is-an-internal-developer-platform/
Platform
DevOpsやMSAのアンチパターン
• チーム/システムが個別に取り組む
37
チームA チームB チームC
DevOps MSA
OPS
Platform
Platformを整備して提供する
• Internal Developer Platform
38
チームA チームB チームC
Platform OPS
DevOps MSA
Platform
Platformの中⾝は?
39
デジタルプラットフォームは、セルフサービスのAPI、
ツール、サービス、知識、サポートの基盤であり、魅⼒的
な社内製品として配置されています。⾃律型デリバリー
チームは、このプラットフォームを利⽤して、調整を減ら
しながら、より速いペースで製品機能を提供することがで
きます。
What I Talk About When I Talk About Platforms (martinfowler.com)
https://martinfowler.com/articles/talk-about-platforms.html
Platform
IDPを構築する
• 認証認可
»IAM、ユーザー管理、権限管理...
• アプリケーション・インフラ構成管理
»コアネットワーク、CI、IaC...
»サーバ、データベース、シークレット...
• パイプライン
»Git、CI、コンテナリポジトリ、無停⽌デプロイ...
• ガイドラインやサポート体制
40
Platform
Platform Engineering
• Platformを構築することに取り組む
41
プラットフォームエンジニアリングは、クラウドネイティブ時代
のソフトウェアエンジニアリング組織のセルフサービス機能を可
能にするツールチェーンとワークフローを設計および構築する分
野です。プラットフォームエンジニアは、アプリケーションのラ
イフサイクル全体の運⽤上の必需品をカバーする「内部開発者プ
ラットフォーム」と呼ばれる統合製品を提供します。
What is platform engineering?
https://platformengineering.org/blog/what-is-platform-engineering
まとめ
まとめ
アーキテクチャの進化を学ぶ
• 年表
»2001 Agile
»2006 Cloud
»2009 DevOps
»2014 Microservices
»2015 Cloud Native/Serverless
»2018 Platform
• 我々は、20年以上取り組んできている
43
まとめ
進化の本質
• 全ては「変化に素早く対応し続ける」ために
»モジュール化における⾼凝集&疎結合は、古来からの基本原則
▸コード → アプリ → サービス
• どんな取り組みにも副作⽤があり、主に⼈間の認知の問題
»技術の進化が、効率的に副作⽤を抑えられるようにしてきた
»ただし、理解せずに使えば、簡単に限界を踏み抜く
44
まとめ
これからのために
• 積み重ねられた進化を無視しない
»特に⽂化的な⼟台は重要
▸アジャイル:ビジネスと開発の関係改善
▸DevOps:開発と運⽤の関係改善
• でも、進化を辿る必要性はない
»先⼈の知恵の塊であるテクノロジーやテクニックは使わせてもらう
»ただし、進化の先端は未成熟であることも理解する
45

アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ