jpskill.com
✍️ ライティング コミュニティ

documentation-and-adrs

将来のエンジニアやAIがコードを理解するために、設計上の決定、API変更、機能リリースなどの背景情報を記録し、共有することで、よりスムーズな開発や保守を実現するSkill。

📜 元の英語説明(参考)

Use when making architectural decisions, changing public APIs, shipping features, or when you need to record context that future engineers and agents will need to understand the codebase.

🇯🇵 日本人クリエイター向け解説

一言でいうと

将来のエンジニアやAIがコードを理解するために、設計上の決定、API変更、機能リリースなどの背景情報を記録し、共有することで、よりスムーズな開発や保守を実現するSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o documentation-and-adrs.zip https://jpskill.com/download/9579.zip && unzip -o documentation-and-adrs.zip && rm documentation-and-adrs.zip
🪟 Windows (PowerShell)
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9579.zip -OutFile "$d\documentation-and-adrs.zip"; Expand-Archive "$d\documentation-and-adrs.zip" -DestinationPath $d -Force; ri "$d\documentation-and-adrs.zip"

完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。

💾 手動でダウンロードしたい(コマンドが難しい人向け)
  1. 1. 下の青いボタンを押して documentation-and-adrs.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → documentation-and-adrs フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-18
取得日時
2026-05-18
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

ドキュメンテーションと ADR

概要

コードだけでなく、決定をドキュメント化しましょう。最も価値のあるドキュメンテーションは、なぜそうなったのか、つまり、決定に至った背景、制約、トレードオフを捉えたものです。コードは何が構築されたかを示し、ドキュメンテーションはなぜそのように構築されたのか、そしてどのような代替案が検討されたのかを説明します。この背景は、将来コードベースを扱う人間やエージェントにとって不可欠です。

いつ使うか

  • 重要なアーキテクチャ上の決定を行うとき
  • 競合するアプローチの中から選択するとき
  • パブリック API を追加または変更するとき
  • ユーザーに影響を与える機能をリリースするとき
  • 新しいチームメンバー(またはエージェント)をプロジェクトにオンボーディングするとき
  • 同じことを繰り返し説明していることに気づいたとき

いつ使わないか: 明らかなコードをドキュメント化しないでください。コードがすでに述べていることを繰り返すコメントを追加しないでください。使い捨てのプロトタイプのためにドキュメントを作成しないでください。

Architecture Decision Records (ADRs)

ADR は、重要な技術的決定の背後にある理由を記録します。これらは、記述する価値が最も高いドキュメンテーションです。

ADR をいつ書くか

  • フレームワーク、ライブラリ、または主要な依存関係を選択するとき
  • データモデルまたはデータベーススキーマを設計するとき
  • 認証戦略を選択するとき
  • API アーキテクチャ(REST vs. GraphQL vs. tRPC)を決定するとき
  • ビルドツール、ホスティングプラットフォーム、またはインフラストラクチャを選択するとき
  • 元に戻すのにコストがかかる可能性のある決定

ADR テンプレート

ADR は、連番を付けて docs/decisions/ に保存します。

# ADR-001: プライマリデータベースに PostgreSQL を使用する

## ステータス
Accepted | Superseded by ADR-XXX | Deprecated

## 日付
2025-01-15

## 背景
タスク管理アプリケーションにプライマリデータベースが必要です。主な要件:
- リレーショナルデータモデル(ユーザー、タスク、チームとそれらの関係)
- タスクの状態変更のための ACID トランザクション
- タスクコンテンツの全文検索のサポート
- マネージドホスティングが利用可能(小規模チーム向け、運用能力は限られている)

## 決定
Prisma ORM を使用して PostgreSQL を使用します。

## 検討された代替案

### MongoDB
- 長所: 柔軟なスキーマ、簡単に始められる
- 短所: データは本質的にリレーショナルであるため、関係を手動で管理する必要がある
- 却下: ドキュメントストア内のリレーショナルデータは、複雑な結合またはデータの重複につながる

### SQLite
- 長所: ゼロコンフィギュレーション、組み込み、読み取りが高速
- 短所: 同時書き込みのサポートが制限されている、本番環境向けのマネージドホスティングがない
- 却下: 本番環境のマルチユーザー Web アプリケーションには適さない

### MySQL
- 長所: 成熟している、広くサポートされている
- 短所: PostgreSQL は、より優れた JSON サポート、全文検索、およびエコシステムツールを備えている
- 却下: PostgreSQL は、機能要件により適している

## 結果
- Prisma は、タイプセーフなデータベースアクセスと移行管理を提供する
- Elasticsearch を追加する代わりに、PostgreSQL の全文検索を使用できる
- チームは PostgreSQL の知識を必要とする(標準的なスキル、リスクは低い)
- マネージドサービス(Supabase、Neon、または RDS)でホストする

ADR ライフサイクル

PROPOSED → ACCEPTED → (SUPERSEDED or DEPRECATED)
  • 古い ADR を削除しないでください。 それらは歴史的な背景を捉えています。
  • 決定が変更された場合は、古い ADR を参照して置き換える新しい ADR を記述します。

