- Authors
- Name
- 開発者がドキュメントを書く必要性
- 良い README と悪い README
- 使用例
- アーキテクチャ
- 貢献方法
- ライセンス
- アーキテクチャ決定記録(ADR)
- Diátaxis フレームワーク:ドキュメントの4つのタイプ
- ステップ2:app.py を作成
- ステップ3:実行
- 結果を確認
- ドキュメント化ツール:Docusaurus、GitBook、Mintlify
- よくあるドキュメント作成のアンチパターン
- 実践的チェックリスト
- 結論
- 参考資料

開発者がドキュメントを書く必要性
「コードがドキュメントだ」という言葉を聞いたことがあるかもしれません。しかし、これは半分正しく、半分間違っています。コードは「何をするのか」は明確に示しますが、「なぜそうするのか」「どう使うのか」は決して説明できません。
優れた技術文書は:
- オンボーディング時間を短縮します - 新しいチームメンバーが数週間ではなく数日で生産的になります
- バグを減らします - API の使い方が明確であれば、誤用が減ります
- 保守コストを低減します - 6ヶ月後にコードを見直すとき、自信を持って修正できます
- 信頼性を高めます - よく整理されたドキュメントはプロジェクト全体を信頼させます
Google、Meta、Amazon などの大手技術企業では、エンジニアの評価に「ドキュメント作成能力」を含めています。もはやドキュメント作成は選択肢ではなく、必須スキルです。
良い README と悪い README
悪い README の特徴
# Project X
これはプロジェクトです。
## 使用方法
```bash
npm install
npm start
```
以上です!
この README の問題点:
- **インストール後に何をするのか?** 不明確
- **どんな問題を解決するのか?** 不明
- **どの技術スタックを使用しているのか?** 不明
- **誰が使用できるのか?** 指定されていない
### 良い README の構造
```markdown
# プロジェクト名
**一行説明**:このプロジェクトが解決する具体的な問題
## 主な機能
- 機能1
- 機能2
- 機能3
## クイックスタート
### 前提条件
- Node.js 18.0+
- npm 9.0+
### インストールと実行
```bash
git clone https://github.com/user/project.git
cd project
npm install
npm run dev
使用例
const project = new Project()
project.doSomething()
アーキテクチャ
[ASCII図またはイメージ]
貢献方法
ライセンス
README チェックリスト:
- [ ] プロジェクトの目的が最初の3行で明確か?
- [ ] 少なくとも1つの使用例が含まれているか?
- [ ] 前提条件が明確に記載されているか?
- [ ] アーキテクチャ図またはビジュアルが含まれているか?
- [ ] 貢献ガイドラインが明確か?
- [ ] トラブルシューティングセクションがあるか?
## API ドキュメント:OpenAPI と Swagger
API ドキュメントは単なるテキストではなく、**機械が読める形式**である必要があります。OpenAPI 標準(旧 Swagger)を使用すると:
1. **ドキュメントとコードが同期します** - コードの変更が自動的に反映されます
2. **クライアントコードを自動生成できます** - JavaScript、Python、Go などの SDK を生成
3. **インタラクティブなテストが可能です** - ブラウザで直接エンドポイントをテスト
### OpenAPI 3.0 の基本構造
```yaml
openapi: 3.0.0
info:
title: ユーザー管理 API
version: 1.0.0
description: ユーザー情報を管理する API
servers:
- url: https://api.example.com/v1
description: プロダクション
paths:
/users:
get:
summary: すべてのユーザーを取得
parameters:
- name: limit
in: query
schema:
type: integer
description: 返されるユーザーの最大数
responses:
'200':
description: 成功
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
post:
summary: 新規ユーザーを作成
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'201':
description: ユーザー作成完了
content:
application/json:
schema:
$ref: '#/components/schemas/User'
components:
schemas:
User:
type: object
properties:
id:
type: integer
name:
type: string
email:
type: string
format: email
required:
- id
- name
- email
OpenAPI 検証ツール
- Swagger UI:ブラウザで API をテストできるインタラクティブ UI
- ReDoc:自動生成される美しい参照ドキュメント
- OpenAPI Linter:仕様の一貫性を検証
アーキテクチャ決定記録(ADR)
ADR は建築上の決定とその理由を記録するドキュメントです。マイクロサービスへの移行や新しいライブラリの採用など、これらの決定を記録することが重要です。
ADR テンプレート
# ADR-001: フロントエンドを React に移行
## ステータス
承認済み
## 背景
既存の jQuery コードは保守が困難です。新しい開発者にとって学習が難しい状況です。
モダンフレームワークへの移行が必要です。
## 選択肢
1. **React**:大きなコミュニティ、豊富なライブラリ、採用しやすい
2. **Vue**:学習曲線が低い、優れたドキュメント
3. **Angular**:フルフレームワーク、大規模プロジェクト向け
## 決定
**React を選択**
## 根拠
- チーム経験:一部メンバーが React 経験を持つ
- 採用:React 開発者は市場に豊富
- エコシステム:Next.js、TanStack Query など優れたツール
- コミュニティ:Stack Overflow や GitHub で答えを見つけやすい
## トレードオフ
- Vue より大きなバンドルサイズ
- Vue より急な学習曲線
- 追加の状態管理ライブラリが必要(Redux、Zustand など)
## 結果(6ヶ月後)
開発生産性が40%向上しました。新しい開発者のオンボーディング時間が2週間短縮されました。
ADR の利点:
- 決定履歴を保存します - 数ヶ月後でも、なぜこのテクノロジーを選んだのかが分かります
- 再評価のトリガーになります - 状況が変わったら、ADR を見直して再評価できます
- オンボーディングが簡単になります - 「なぜ React を使うのですか?」という質問にはすでに答えがあります
Diátaxis フレームワーク:ドキュメントの4つのタイプ
技術文書を書く際の最大の混乱は、どの種類のドキュメントを作成すべきかという点です。Diátaxis フレームワークは、ドキュメントを 4 つの明確なタイプに分類します:
| タイプ | 対象 | 目標 | 特徴 |
|---|---|---|---|
| チュートリアル | 初心者 | 学習する | 順序立った、すべてのステップ、結果が保証される |
| ハウツーガイド | 経験者 | 特定のタスクを完了 | 問題特化、独立している |
| リファレンス | 開発者 | 情報を見つける | 構造化、検索可能、完全 |
| 説明 | 学習者 | 理解する | 背景知識、なぜそうするのか |
チュートリアル:完全な初心者向けステップバイステップガイド
# チュートリアル:最初のウェブ API を作成する
このチュートリアルでは、15分以内に動作するウェブ API を作成します。
## 必要なもの
- Python 3.9+
- ターミナル
## ステップ1:Flask をインストール
```bash
pip install flask
```
ステップ2:app.py を作成
from flask import Flask
app = Flask(__name__)
@app.route('/api/hello', methods=['GET'])
def hello():
return {'message': 'Hello, World!'}
if __name__ == '__main__':
app.run(debug=True)
ステップ3:実行
python app.py
結果を確認
ブラウザで http://localhost:5000/api/hello を開く
### ハウツーガイド:経験者向け問題解決ガイド
```markdown
# ハウツー:CORS エラーを修正する
フロントエンドが API を呼び出すときに CORS エラーが出たら:
```python
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # すべてのドメインからのリクエストを許可
または特定のドメインのみ:
CORS(app, origins=['https://example.com'])
### リファレンス:完全な API リファレンス
```markdown
# API リファレンス
## GET /api/users/{id}
ユーザー情報を取得します。
**パラメータ:**
- `id` (整数、必須):ユーザー ID
**レスポンス:**
```json
{
"id": 1,
"name": "John Doe",
"email": "john@example.com"
}
エラー:
- 404:ユーザーが見つかりません
### 説明:設計の理由
```markdown
# 説明:マイクロサービスアーキテクチャを選択した理由
マイクロサービスは1つの大きなアプリケーションを小さな独立したサービスに分割します。
これにより、チームの速度、スケーラビリティ、柔軟性が向上します。
しかし、複雑さも増加します...
ドキュメント化ツール:Docusaurus、GitBook、Mintlify
Docusaurus(オープンソース、React ベース)
npx create-docusaurus@latest my-docs classic
cd my-docs
npm run start
利点:
- React と MDX を完全にサポート
- 静的サイトにビルドされるため、デプロイが簡単
- バージョン管理機能が組み込まれている
GitBook(クラウドベース)
- コラボレーション機能に優れている
- 美しいデフォルトデザイン
- コストが発生する可能性がある
Mintlify(API ドキュメント特化)
- OpenAPI 統合
- ターミナルのようなコードブロック
- モダンなデザイン
よくあるドキュメント作成のアンチパターン
1. 「時間がないのでドキュメントを書かない」
現実:今 5 時間ドキュメントを書けば、将来 50 時間節約できます。
2. コードコメントだけがドキュメントだと思う
コメントは「何をするのか」を説明します。ドキュメントは全体像を示す必要があります。
3. ドキュメントをコードとは別に管理する
解決策:ドキュメントをリポジトリに保管し、PR レビュー時に一緒に確認してください。
docs/
├── README.md
├── api/
│ ├── users.md
│ └── posts.md
├── architecture/
│ └── decisions/
│ ├── 001-react-migration.md
│ └── 002-microservices.md
└── guides/
├── setup.md
└── contributing.md
4. すべてを1つのドキュメントに詰め込もうとする
より良い構造:
- README:プロジェクト概要(1-2分)
- CONTRIBUTING:貢献方法(リンク)
- docs/SETUP:開発環境セットアップ(10分)
- docs/ARCHITECTURE:システム設計(30分)
- API_REFERENCE:仕様(自動生成)
実践的チェックリスト
ドキュメントを公開する前に確認してください:
- タイトルは明確ですか? 「API ドキュメント」より「ユーザー管理 API リファレンス」の方が良い
- 対象読者が定義されていますか? このドキュメントは誰が読みますか?
- 実行可能ですか? ステップが実際に機能しますか?
- 例は含まれていますか? 具体的な例は抽象的な説明より優れています
- スクリーンショット/図が含まれていますか? ビジュアルは1000語の価値があります
- 最新ですか? 古いドキュメントならバージョンを指定してください
- 検索可能ですか? 関連キーワードが含まれていますか?
- すべてのリンクは機能していますか? 特に外部リンクを確認してください
- 所有者はいますか? このドキュメントの保守者は誰ですか?
結論
技術ドキュメントはコストではなく投資です。優れたドキュメントは:
- チームの速度を加速します
- バグを減らします
- 新しい開発者のオンボーディングを短縮します
- 専門知識の証拠になります
今週、README を見直し、1つの ADR を書いてみてください。あなたの未来の自分が感謝するでしょう。