ドキュメントの書き方

目次

概要

ドキュメントは、コードだけでは伝わりにくい文脈、判断、使い方を残すためのものです。よいドキュメントは、読む人の次の行動を楽にします。

要点

ドキュメントは「全部を書く」ものではなく、「読者が迷う場所に橋を架ける」ものです。対象読者、目的、次に取る行動を決めてから書くと、読みやすくなります。

ドキュメントの種類

種類 目的
README 入口、セットアップ、使い方
チュートリアル 初めての成功体験
How-to 具体的な作業手順
Reference 網羅的な仕様
Explanation 背景や設計思想
ADR 重要な意思決定の記録
Changelog 変更点の記録
flowchart TD D["documentation"] --> R["README"] D --> H["How-to"] D --> Ref["Reference"] D --> E["Explanation"] D --> ADR["ADR"]

重要なのは、1つの文書にすべてを詰め込まないことです。初学者向けのチュートリアルに詳細仕様を混ぜると読みにくくなり、referenceに背景説明を混ぜすぎると探しにくくなります。

読者と目的を決める

ドキュメントを書く前に、読者と目的を1文で決めます。

この文書は、初めてこのリポジトリを触る開発者が、localでbuildできるようになるためのものです。

確認する問いです。

問い
誰が読むか 新規参加者、運用担当、API利用者
何をしたいか setup、deploy、障害調査、仕様確認
何を知っている前提か Gitは使える、AWS権限がある
読んだ後どうなれば成功か buildが通る、PRを作れる
どこで読むか GitHub、IDE、端末横、障害中

読者の状態によって、必要な書き方は変わります。

読者の状態 書き方
初めて触る 手順を省略しない
何度も使う コマンド一覧とreferenceを重視
障害中 結論、切り分け、rollbackを先に
意思決定中 背景、制約、比較、trade-offを明示
flowchart TD A["読者"] --> B["目的"] B --> C["必要な前提"] C --> D["次の行動"] D --> E["成功確認"]

Diátaxisで整理する

Diátaxisは、ドキュメントを4種類に分けて考える方法です。

種類 読者の問い 文書の性格
Tutorial 学び始めたい 手を動かして成功体験を作る
How-to guide 具体的な作業をしたい 目的達成の手順
Reference 正確な仕様を調べたい 網羅的で検索しやすい情報
Explanation なぜそうなのか知りたい 背景、設計思想、概念
quadrantChart title Diátaxis x-axis "実践" --> "理論" y-axis "学習" --> "作業" quadrant-1 "Explanation" quadrant-2 "Tutorial" quadrant-3 "How-to" quadrant-4 "Reference"

たとえば「Dockerfile」なら、文書の種類で内容が変わります。

種類 書く内容
Tutorial 最小のDockerfileを作って起動する
How-to production imageを小さくする手順
Reference Dockerfile命令一覧
Explanation layer/cache/multi-stageの考え方

同じテーマでも、読者の目的が違えば文書を分けます。これだけで、かなり読みやすくなります。

README

READMEはプロジェクトの玄関です。

含めるとよいものです。

  • 何のプロジェクトか
  • 誰のためのものか
  • セットアップ
  • よく使うコマンド
  • ディレクトリ構成
  • deploy方法
  • troubleshooting

例です。

# Project

## Setup

```sh
npm install
npm run build
```

READMEは長くなりすぎたら、詳細ページへ分けます。

READMEのよくある構成です。

# Project name

短い説明。

## Quick start

## Requirements

## Common commands

## Directory structure

## Development workflow

## Deployment

## Troubleshooting

## License

READMEで避けたいことです。

避けたいこと 理由
歴史や背景から始める 初回読者が目的にたどり着けない
コマンドが断片的 そのまま実行できない
期待結果がない 成功したか判断できない
古いスクリーンショット UI変更で壊れやすい
詳細仕様を全部入れる 入口として重くなる

Quick startでは、成功確認まで書きます。


## Quick start

