この記事の3行まとめ
- ✓システム設計には技術力だけでなく「哲学」が必要であること
- ✓DFD・ERD・デザインパターンなど、13年の実務で実際に使ってきた設計手法の考え方
- ✓完璧を目指すのではなく「ちょうどいい」を見極める設計判断のバランス感覚
なぜ設計に「哲学」が必要か
コーヒー豆は、焙煎の深さで味がまったく変わる。浅煎りの酸味、深煎りの苦味。同じ豆でも、火の入れ方ひとつで別物になる。
システム設計も同じだと思う。同じ要件でも、設計の「深さ」と「角度」で、できあがるシステムの品質はまったく変わる。
13年間、インフラエンジニアからWeb開発、プロジェクトリーダーへとキャリアを歩んできた。その過程で何度も感じたのは、技術力だけではいいシステムは作れないということだ。
優れたフレームワークを使えば、「動くもの」は比較的すぐにできる。しかし「保守しやすいもの」「変更に強いもの」「チームで共有できるもの」を作るには、技術の奥にある考え方——つまり哲学が必要になる。
なぜこの設計にしたのか。なぜこのパターンを選んだのか。その「なぜ」を語れる設計者でありたいと、ずっと思ってきた。
私の設計哲学
「読む → 試す → 仕組み化」——これは私の学び方のサイクルだが、設計にもそのまま当てはまる。本で学んだパターンを実務で試し、チームが迷わない仕組みに落とし込む。この繰り返しが、設計の引き出しを増やしてくれた。
地図を描く——多角的にシステムを捉える
初めて訪れる街を歩くとき、地図がなければ不安だ。システム開発も同じで、全体像が見えなければ設計判断を誤る。
ただし、システムの地図は一枚では足りない。データの流れ、エンティティの関係、プロセスの順序、ユーザーの行動——それぞれ異なる視点から描く必要がある。
実際のプロジェクトでは、DFDでデータの流れを、ERDで関係性を、それぞれ異なる角度からシステムを照らしてきた。UMLのクラス図やシーケンス図で設計の骨格を可視化し、BPMNで業務フロー全体を俯瞰する。
どこへ行くか
関係性を描く
振る舞いを形式化
全体像を描く
UMTP L2認定を取得したのも、このモデリング力を体系的に鍛えたかったからだ。資格のための勉強ではなく、「どう描けばチーム全員に伝わるか」という問いの答えを探す過程だった。
地図は描いた本人だけが読めても意味がない。設計図も同じだ。新しいメンバーが見て「なるほど、こういう構造か」と理解できる設計——それが私の目指すモデリングだ。
時計仕掛けの設計——モジュールの美学
精密な時計の内部を見たことがあるだろうか。無数の歯車が噛み合い、それぞれが正確な役割を果たしている。一つの歯車を交換しても、全体は止まらない。
優れたシステム設計にも同じことが言える。各モジュールが独立した役割を持ち、交換可能であること——いわゆる「疎結合・高凝集」の原則だ。
私がこの原則を最も実感したのは、Adapterパターンを使った外部API統合基盤の設計だった。異なる仕様を持つ複数のAPIを統一インターフェースで抽象化する。具体的な通信先が変わっても、呼び出し側のコードは一切変更しなくていい。
実務で使ってきたパターン
- ▸Adapter — 外部API統合。異なるインターフェースを統一的に扱う
- ▸Repository — データアクセスの抽象化。DBの変更がビジネスロジックに影響しない
- ▸Service層分離 — ビジネスロジックをControllerから切り離し、テスタビリティを確保
EC-CUBE4のプラグイン開発でも、この考え方は活きた。20本以上のプラグインを単独で設計・実装する中で、Open/Closed原則——「拡張に対して開き、修正に対して閉じる」を強く意識するようになった。プラグインとは本質的に、本体を壊さずに機能を追加する仕組みだ。まさにOpen/Closedの体現だと思う。
デザインパターンは「暗記するもの」ではなく、「なぜその形になるのか」を理解して初めて使えるものだ。本で読んだパターンを実務で試し、うまくいった理由と失敗した理由を振り返る。その繰り返しが、設計の筋力を育ててくれた。
「ちょうどいい」を見極める
若手の頃は「完璧な設計」を目指していた。あらゆるケースを想定し、すべてを抽象化し、変更に耐えうるアーキテクチャを作ろうとした。
しかし実務を重ねるほど、過剰な設計はかえって害になることを学んだ。使わない拡張ポイント、読み解けない抽象レイヤー、メンテナンスコストだけが膨らむ複雑な構造——「念のため」の設計が、チームの足を引っ張ることがある。
Good Enoughという考え方がある。「十分に良い」で止める勇気。これは妥協ではない。今の要件と将来の変更可能性を見極めたうえでの判断だ。
設計判断の3つの問い
- 1.この抽象化は、今後半年以内に本当に必要か?
- 2.新しいメンバーが見て、30分で理解できるか?
- 3.変更が必要になったとき、どこを触ればいいか明確か?
マルチテナントアーキテクチャの設計でも、この「ちょうどいい」の見極めが鍵だった。テナントごとのデータ分離をどこまで厳密にやるか。共通機能と個別カスタマイズの境界をどこに引くか。正解は一つではなく、プロジェクトの制約の中で最善を選ぶことが設計者の仕事だった。
「読む → 試す → 仕組み化」——この「仕組み化」のフェーズでは、シンプルさを最優先にしている。仕組みが複雑であれば、それは仕組みとして機能しない。
設計は航海である
チェスの名手は、最初の数手で勝敗を見通すと言われる。しかしシステム開発では、最初にすべてを見通せることはまずない。要件は変わり、技術的制約が見つかり、想定外の使い方が発見される。
だからこそ、設計は航海のように進めるものだと考えている。目的地(ゴール)は決めるが、航路は柔軟に変更する。嵐(リスク)に備え、常に次の寄港地(マイルストーン)を意識する。
実務では、プロトタイプを早い段階で作ることを心がけてきた。完璧な設計書を書いてから実装に入るのではなく、手を動かして見えてくることを設計にフィードバックする。顧客との打ち合わせでも、動くものを見せたほうが話が進む。
医療機関向け在庫管理システムの開発では、要件整理と並行してプロトタイプを作り、画面を見せながら仕様を固めていった。「こういう動きですか?」と聞くより、「この画面で合っていますか?」と見せるほうが、ずっと正確な合意が取れた。
航海のための道具
- ▸プロトタイプ — 早く作って、早く壊して、早く学ぶ
- ▸リスク管理 — 技術的な不確定要素を先に検証する
- ▸反復的な改善 — 一度で完成させず、段階的に品質を上げる
Docker開発環境の構築・標準化もこの発想だった。「いつでも壊してやり直せる環境」があれば、試行錯誤のコストが下がる。航海にたとえるなら、嵐で壊れてもすぐに修繕できる船を持つようなものだ。
品質という城壁
城壁は、攻められたときに初めてその価値がわかる。システムの品質も同じだ。問題が起きなかったとき、品質は見えない。しかし問題が起きたとき、品質がなければすべてが崩れる。
テスト戦略は設計の一部だと考えている。JSTQB認定テスト技術者資格を取得したのも、テストを「開発の後工程」ではなく「設計の構成要素」として捉えたかったからだ。
Service層を分離する設計は、テスタビリティに直結する。ビジネスロジックがControllerに埋め込まれていたら、テストは難しい。しかしServiceクラスとして独立していれば、入力と出力を定義してテストできる。
品質を支える設計の工夫
- ✓テスト容易性を意識した層分離(Controller / Service / Repository)
- ✓コードレビューでの「設計意図」の共有
- ✓命名規則やディレクトリ構成による暗黙知の形式知化
- ✓Gitブランチ戦略による変更の追跡可能性
レビューの場で大切にしているのは、「なぜこの設計にしたのか」を言語化することだ。コードの正しさだけでなく、設計判断の根拠をチームで共有する。それが、属人化を防ぎ、チーム全体の設計力を引き上げる。
品質は、華やかさとは無縁だ。しかし城壁が堅牢であればこそ、中で暮らす人々——ユーザーやチームメンバー——は安心して過ごせる。その見えない安心感を作ることが、設計者の仕事だと思っている。
終わりのないサイクル
システムは「完成」しない。リリースした瞬間から、変更の要求が始まる。新しい機能の追加、パフォーマンスの改善、セキュリティパッチ。生きているシステムは常に進化を求められる。
設計者もまた、完成しない。13年やってきて、ようやく「自分がまだ知らないことの広さ」が見えてきた気がする。
累計900冊を超える読書、13の技術資格。数字だけ見ると多いように思えるかもしれないが、本質は量ではない。「読む → 試す → 仕組み化」のサイクルを止めないこと——それだけが、設計者としての自分を更新し続ける唯一の方法だと思っている。
インフラの世界で学んだ堅牢さの重要性。Web開発で身につけた柔軟なアーキテクチャ設計。プロジェクトリーダーとして得た、技術と人をつなぐ視点。キャリアの各フェーズで得たものが、今の設計判断の土台になっている。
学びのサイクル
書籍で学んだ概念を実務で検証し、チームで再利用できる形に整える。このサイクルは13年間変わっていない。
技術は移り変わる。しかし設計の原則——疎結合、関心の分離、シンプルさの追求——は時代を超えて通用する。それらを身につけるには、学び続けるしかない。
「コードは詩であり、
アーキテクチャは哲学である」
一行一行のコードに意図を込め、全体の構造に思想を宿す。それが、私の考えるシステムアーキテクトの姿です。完璧ではなく、誠実に。これからもこのサイクルを回し続けます。
—— しきぴょんた