良いアーキテクチャとは何か?

先日、あるカンファレンスで「良いアーキテクチャとは何か」というパネルディスカッションを聞きました。

登壇者の多くが挙げていたのは、「拡張しやすいこと」。

もちろん、将来の機能追加や仕様変更に対応しやすいことは、良いアーキテクチャの重要な条件です。

ただ、私は少しだけ違和感を持ちました。

なぜなら、良いアーキテクチャは、アーキテクチャ単体では決まらないと考えているからです。

事業環境、技術、顧客要求、法規制、競合、開発体制など、外部の条件によって評価は変わります。

一言で表すなら、良いアーキテクチャは時代によって変わるということです。

昔のお城が、現在も最適とは限らない

分かりやすい例として、昔のお城を考えてみます。

お城も、広い意味では一つのアーキテクチャです。

かつては、山や丘の上に城を築くことで周囲を見渡しやすくなり、攻めてくる相手に対して地形上の優位を得られました。

当時の武器や戦い方を考えると、合理的な構造だったはずです。

しかし、空からの攻撃や長距離攻撃がある時代に、同じ考え方がそのまま通用するとは限りません。

目立つ高い場所に堅牢な建物を造るより、発見されにくくする、分散させる、攻撃を受けても機能を維持できるようにする、といった別の考え方が必要になります。

外部から受ける脅威が変われば、求められるアーキテクチャも変わります。

自動車のアーキテクチャも、時代の要求で変わる

自動車でも、同じことが言えると思います。

排出ガス規制や燃費への対応が重要だった時代には、エンジンやトランスミッションを高精度に制御し、燃費や排出ガス性能を向上させることが重視されました。

その後、運転支援機能が増えると、カメラ、レーダー、ブレーキ、操舵など、複数のシステムを連携させやすい構造が求められるようになります。

現在では、SDVやOTAといった考え方が広がり、車両を販売した後もソフトウェアを更新し、機能を追加・改善しやすいアーキテクチャが重視されています。

先日のパネルディスカッションで「拡張しやすいこと」という回答が多かったのも、こうした現在の状況を踏まえたものだったのかもしれません。

ただし、将来も拡張しやすさが常に最優先されるとは限りません。

普遍的に正しいアーキテクチャはない

具体的にどのような構造にするべきかは、製品や時代によって異なります。

以前は最適だったアーキテクチャでも、次のような変化によって、現在の開発に合わなくなることがあります。

  • 製品の機能やソフトウェア規模が増えた
  • 派生機種が増えた
  • 外部システムと接続するようになった
  • 製品販売後の更新が必要になった
  • 開発する会社やチームが増えた
  • 法規制やセキュリティ要求が変わった

アーキテクチャは、一度決めたらそのまま使い続ければよいものではありません。

アーキテクチャも定期的に見直す

私がこれまで見てきた自動車メーカーのECUソフトウェアでも、アーキテクチャが7~10年ほどの単位で見直されていました。

もちろん、すべての企業や製品が同じ周期で変更するわけではありません。

しかし、事業環境や製品要求が大きく変われば、現在のアーキテクチャが今後の開発に適しているかを確認する必要があります。

新しい機能の追加に時間がかかる、変更の影響範囲が広がっている、複数チームの連携が難しくなっている、といった状態も、見直しのサインです。

良いアーキテクチャとは、変化に適合したアーキテクチャ

「良いアーキテクチャとは何か」という問いに、非機能要求であるため、一つの正解はありません。

拡張しやすいことが重要な時代もあれば、性能、安全性、低コスト、短期間での開発が優先される場合もあります。

大切なのは、一般的に良いとされる構造をそのまま採用することではありません。

  • 現在、何が求められているのか
  • 今後、どのような変化が予想されるのか
  • 何を優先し、何を割り切るのか
  • 現在のアーキテクチャが将来の開発を妨げないか

を定期的に考えることです。

良いアーキテクチャとは、永遠に変わらない完成形ではなく、その時代の要求に適合し、必要に応じて見直されていく構造なのだと思います。