```sh
npm ci
npm run build
```

`dist/index.html` が生成されれば成功です。

設計メモ

設計メモは、まだ固まり切っていない考えを残す場所です。

書くとよい観点です。

  • 解きたい問題
  • 制約
  • 候補案
  • 採用案
  • 捨てた案
  • リスク
  • 未決事項

設計メモは、完璧な仕様書でなくて構いません。思考の途中を共有することに価値があります。

設計メモは「決定前」の文書です。ADRは「決定後」の文書です。この違いを分けると、議論の途中と決定の記録が混ざりにくくなります。

文書 状態
設計メモ 検討中、比較中、相談中
ADR 決定済み、理由を保存
仕様書 実装や利用の約束

設計メモのテンプレート例です。

# 設計メモ: 検索機能のindex方針

## 背景

## 目的

## 制約

## 候補

## 比較

## 推奨案

## 未決事項

ADR

ADR(Architecture Decision Record)は、重要な意思決定を記録します。

# ADR: CloudFront Functionsでclean URLを処理する

## Status

Accepted

## Context

S3 private bucket + CloudFront OACで配信している。

## Decision

CloudFront Functionで `/path``/path/index.html` へrewriteする。

## Consequences

S3側にredirect objectを置かずに済む。

ADRは、「なぜそうしたか」を未来の自分に残す道具です。

ADRを書くタイミングです。

書くべき場面
後から戻すのが難しい DB、cloud、framework選定
trade-offがある 速度vsコスト、柔軟性vs単純さ
複数案を比較した A/B/C案から選んだ
将来の読者が疑問に思う なぜこの制約があるのか

ADRは長くしすぎない方が続きます。1 decision 1 ADRにすると探しやすく、更新もしやすくなります。

APIドキュメント

APIドキュメントでは、requestとresponseを明確にします。

GET /api/items
{
  "items": [
    {"id": "1", "name": "book"}
  ]
}

含めるものです。

  • endpoint
  • method
  • request header
  • request body
  • response body
  • status code
  • error response
  • 認証
  • rate limit

APIドキュメントは、利用者が「安全に呼べる」ことが重要です。成功例だけでなく、error responseと制限を書きます。

POST /api/items
Authorization: Bearer <token>
Content-Type: application/json
{
  "name": "book"
}
{
  "id": "item_123",
  "name": "book",
  "created_at": "2026-04-29T12:00:00Z"
}

error responseの例です。

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "name is required",
    "request_id": "req_123"
  }
}

OpenAPIのような機械可読な仕様を併用すると、document、mock、client生成、testに使えます。ただし、OpenAPIだけでは背景や使い方までは伝わりにくいため、guideやexampleも一緒に置くと親切です。

変更履歴

Changelogは、利用者が変更の影響を確認するために読みます。


## 1.2.0

- Added: clean URL support
- Changed: sidebar grouping
- Fixed: broken appendix links

変更履歴は、commit logとは役割が違います。利用者にとって意味のある単位にまとめます。

Keep a Changelogの考え方では、変更を種類ごとに分類します。

種類 意味
Added 追加
Changed 変更
Deprecated 非推奨
Removed 削除
Fixed 修正
Security セキュリティ修正

悪い例です。

- fix
- update docs
- misc

良い例です。


## 1.3.0

### Added

- 付録にDockerfile実践を追加しました。

### Fixed

- サイドバーのappendix linkが切れる問題を修正しました。

利用者が知りたいのは、commitの粒度ではなく「自分に影響するか」です。

読みやすくする技術

  • 最初に結論を書く
  • 対象読者を明確にする
  • 見出しで構造を作る
  • 手順は番号付きにする
  • コマンドはそのまま実行できる形にする
  • 失敗例と確認方法を書く
  • 古くなりやすい情報に注意する
flowchart LR Reader["読者"] --> Goal["目的"] Goal --> Action["次の行動"] Action --> Result["確認できる結果"]

文体の基本です。

