← AI開発 資料アーカイブ
要件定義テンプレート

SRS記入例:Substack記事自動配信システム(具体ユースケース版)

元ファイル: システム要件定義の分析と汎用化方法/ソフトウェア要件仕様書(SRS).md

要約

SRSテンプレートに『Substack記事自動配信システム』を実際に記入した完成サンプル(文書番号SRS-2026-001)。ペルソナ2種、動作環境、Substack/GA4/SendGrid連携を定義し、認証・記事管理・ダッシュボードの機能要件をFR-IDとGiven-When-Thenで具体化。非機能要件はISO 25010の品質特性ごとに合格基準と測定方法を数値で示し、付録にデータモデルとClaude Code引き渡し3ステップを掲載する。

要点

SRS記入例SubstackISO25010機能要件非機能要件ユースケース

ソフトウェア要件仕様書(SRS)

Software Requirements Specification


項目 内容
文書番号 SRS-2026-001
プロジェクト名 Substack記事自動配信システム
バージョン 1.0.0
作成日 2026-05-24
最終更新日 2026-05-24
作成者 山田 太郎(プロジェクトオーナー)
レビュー者 Claude Code(AI開発アシスタント)
承認者 山田 太郎
準拠規格 IEEE 29148:2018 / ISO 25010:2023
機密区分 社外秘

変更履歴

バージョン 日付 変更内容 変更者
1.0.0 2026-05-24 初版作成 山田 太郎

目次

  1. はじめに
  2. 全体的な説明
  3. 外部インターフェース要件
  4. 機能要件
  5. 非機能要件(品質要件)
  6. 制約条件
  7. 用語集
  8. 付録

1. はじめに

1.1 目的

本文書は「Substack記事自動配信システム」のソフトウェア要件を定義する。本文書は開発者(Claude Code)への指示書として機能し、開発・テスト・検収の基準となる。

1.2 スコープ(対象範囲)

対象: - Substack APIを使った記事の自動スケジュール投稿機能 - メール購読者リストの管理機能 - 投稿パフォーマンス(開封率・クリック率)の可視化ダッシュボード

対象外(スコープ外): - 記事の文章自動生成(AIライティング) - 有料購読者の課金管理 - 他のSNS(Twitter/X、Instagram等)への連携

1.3 定義・略語

