設計課題データベースは、ソフトウェア開発における一般的な設計上の課題とその典型的な解決策をまとめたものです。 これにより、開発者は特定の問題に対してなにがどう難しいのかを理解して、適切な解決策を選択、実装することが容易になります。
この設計課題データベースをまとめるにあたり、設計課題を統一的に記述するフォーマットStPFを作成しました。 各設計課題はStPFの書式に従って書かれています。
近年のAIコーディングエージェントの発展により、開発者の役割は設計や実装よりも解決したい課題の明確化に移りました。課題を言語化すれば解決方法はAIが最適な手法を考えて設計・実装します。これはちょうど2010年代頃に起きたプログラミングのパラダイムシフト、逐次的に処理を記述する代わりにほしい結果だけを宣言的に記述することで処理内容はフレームワークに任せる、という状況に似ています。 そしてまた、実装をAIに任せることが続くと、開発者は作ろうとしているもののなにがどう難しいのかという知見を経験的に学ぶ機会を失います。 そこで、典型的な設計のベストプラクティスを記述する代わりに、典型的な課題をデータベース化することが今後の設計知識の共有につながるのではないかと考えました。
これまでのソフトウェア工学でおこなわれてきた設計知識の共有はデザインパターンやアンチパターンなど、主として解決構造を中心に整理されており、解決すべき課題そのものの構造的記述は十分に体系化されているとは言えません。 またGoFデザインパターンは、オブジェクト指向プログラミングに強く依存した形で記述されています。そのため、関数型言語やリアクティブ設計など異なるパラダイムを横断する課題の共有には必ずしも適していません。
このような問題意識のもと、設計課題記述フォーマット「StPF」と設計課題データベース「Design Issues」をまとめました。
- Convolution Cost Bottleneck(畳み込み計算コストのボトルネック)
- Overlapping Subproblem Recalculation(重複部分問題の再計算)
- Permutation Space Explosion(順列空間の爆発)
- Subset Selection Explosion(サブセット選択の爆発)
- Concrete Type Dependency in Object Creation(オブジェクト生成における具体型依存)
- Scattered Change Notification(変更通知の分散)
- Shared Instance Coordination(共有インスタンスの調停)
- State-Driven Behavior Tangles(状態駆動の振る舞いの絡み合い)
- Behavior Selection via Conditional Logic(条件ロジックによる振る舞い選択)
ファイル名は、既存の知識と対応しやすいよう既知のアルゴリズム名やデザインパターン名にしています。 しかしながら特定のアルゴリズムやデザインパターンは、課題に対するもっともよく知られた解決策にすぎないため、本来は課題名をファイル名にすべきではあります。
Copyright (c) 2026 aike. All rights reserved.
StPFドキュメント(StPF.md)のみ MIT License の下で利用が可能です。