0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

できるエンジニア(になりたいぼく)の「仕様書の書き方」

0
Last updated at Posted at 2026-01-19

できるITエンジニアの「設計書・仕様書」作り:読む人が迷わず、誤解せず、実装とテストに落とせる書き方

設計書や仕様書って、書くのに時間がかかるわりに「読まれてない気がする」「結局口で説明してる」「あとで誤解が出て手戻りする」になりがちです。

でも、できるエンジニアが本気で重視しているのは、文章のカッコよさではなくて次の一点です。

読む人が迷わず、誤解せず、実装とテストに落とせること。

設計書は作者の頭の良さを見せる場ではなく、チームの意思決定と品質を安定させるための道具です。だから「情報を盛る」より「誤読と抜け漏れを減らす構造」を先に作ります。

この記事では、そのための要所を、親しみやすい手順としてまとめます。


まず固定する:この文書は何を決めるのか(目的)と、どこまで決めるのか(範囲)

仕様書とひと口に言っても、要求(何を実現するか)を書いているのか、外部仕様(画面やAPIの振る舞い)を書いているのか、内部設計(構造や処理の流れ)を書いているのかで、読む人の期待が変わります。

ここが曖昧だと、読み手は「書いてないこと」を勝手に補完してしまい、誤解の温床になります。

冒頭で最低限そろえたいのは、次の3つです。

文書の目的(要求なのか、外部仕様なのか、内部設計なのか)
対象機能(今回決めるもの)
対象外(今回決めないもの)

この3つが書けているだけで、「この文書に書いてないこと」を根拠に議論しなくなります。

さらに、改訂履歴と意思決定の根拠を残しておくと、後日仕様変更が入ったときに「なぜそう決めたのか」を追えます。これは手戻り削減に効きます。ドキュメントは一回書いて終わりではなく、更新され続ける前提で設計するのが現実的です。Googleのドキュメント作法でも、古い・重複・不正確な情報を減らし、短く有用な文書を保つ姿勢が推奨されています。


迷子防止:詳細の前に「全体地図」を先に渡す

優れた設計書は、詳細が正しいだけでなく、読み手が短時間で次を把握できます。

自分の担当範囲はどこか
影響範囲はどこまでか
どのページ(章)を読めば良いか

このために、詳細に入る前に全体像を提示します。文字で長々と説明するより、まず地図です。

画面の話なら画面遷移(利用者の流れ)
データの話なら入力→保存→出力(データの流れ)
システムの話なら境界(自システムと外部の境目)

この地図があるだけで、読み手は「今どこを読んでいるか」を見失いません。

Googleのエンジニアリング実践でも、チームで同じやり方を共有し、レビューや合意形成を進めることが重要だとされています。設計書は、まさにそのための共通言語です。


文章で説明しない:仕様は「条件と結果」の規則として書く

設計書が読みづらくなる最大の理由は、仕様が“説明文”になっていることです。

読む側が欲しいのは、物語ではなく規則です。

振る舞い(何が起き、何が返るか)を、条件と結果の形に落として書きます。

画面なら、入力項目、必須条件、入力制限、エラー表示、保存後の状態
APIなら、リクエスト項目、成功レスポンス、失敗レスポンス、状態コード、例外時の扱い
バッチなら、起動条件、対象範囲、処理順、再実行時の扱い

そして、曖昧な言い回しを避けます。

「適切に」「必要に応じて」「状況によって」

このあたりは、書く側は便利でも、読む側は実装できません。曖昧さは残しても良いのですが、その場合は「未確定事項」として明示して管理します(後述)。

規則として書くと、自然にテストも作りやすくなります。テストは仕様の裏返しだからです。


非機能を付録にしない:性能・可用性・セキュリティ・運用は本文で決める

現場の手戻りの多くは、非機能の見落としから起きます。機能は動いているのに、次の理由で作り直しになるパターンです。

同時アクセスが増えたら遅い
障害時に復旧できない
ログが足りず原因が追えない
個人情報の扱いが危ない
運用が回らない

だから非機能は「あとで考える付録」にせず、仕様の一部として先に決めます。特にITサービスは、運用で価値が決まります。

ここで便利なのが、クラウド各社が出している「よい設計の観点」です。AWSやAzure、Google Cloudは、信頼性や運用性、セキュリティ、費用など、設計で見落としがちな論点を体系化しています。設計書を書く側がこれを“点検表”として使うと、非機能の抜けを減らせます。


境界と例外を先に潰す:正常系より先に「壊れ方」を決める