用語 定義
Substack ニュースレター配信プラットフォーム(https://substack.com)
API Application Programming Interface。システム間の連携インターフェース
スケジュール投稿 指定した日時に自動的に記事を公開する機能
開封率 配信したメールを開封した購読者の割合(%)
ダッシュボード 複数の情報をまとめて表示する管理画面
CRUD Create(作成)・Read(読取)・Update(更新)・Delete(削除)の4操作

1.4 参照文書

文書名 場所
Substack API公式ドキュメント https://substack.com/api
MASTER_CLAUDE.md(プロジェクト設定) プロジェクトルート
テスト計画書(TP-2026-001) /docs/test-plan.md

2. 全体的な説明

2.1 製品の概要

本システムは、個人ブロガー・コンテンツクリエイターが Substack での記事配信を効率化するためのWebアプリケーションである。

解決する課題: - 毎週手動で記事を投稿する作業が煩雑 - 投稿のパフォーマンスデータが Substack の管理画面では見づらい - 複数の記事を一括でスケジュール管理できない

提供する価値: - 記事を事前に複数本作成してまとめてスケジュール設定できる - 開封率・クリック率をグラフで直感的に把握できる - 投稿の最適な曜日・時間帯をデータから提案してくれる

2.2 ユーザー像(ペルソナ)

ユーザーA:個人ブロガー(主要ユーザー)

項目 内容
名前 田中 花子(仮名)
職業 フリーランスライター
技術スキル 非エンジニア。スマートフォンとPCは日常的に使用
利用頻度 週1〜2回
主な目的 記事を事前に書いて自動投稿したい
不安・懸念 「難しい設定は嫌。間違えて記事が消えたら困る」

ユーザーB:メディア運営者(サブユーザー)

項目 内容
名前 鈴木 一郎(仮名)
職業 小規模メディア運営
技術スキル 基本的なWebサービスは使える
利用頻度 毎日
主な目的 複数ライターの記事を一元管理したい
不安・懸念 「誤投稿のリスクを最小化したい」

2.3 動作環境

環境 要件
対応ブラウザ Chrome 120以上、Firefox 120以上、Safari 17以上
デバイス PC(Windows/Mac)、タブレット(iPad)、スマートフォン(iOS/Android)
インターネット接続 必須(オフライン動作は対象外)
Substackアカウント 必須(無料プラン以上)

2.4 制約・前提条件


3. 外部インターフェース要件

3.1 ユーザーインターフェース(UI)

ID 要件 優先度
UI-001 ダッシュボードはPC・スマートフォン両方で正常に表示されること(レスポンシブデザイン) Must
UI-002 主要操作(記事作成・スケジュール設定・公開)は3クリック以内で完了できること Must
UI-003 エラーが発生した場合、ユーザーが理解できる日本語のメッセージを表示すること Must
UI-004 削除・公開などの取り消せない操作の前に確認ダイアログを表示すること Must
UI-005 ローディング中はスピナーまたはプログレスバーを表示すること Should
UI-006 ダークモード・ライトモードの切り替えができること Could

3.2 外部システムインターフェース

ID 連携先 用途 認証方式
EXT-001 Substack API v1 記事の投稿・取得・削除 APIキー(Bearer Token)
EXT-002 Google Analytics 4 アクセス解析データ取得 OAuth 2.0
EXT-003 SendGrid(メール) システム通知メール送信 APIキー

3.3 データインターフェース

ID データ 形式 方向
DAT-001 記事データ JSON(UTF-8) 双方向
DAT-002 購読者リスト CSV / JSON 入力
DAT-003 パフォーマンスデータ JSON 入力
DAT-004 エクスポートデータ CSV / Excel 出力

4. 機能要件

記述ルール: 各要件は「システムは〜できること」「ユーザーは〜できること」の形式で記述する。

4.1 機能グループ:認証・アカウント管理

FR-AUTH-001:ユーザー登録

概要: 新規ユーザーがアカウントを作成できる

詳細要件: - システムはメールアドレスとパスワードによる登録を提供すること - パスワードは8文字以上、英数字混在を必須とすること - 登録後、確認メールを送信すること - メール確認が完了するまでログインを制限すること

受け入れ基準(Acceptance Criteria):

Given: 未登録のメールアドレスを入力した
When:  必須項目を入力して「登録」ボタンを押した
Then:  確認メールが届き、リンクをクリックするとログインできる

優先度: Must(必須) 依存関係: なし


FR-AUTH-002:Substack APIキー連携

概要: ユーザーが自分のSubstack APIキーを登録できる

詳細要件: - システムはAPIキーの入力フォームを提供すること - 入力されたAPIキーの有効性をSubstack APIで検証すること - APIキーは暗号化してデータベースに保存すること(平文保存禁止) - APIキーは画面上でマスク表示(sk-****...****)すること

受け入れ基準:

Given: 有効なSubstack APIキーを入力した
When:  「接続テスト」ボタンを押した
Then:  「接続成功」メッセージと自分のSubstackアカウント名が表示される

Given: 無効なAPIキーを入力した
When:  「接続テスト」ボタンを押した
Then:  「APIキーが無効です。Substackの設定画面で確認してください」と表示される

優先度: Must(必須) 依存関係: FR-AUTH-001


4.2 機能グループ:記事管理

FR-ART-001:記事の作成・編集

概要: ユーザーが記事を作成・編集できる

詳細要件: - システムはリッチテキストエディタ(見出し・太字・リスト・画像挿入対応)を提供すること - 自動保存機能(30秒ごと)を提供すること - 下書き保存・プレビュー表示ができること - 記事に対してタグ(最大10個)を設定できること

受け入れ基準:

Given: 記事を作成中にブラウザが閉じた
When:  再度ページを開いた
Then:  最後の自動保存時点の内容が復元されている

優先度: Must(必須) 依存関係: FR-AUTH-002


FR-ART-002:スケジュール投稿

概要: ユーザーが記事の公開日時を指定して予約投稿できる

詳細要件: - 公開日時は分単位で指定できること - 指定できる日時は現在時刻の15分後以降とすること - スケジュール済み記事の一覧を表示できること - スケジュールのキャンセル・変更ができること(公開5分前まで) - 公開完了時にメール通知を送信すること

受け入れ基準:

Given: 2026-06-01 09:00 にスケジュール設定した記事がある
When:  2026-06-01 09:00 になった
Then:  Substack上で記事が公開され、ユーザーに完了メールが届く

Given: 公開予定の10分前にスケジュールをキャンセルした
When:  公開予定時刻になった
Then:  記事は公開されず、ステータスが「下書き」に戻る

優先度: Must(必須) 依存関係: FR-ART-001、FR-AUTH-002


FR-ART-003:記事の一括インポート

概要: CSVまたはMarkdownファイルから複数記事を一括登録できる

詳細要件: - CSVファイル(タイトル・本文・公開日時・タグ列)のインポートを提供すること - インポート前にプレビュー確認画面を表示すること - エラーがある行のみ表示してユーザーに修正を促すこと - 一度に最大100件まで登録できること

優先度: Should(推奨) 依存関係: FR-ART-001


4.3 機能グループ:ダッシュボード・分析

FR-DASH-001:パフォーマンスダッシュボード

概要: 記事ごとの開封率・クリック率をグラフで表示する

詳細要件: - 過去30日間・90日間・1年間の期間切り替えができること - 記事ごとの開封率・クリック率・購読者増減を表示すること - 折れ線グラフ・棒グラフの切り替えができること - データをCSVでエクスポートできること - データは1時間ごとに自動更新されること

受け入れ基準:

Given: 過去30日間のデータを表示している
When:  「90日間」ボタンを押した
Then:  3秒以内にグラフが更新され、90日間のデータが表示される

優先度: Should(推奨) 依存関係: FR-AUTH-002


FR-DASH-002:最適投稿時間の提案

概要: 過去データから最も開封率が高い曜日・時間帯を提案する

詳細要件: - 過去10件以上の投稿データがある場合に提案を表示すること - 曜日別・時間帯別の開封率ヒートマップを表示すること - 提案は「推奨:火曜日 午前8時〜10時(平均開封率 42%)」の形式で表示すること

優先度: Could(あれば良い) 依存関係: FR-DASH-001


4.4 機能要件一覧(サマリー)

ID 機能名 優先度 フェーズ
FR-AUTH-001 ユーザー登録 Must Phase 1
FR-AUTH-002 Substack APIキー連携 Must Phase 1
FR-ART-001 記事の作成・編集 Must Phase 1
FR-ART-002 スケジュール投稿 Must Phase 1
FR-ART-003 記事の一括インポート Should Phase 2
FR-DASH-001 パフォーマンスダッシュボード Should Phase 2
FR-DASH-002 最適投稿時間の提案 Could Phase 3

優先度の定義: - Must:Phase 1で必ず実装。これがなければシステムとして成立しない - Should:Phase 2で実装。ユーザー価値を大きく高める - Could:Phase 3以降。あれば良いが、なくても支障なし - Won't:今回は実装しない


5. 非機能要件(品質要件)

ISO 25010:2023 の品質特性に基づいて定義する。

5.1 パフォーマンス効率性

ID 要件 測定方法 合格基準
NFR-PERF-001 ページ初期表示速度 Lighthouse計測 LCP(最大コンテンツ描画)3秒以内
NFR-PERF-002 API応答速度 負荷テスト 同時10ユーザー時、95%のリクエストが2秒以内
NFR-PERF-003 スケジュール実行精度 自動テスト 指定時刻の±2分以内に投稿が実行される

5.2 信頼性

ID 要件 測定方法 合格基準
NFR-REL-001 稼働率 監視ツール 月間99%以上(計画外停止は月4.4時間以内)
NFR-REL-002 データ損失防止 バックアップ確認 記事データは1日1回バックアップ、7日間保持
NFR-REL-003 スケジュール失敗時の対応 テスト 投稿失敗時はリトライ3回後にメール通知

5.3 セキュリティ

ID 要件 測定方法 合格基準
NFR-SEC-001 通信の暗号化 SSL証明書確認 全通信をHTTPS(TLS 1.2以上)で暗号化
NFR-SEC-002 APIキーの保護 コードレビュー APIキーはAES-256で暗号化してDB保存。ログに出力しない
NFR-SEC-003 認証セキュリティ ペネトレーションテスト ブルートフォース対策(5回失敗で30分ロック)
NFR-SEC-004 入力値検証 自動テスト SQLインジェクション・XSS攻撃に対して防御できること

5.4 使用性(ユーザビリティ)

ID 要件 測定方法 合格基準
NFR-USE-001 習得容易性 ユーザーテスト 初回利用者が説明なしで主要機能を10分以内に使えること
NFR-USE-002 エラー回復性 ユーザーテスト エラー発生時、ユーザーが3分以内に回復できること
NFR-USE-003 アクセシビリティ axe-core計測 WCAG 2.1 AA基準を満たすこと

5.5 保守性

ID 要件 測定方法 合格基準
NFR-MAIN-001 テストカバレッジ CI/CDレポート ユニットテストカバレッジ80%以上
NFR-MAIN-002 コードドキュメント コードレビュー 全公開関数にJSDocコメントを記述すること
NFR-MAIN-003 環境構築時間 計測 READMEに従って30分以内に開発環境を構築できること

6. 制約条件

6.1 技術的制約

制約 理由
フロントエンド:React 19 + TypeScript 既存の開発環境に合わせる
バックエンド:Node.js(Express) チームの技術スタック
データベース:PostgreSQL 既存インフラ
Substack APIレートリミット:100req/時 Substack側の制限。超過時は自動的に待機する

6.2 ビジネス制約

制約 内容
開発予算 Claude Code利用料含め月5万円以内
リリース目標 Phase 1:2026年7月末
対応言語 日本語のみ(多言語対応はPhase 3以降)

6.3 法的・規制上の制約

制約 根拠
個人情報(購読者メールアドレス)の取り扱い 個人情報保護法(日本)
EUユーザーのデータ処理 GDPR(EU一般データ保護規則)
Substack利用規約の遵守 Substack Terms of Service

7. 用語集

用語 定義
SRS Software Requirements Specification(ソフトウェア要件仕様書)
Must MoSCoW優先度:必須要件。これがなければシステムとして成立しない
Should MoSCoW優先度:推奨要件。重要だが必須ではない
Could MoSCoW優先度:あれば良い要件
Won't MoSCoW優先度:今回は実装しない
LCP Largest Contentful Paint。ページ表示速度の指標
WCAG Web Content Accessibility Guidelines。Webアクセシビリティの国際基準
TLS Transport Layer Security。通信暗号化プロトコル
AES-256 Advanced Encryption Standard 256bit。暗号化アルゴリズム

8. 付録

付録A:ユースケース図(テキスト版)

[ユーザー] → (ログイン)
[ユーザー] → (記事を作成する)
[ユーザー] → (スケジュールを設定する)
[ユーザー] → (パフォーマンスを確認する)
[ユーザー] → (APIキーを設定する)

[スケジューラー(自動)] → (記事を自動投稿する)
[スケジューラー(自動)] → (パフォーマンスデータを取得する)

[Substack API] ← (記事投稿リクエスト)
[Substack API] → (パフォーマンスデータ)

付録B:データモデル(概要)

Article(記事)
├── id: UUID
├── title: String(最大200文字)
├── body: Text(HTML形式)
├── status: Enum(draft / scheduled / published / failed)
├── scheduled_at: DateTime(nullable)
├── published_at: DateTime(nullable)
├── tags: String[](最大10個)
├── created_at: DateTime
└── updated_at: DateTime

User(ユーザー)
├── id: UUID
├── email: String(暗号化)
├── substack_api_key: String(AES-256暗号化)
├── substack_publication_url: String
├── created_at: DateTime
└── updated_at: DateTime

ArticlePerformance(パフォーマンス)
├── id: UUID
├── article_id: UUID(Article参照)
├── open_rate: Float(0.0〜1.0)
├── click_rate: Float(0.0〜1.0)
├── subscriber_count: Integer
└── recorded_at: DateTime

付録C:Claude Codeへの引き渡し手順

本SRSをClaude Codeに渡す際は、以下の手順で行う:

ステップ1:CLAUDE.mdの確認

このプロジェクトのCLAUDE.mdを読んで、プロジェクトの設定を確認してください。

ステップ2:SRSの読み込み

SRS-2026-001(SRS_sample_substack_v1.md)を読んで、
以下を確認してください:
1. 理解できない要件はありますか?
2. 矛盾している要件はありますか?
3. 実装が技術的に困難な要件はありますか?
確認できたら、Phase 1(Must要件)の実装計画を提示してください。

ステップ3:実装開始

SRS Phase 1のFR-AUTH-001(ユーザー登録)から実装を開始してください。
実装前に以下を確認します:
- [ ] 受け入れ基準を理解した
- [ ] 依存する要件(なし)を確認した
- [ ] テストケースを先に書く(TDD)

ドキュメント承認

役割 氏名 署名 日付
プロジェクトオーナー 山田 太郎 ____ 2026-05-24
開発担当(Claude Code) AI 自動承認 2026-05-24

本文書はIEEE 29148:2018「Systems and software engineering — Life cycle processes — Requirements engineering」に準拠して作成されました。

© 2026 山田 太郎. All rights reserved.

↑ トップへ戻る