【インフラ設計×Claude #1】非機能要件をClaudeと策定する

はじめに

プロジェクト概要

新規にクラウド基盤を構築するプロジェクトで、インフラ設計を担当しました。基盤を作る前に、性能・可用性・運用・セキュリティの水準を決める「非機能要件」と、それを満たすための「インフラ構成方針」を固める必要がありました。

このプロジェクトでは、非機能要件が、あらかじめ決まった形では用意されていませんでした。何を、どこまで決めればよいのか、手探りで進めることになります。そこで、公開されている指標を土台にして、決める範囲を絞りながら、要件を組み立てていくことにしました。

前提が少し特殊で、初期フェーズ(小規模・限定的な運用)と本番(大規模・常時運用)では、求める水準が大きく違います。そこで、非機能要件も構成方針書も「初期フェーズを対象に書き、本番は実測を踏まえて別途決める」と割り切りました。また、顧客側の社内標準にも従う必要があります。

この連載について

この作業をClaudeと進めた記録を、全3回でお届けします。

  • 第1回(本記事):非機能要件をClaudeと策定する
  • 第2回:方針書とADRを分けて書く
  • 第3回:Claudeとの役割分担と手戻りの記録

非機能要件を初めて整理する方、設計ドキュメントの作成にAIを使ってみたい方に向けて書いています。なお、顧客を特定できる情報は伏せ、案件固有の内容は一般化しています。

238項目を前にして、何から決めるのか

出発点にしたのは、IPAが公開している「非機能要求グレード」です(現在はIPAのアーカイブページで公開されています)。2018年版の原本は、指標(メトリクス)単位で数えると238項目あります。

非機能要件でよくあるのが、「全項目に値を入れようとして終わらない」「そもそも値を決められる人が手元にいない」という悩みではないでしょうか。今回も手探りで進めることになりました。

最初に決めたのは「誰の責任か」で削ること

クラウド上に基盤を作る場合、機器やデータセンター単位の冗長化、付帯設備、リソースの物理的な拡張性は、クラウド事業者の責任範囲です。これらはクラウド利用者が要件として決めても意味がないため、削除または統合しました。IPAの大項目のうち「移行性」「システム環境・エコロジー」は、全項目を削除しています。

一方で、IPA原本にない観点は追加しました。コンテナ、CI/CD、マイクロサービス、オブザーバビリティなどです。結果として、大項目は「可用性」「性能・拡張性」「運用・保守性」「セキュリティ」の4つ、72項目になりました。

IPA原本238項目の扱い件数
採用22
統合(複数項目を1つにまとめたもの)111
削除105
合計238

統合した項目はまとめ直し、さらに新規の25項目を追加して、最終的に72項目の非機能要件になりました。

学び①:網羅性を目指すより、「自分たちが決める範囲はどこか」の線引きを先にやる。責任範囲で切ると、削る理由を説明しやすい。

値の決め方:段階を分けて、分類して書く

「常時稼働」の初期案を、コストで段階分けし直した

最初の方針案は、「常時稼働」を前提にした水準に寄っていました。しかし、初期フェーズは小規模で、限定的な運用です。そこでコストを理由に見直し、値を「初期フェーズ」と「本番」の2列に分けて書くことにしました。たとえば運用時間は、初期フェーズは限定的、本番は常時、という具合です。

要件を5種類に分類する

72項目すべてを個別に悩むのは大変なので、各要件に次の分類を付けました。

分類意味件数
統一全体で同じ値にする(暗号化方式など)35
階層化重要度に応じて3段階で差をつける(復旧目標、応答時間など)18
分離業務ごとに別の値にする7
固有特定のサブシステムだけの要件8
依存連動呼び出し先の要件が呼び出し元に伝播する4

半数近くが「統一」なので、まず全体で1つの値を決めてしまえば、残りは「階層化」と「分離」に集中できます。「依存連動」は呼び出し元に響くため、伝播するパターンを別表にまとめました。

決めきれない論点は、ステータスと確認先で管理する

非機能要件は、すべてが一度に決まるわけではありません。決まっていない項目を放置しないため、次のように管理しました。

  • 検討ステータスを3段階にする:完了(主要関係者と整合済み)/条件付き完了(仮整合で、検証により更新あり)/未完了。
  • 確認先を3つに区分する:顧客の判断が必要/情報提供の依頼/他チームとの調整。
  • トレーサビリティマトリクスで抜け漏れを見る:要件ごとに「設計項目あり/前提条件/対象外」を付けました。

Claudeとの進め方

Claudeに任せたことと、人が決めたこと

担当やったこと
Claude質問文の作成、要件と検討項目の対応づけ、集計
人・IPA項目の取捨(採用/統合/削除)の案と理由付け
・顧客側とのすり合わせや整合
・AIに入れる情報の取捨、Claudeの出力の正当性の検証

指示の工夫:事実と推測を分ける

Claudeには、作業ルールとして次のような指示を、常に読み込ませました。

- 確認できた事実と推測を分ける。推測には「推測」、分からない点は「不明」と書く
- 依頼者の発言のうち、資料で裏が取れないものは「依頼者発言由来・未確認」と書く
- 料金・上限値・対応状況は公式ドキュメントで確認し、URLを付ける
- 結論の前に、その結論が依存する前提を示す

成果と課題

成果

何も決まっていない手探りの状態から、IPA原本の238項目を72項目に絞り、非機能要件として目指すゴールを整理できました。

途中で見つけた問題:出典のない値

順調に進んだ中で、1つだけ印象に残っている問題があります。バックアップを「世代数」で持つ、という要件です。

気づいたのは、後続の設計フェーズで、設計ガイドラインを改めて見直したときでした。ガイドラインの記述と照らすと、要件の記述のロジックが合いません。調べてみると、根拠となる記述は顧客側の社内標準にもなく、クラウド側にも「世代数」を設定する項目がありませんでした。出典のない値が、いつの間にか要件に入っていたことになります。

気づかずに進めていたら、クラウド側で実現できない要件が、方針書まで残っていた可能性があります。対処として、「日数」で管理する形に改め、「世代数」という言葉自体を使わないことにしました。

学び②:根拠のない値は、「誰が書いたか」ではなく「どこに書いてあるか」で消す。出典を示せない値は、AIが書いたものでも人が書いたものでも、同じ扱いにする。そして、書いた時点で気づけるとは限らないので、後の工程で、ガイドラインと照らし直す。

まとめ

経験から学んだ教訓

  • 網羅性より先に、「自分たちが決める範囲」の線引きをする。
  • 根拠のない値は、誰が書いたかではなく、どこに書いてあるかで判断する。書いた時点で気づけない場合に備えて、後の工程でも照らし直す。
  • 決めきれない論点は、ステータスと確認先で管理し、待つものは待つと決める。

今後の展望

今回は、作業時間がどれだけ短くなったかを、比較できる形で記録していませんでした。次の機会には、作業の前後で時間を測り、AI活用の効果を数字で示したいと思います。

次回は、この非機能要件から、構成方針書とADRをどう設計したかを書きます。「今守ること」と「なぜそうしたか」を別のファイルに分けた理由が中心です。

【インフラ設計×Claude #2】方針書とADRを分けて書く

関連記事

「はじめての性能試験」シリーズ

Author

クラウドエンジニアです。テクノロジーに助けてもらいながら、フルスタックエンジニアを目指してます。よろしくお願いします。

y-sakakibaraの記事一覧

新規CTA