インラインドキュメンテーション

いつコメントするか

ではなく、なぜをコメントします。

// BAD: コードを繰り返している
// カウンターを 1 増やす
counter += 1;

// GOOD: 明らかでない意図を説明する
// レート制限はスライディングウィンドウを使用します — ウィンドウエッジでのバースト攻撃を防ぐために、
// 固定スケジュールではなく、ウィンドウ境界でカウンターをリセットします
if (now - windowStart > WINDOW_SIZE_MS) {
  counter = 0;
  windowStart = now;
}

いつコメントしないか

// 自明なコードにコメントしないでください
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

// 今すぐやるべきことのために TODO コメントを残さないでください
// TODO: エラー処理を追加する  ← 今すぐ追加してください

// コメントアウトされたコードを残さないでください
// const oldImplementation = () => { ... }  ← 削除してください。git に履歴があります

既知の注意点をドキュメント化する

/**
 * 重要: この関数は、最初のレンダリングの前に呼び出す必要があります。
 * ハイドレーション後に呼び出されると、テーマコンテキストが SSR 中に使用できないため、
 * スタイルなしコンテンツのフラッシュが発生します。
 *
 * 完全な設計上の根拠については、ADR-003 を参照してください。
 */
export function initializeTheme(theme: Theme): void {
  // ...
}

API ドキュメンテーション

パブリック API (REST、GraphQL、ライブラリインターフェース) の場合:

型によるインライン (TypeScript に推奨)

/**
 * 新しいタスクを作成します。
 *
 * @param input - タスク作成データ (title は必須、description はオプション)
 * @returns サーバーで生成された ID とタイムスタンプを含む、作成されたタスク
 * @throws {ValidationError} title が空であるか、200 文字を超える場合
 * @throws {AuthenticationError} ユーザーが認証されていない場合
 *
 * @example
 * const task = await createTask({ title: 'Buy groceries' });
 * console.log(task.id); // "task_abc123"
 */
export async function createTask(input: CreateTaskInput): Promise<Task> {
  // ...
}

REST API 用の OpenAPI / Swagger

paths:
  /api/tasks:
    post:
      summary: タスクを作成する
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTaskInput'
      responses:
        '201':
          description: タスクが作成されました
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '422':
          description: バリデーションエラー

README の構造

すべてのプロジェクトには、以下をカバーする README が必要です。


# プロジェクト名

このプロジェクトが何をするかの 1 段落の説明。

## クイックスタート
1. リポジトリをクローンする
2. 依存関係をインストールする: `npm install`
3. 環境をセットアップする: `cp .env.example .env`
4. 開発サーバーを実行する: `npm run dev`

## コマンド
| コマンド | 説明 |
|---------|-------------|
| `npm run dev` | 開発サーバーを起動する |
| `npm test` | テストを実行する |
| `npm run build` | 本番環境

(原文はここで切り詰められています)
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Documentation and ADRs

Overview

Document decisions, not just code. The most valuable documentation captures the why — the context, constraints, and trade-offs that led to a decision. Code shows what was built; documentation explains why it was built this way and what alternatives were considered. This context is essential for future humans and agents working in the codebase.

When to Use

  • Making a significant architectural decision
  • Choosing between competing approaches
  • Adding or changing a public API
  • Shipping a feature that changes user-facing behavior
  • Onboarding new team members (or agents) to the project
  • When you find yourself explaining the same thing repeatedly

When NOT to use: Don't document obvious code. Don't add comments that restate what the code already says. Don't write docs for throwaway prototypes.

Architecture Decision Records (ADRs)

ADRs capture the reasoning behind significant technical decisions. They're the highest-value documentation you can write.

When to Write an ADR

  • Choosing a framework, library, or major dependency
  • Designing a data model or database schema
  • Selecting an authentication strategy
  • Deciding on an API architecture (REST vs. GraphQL vs. tRPC)
  • Choosing between build tools, hosting platforms, or infrastructure
  • Any decision that would be expensive to reverse

ADR Template

Store ADRs in docs/decisions/ with sequential numbering:

# ADR-001: Use PostgreSQL for primary database

## Status
Accepted | Superseded by ADR-XXX | Deprecated

## Date
2025-01-15

## Context
We need a primary database for the task management application. Key requirements:
- Relational data model (users, tasks, teams with relationships)
- ACID transactions for task state changes
- Support for full-text search on task content
- Managed hosting available (for small team, limited ops capacity)

## Decision
Use PostgreSQL with Prisma ORM.

## Alternatives Considered

### MongoDB
- Pros: Flexible schema, easy to start with
- Cons: Our data is inherently relational; would need to manage relationships manually
- Rejected: Relational data in a document store leads to complex joins or data duplication

### SQLite
- Pros: Zero configuration, embedded, fast for reads
- Cons: Limited concurrent write support, no managed hosting for production
- Rejected: Not suitable for multi-user web application in production

