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

【地域おこし勉強会 第3回】ソフトなソフトウェアを作る【2023_10_25】

hirotask
October 20, 2023
20

【地域おこし勉強会 第3回】ソフトなソフトウェアを作る【2023_10_25】

hirotask

October 20, 2023
Tweet

Transcript

  1. なぜ我々はアーキテクチャの目的を満たせないのか • 「あとで設計を綺麗にすればいい」という思考 ◦ 市場(顧客、ユーザー)からの要望は絶え間ない ◦ そのため、新機能の開発に追われてきれいにすることができない • アーキテクチャが綺麗でなくても売上は上がる ◦

    「ちゃんと動く」ことを満たせていれば顧客はひとまず OKを出す • 人と時間をかければ綺麗なプログラムでなくても改修可能(ある程度) ◦ しかし、生産性はどんどん落ちていく 負のスパイラルへ
  2. ソフトウェアアーキテクチャとは? • 2つの価値のうち「構造」を実現するもの ◦ 決して神秘的なものではない • アーキテクチャの目的(2回目) ◦ システムを適切に動作させること ◦

    システムのライフサイクル(理解→開発→デプロイ→保守・運用)のコストを最小 限に抑える ◦ システムを安定して継続させる • どのようにすれば、この目的が実現できるのか? ◦ →選択肢を残しておく。 ◦ 詳細非依存 ◦ 独立化
  3. 詳細非依存 • 詳細を早期に決定してしまい、詳細と密結合している状態であると何が起こるの か? ◦ 依存先の詳細(デバイス・DB・UI等)の変更があったときに改修コストが大きく なってしまう ◦ システムが安定しない、システムのライフサイクルのコストが高くなる •

    そのため、はじめから1つの詳細の選択肢のみにこだわったアーキテクチャならば ソフトにはならない(=簡単には変更できない) • しかし、チームの規模が小さく強固な構造を望んでいないプロジェクトではアーキテ クチャの構造が逆に障害となる ◦ →緊急・重要の話と強く関連
  4. 各ライフサイクルの要素の独立化 • 独立な開発 ◦ コンポーネントを明確に切り離す ◦ もしユースケースが切り離されていれば、異なるユースケース間のビジネスロ ジックの実装で互いが邪魔になる可能性が低い • 独立なデプロイ

    ◦ もしユースケースやコンポーネントが切り離されていれば、稼働するシステム で変更したい要素をホットスワップ(=稼働させたまま置き換える)することも可 能 ◦ 新しいユースケースを追加するときは、その他の部分はそのままで新しいjar ファイル等を追加するだけになる • 独立な保守・運用 ◦ それぞれ異なるサーバーに配置して繋げる(e.g. マイクロサービス等)
  5. 勉強会のまとめ • 緊急と重要は違う • 重要な価値を実現するもの→ソフトウェアアーキテクチャ • ソフトウェアアーキテクチャの目的 ◦ システムを適切に動作させる ◦

    システムのライフサイクルのコストを最小限に抑える ◦ システムを安定的に継続させる • ソフトウェアアーキテクチャの目的実現のために必要なこと ◦ 詳細非依存 ◦ 独立化