設計と思想

コードの詩人——
システム設計の美学と哲学

13年の実務で磨いた、設計に対する考え方。
「動くコード」ではなく「保守しやすいコード」を追求してきた道のりを語ります。

2025年 (noteより再編集) 読了 約10分 エンジニア・設計に興味がある方向け

この記事の3行まとめ

  • システム設計には技術力だけでなく「哲学」が必要であること
  • DFD・ERD・デザインパターンなど、13年の実務で実際に使ってきた設計手法の考え方
  • 完璧を目指すのではなく「ちょうどいい」を見極める設計判断のバランス感覚
SECTION 1

なぜ設計に「哲学」が必要か

コーヒー豆は、焙煎の深さで味がまったく変わる。浅煎りの酸味、深煎りの苦味。同じ豆でも、火の入れ方ひとつで別物になる。

システム設計も同じだと思う。同じ要件でも、設計の「深さ」と「角度」で、できあがるシステムの品質はまったく変わる。

13年間、インフラエンジニアからWeb開発、プロジェクトリーダーへとキャリアを歩んできた。その過程で何度も感じたのは、技術力だけではいいシステムは作れないということだ。

優れたフレームワークを使えば、「動くもの」は比較的すぐにできる。しかし「保守しやすいもの」「変更に強いもの」「チームで共有できるもの」を作るには、技術の奥にある考え方——つまり哲学が必要になる。

なぜこの設計にしたのか。なぜこのパターンを選んだのか。その「なぜ」を語れる設計者でありたいと、ずっと思ってきた。

私の設計哲学

「読む → 試す → 仕組み化」——これは私の学び方のサイクルだが、設計にもそのまま当てはまる。本で学んだパターンを実務で試し、チームが迷わない仕組みに落とし込む。この繰り返しが、設計の引き出しを増やしてくれた。

SECTION 2

地図を描く——多角的にシステムを捉える

初めて訪れる街を歩くとき、地図がなければ不安だ。システム開発も同じで、全体像が見えなければ設計判断を誤る。

ただし、システムの地図は一枚では足りない。データの流れ、エンティティの関係、プロセスの順序、ユーザーの行動——それぞれ異なる視点から描く必要がある。

実際のプロジェクトでは、DFDでデータの流れを、ERDで関係性を、それぞれ異なる角度からシステムを照らしてきた。UMLのクラス図やシーケンス図で設計の骨格を可視化し、BPMNで業務フロー全体を俯瞰する。

DFD
データがどこから来て
どこへ行くか
ERD
データ同士の
関係性を描く
UML
設計の構造と
振る舞いを形式化
BPMN
業務プロセスの
全体像を描く

UMTP L2認定を取得したのも、このモデリング力を体系的に鍛えたかったからだ。資格のための勉強ではなく、「どう描けばチーム全員に伝わるか」という問いの答えを探す過程だった。

地図は描いた本人だけが読めても意味がない。設計図も同じだ。新しいメンバーが見て「なるほど、こういう構造か」と理解できる設計——それが私の目指すモデリングだ。

SECTION 3

時計仕掛けの設計——モジュールの美学

精密な時計の内部を見たことがあるだろうか。無数の歯車が噛み合い、それぞれが正確な役割を果たしている。一つの歯車を交換しても、全体は止まらない。

優れたシステム設計にも同じことが言える。各モジュールが独立した役割を持ち、交換可能であること——いわゆる「疎結合・高凝集」の原則だ。

私がこの原則を最も実感したのは、Adapterパターンを使った外部API統合基盤の設計だった。異なる仕様を持つ複数のAPIを統一インターフェースで抽象化する。具体的な通信先が変わっても、呼び出し側のコードは一切変更しなくていい。

実務で使ってきたパターン

  • Adapter — 外部API統合。異なるインターフェースを統一的に扱う
  • Repository — データアクセスの抽象化。DBの変更がビジネスロジックに影響しない
  • Service層分離 — ビジネスロジックをControllerから切り離し、テスタビリティを確保

EC-CUBE4のプラグイン開発でも、この考え方は活きた。20本以上のプラグインを単独で設計・実装する中で、Open/Closed原則——「拡張に対して開き、修正に対して閉じる」を強く意識するようになった。プラグインとは本質的に、本体を壊さずに機能を追加する仕組みだ。まさにOpen/Closedの体現だと思う。

デザインパターンは「暗記するもの」ではなく、「なぜその形になるのか」を理解して初めて使えるものだ。本で読んだパターンを実務で試し、うまくいった理由と失敗した理由を振り返る。その繰り返しが、設計の筋力を育ててくれた。

SECTION 4

「ちょうどいい」を見極める

若手の頃は「完璧な設計」を目指していた。あらゆるケースを想定し、すべてを抽象化し、変更に耐えうるアーキテクチャを作ろうとした。

しかし実務を重ねるほど、過剰な設計はかえって害になることを学んだ。使わない拡張ポイント、読み解けない抽象レイヤー、メンテナンスコストだけが膨らむ複雑な構造——「念のため」の設計が、チームの足を引っ張ることがある。

Good Enoughという考え方がある。「十分に良い」で止める勇気。これは妥協ではない。今の要件と将来の変更可能性を見極めたうえでの判断だ。