### MySQL
- Pros: Mature, widely supported
- Cons: PostgreSQL has better JSON support, full-text search, and ecosystem tooling
- Rejected: PostgreSQL is the better fit for our feature requirements

## Consequences
- Prisma provides type-safe database access and migration management
- We can use PostgreSQL's full-text search instead of adding Elasticsearch
- Team needs PostgreSQL knowledge (standard skill, low risk)
- Hosting on managed service (Supabase, Neon, or RDS)

ADR Lifecycle

PROPOSED → ACCEPTED → (SUPERSEDED or DEPRECATED)
  • Never delete old ADRs. They capture historical context.
  • When a decision changes, write a new ADR that references and supersedes the old one.

Inline Documentation

When to Comment

Comment the why, not the what:

// BAD: Restates the code
// Increment counter by 1
counter += 1;

// GOOD: Explains non-obvious intent
// Rate limit uses a sliding window — reset counter at window boundary,
// not on a fixed schedule, to prevent burst attacks at window edges
if (now - windowStart > WINDOW_SIZE_MS) {
  counter = 0;
  windowStart = now;
}

When NOT to Comment

// Don't comment self-explanatory code
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

// Don't leave TODO comments for things you should just do now
// TODO: add error handling  ← Just add it

// Don't leave commented-out code
// const oldImplementation = () => { ... }  ← Delete it, git has history

Document Known Gotchas

/**
 * IMPORTANT: This function must be called before the first render.
 * If called after hydration, it causes a flash of unstyled content
 * because the theme context isn't available during SSR.
 *
 * See ADR-003 for the full design rationale.
 */
export function initializeTheme(theme: Theme): void {
  // ...
}

API Documentation

For public APIs (REST, GraphQL, library interfaces):

Inline with Types (Preferred for TypeScript)

/**
 * Creates a new task.
 *
 * @param input - Task creation data (title required, description optional)
 * @returns The created task with server-generated ID and timestamps
 * @throws {ValidationError} If title is empty or exceeds 200 characters
 * @throws {AuthenticationError} If the user is not authenticated
 *
 * @example
 * const task = await createTask({ title: 'Buy groceries' });
 * console.log(task.id); // "task_abc123"
 */
export async function createTask(input: CreateTaskInput): Promise<Task> {
  // ...
}

OpenAPI / Swagger for REST APIs

paths:
  /api/tasks:
    post:
      summary: Create a task
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateTaskInput'
      responses:
        '201':
          description: Task created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Task'
        '422':
          description: Validation error

README Structure

Every project should have a README that covers:

# Project Name

One-paragraph description of what this project does.

## Quick Start
1. Clone the repo
2. Install dependencies: `npm install`
3. Set up environment: `cp .env.example .env`
4. Run the dev server: `npm run dev`

## Commands
| Command | Description |
|---------|-------------|
| `npm run dev` | Start development server |
| `npm test` | Run tests |
| `npm run build` | Production build |
| `npm run lint` | Run linter |

## Architecture
Brief overview of the project structure and key design decisions.
Link to ADRs for details.

## Contributing
How to contribute, coding standards, PR process.

Changelog Maintenance

For shipped features:

# Changelog

## [1.2.0] - 2025-01-20
### Added
- Task sharing: users can share tasks with team members (#123)
- Email notifications for task assignments (#124)

### Fixed
- Duplicate tasks appearing when rapidly clicking create button (#125)

### Changed
- Task list now loads 50 items per page (was 20) for better UX (#126)

Documentation for Agents

Special consideration for AI agent context:

  • CLAUDE.md / rules files — Document project conventions so agents follow them
  • Spec files — Keep specs updated so agents build the right thing
  • ADRs — Help agents understand why past decisions were made (prevents re-deciding)
  • Inline gotchas — Prevent agents from falling into known traps

Common Rationalizations

Rationalization Reality
"The code is self-documenting" Code shows what. It doesn't show why, what alternatives were rejected, or what constraints apply.
"We'll write docs when the API stabilizes" APIs stabilize faster when you document them. The doc is the first test of the design.
"Nobody reads docs" Agents do. Future engineers do. Your 3-months-later self does.
"ADRs are overhead" A 10-minute ADR prevents a 2-hour debate about the same decision six months later.
"Comments get outdated" Comments on why are stable. Comments on what get outdated — that's why you only write the former.

Red Flags

  • Architectural decisions with no written rationale
  • Public APIs with no documentation or types
  • README that doesn't explain how to run the project
  • Commented-out code instead of deletion
  • TODO comments that have been there for weeks
  • No ADRs in a project with significant architectural choices
  • Documentation that restates the code instead of explaining intent

Verification

After documenting:

  • [ ] ADRs exist for all significant architectural decisions
  • [ ] README covers quick start, commands, and architecture overview
  • [ ] API functions have parameter and return type documentation
  • [ ] Known gotchas are documented inline where they matter
  • [ ] No commented-out code remains
  • [ ] Rules files (CLAUDE.md etc.) are current and accurate