原則
能動態で書く Run npm ci.
現在形で書く This command creates dist/.
1文を短くする 1文1意図
専門用語を導入する 初出で意味を書く
見出しを動詞か名詞で揃える Install, Build, Deploy
読者を迷わせない 「適宜」「いい感じに」を避ける

日本語では、主語を省略しすぎると手順が曖昧になります。「誰が」「何を」「どこで」実行するかを必要に応じて書きます。

ローカル環境で次を実行します。

```sh
npm run build
```

手順を書く

手順文書では、読者が上から順に実行できることが大切です。

よい手順の要素です。

要素
前提 AWS CLIが設定済み
実行場所 repository root
コマンド copyできる形
期待結果 Built 70 pages が出る
失敗時 よくあるerrorと対処
rollback 元に戻す方法

手順の例です。


## Build

Repository rootで次を実行します。

```sh
npm run build
```

`dist/` が生成され、`Built ... pages` と表示されれば成功です。

手順で避けたい書き方です。

書き方 問題
必要なら設定する 必要かどうか判断できない
適当に値を入れる 何を入れるか分からない
前と同じように 初めて読む人には分からない
エラーが出たら直す 直し方が分からない

コード例を書く

コード例は「正しいだけ」では不十分です。読者がそのまま使えるか、危険な誤解をしないかを考えます。

コード例に添える情報です。

情報
実行方法 node example.js
入力 sample JSON
出力 expected output
前提 package version
注意 productionではsecretを直書きしない

悪い例です。

doThing()

良い例です。

import { buildSite } from "./build.js";

await buildSite({
  inputDir: "md",
  outputDir: "dist",
});

コード例では、placeholderを明確にします。

aws s3 sync dist/ s3://<bucket-name> --delete

<bucket-name> は実際のS3 bucket名に置き換えます。

図表を使う

図表は、文章より構造を伝えやすいときに使います。

表現 向いているもの
比較、一覧、チェックリスト
flowchart 手順、判断、処理の流れ
sequence diagram requestのやり取り
architecture diagram component関係
screenshot UI操作の補助

図を入れる前に、「文章で説明しにくい関係があるか」を考えます。飾りの図は保守コストだけ増えます。

sequenceDiagram participant User participant Browser participant API User->>Browser: 操作 Browser->>API: request API-->>Browser: response

図には、本文で読み方を添えます。図だけ置くと、どこを見ればよいか分からないことがあります。

レビューされやすいドキュメント

ドキュメントもコードと同じくレビュー対象です。ただし、レビュー観点は少し違います。

観点 確認
読者 誰向けか分かるか
目的 何を達成する文書か
手順 そのまま実行できるか
前提 必要な環境や権限が書かれているか
結果 成功確認の方法があるか
失敗時 troubleshootingがあるか
更新性 古くなりやすい値を避けているか

レビューしやすいPRにするには、変更理由を書きます。


## 変更理由

初回セットアップ時にNode.jsのversionで詰まりやすいため、
READMEに確認コマンドと想定versionを追加しました。

ドキュメントのレビューでは、「正しいか」だけでなく、「読者が次の行動を取れるか」を見ます。

レビュー依頼時に書くとよいことです。

レビューしてほしい点:

- 手順が初見でも通るか
- 前提が抜けていないか
- 用語が分かりにくくないか
- 古くなりやすい値を書きすぎていないか

ドキュメントPRは、差分が大きいと読まれにくくなります。構成変更、本文追加、リンク修正、表記統一を分けられるなら分けるとレビューしやすいです。

古くなりにくくする

ドキュメントは時間とともに古くなります。古くなりにくくするには、変わりやすい情報を本文に埋め込みすぎないことが大切です。

flowchart TD A["変わりやすい情報"] --> B["自動生成"] A --> C["設定ファイルへ寄せる"] A --> D["リンクに逃がす"] A --> E["更新日を書く"]

古くなりやすいものです。

  • version番号
  • 料金
  • UIのスクリーンショット
  • 外部サービスの画面手順
  • 人名や担当者
  • 一時的な制限

