Slide 1

Slide 1 text

ソフトウェア設計とAI技術の活用 2025年7月18日 有限会社システム設計 増田 亨 エンジニアの事業貢献を支援するカンファレンス Developers Summit 2025 Summer

Slide 2

Slide 2 text

自己紹介 専門領域 • 業務系アプリケーションの開発 最近の仕事 • 大きな泥団子退治のアドバイザ • エンジニアの成長支援 2 増田 亨(masuda220) 著書(2017) 訳書(2024) *1 *2 *1 増田 亨(2017) 『現場で役立つシステム設計の原則』技術評論社 *2 Vlad Khononov(著) 増田 亨、綿引 琢磨(訳) 2024 『ドメイン駆動設計をはじめよう』オライリージャパン

Slide 3

Slide 3 text

お話しすること ①ソフトウェア産業と技術革新 ②ソフトウェア設計の基本スキル ③設計スキルとAI技術の活用 3

Slide 4

Slide 4 text

4 ①ソフトウェア産業と技術革新

Slide 5

Slide 5 text

ソフトウェア産業はゆっくり変化する • 経験的に、新しい技術がソフトウェア産業全体に 急速に普及することはない • 「革新的技術」の多くは短命で表舞台から消えていく 5 ソフトウェア産業全体を変える 本当に革新的な技術は じわじわと時間をかけて広がっていく

Slide 6

Slide 6 text

広い範囲の変化には時間がかかる 6 暗黙知の蓄積 形式知の 発生と流通 広い範囲で 実践の試み 「革新的な」技術を どこにどう使えば どんな効果があるか 先駆者の試行錯誤 効果や課題など 暗黙知の言語化 書籍などで体系化 形式知として流通 さまざまな個別状況の 実践例に触れる機会が増加 その結果 有力な選択肢に変化

Slide 7

Slide 7 text

社会と技術の相互作用に時間がかかる • 新しい技術が世の中に広がるのは、社会的要素と技術的要素が 相互に影響しあいながら、全体として複雑なシステムが形成さ れていく(sociotechnical system) • 社会的要素(人の感情、組織の文化、経済的な損得勘定など) が技術の受け入れや利用方法に大きく影響する • 別の言い方をすると、「最新」の技術とは、まだ社会的要素と の相互作用が不十分な段階の技術 7

Slide 8

Slide 8 text

AI技術 • 技術的要素として発展途上(進化中) • 社会的要素との相互作用がはじまったばかり • AI技術と社会的要素がどのように相互作用し、社会システムや ソフトウェア産業がどのように変わっていくかを興味を持って 眺めている(幕を開けたばかりのAI劇場の観客) • 人の行動パターンや社会の仕組みがAI技術によって急激に大き く変わることはないのかな、と思っている 8

Slide 9

Slide 9 text

9 ②ソフトウェア設計の基本スキル

Slide 10

Slide 10 text

ソフトウェア設計の課題 • ソフトウェアは複雑である • ソフトウェアは変化を繰り返す • ソフトウェアの設計に使える時間は限られている 10

Slide 11

Slide 11 text

課題:ソフトウェアシステムは複雑である • 人の認知能力をはるかに超える複雑さ • 一度に全体を考えられない • 認知できる単位に分解しつつ、全体をうまく組み立てる 11

Slide 12

Slide 12 text

課題:ソフトウェアシステムは変化を繰り返す さまざまな状況の変化に対応するための修正と拡張 • 顧客の変化、競合の変化、サプライヤーの変化 • 事業のやり方の変化 • 利用可能技術の変化、技術利用コストの変化 人の学習と成長(状況の変化に適応することで状況が変わる) 12

Slide 13

Slide 13 text

課題:設計に使える時間は限られている あらゆる場所の設計を洗練させることは費用対効果が悪い 優先順位をつけて取り組む • 変更を楽で安全にする価値が高いところを重点的に • そういう価値が高くないところはできるだけ簡略に 優先順位をどう見極めるか? 13