設計判断の3つの問い

  • 1.この抽象化は、今後半年以内に本当に必要か?
  • 2.新しいメンバーが見て、30分で理解できるか?
  • 3.変更が必要になったとき、どこを触ればいいか明確か?

マルチテナントアーキテクチャの設計でも、この「ちょうどいい」の見極めが鍵だった。テナントごとのデータ分離をどこまで厳密にやるか。共通機能と個別カスタマイズの境界をどこに引くか。正解は一つではなく、プロジェクトの制約の中で最善を選ぶことが設計者の仕事だった。

「読む → 試す → 仕組み化」——この「仕組み化」のフェーズでは、シンプルさを最優先にしている。仕組みが複雑であれば、それは仕組みとして機能しない。

SECTION 5

設計は航海である

チェスの名手は、最初の数手で勝敗を見通すと言われる。しかしシステム開発では、最初にすべてを見通せることはまずない。要件は変わり、技術的制約が見つかり、想定外の使い方が発見される。

だからこそ、設計は航海のように進めるものだと考えている。目的地(ゴール)は決めるが、航路は柔軟に変更する。嵐(リスク)に備え、常に次の寄港地(マイルストーン)を意識する。

実務では、プロトタイプを早い段階で作ることを心がけてきた。完璧な設計書を書いてから実装に入るのではなく、手を動かして見えてくることを設計にフィードバックする。顧客との打ち合わせでも、動くものを見せたほうが話が進む。

医療機関向け在庫管理システムの開発では、要件整理と並行してプロトタイプを作り、画面を見せながら仕様を固めていった。「こういう動きですか?」と聞くより、「この画面で合っていますか?」と見せるほうが、ずっと正確な合意が取れた。

航海のための道具

  • プロトタイプ — 早く作って、早く壊して、早く学ぶ
  • リスク管理 — 技術的な不確定要素を先に検証する
  • 反復的な改善 — 一度で完成させず、段階的に品質を上げる

Docker開発環境の構築・標準化もこの発想だった。「いつでも壊してやり直せる環境」があれば、試行錯誤のコストが下がる。航海にたとえるなら、嵐で壊れてもすぐに修繕できる船を持つようなものだ。

SECTION 6

品質という城壁

城壁は、攻められたときに初めてその価値がわかる。システムの品質も同じだ。問題が起きなかったとき、品質は見えない。しかし問題が起きたとき、品質がなければすべてが崩れる。

テスト戦略は設計の一部だと考えている。JSTQB認定テスト技術者資格を取得したのも、テストを「開発の後工程」ではなく「設計の構成要素」として捉えたかったからだ。

Service層を分離する設計は、テスタビリティに直結する。ビジネスロジックがControllerに埋め込まれていたら、テストは難しい。しかしServiceクラスとして独立していれば、入力と出力を定義してテストできる。

品質を支える設計の工夫

  • テスト容易性を意識した層分離(Controller / Service / Repository)
  • コードレビューでの「設計意図」の共有
  • 命名規則やディレクトリ構成による暗黙知の形式知化
  • Gitブランチ戦略による変更の追跡可能性

レビューの場で大切にしているのは、「なぜこの設計にしたのか」を言語化することだ。コードの正しさだけでなく、設計判断の根拠をチームで共有する。それが、属人化を防ぎ、チーム全体の設計力を引き上げる。

品質は、華やかさとは無縁だ。しかし城壁が堅牢であればこそ、中で暮らす人々——ユーザーやチームメンバー——は安心して過ごせる。その見えない安心感を作ることが、設計者の仕事だと思っている。

SECTION 7

終わりのないサイクル

システムは「完成」しない。リリースした瞬間から、変更の要求が始まる。新しい機能の追加、パフォーマンスの改善、セキュリティパッチ。生きているシステムは常に進化を求められる。

設計者もまた、完成しない。13年やってきて、ようやく「自分がまだ知らないことの広さ」が見えてきた気がする。

累計900冊を超える読書、13の技術資格。数字だけ見ると多いように思えるかもしれないが、本質は量ではない。「読む → 試す → 仕組み化」のサイクルを止めないこと——それだけが、設計者としての自分を更新し続ける唯一の方法だと思っている。

インフラの世界で学んだ堅牢さの重要性。Web開発で身につけた柔軟なアーキテクチャ設計。プロジェクトリーダーとして得た、技術と人をつなぐ視点。キャリアの各フェーズで得たものが、今の設計判断の土台になっている。

学びのサイクル

読む 試す 仕組み化 繰り返す

書籍で学んだ概念を実務で検証し、チームで再利用できる形に整える。このサイクルは13年間変わっていない。

技術は移り変わる。しかし設計の原則——疎結合、関心の分離、シンプルさの追求——は時代を超えて通用する。それらを身につけるには、学び続けるしかない。

「コードは詩であり、
アーキテクチャは哲学である」

一行一行のコードに意図を込め、全体の構造に思想を宿す。それが、私の考えるシステムアーキテクトの姿です。完璧ではなく、誠実に。これからもこのサイクルを回し続けます。

—— しきぴょんた

関連ページ