古くなりにくくする書き方です。

Node.jsは `.node-version` を参照してください。
料金は公式pricing pageを確認してください。

本文に固定値を書く必要がある場合は、その値が変わったときにどこを更新すればよいか分かるようにします。

古くなりにくい文書は、source of truthを明確にします。

情報 source of truthの例
version .node-version, package.json
command package.json scripts
API schema OpenAPI file
infrastructure Terraform, CloudFormation
dependency lockfile
pricing 公式pricing page

「この文書が正」なのか「設定ファイルが正」なのかが曖昧だと、すぐにズレます。

ドキュメントを運用する

ドキュメントは書いた瞬間から古くなり始めます。運用を仕組みに入れると、少し長持ちします。

flowchart LR A["コード変更"] --> B{"docs影響あり?"} B -- yes --> C["docs更新"] B -- no --> D["理由をPRに書く"] C --> E["リンク / コマンド確認"]

運用の工夫です。

工夫 効果
PR templateにdocs項目を入れる 更新漏れに気づく
docs ownerを決める 放置されにくい
link checkerをCIに入れる 壊れたリンクを検知
commandをtestする 手順の腐敗を防ぐ
generated docsを自動生成 API referenceのズレを減らす
last reviewedを書く 古さを判断しやすい

ただし、更新日だけを自動更新すると「新しそうに見える古い文書」になります。last reviewed は、人が確認した意味で使う方がよいです。

品質チェックリスト

書き終わったら、次を確認します。

観点 確認
読者 誰向けか分かる
目的 読んだ後の行動が分かる
前提 必要な権限、環境、知識が書かれている
手順 上から順に実行できる
確認 成功確認がある
失敗時 よくある失敗と対処がある
構造 見出しだけで流れが分かる
用語 初出で説明されている
コード copyして実行できる
リンク リンク切れがない
保守 source of truthが分かる
安全性 secretや個人情報を含まない

ドキュメント品質のメトリクス

読み易さスコア

Gunning Fog Index (グニング指数):

GFI = 0.4 * (W/S + 100 * C/W)

W = 単語数
S = 文の数  
C = 複合字音節を含む単語数

GFI 12 = 高卒レベル(推奨)
GFI 16 = 大卒レベル(難しい)
GFI 20+ = 大学院レベル(避けるべき)

実装例

import re
from textblob import TextBlob

def calculate_gunning_fog(text):
    """グニング指数を計算"""
    sentences = len(re.split(r'[.!?]', text))
    words = len(text.split())
    
    complex_words = 0
    for word in text.split():
        # シラブル数が3以上 (複合字音節)
        if syllable_count(word) >= 3:
            complex_words += 1
    
    gfi = 0.4 * (words/sentences + 100 * complex_words/words)
    return gfi

# テキスト品質チェック
doc_text = """
The implementation of microservices architecture...
"""
gfi = calculate_gunning_fog(doc_text)
if gfi > 14:
    print("警告: ドキュメントが難しすぎます")

Diataxis(ダイアタクシス)フレームワーク

Diataxis (diataxis.fr) は、ドキュメントを4つの独立した領域に分けるフレームワーク:

        実践的          理論的
  
段階的  Tutorial        Explanation
        (学習)         (理解)
        
参照的  How-to          Reference
        (解決)         (情報)

実装パターン

Tutorial: 初心者向け、目的は完了


## 5分で始める

