Skip to content
Published on

開発者のための技術文書作成完全ガイド:READMEからADRまで

Authors
  • Name
    Twitter

技術文書作成完全ガイド

開発者がドキュメントを書く必要性

「コードがドキュメントだ」という言葉を聞いたことがあるかもしれません。しかし、これは半分正しく、半分間違っています。コードは「何をするのか」は明確に示しますが、「なぜそうするのか」「どう使うのか」は決して説明できません。

優れた技術文書は:

  • オンボーディング時間を短縮します - 新しいチームメンバーが数週間ではなく数日で生産的になります
  • バグを減らします - 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 を書いてみてください。あなたの未来の自分が感謝するでしょう。

参考資料

  1. The Diátaxis Documentation Framework
  2. OpenAPI Specification 3.0
  3. Architecture Decision Records (ADR) - Michael Nygard
  4. GitHub README Best Practices
  5. Write the Docs Community Guides