Slide 14

Slide 14 text

ソフトウェア設計 三つの基本スキル 14 モジュール化 事業戦略 の理解 学習と成長 複雑さを 分解 優先順位 見極め 状況変化に 適応

Slide 15

Slide 15 text

15 モジュール化

Slide 16

Slide 16 text

モジュール化 • モジュール化(関心の分離、抽象化、構造化) • 50年以上前から言われ続けるソフトウェア設計の基本 • アーキテクチャスタイル、設計原則、設計パターン、実装パ ターンは、いずれもモジュール化のバリエーション • 形式知として理解できても、実践知として活用できない • モジュール化の失敗 ⇒ 大きな泥団子 16

Slide 17

Slide 17 text

モジュール化のエッセンス 17 混在 断片化 分離 集約 重複 一元化 いろいろ同時に考える 異なる関心事は 別モジュールに あちこちを同時に考える 関連が強い関心事は モジュールに集める あちこちで同じことを考える 同じ関心事は ただ一つのモジュールで

Slide 18

Slide 18 text

18 事業戦略の理解

Slide 19

Slide 19 text

事業戦略を理解してソフトウェアを設計する デジタル化の進展により、事業活動のあらゆる領域でソフトウェ アが使われる。その結果、 ➢ソフトウェアエンジニアが事業戦略を理解して判断し行動する ことが直接的に事業価値を生み出す ➢ソフトウェアエンジニアが事業戦略を理解せずに判断し行動す ることが直接的に事業の損失になる 19

Slide 20

Slide 20 text

事業戦略とソフトウェア実装を結びつける 事業戦略(差別化戦略)に基づいて 設計の優先順位を判断し、技術選定する そのためのガイドブック *1 Vlad Khononov(著) 増田 亨、綿引 琢磨(訳) 2024 『ドメイン駆動設計をはじめよう』オライリージャパン *1

Slide 21

Slide 21 text

設計の優先順位の判断 21 競合他社との差別化 中核の 業務領域 業務ロジック の複雑さ 優先的に 取り組む 補完 一般 簡略に済ませる 模倣、流用、購入

Slide 22

Slide 22 text

事業戦略とソフトウェアをつなげて考える 22 差別化戦略 高業績を持続 させるための 基本方針 絵にかいた餅?

Slide 23

Slide 23 text

事業戦略とソフトウェアをつなげて考える 23 差別化戦略 ビジネス ルール 高業績を持続 させるための 基本方針 差別化を 実現するための さまざまな決め事 具体化 戦略を実行するために 適切な活動を刺激し 不適切な活動を制約する

Slide 24

Slide 24 text

事業戦略とソフトウェアをつなげて考える 24 差別化戦略 ビジネス ルール 業務 ロジック 高業績を持続 させるための 基本方針 差別化を 実現するための さまざまな決め事 ビジネスルールに 基づく計算判断 (コード表現) 具体化 実装 ソフトウェアの中核

Slide 25

Slide 25 text

事業戦略の基本を学べる入門書 25 【エッセンシャル版】 独自性で競争するという考え方 差別化戦略の条件 ・戦略の核 独自価値の創造 ・戦略のかすがい 排他的選択 ・戦略の増幅装置 適合性 ・戦略の実現要因 継続性 事業活動は、ソフトウェアシステムよりも複雑で変動要素が多いシステム 複雑なシステムの分析とモデル化の手法として読んでも参考になる *1 ジョアン・マグレッタ(著) 桜井 祐子(訳) 2012 『〔エッセンシャル版〕マイケル・ポーターの競争戦略』早川書房 *1

Slide 26

Slide 26 text

26 学習と成長

Slide 27

Slide 27 text