1. パッケージをインストール
   \`\`\`bash
   pip install mylib
   \`\`\`

2. 簡単な例を実行
   \`\`\`python
   from mylib import simple_function
   result = simple_function(42)
   print(result)
   \`\`\`

3. 出力を確認

結果、あなたはmylibを実行できました。次に...

How-to: 経験者向け、目的は問題解決


## キャッシュを有効にする方法

キャッシュを有効にするには、設定ファイルで以下を設定:

\`\`\`yaml
cache:
  enabled: true
  ttl: 3600
  backend: redis
\`\`\`

詳細な設定: [キャッシュ設定リファレンス](#ref)

Explanation: 概念を深く理解


## なぜキャッシュが必要か

キャッシュは...

### キャッシュの種類
- ローカルキャッシュ
- 分散キャッシュ
- CDNキャッシュ

それぞれのトレードオフ...

Reference: 辞書的、完全性が目標


## Configuration Reference

| パラメータ | 型 | デフォルト | 説明 |
|---|---|---|---|
| cache.enabled | bool | false | キャッシュの有効・無効 |
| cache.ttl | int | 3600 | TTL(秒) |
| cache.backend | str | "memory" | バックエンド |

Architecture Decision Records (ADR)

ADR (adr.github.io) は、アーキテクチャ決定を記録する標準フォーマット:

ADR テンプレート

# ADR 001: マイクロサービスアーキテクチャの採用

**Status**: Accepted (受け入れ済み)
**Context**: 2026-05-03

## Context (文脈)

単体アプリケーションはスケール限界に達した。
- デプロイ頻度: 月1回
- 障害の波及: 全サービス停止
- チーム間の依存: 高い

## Decision (決定)

マイクロサービスアーキテクチャに移行する。

## Consequences (結果)

**利点:**
- デプロイ独立性向上
- スケーラビリティ向上
- チーム自律性向上

**課題:**
- サービス間通信の遅延・不安定性
- 分散トランザクションの複雑性
- 監視・デバッグの難しさ

## Alternatives (検討した代案)

1. Monolith + バッチ処理
2. Modular Monolith

(各代案を却下した理由...)

## References (参考資料)

- Newman, S. (2015). Building Microservices
- [AWS Microservices Whitepaper]

OpenAPI/AsyncAPI による インターフェース仕様

OpenAPI スキーマ例

openapi: 3.0.0
info:
  title: Order API
  version: 1.0.0

paths:
  /orders:
    post:
      summary: 注文作成
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrderRequest'
      responses:
        '201':
          description: 注文作成成功
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: バリデーションエラー
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'

components:
  schemas:
    CreateOrderRequest:
      type: object
      required: [customer_id, items]
      properties:
        customer_id:
          type: string
          format: uuid
        items:
          type: array
          minItems: 1
          items:
            type: object
            properties:
              product_id:
                type: string
              quantity:
                type: integer
                minimum: 1

    Order:
      type: object
      properties:
        order_id:
          type: string
          format: uuid
        status:
          type: string
          enum: [pending, confirmed, shipped]
        created_at:
          type: string
          format: date-time

    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string

Swagger UI による ドキュメント生成

from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi

app = FastAPI()

@app.post("/orders", tags=["Orders"])
def create_order(order: CreateOrderRequest):
    """
    注文を作成します。
    
    - **customer_id**: 顧客ID(必須)
    - **items**: 注文アイテム配列(最小1件)
    
    Returns:
        Order: 作成された注文情報
    """
    pass

# Swagger UI は自動生成される
# http://localhost:8000/docs にアクセス

ドキュメント品質チェックリスト

[ ] 対象読者が明確か?(初心者/経験者/開発者)
[ ] 目的が明確か?(チュートリアル/リファレンス/解説)
[ ] 図表が正確か?
[ ] コード例が実行可能か?
[ ] 外部リンクが有効か?
[ ] 用語が一貫しているか?
[ ] グニング指数が12-14か?
[ ] モバイルデバイスで読みやすいか?
[ ] 多言語対応の計画があるか?
[ ] バージョン管理されているか?
[ ] アクセシビリティ対応(色覚異常、スクリーンリーダー)
[ ] SEOメタデータが設定されているか?

ドキュメント自動生成ツール

ツール 対象 特徴
Sphinx Python reStructuredText対応、国際化
MkDocs 汎用 Markdown+プラグイン、軽量
Docusaurus Web API React-based、バージョン管理
Swagger/OpenAPI REST API インタラクティブ、自動生成
Javadoc Java ソースコメントからAPI文書を生成
Doxygen C++/Java マルチ言語、図表生成

ドキュメント体系の補足

Diátaxis - ドキュメンテーション体系

4つのドキュメント類型: Diátaxis(https://diataxis.fr/)は、ドキュメンテーション設計の統一的な理論枠組みを提供するプラットフォームです。プロジェクト作者・コントリビューター・ユーザーの多くが陥る「ドキュメンテーションの曖昧性と重複」を解決するため、以下の4つの明確に異なるドキュメント種別を定義しています:

  • Tutorials (チュートリアル): 学習者が確実に成功する体験を提供する。目的 = 初心者の学習支援。特性: 線形、手順的、実践的。例: 「初めてのNode.jsアプリケーション」「Reactで最初のコンポーネントを作る」

  • How-to Guides (ハウツーガイド): 特定の実務課題を解決する道筋を示す。目的 = 既知の問題への解決手段提供。特性: 目的志向、順序依存、実装詳細を含む。例: 「PostgresからMySQLへの移行ガイド」「Docker環境でのデバッグ方法」

  • Reference (リファレンス): APIやコマンドの詳細仕様を記載。目的 = 必要な情報への高速アクセス。特性: 網羅的、構造化、アルファベット順等で整理。例: 「Array.prototype.map() - MDN」「curl コマンドオプション一覧」

  • Explanation (解説): 概念や設計思想を背景から説明。目的 = 深い理解の構築。特性: 理論的、背景説明、複数視点の呈示。例: 「なぜGitはブランチモデルを採用しているのか」「マイクロサービスアーキテクチャの設計原則」

実践的な利用: この4分類は、「大量のドキュメントをどう整理するか」という実務課題の解決に直結します。例えば、GitHubのREADME、公式サイト、API仕様書などを作成する際に、各ドキュメントが4つのうちどれに相当するかを明確にすることで、「混乱したドキュメント」から「役割が明確なドキュメント」への転換が可能になります。

Markdown Guide - マークアップ標準化

CommonMark仕様: Markdown Guide(https://markdownguide.org/)は、Markdown形式の標準化を推進するプラットフォームです。Markdown本来の仕様(original Markdown by John Gruber)、拡張仕様(GitHub Flavored Markdown, MultiMarkdown, Pandoc等)、および各種実装の差異を明確に記載しており、以下の内容が集約されています:

  • Basic Syntax: 見出し、段落、強調、リスト、リンク、画像、コード等の基本要素
  • Extended Syntax: テーブル、脚注、タスクリスト、定義、ハイライト等の拡張機能
  • Markdown vs HTML: マークアップの選び分け基準
  • Tools and Resources: Markdownエディタ、プレビューア、変換ツール

実装別の互換性マトリックス: 同サイトには、異なるMarkdown処理エンジン(Python-Markdown, Ruby-Kramdown, Pandoc等)がどの拡張構文をサポートしているかを示す比較表が掲載されており、「このプロジェクトで使用するMarkdownフレーバーはどれか」を判断する際の参考資料となります。

Keep a Changelog - 変更履歴のベストプラクティス

バージョン管理と変更通知: Keep a Changelog(https://keepachangelog.com/)は、ソフトウェアの変更履歴ファイル(CHANGELOG.md)の作成・維持に関するガイドラインを提供しています。以下の実践的な推奨事項が含まれます:

  • セマンティックバージョニング(SemVer): MAJOR.MINOR.PATCH形式(例: 2.5.3)の採用
  • 変更分類: Added(新機能), Changed(変更), Deprecated(廃止予定), Removed(削除), Fixed(バグ修正), Security(セキュリティ)
  • 時系列順序: 最新の変更を上部に配置
  • ユーザー向けの言語: 技術者でない利用者にも理解できる説明
  • リリース日の記載: ISO 8601形式(YYYY-MM-DD)での日付

プロジェクト間の信頼構築: 明確で継続的に更新されるCHANGELOGは、「プロジェクト作者がユーザーの関心事(バグ、セキュリティ、互換性)を把握している」というシグナルとなり、ユーザーのプロジェクト信頼度向上に寄与します。

Architecture Decision Records (ADR) - 設計決定の記録

決定記録のテンプレート: adr.github.io(https://adr.github.io/)が提供するアーキテクチャ決定レコード(ADR)形式は、技術的意思決定を「なぜそう決めたのか」という背景とともに記録する標準的なアプローチです。以下の構成要素が含まれます:

  • Status: Proposed(提案), Accepted(採択), Deprecated(非推奨), Superseded(置き換え)
  • Context: 決定が必要だった状況・背景
  • Decision: 実際の決定内容
  • Consequences: 決定の結果(利益、コスト、リスク)
  • Alternatives Considered: 検討した代替案と却下理由

プロジェクト履歴の保全: ADRを段階的に記録していくことで、「今のアーキテクチャがどのような意思決定の積み重ねで形成されたか」を後発のコントリビューターが理解できるようになり、プロジェクトの保守性と継続性が向上します。例えば、「なぜマイクロサービスに移行したのか」「なぜこのDBを選んだのか」といった本質的な決定の根拠が保存されます。

OpenAPI Specification - REST API仕様の標準化

REST API の形式的定義: OpenAPI Specification(https://openapis.org/)は、REST APIの仕様を機械可読なYAML/JSON形式で記述するための標準です。以下の内容が定義されています:

  • Endpoints: パス、HTTPメソッド(GET, POST等)、パラメータ
  • Request/Response: ペイロードスキーマ、ヘッダー、ステータスコード
  • Authentication: OAuth 2.0, API Key等の認証スキーム
  • Documentation: エンドポイントの説明、使用例

ツール生態系: OpenAPI仕様を記述することで、以下のような自動生成ツーラが活用可能になります:

  • Swagger UI: 対話的なAPI仕様ドキュメント
  • Redoc: 読み易いAPIドキュメント
  • OpenAPI Generator: クライアント・サーバーコードの自動生成
  • Dredd: APIドキュメントとサーバーの一貫性検証

Write the Docs コミュニティ

ドキュメント作成者の実践知: Write the Docs(https://writethedocs.org/)は、ドキュメンテーション作成者向けのコミュニティプラットフォームであり、以下のリソースが提供されています:

  • Documentation Guide: 言語別・用途別のドキュメント作成ガイド
  • Books: 「The Good Documentation」「Becoming a Better Technical Writer」等の推奨図書
  • Conferences and Events: ドキュメンテーション専門の国際カンファレンス
  • Slack Community: 実務的な質問・知見共有のコミュニティ

業界横断的な知見: テック企業、オープンソースプロジェクト、医療機器メーカーなど、多様な業界からのドキュメント作成者が参加しており、「どの産業でも共通する課題と解決法」が集約されています。

Google Developers Style Guide - テクニカルライティング標準

Googleの社内標準の公開: Google Developers(https://developers.google.com/)が公開するStyle Guideは、Googleの技術文書作成に用いられる標準に基づいており、以下の項目を規定しています:

  • 用語の統一: 「user」vs「end user」、「API」の大文字化等
  • 文体: アクティブボイスの推奨、一人称の最小化
  • コード例: サニタイズ、実行可能性、バージョン表記
  • 図表: 説明文、キャプション、アクセシビリティ

Microsoft Learn Documentation - エンタープライズドキュメンテーション

スケールでのドキュメント管理: Microsoft Learn(https://learn.microsoft.com/)は、数千のAPI、フレームワーク、サービスを網羅するドキュメントシステムであり、以下の特徴を示しています:

  • モジュール化: 学習モジュール、ハンズオンラボ、参考資料の分離
  • バージョン管理: 複数バージョンの並行サポート
  • 多言語対応: 翻訳戦略、言語ごとの更新タイミング
  • メトリクス: ドキュメント品質、利用者満足度の測定

まとめ

ドキュメントは、読者が次に何をすればよいかを明確にするための道具です。README、Tutorial、How-to、Reference、Explanation、ADR、Changelogの役割を分けると、必要な情報を必要な形で残しやすくなります。よい文書は、読者、目的、前提、手順、成功確認、保守方法が見える文書です。


Technical Writing の言語学的側面

簡潔性と精密性の両立: テクニカルドキュメント作成の中核課題は、「単純な言葉を使いながら、精密な意味を伝える」ことにあります。以下の技法が有効です:

  • アクティブボイス: 「エラーが発生した」(受動)→ 「ファイルが見つかりません」(能動的に状況を説明)
  • 第三者表現: 「私たちは推奨します」→ 「推奨される」(より客観的)
  • 専門用語の定義: 初出時に注脚やリンクで定義し、二度目以降は用語のみで参照

読者カテゴリーの分離: Diátaxis の4分類の背後には、「異なる読者群(初心者、実務者、学究)に対して、異なるテキスト構成が最適」という言語学的知見があります。

ドキュメント品質メトリクス

可読性スコア: Flesch Reading Ease、Gunning Fog Index等のアルゴリズムにより、テクノロジー文書の理解難度を定量化できます。目安として Flesch Reading Ease スコア 60~70 は「高校レベルの読み易さ」を示します。

メンテナンス性: ドキュメントの「鮮度」は、前回更新からの経過時間で劣化します。以下のメトリクスが有用です: -「このドキュメントの最終更新は何日前か」

  • 「参照リンク切れの割合」
  • 「コード例の実行検証実施日」

セマンティックHTMLとドキュメント構造

見出しレベルの階層性: HTML5の <h1>, <h2>, <h3> は単なる視覚スタイルではなく、ドキュメント構造を表現する semantic マーキングです。スクリーンリーダーユーザーは、見出しの階層をナビゲートしてドキュメント全体を把握するため、見出しレベルの一貫性が不可欠です。

構造化データ: Schema.org の語彙(BreadcrumbList, FAQPage等)により、ドキュメントを機械可読な形式で記述でき、検索エンジンが構造を正確に理解できるようになります。

バージョン管理と更新戦略

リリースノート設計: CHANGELOGに加えて、以下の要素がドキュメント更新を効果的に伝達します:

  • Breaking Changes: 既存ユーザーのコードに影響する変更の詳細
  • Migration Guide: 旧バージョンからの移行手順
  • Deprecation Notices: 将来削除予定の機能の警告と代替案

バージョン別ドキュメント: 複数バージョンをサポートする場合、ドキュメントサイトは「このドキュメントは 3.5.x 用」を明示し、ユーザーが正しいバージョンを参照できるよう支援します。

国際化と翻訳戦略

原言語の設計: 翻訳を前提としたドキュメント設計では、以下の原則が重要です:

  • 曖昧な短縮形・スラングを避ける
  • 文化固有の表現・例示を避ける(例: 「米国の企業では~」は翻訳時に地域固有の例に置き換え可能にする)
  • 画像内のテキストは避け、図分けにする

翻訳メモリ: TM(Translation Memory)ツール(memoQ, Trados等)により、同じ用語は常に同じ訳語を充てることで、ドキュメント全体の用語一貫性を保証します。

ドキュメントのアクセシビリティ

代替テキスト(alt text): 図表には、スクリーンリーダー用の代替テキストが必須です。有効な alt text は「図の内容」を説明するもので、例:

  • 悪い: “image1.png”
  • 良い: “API呼び出しシーケンス図。クライアントがサーバーに GET リクエストを送信し、サーバーが JSON レスポンスを返す”

論理読み順: HTML構造は視覚レイアウトと異なる場合があります。スクリーンリーダーは HTML 構造に従って読み進めるため、CSS で視覚順序を変更しても読み順は変わりません。

参考文献

公式・標準

講義・記事

解説・補助