アーキテクチャを設計するといふこと

72.9K Views

December 19, 24

スライド概要

ForkwellLibrary#77 の登壇資料です。
https://forkwell.connpass.com/event/338526/

profile-image

著書『アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築』(翔泳社)

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

アーキテクチャを設計すると いふこと Forkwell Library #77 Dec 19, 2024 Takeshi Yonekubo

2.

whoami X: @tyonekubo mixi2: 同じ Name : Takeshi Yonekubo Software architect

3.

Agenda 1 書籍について 2 アーキテクチャ 3 アーキテクト

4.

1 書籍について Contents of the book

5.

書籍の目次構成 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 第4章 アーキテクチャの実装 第5章 品質保証とテスト 第6章 アーキテクトとしての学習と成長

6.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 1.1 現代のソフトウェア開発をとりまく環境 第4章 アーキテクチャの実装 1.2 アジリティ - 変化への適応能力 1.3 アーキテクチャの重要性 第5章 品質保証とテスト 1.4 アーキテクトとは 第6章 アーキテクトとしての学習と成長 1.5 アーキテクチャ設計の昔と今 1.6 アーキテクトに必要な資質

7.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 2.1 ソフトウェア開発プロセス 第3章 アーキテクチャの設計 2.2 ソフトウェア設計の抽象レベル 第4章 アーキテクチャの実装 2.3 ソフトウェアの設計原則とプラクティス 第5章 品質保証とテスト 2.4 設計パターン 第6章 アーキテクトとしての学習と成長

8.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 3.1 アーキテクチャ設計の概要 第4章 アーキテクチャの実装 3.2 アーキテクチャドライバの特定 第5章 品質保証とテスト 3.3 システムアーキテクチャの選定 第6章 アーキテクトとしての学習と成長 3.4 アプリケーションアーキテクチャの選定 3.5 アーキテクチャの比較評価 3.6 アーキテクチャの文書化

9.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 4.1 実装アクティビティにおけるアーキテクトの役 第4章 アーキテクチャの実装 割 第5章 品質保証とテスト 4.2 開発プロセス標準化 第6章 アーキテクトとしての学習と成長 4.3 ユースケース駆動のアーキテクチャ実装 4.4 アプリケーション基盤の実装 4.5 アプリケーション開発の準備 4.6 構成管理とCI/CD

10.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 第4章 アーキテクチャの実装 第5章 品質保証とテスト 第6章 アーキテクトとしての学習と成長 5.1 アーキテクトと品質保証活動 5.2 機能テストの自動化 5.3 パフォーマンステスト

11.

書籍の内容 第1章 アーキテクトの仕事 第2章 ソフトウェア設計 第3章 アーキテクチャの設計 第4章 アーキテクチャの実装 第5章 品質保証とテスト 第6章 アーキテクトとしての学習と成長 6.1 アーキテクトとして成長するために 6.2 効果的な学習方法 6.3 良書から学ぶ

12.

書籍のコンセプト “「アーキテクティング」について、できるだけ効率的・効果的に体 系立てて学べる ことが必要だと感じています。・・・どう学習を進め ていけばいいか迷わぬよう、羅針盤となるようなものが必要ではな いでしょうか” “本書を読めばアーキテクトとしての仕事を全てこなせるようになる というわけではありません。ですが、アーキテクティングという世 界を探索するにあたって、地図 となるような本を目指して執筆し ました” 筆者によるnote記事: 『アーキテクトの教科書』のまえがきのようなもの https://note.com/yonekubo/n/n3166315b1607

13.

2 アーキテクチャ What is architecture?

14.

一定規模のソフトウェアには アーキテクチャがある

15.

例 コード行数カウンター

16.

コード行数カウンター ● ディレクトリ配下のソースコードの行数をカウントする JavaScriptのCUIプログラム ● 言語ごとにコード行数、コメント行数、空行数、トータル行数を カウントして表形式で結果を出力する

17.

生成AIで出力 ● マークダウン形式で記述したプログラム仕様書を与えて、 CursorのComposer機能でプログラムを生成 ● ガチャ要素はあるが、動作するプログラムを得ることができる –— –— –— プログラム仕様書 index.js メインプログラム config.yml 設定ファイル

18.

アーキテクチャはあるか? 👉 NO

19.

課題 ● 正しく動作するか確認が大変(テストがない) ● コードを追いづらい テストコードがない –— –— –— ベタに書かれている index.js メインプログラム config.yml 設定ファイル

20.

改善 プログラム分割 テストコード

21.

改善版 ● 構造化 fileCounter.js index.js lineCounter.js outputFormatter.js

22.

シンプルだが 「アーキテクチャ」が出現

23.

アーキテクチャの定義 “環境におけるシステムの基本的な概念や特 性が、その要素や関係、および設計と進化の 原則に具現化されたもの” ISO/IEC/IEEE 42010:2011 (日本語訳は発表者による)

24.

