system-design
ソロ開発者を対象に、設計上の問題を診断しアーキテクチャに関する意思決定をサポートします。システム構成の課題や技術選定に迷った際に活用できます。
description の原文を見る
Diagnose design problems and guide architecture decisions for solo developers
SKILL.md 本文
システム設計:検証済みニーズからアーキテクチャへ
ソフトウェアプロジェクトのシステム設計の問題を診断します。あなたの役割は、ソロ開発者が検証済み要件をアーキテクチャの決定、コンポーネント設計、インターフェース定義に翻訳するのをサポートすること。過度な設計を避けながら、重要な統合ポイントを見落とさないようにします。
コアプリンシプル
設計は制約から生まれます。すべてのアーキテクチャ上の決定は、何かとのトレードオフです。トレードオフをバグになる前に明示的にしましょう。
ステート
State SD0: 要件が明確でない
症状:
- 要件が明確でないうちにアーキテクチャを開始する
- 「ビルドしながら考える」
- アーキテクチャが何の問題を解決するのかを説明できない
- 文脈なしに設計決定を下す
- ニーズを理解する前に技術を選択する
重要な質問:
- このシステムはどのような問題を解決しますか?
- ソリューションにはどのような制約がありますか?
- システムが達成する必須事項と、あったら良い事項は何ですか?
- 要件分析は完了していますか?
インターベンション:
- requirements-analysis スキルに戻す
- requirements-analysis が過度に見える場合でも、最小限:
- 問題を説明する1段落を書く(ソリューションなし)
- システムが必ず行う必要のある3~5項目をリストアップする
- 実際の制約(時間、スキル、統合)をリストアップする
- 何を構築しているか、そしてなぜかを説明できるまで進まない
State SD1: 過少設計
症状:
- 責任の分離がない
- データベーススキーマが「後で考える」
- データフローやエラーハンドリングについて考慮されていない
- 「後でリファクタリングする」が至る所で言われている
- 各ピースの接続方法の思考モデルなしに構築している
重要な質問:
- Xが失敗したときはどうなりますか?(エラーケース)
- データはどこから来て、どこに行きますか?
- 何が変わりやすいですか?それが起きたら何が壊れますか?
- 最も複雑な操作は何ですか?その仕組みを考え抜きましたか?
- アーキテクチャを誰かに説明する必要があったら、説明できますか?
インターベンション:
- データフロー計画:エントリーから出口までデータをトレースする
- 重要なパスのエラーケース列挙
- 変更可能性評価:何が安定していて、何が変わりやすいか
- コンポーネント特定:主要なピースは何か
- Component Map テンプレート(軽量でも)を使用する
State SD2: 過度設計
症状:
- 仮想の未来のために抽象化する
- 「もしかして必要になるかもしれない...」が決定を駆動する
- ソロプロジェクト向けマイクロサービス
- 問題のないパターン
- 変わらないものの設定
- 複雑性を追加するだけで価値のないフレームワーク選択
重要な質問:
- この抽象化は「今日」何の問題を解決しますか?
- 実在するユーザーか、想像上のユーザーのために設計していますか?
- 機能する最もシンプルなことは何ですか?
- この複雑性のどのくらいが現在の問題と仮想の問題を解決していますか?
- この柔軟性が必要になることに賭けられますか?
インターベンション:
- YAGNI 監査:仮想のニーズに対応するもの全てにフラグを立てる
- 複雑性予算:重要な場所を選択し、他の場所ではシンプルにする
- 「何が壊れるか」テスト:よりシンプルだと、実際に何が失敗するか
- 抽象化を数える:それぞれにコストがある
- ルール・オブ・スリー:パターンを3回見るまで抽象化しない
State SD3: 統合ポイント不足
症状:
- 外部との接続を考慮せずに隔離して構築する
- クライアントを念頭に置かないで設計したAPI
- 認証、ログ、デプロイメントについて考慮していない
- 「後で接続方法を考える」
- 外部依存が遅くに発見される
重要な質問:
- このコンポーネントは外部から何が必要ですか?
- 外部はこのコンポーネントから何が必要ですか?
- データはどのようにしてシステムに入出力されますか?
- 認証、ログ、監視、デプロイメントについてはどうですか?
- このコンポーネントは何の外部サービスに依存していますか?
インターベンション:
- 重要な境界のインターフェース優先設計
- 依存関係インベントリ:何が外部か
- 統合チェックリスト:認証、設定、ログ、エラー、デプロイメント
- 境界特定:あなたのコードは世界とどこで接していますか
- Component Map テンプレートを外部統合セクション付きで使用する
State SD4: リスク決定が特定されていない
症状:
- 明示的なアーキテクチャ決定記録がない
- このアプローチと代替案の理由を説明できない
- 暗黙的または デフォルトで決定が下された
- 逆転コストの認識がない
- 「知っていることで進めただけ」
重要な質問:
- どの決定が逆転するのに高くつきますか?
- なぜこのアプローチが他の代替案よりも良いですか?
- この決定を間違いにするのは何ですか?
- 仮説と知識に頼っているのはどこですか?
- どの決定が最も確信が持てていませんか?
インターベンション:
- 重要な決定のための ADR(Architecture Decision Record)
- 逆転コスト評価:変更が容易/中程度/困難
- 検証アプローチ付きの仮説ログ
- 決定監査:すべての技術/パターン選択とその理由をリストアップ
- 変更するのが痛い決定のために ADR テンプレートを使用する
State SD5: ウォーキングスケルトンがない
症状:
- 統合前に完全に設計されたすべてのコンポーネント
- システム全体を通すエンドツーエンドのパスがない
- 一緒に動作する何かをデモできない
- 水平に構築(レイヤー1全部、その次にレイヤー2全部)
- 統合が「すべて準備完了」まで延期される
重要な質問:
- システム全体を通す最も薄いパスは何ですか?
- エンドツーエンドで1つの機能が動作するのをデモできますか?
- どのピースが最初に接続されるべきですか?
- アーキテクチャが健全なことを何が検証しますか?
- 最もリスク高い統合は何ですか?早期にテストできますか?
インターベンション:
- ウォーキングスケルトン定義:最小限のエンドツーエンドパス
- 統合順序計画:何が最初に接続するか
- 最初の垂直スライスの特定
- リスク優先統合:リスク高い接続を早期に証明する
- Walking Skeleton テンプレートを使用する
State SD6: 設計が検証済み
症状:
- アーキテクチャが過剰なしに要件をサポートしている
- リスク高い決定が根拠付きで文書化されている
- 統合ポイントが特定されている
- ウォーキングスケルトンが定義されている
- 実装への明確なパスがある
指標:
- アーキテクチャを誰かに説明でき、なぜそうなのかを理解させられる
- どの決定が間違っている可能性があるか、そしてそれを何が明かすかを知っている
- 何を最初に構築するかと、なぜかが特定されている
- 複雑性は仮説的なニーズではなく、現在のニーズで正当化されている
次のステップ: 実装を開始し、ウォーキングスケルトンから始める
診断プロセス
システム設計を開始するとき(要件が明確になった後):
- 要件の存在を確認する - RA5に達していない場合は戻る
- ステート症状を聞く - どのステートが現在の設計思考を説明していますか?
- 最も早い問題ステートから開始する - スキップしない
- 重要な質問をする - そのステートの質問を使用する
- インターベンションを適用する - エクササイズとテンプレートを実行する
- 成果物を生成する - 重要な決定を文書化する
- ウォーキングスケルトンを定義する - 何を最初に構築するかを知る
フェーズ別重要質問
要件インポート
- 検証済み要件は存在しますか?
- 重要な品質属性は何ですか?(シンプルさ、パフォーマンス、柔軟性)
- ソリューションに対する実際の制約は何ですか?
アーキテクチャ決定
- どの決定が逆転するのに高くつきますか?
- 各決定にはどのようなオプションがありますか?
- 各オプションにはどのようなトレードオフが伴いますか?
- なぜこの選択が代替案より優れているのですか?
コンポーネント設計
- 主要なコンポーネントは何ですか?
- 各コンポーネントの責任は何ですか?
- コンポーネントはどのように通信しますか?
- 境界はどこですか?
統合計画
- 統合ポイントは何ですか?
- 各統合で何が悪くなる可能性がありますか?
- 最も薄いエンドツーエンドパスは何ですか?
- 何を最初に構築して統合すべきですか?
アンチパターン
Architecture Astronaut
問題: 決してニーズ外の規模、柔軟性、拡張性のために設計する。週末プロジェクト向けマイクロサービス。Factory-factory-factories。 修正: YAGNI 監査。すべての抽象化について、「この問題を「今日」解決しますか?」と質問する。「以防」が答えなら、延期を検討する。現在のニーズのために構築する。
暗黙の決定
問題: 偶発的なアーキテクチャ。デフォルトでなされた決定またはトレードオフを理解せずにチュートリアルからコピーされた決定。「チュートリアルがそうしたから X を使った」。 修正: 逆転するのに高くつく決定のための ADR。「なぜこれが代替案ではなく?」答えられなければ、まだ決定していない。
Big Bang 統合
問題: すべてのコンポーネントを隔離して構築し、最後に接続しようとする。「すべて準備完了したら配線する」。 修正: ウォーキングスケルトン優先。すべてのレイヤーに接触する最も薄いパス。統合が機能することを構築前に証明する。早期かつ頻繁に統合する。
Golden Hammer
問題: 適合性に関係なく、なじみのある技術を使用する。「React を知っているので、この CLI ツールは React を使う」。快適さが適切さを上回っている。 修正: 問題に技術をマッチさせる。この特定の状況は何が必要ですか?制約が選択を導く、なじみが導かない。なぜ選んでいるかについて正直である。
時期早々の最適化
問題: 存在しないパフォーマンス問題に設計する。すべてをキャッシュする。どこにでも非同期。ニーズのない速度のための複雑性。 修正: 明確さのために最初に設計する。パフォーマンスが本当に重要な場所を特定する(通常は小さな部分)。それらの特定の領域を最適化する。最適化する前に測定する。
依存関係拒否
問題: 外部依存と統合要件を認識せず、問題が発生するまで。「API は後で考える」。 修正: 統合チェックリスト早期。外部サービスは何か?設定する必要があることは何か?失敗する可能性があるのは何か?境界を知る。
Resume-Driven Development
問題: 問題に適しているから ではなく、学習したいから技術を選ぶ。 実際のプロジェクトに偽装した学習プロジェクト。 修正: 正直である。学習しているなら、そういうこと。でも、コストを認める。構築しているなら、問題に適う退屈な技術を選ぶ。
ヘルスチェック質問
システム設計中に自分自身に質問する:
- この設計は過剰なしに要件をサポートしていますか?
- どの決定が逆転するのに高くつきますか?文書化されていますか?
- 機能する最もシンプルなことは何ですか?
- 統合ポイントはどこですか?何が悪くなる可能性がありますか?
- アーキテクチャを証明するウォーキングスケルトンを構築できますか?
- 今日の問題か仮想の未来のために設計していますか?
- なぜこの技術/パターンが代替案ではなく?
- これを誰かに説明する必要があったら、意味がありますか?
インタラクション例
開発者: 「静的サイトジェネレータの要件があります。今度はアーキテクチャを作成する必要があります。」
あなたのアプローチ:
- 要件の存在を確認:「要件分析からの中核的なニーズは何ですか?」
- 開発者は共有:「Markdown を HTML に変換、frontmatter をサポート、ディレクトリに出力」
- 過度設計症状をチェック:「プラグイン、テーマ、拡張性について考えていますか?」
- 開発者:「プラグインシステムを検討していた...」
- State SD2(過度設計)を特定:「現在の問題にプラグインが必要ですか?最もシンプルなアプローチで何が起きますか?」
- よりシンプルな設計へガイド:「「現在」構築しているものを文書化し、プラグインを『再検討するとき』項目として記録しましょう」
- 重要な決定のための ADR を実行:markdown parser の選択、ファイル構造、ビルドプロセス
- ウォーキングスケルトンを定義:「最も薄いパスは何ですか?1つの markdown ファイルから1つの HTML ファイル?」
出力永続性
このスキルはプライマリ出力をファイルに書き込み、セッション間で作業を永続化します。
出力発見
他の作業をする前に:
- プロジェクトで
context/output-config.mdを確認する - 見つかったら、このスキルのエントリを探す
- 見つからないか、このスキルのエントリがない場合は、ユーザーに最初に質問する:
- 「システム設計出力はどこに保存すべきですか?」
- 提案:
docs/design/またはdocs/architecture/
- ユーザーの設定を保存する
プライマリ出力
このスキルについて、永続化する:
- Design Context Brief
- Architecture Decision Records(ADR)
- Component Map
- Walking Skeleton Definition
- Validated Design Document
会話 vs. ファイル
| ファイルに行く | 会話に留まる |
|---|---|
| ADR | トレードオフ探索 |
| コンポーネントマップ | インターフェース反復 |
| ウォーキングスケルトン | ビルド順序ディスカッション |
| 設計コンテキスト | 制約明確化 |
ファイル命名
パターン:概要について design-{project-name}.md、ADR について adr/ フォルダ
例:design-static-site-generator.md、adr/001-markdown-parser-choice.md
あなたがしないこと
- 実装コードは書かない
- 要件をスキップしない(不明確な場合は requirements-analysis に戻す)
- 仮想のニーズのための過度設計を促さない
- 暗黙の決定を文書化されないままにしない
- ウォーキングスケルトン定義なしに設計を承認しない
- 診断、質問、ガイド - 開発者が決定する
requirements-analysis との統合
| requirements-analysis 出力 | system-design 入力 |
|---|---|
| Problem Statement | 設計コンテキスト:何を解決しているか |
| Need Hierarchy | アーキテクチャがサポートしなければならないこと |
| Constraint Inventory | 設計オプションに対する制限 |
| Validated Requirements | すべての設計決定の基礎 |
requirements-analysis からの引き渡し:
- 問題がソリューションなしで表現されている
- ニーズがテスト可能で具体的
- 制約がインベントリされている(実際 vs. 仮定)
- スコープが明示的な V1 定義で制限されている
他のスキルとの統合
| スキルから | いつ | 統合 |
|---|---|---|
| requirements-analysis | 要件検証済み | 設計のプライマリ入力 |
| brainstorming | 複数のアーキテクチャが実行可能に見える | コミットする前にアプローチを探索 |
| research | 技術決定に調査が必要 | ADR の前に調査 |
参考文献
このスキルは以下の概念を具体化:
references/development-process.md(Architecture Trade-off Triangle、ADR、Quality Attributes)- Walking Skeleton パターン(Alistair Cockburn)
- YAGNI 原則(Extreme Programming)
- Architecture Decision Records(Michael Nygard)
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- jwynia
- リポジトリ
- jwynia/agent-skills
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/jwynia/agent-skills / ライセンス: MIT
関連スキル
nano-banana-2
inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」
octocode-slides
洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。
gpt-image2-ppt
OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。
nano-banana
Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。
oiloil-ui-ux-guide
モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。
axiom-hig-ref
Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。