学びのエキスパートになる 27 ソフトウェア開発は発見と学びの連 続である 「効率的」で「経済的」に開発する ためには、学び続けることが必要 *1 デイビッド・ファーリー(著) 長尾 高弘(訳) 2022 『継続的デリバリーのソフトウェア工学』日経BP *1 *1

Slide 28

Slide 28 text

ソフトウェアエンジニアの学習と成長 最初は、誰もが初学者 • 最初は、わけがわからないことだらけ • どんなに学んでも、やっぱりわからない だから学び続ける • 基本をたいせつに • 視野の広さ、視点の多さをたいせつに 異なる知見を持ち寄って、協働して共創する 28

Slide 29

Slide 29 text

何を学ぶと成長できるか(何が足りないか) 基礎 • プログラミング(手続き抽象、データ抽象、関数抽象、不変) • OSの仕組み、ネットワークの仕組み、データベースの仕組み 設計原則 • モジュール化、関心の分離、抽象化、構造化 全体像のつかみ方 • システム全体、開発プロセス全体、事業活動全体 探求スキル • 観察、実験、文献調査、現地調査 協働スキル • 意図の伝達、他者の視点と感情の理解、課題の認識合わせ、解決策の提案 29

Slide 30

Slide 30 text

どう学ぶか • 実践による学び • 協働による新たな知識の共創 • 書籍などから良質の形式知を取り込む • 文脈を翻訳しながら自分の暗黙知として内面化する 30

Slide 31

Slide 31 text

どう学ぶか 31 手、目、耳を働かせながら 暗黙知(体験知、身体知)の 量を増やし、質をあげる 実践による 学び

Slide 32

Slide 32 text

どう学ぶか 32 手、目、耳を働かせながら 暗黙知(体験知、身体知)の 量を増やし、質をあげる 実践による 学び 協働して 学ぶ 異なる経験知を 持ち寄って 新たな知識を 共創する

Slide 33

Slide 33 text

どう学ぶか 33 手、目、耳を働かせながら 暗黙知(体験知、身体知)の 量を増やし、質をあげる 良質の形式知 から学ぶ 実践による 学び 協働して 学ぶ 書籍などで 体系的に整理され 言語化と可視化された 実践知 異なる経験知を 持ち寄って 新たな知識を 共創する

Slide 34

Slide 34 text

異なる文脈の知識を翻訳して取り込む 文脈の違いを理解する • 自分が学び成長してきた文脈(自分固有の経験知) • 書籍など形式知の文脈(抽象化・一般化された他者の経験知) • 他者が学び成長してきた文脈(他者固有の経験知) 文脈を翻訳しながら自分の暗黙知として内面化する • 文脈の違いを意識して自分の経験知と対比し関連づける (協働スキルの基本) 34

Slide 35

Slide 35 text

35 ③設計スキルとAI技術の活用

Slide 36

Slide 36 text

どちらのエンジニアがAI技術を活用できるか 36 ソフトウェア設計の 知識と経験が豊富 ソフトウェア設計の 知識と経験が貧弱

Slide 37

Slide 37 text

AI技術について • ソフトウェア設計の考え方とやり方を学び、経験を通 じて設計技能を磨くことは、今まで以上に価値が高い • これまで大きな泥団子を作ってきた組織は、AI技術を 使って大きな泥団子を作る (設計スキルの不足) 37

Slide 38

Slide 38 text

AI技術の使い方 設計判断は自分たちでやる(AIに設計判断させない) AIに良い設計を学習させるために自分たちが設計を学び成長する AI技術の効果的な使い方 • 設計の選択肢を増やす手段 • 設計の実験量を増やす手段 • 設計の評価視点を増やす手段 • 設計を自分で考える時間を増やす手段 • 協働して設計する機会を増やす手段(対話機会を増やす手段) 38

Slide 39

Slide 39 text

ソフトウェア設計 三つの基本スキル 39 モジュール化 事業戦略 の理解 学習と成長 複雑さを 分解 優先順位 見極め 状況変化に 適応