なぜ分割するという 設計判断 をしたか? fileCounter.js index.js lineCounter.js outputFormatter.js

25.

価値 苦痛 ❌ わかりづらい ✅ 理解しやすさ ❌ 修正しづらい ✅ 修正しやすさ ❌ テストしづらい ✅ テストしやすさ index.js index.js

26.

品質特性 ● ユーザーが求める機能要求を満たすことが最重要 ● その上で、重要視される品質特性(非機能要求)がある 機能要求 品質特性 理解容易性 コード行数を カウントできる 修正容易性 テスト容易性

27.

アーキテクチャは品質特性を 実現し、ソフトウェアに能力を 与える

28.

品質特性はどこから来る? ● 顧客/ユーザーのコンテキストやニーズによって決まる よく使うツール なので利用し 続けたい 一回使うだけ 動けばOK index.js ✅ 機能適合性 (のみ) ✅ 理解容易性 index.js ✅ 修正容易性 ✅ テスト容易性

29.

ニーズ次第 コード行数カウンターに以下のようなニーズがあったら? ● 複数リポジトリに分散した大規模コードベースを対象に ● 短時間でコード行数を一括集計したい ✅ スケーラビリティ ✅ 時間効率性 Map Input Map Reduce Map Map/Reduceパターンの並行処理 Output

30.

望ましいアーキテクチャは 上位目的次第で変わる

31.

まずは目的の明確化から 『アーキテクトの教科書』図3.1.1 アーキテクチャの四つの側面

32.

再び、アーキテクチャの定義 “環境におけるシステムの基本的な概念や特性 が、その要素 や関係、および設計と進化の原則 に具現化されたもの” 目的 コンセプト 根拠 実現方法 実行指針

33.

3 アーキテクト What does an architect do?

34.

アーキテクティング 一連のアクティビティ=アーキテクティング architect [名詞] : architectureを設計する人 architect [動詞] : architectureを設計する architecting [動名詞] : architectureを設計する行為

35.

テックリードとアーキテクト テックリード “テックリードは、ソフトウェア企業やテック企業で技術者チームを監督する専門 家です。テックリードはソフトウェア開発チームやソフトウェアエンジニアリング チームを率いて、ソフトウェア開発、エンジニアリング作業、製品リリースに関わる 技術的課題の解決にあたることがしばしばあります。 テックリードには、ソフトウェア開発における豊富な専門的経験と技術に対する 深い理解が必要ですが、それだけでなく、チームを効果的にリードし他者と協力 することができる人柄と能力も必要です。” "A Guide to Technical Leads: What They Do and How to Become One" https://www.indeed.com/career-advice/finding-a-job/technical-lead (日本語訳は発表者による)

36.

テックリードとアーキテクト アーキテクト “情報システム戦略を具体化するための情報システムの構造の設計や、開発に 必要となる要件の定義、システム方式の設計及び情報システムを開発する業務 に従事し、次の役割を主導的に果たすとともに、下位者を指導する。” IPA 情報処理推進機構 "システムアーキテクト試験" https://www.ipa.go.jp/shiken/kubun/sa.html

37.

テックリードとアーキテクト テックリード 技術力とソフトスキルを駆使し、チームを引っ張る開発リーダー アーキテクト アーキテクティングを行う職種、またはロール

38.

テックリードとアーキテクト ● 大規模開発、専任のアーキテクトやチームを立てることが多 い ● 小規模開発では、テックリードや開発者がアーキテクトのロー ルを分担する

39.

三たび、アーキテクチャの定義 “環境におけるシステムの基本的な概念や特性が、その要素 や関係、および設計と進化の原則 に具現化されたもの” 根拠 実行指針 アーキテクチャを維持し、改善 し、進化させていくためには、全 ての開発者が根幹にある方針を 理解し、ルールに則って開発を 進めていく必要がある

40.

『アーキテクトの教科書』の使い方 設計原則・パターンから 品質保証まで 幅広く学ぶ 初学者 全体感を整理 して俯瞰する 専門的な書籍で 深掘りする 中級〜

41.

アーキテクチャは特殊解 一般解としてのアーキテクチャ 抽出、抽象 アーキテクチャスタイル アーキテクチャパターン 抽象 特定の状況に 知識を適用 具体 評価 実例としてのアーキテクチャ 特殊解としてのアーキテクチャ

42.

学び方 『アーキテクトの 教科書』 2〜4章で学ぶ 経験知 ①自らの経験を通して学ぶ ②他者の経験を見聞きして学 ぶ

43.

まとめ Key Takeaways

44.

まとめ ● アーキテクチャに重要なのは「合目的性」 上位目的と達成すべき目標を明確化した上で、アーキテクチャを形 作っていく必要がある ● アーキテクトのマインドを持つこと アーキテクト、テックリード、開発者、役割が何であれ個々人がアーキテ クトのマインドを持ち、チームとしてアーキテクティングをしよう

45.

ご拝聴ありがとうござ いました follow me at @tyonekubo