Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ソフトウェア設計の課題・原則・実践技法

Avatar for 増田 亨 増田 亨 PRO
November 21, 2025

 ソフトウェア設計の課題・原則・実践技法

アーキテクチャカンファレンス 2025での発表資料

①ソフトウェア設計の課題
②良い設計を生み出すための基本原則
・変更容易性に焦点を合わせる
・事業活動を理解して設計判断する
③ソフトウェア設計の実践技法
・乱雑なコードの整理整頓

(参考)戦略的なデータマネージメントの実践技法

Avatar for 増田 亨

増田 亨 PRO

November 21, 2025
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

  1. 自己紹介 専門領域 • 業務系アプリケーションの開発 最近の仕事 • 大きな泥団子退治のお手伝い • エンジニアの設計スキル向上のお手伝い 2

    増田 亨(masuda220) 著書(2017) 訳書(2024) *1 *2 *1 増田 亨(2017) 『現場で役立つシステム設計の原則』技術評論社 *2 Vlad Khononov(著) 増田 亨、綿引 琢磨(訳) 2024 『ドメイン駆動設計をはじめよう』オライリージャパン
  2. お話する内容 ① ソフトウェア設計の課題 ② 良い設計を生み出すための基本原則 ✓ 変更容易性に焦点を合わせる ✓ 事業活動を理解して設計判断する ③

    ソフトウェア設計の実践技法 ✓ 乱雑なコードの整理整頓 (参考)戦略的なデータマネージメントの実践技法 3
  3. 事業活動とソフトウェアシステムの連動性 広く連動する あらゆる事業活動のデジタル化が進んでいる 深く連動する • 旧来:データのCRUDと単純な加工(状況判断と行動は人間) • 現在:状況判断・推論・決定をソフトウェアシステムに組み込む 双方向に影響する •

    事業活動の変化がソフトウェアシステムを変化させる • ソフトウェアシステムの変化が事業活動を変化させる • 影響する範囲が広く深い → 相互作用しながらともに発展していく 6
  4. 19 競合他社との差別化 中核の 業務領域 業務ロジック の複雑さ 変更容易性 の改善に 継続的に 取り組む

    簡略に済ませる 模倣または購入 他社と同じ 自社独自 一般 一般または 補完 補完
  5. 業務領域の分類と開発方針の違い 中核 一般 補完 競争優位性 ◎ × 〇 複雑さ ◎

    ◦ × 変化 ◎ × △ 開発方針 独自開発 模倣または 購入 CRUD/ETLの 簡易開発 20
  6. 設計改善(コードの整理整頓)三つのレベル ➢ 小さな設計改善 ➢ 大きな設計改善 ➢ 戦略的な設計改善 • 三つのレベルを並行して進める(段階論ではない) •

    下に行くほど、効果がはっきりするのに時間がかかる • 下に行くほど、良い設計か悪い設計か判断が難しい 28
  7. 小さな設計改善 初級レベル ① 不要なコードを削除する(ノイズを減らす) • コメントアウトされたコード • 使われていない(であろう)コード • 余計なコメント、間違っている(であろう)コメント

    ② チャンキング(異なる関心事の境界を見つける) • 改行を使って、式や文を複数行に分ける • 改行を使って、多数のフィールド変数や多数の文をグループ分けする ③ グループ分けした単位に名前を付ける • 説明用変数を使う( 例:boolean isValid = 数量 > 0 ) • メソッドに抽出する ( 例 boolean isValid() {return 数量 > 0;} 29
  8. 小さな設計改善の参考図書 31 第1部 整頓 第Ⅱ部 管理術 第3章 コードの不吉な臭い 4章~10章 1章

    ちいさくまとめてわかりやすく 2章 場合分けのロジックを整理する
  9. 大きな設計改善(小さな改善を積み重ねる方向) ① 計算判断・出力・入力の三つの関心事を クラスとパッケージを使って切り離す a. 出力のデータ構造に影響された計算判断クラスを作らない b. 入力のデータ構造に影響された計算判断クラスを作らない c. 出力クラス、入力クラスに計算判断ロジックを持ち込まない

    ② アプリケーション特化のデータ型(値オブジェクト、 コレクションオブジェクト、区分オブジェクト)を 使って計算判断ロジックを記述する 計算判断ロジックを記述するクラスでは、プリミティブなデータ型 (int, String, LocalDate, … )とプリミティブな操作を隠蔽する 32
  10. 38 競合他社との差別化 中核の 業務領域 業務ロジック の複雑さ 変更容易性 の改善に 重点的に 取り組む

    簡略に済ませる 模倣または購入 他社と同じ 自社独自 一般 一般または 補完 補完