仕様の事故が起きやすいのは、境界と例外です。

どこまでが自システムの責任か
どこからが外部の責任か
外部サービスが落ちたらどうするか
タイムアウトしたらどうするか
重複送信されたらどうするか
権限が足りないときはどう返すか

こういう話を「実装でうまくやります」で済ませると、障害時に破綻します。

できるエンジニアは、正常系より先に例外の扱いを定義して、サービスの耐性を確保します。ここが決まると、実装もテストも一気に安定します。

言い方の統一も大事です。仕様書で「しなければならない」「してよい」などの強さがバラバラだと、読み手が混乱します。IETFのRFC 2119は、仕様文書で要求レベルを示す言葉(MUST、SHOULD、MAYなど)をどう解釈するかを定義しています。プロトコル以外でも「この条件は必須」「ここは推奨」「ここは任意」を言葉の強さで揃えるだけで、誤解が減ります。


テスト可能性が設計書の品質を決める:受け入れ条件を書けるか

設計書の良し悪しは、「テスト観点が自然に出てくるか」でかなり判定できます。

受け入れ条件(この条件を満たせばOK)
境界値(最小・最大・ちょうど)
エラーメッセージ(何を出すか)
異常系(権限なし、必須欠落、二重送信、外部失敗など)

これが書かれていれば、テストは設計書から直接作れます。

逆に、テストが作れない仕様書は、実装者の解釈に依存しやすく、品質がぶれます。チーム開発で「人によってできが違う」を減らすには、設計書にテスト可能性を埋め込むのが近道です。


未確定事項は隠さない:質問リストとして管理して、期限と決定者を書く

現実には、すべてを最初から決め切れない場面が必ずあります。ここでやりがちなのが、未確定を文中に溶かしてしまうことです。

「必要に応じて」「状況により」「あとで相談」

こうなると、実装が始まった瞬間に“仕様があるように見える未確定”が増えます。

未確定は未確定として、質問リストに切り出します。さらに、決める期限と決定者をセットで書きます。

これだけで、曖昧なまま実装が進む事故をかなり防げます。

Atlassianのドキュメント作法でも、対象読者に合わせて分かりやすく書くことや、フィードバックで改善することが重視されています。未確定を見える化するのは、まさにチームで改善を回すための前提です。


すぐ使える雛形:迷わない構造を最初から用意する

最後に、ここまでの考え方をそのまま形にした雛形を置いておきます。チームに合わせて削って使うのがおすすめです。

# (タイトル)

## 1. 目的
この文書は何を決めるか。

## 2. 範囲
対象機能:
対象外:

## 3. 前提
利用者、権限、外部システム、制約。

## 4. 全体像
画面遷移/API一覧/データの流れ/システム境界。

## 5. 仕様(条件→結果)
画面、API、バッチごとに「いつ」「何が起きるか」を規則で書く。

## 6. 非機能
性能、可用性、セキュリティ、運用、互換性。

## 7. 例外・境界
外部失敗、タイムアウト、重複、権限不足、再実行。

## 8. テスト観点(受け入れ条件)
正常系、異常系、境界値、期待するログ、期待する通知。

## 9. 未確定事項
質問、決定者、期限。

## 10. 改訂履歴
いつ、何を、なぜ変えたか。

雛形を使うと「書く内容の漏れ」が減り、レビューも速くなります。書く側も読む側も、疲れにくくなります。


まとめ:設計書は“盛る”より“迷わせない”が勝つ

設計書・仕様書作成の要点は、情報量を増やすことではありません。

目的と範囲を固定する
全体像を先に渡す
振る舞いを条件と結果で書く
非機能を本文で決める
境界と例外を先に潰す
テスト可能性を担保する
未確定事項を管理する

この要所を押さえるだけで、開発の速度と品質が同時に底上げされます。結果として、長期運用でも破綻しにくい土台になります。

設計書は、あなたの手を速くする道具でもあります。迷わせない構造を先に作って、チームの力を上げていきましょう。


参考文献

ISO/IEC/IEEE 29148:2018(en) Systems and software engineering — Life cycle processes — Requirements engineering(概要)
https://www.iso.org/obp/ui/en/

IETF RFC 2119 Key words for use in RFCs to Indicate Requirement Levels
https://datatracker.ietf.org/doc/html/rfc2119

Google Engineering Practices Documentation
https://google.github.io/eng-practices/

Atlassian Software Documentation Best Practices
https://www.atlassian.com/blog/loom/software-documentation-best-practices

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?