- 技術 💻
README.mdの書き方|コピペで使える用途別テンプレート4種
README.md とは、リポジトリを開いた人が最初に読む「このソフトウェアは何で、どう動かすか」をまとめた説明書です。 GitHub ではリポジトリのトップページに自動で表示されるため、ここを読んだだけで「自分に関係があるか」「数分で動かせるか」が判断できる状態を目指して書きます。
この記事では、読み手(利用者・開発者・運用担当・採用担当)ごとに書くべき項目を一覧表にし、用途別のテンプレート4種(ライブラリ、社内業務アプリ、CLI ツール、個人ポートフォリオ)を記入例つきで掲載します。4種とも markdownlint-cli2 v0.23.3 でチェックし、指摘ゼロを確認した状態のものです。さらに、GitHub での表示仕様(README の探索順、目次の自動生成、アラート記法など)、構文チェックとリンク切れチェックの実行結果、書き漏れを防ぐチェックリストまでまとめています。Markdown の記法そのものは別記事「Markdownの書き方一覧」で扱っているので、ここでは README に何をどう書くかに絞ります。
README に書く項目の早見表
まず全員に必要な「必須」の4項目を書き、用途に応じて「推奨」を足すのが基本です。読み手の列は、その項目を特に必要とする人を示しています。
| 項目 | 重要度 | 主な読み手 | 書く内容 | ライブラリ | 社内アプリ | CLI | ポートフォリオ |
|---|---|---|---|---|---|---|---|
| 名前と一行説明 | 必須 | 全員 | 何をするものかを1〜2文で | ○ | ○ | ○ | ○ |
| インストール/セットアップ | 必須 | 利用者・開発者 | コピペで動くコマンド | ○ | ○ | ○ | ○ |
| 使い方(最小の例) | 必須 | 利用者 | 実行例と期待される出力 | ○ | ○ | ○ | ○ |
| ライセンス | 必須(公開時) | 利用者 | MIT など。LICENSE ファイルへリンク | ○ | △ | ○ | ○ |
| 動作環境・前提 | 推奨 | 利用者・開発者 | 言語・ランタイムのバージョン、必要なツール | ○ | ○ | ○ | △ |
| 環境変数・設定 | 推奨 | 開発者・運用担当 | 変数名・必須か・例・説明の表 | △ | ○ | ○ | △ |
| API/オプション一覧 | 推奨 | 利用者 | 引数・型・既定値の表、--help の出力 |
○ | - | ○ | - |
| 構成図・ディレクトリ構成 | 推奨 | 開発者 | Mermaid 図や主要ディレクトリの表 | △ | ○ | △ | △ |
| よく使うコマンド | 推奨 | 開発者 | テスト・Lint・マイグレーションなど | △ | ○ | ○ | △ |
| デプロイ手順 | 推奨 | 運用担当 | 手順そのものか、手順書へのリンク | - | ○ | - | △ |
| 問い合わせ先 | 推奨 | 全員 | Issue、チャットのチャンネル、担当チーム | △ | ○ | △ | - |
| デモ・スクリーンショット | 任意 | 利用者・採用担当 | 画像、GIF、デモ URL | △ | △ | ○ | ○ |
| バッジ | 任意 | 利用者 | バージョン、CI の状態、ライセンス | ○ | - | ○ | △ |
| 作った理由・工夫した点 | 任意 | 採用担当 | 課題、技術選定の理由、工夫 | - | - | - | ○ |
| 変更履歴 | 任意 | 利用者 | CHANGELOG.md へのリンク | ○ | △ | ○ | - |
| コントリビュート方法 | 任意 | 開発者 | CONTRIBUTING.md へのリンク | ○ | △ | ○ | - |
| トラブルシューティング | 任意 | 利用者・開発者 | よく出るエラー文と対処 | △ | ○ | △ | - |
○=ほぼ必ず書く、△=あると親切、-=通常は不要
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「README.mdの書き方|コピペで使える用途別テンプレート4種」
README を書く順番と考え方
README は「上から読んで、途中でやめても損しない」順に並べます。 多くの読み手は冒頭の数行で「自分に関係があるか」を判断し、関係があればセットアップに進みます。そのため、次の順番が読みやすくなります。
- 何か(名前と一行説明、バッジ、デモ画像)
- 動かせるか(動作環境、インストール、最小の使い方)
- 詳しく使う(API、オプション、設定、環境変数)
- 関わる(開発の始め方、コントリビュート、問い合わせ先、ライセンス)
長くなる情報は README に全部書かず、docs/ や CONTRIBUTING.md に分けてリンクするとトップページが読みやすく保てます。目安として、README には「最初の1回動かすまで」に必要なことを書き、それ以外はリンク先に任せると判断がぶれません。
一行説明の書き方
一行説明は「誰が・何を・どうできるか」を入れると伝わります。
| 書き方 | 例 |
|---|---|
| 名前を言い換えただけ | 「tiny-slugify はスラッグ化ライブラリです」 |
| 対象と効果が入っている | 「日本語を含む文字列を、URL に使えるスラッグへ変換する軽量ライブラリです。依存パッケージはありません」 |
後者のように、対象(日本語を含む文字列)・結果(URL に使えるスラッグ)・特長(依存なし)の3点が入ると、検索から来た人も一読で判断できます。
コピペで使える用途別テンプレート4種
以下の4種は、記入例を入れた完成形です。example や名前の部分を自分の内容に置き換えれば、そのまま使えます。 すべて後述の markdownlint-cli2 の設定で「0 issues」を確認しています。
| テンプレート | 主な読み手 | 特徴的な項目 |
|---|---|---|
| ライブラリ(npm パッケージ等) | 利用者 | バッジ、API 表、変更履歴 |
| 社内業務アプリ | 新しく加わる開発者・運用担当 | 構成図、環境変数表、デプロイ、問い合わせ先 |
| CLI ツール | 利用者 | --help の出力、設定ファイル、終了コード |
| 個人ポートフォリオ | 採用担当・レビュアー | デモ URL、使用技術、工夫した点 |
テンプレート1:ライブラリ
利用者が「インストールして1分で試せる」ことを最優先にした構成です。API は表にすると、引数の型と既定値が一目でわかります。
# tiny-slugify
[](https://www.npmjs.com/package/tiny-slugify)
[](https://github.com/example/tiny-slugify/actions/workflows/ci.yml)
[](LICENSE)
日本語を含む文字列を、URL に使えるスラッグへ変換する軽量ライブラリです。依存パッケージはありません。
## 特長
- 全角英数字・全角スペースを半角に正規化してから変換します
- 区切り文字や最大長をオプションで変えられます
- ESM と CommonJS の両方に対応しています
## 動作環境
| 項目 | バージョン |
| --- | --- |
| Node.js | 20 以上 |
| TypeScript(型定義を使う場合) | 5.0 以上 |
## インストール
```bash
npm install tiny-slugify
```
## 使い方
```js
import { slugify } from "tiny-slugify";
console.log(slugify("Hello World 2026"));
// => "hello-world-2026"
console.log(slugify("在庫 一覧", { separator: "_" }));
// => "在庫_一覧"
```
## API
### slugify(input, options?)
| 引数 | 型 | 既定値 | 説明 |
| --- | --- | --- | --- |
| `input` | `string` | (必須) | 変換する文字列 |
| `options.separator` | `string` | `"-"` | 単語の区切り文字 |
| `options.maxLength` | `number` | `80` | 最大文字数。超えた分は切り捨てます |
戻り値は `string` です。`input` が文字列でないときは `TypeError` を投げます。
## 変更履歴
[CHANGELOG.md](CHANGELOG.md) を参照してください。
## コントリビュート
不具合報告や改善提案は Issue でお知らせください。開発の始め方は [CONTRIBUTING.md](CONTRIBUTING.md) にまとめています。
## ライセンス
[MIT](LICENSE)
テンプレート2:社内業務アプリ
チームに新しく加わった人が、README だけでローカル起動までたどり着けることを目標にした構成です。環境変数の表と「起動できたかの確認方法」が特に役立ちます。
# 備品管理システム(bihin-kanri)
社内の備品(PC・モニター・貸出用機材)の貸出と返却を記録する Web アプリです。
総務チームが運用し、開発チームが保守しています。
> [!IMPORTANT]
> 本番環境の `.env` はリポジトリに含めていません。値は運用チームのパスワード管理ツールから取得してください。
## 目次
- [構成](#構成)
- [ローカルでの起動](#ローカルでの起動)
- [環境変数](#環境変数)
- [よく使うコマンド](#よく使うコマンド)
- [デプロイ](#デプロイ)
- [問い合わせ先](#問い合わせ先)
## 構成
```mermaid
flowchart LR
U[社員のブラウザ] --> W[Web: Next.js]
W --> A[API: Node.js]
A --> D[(PostgreSQL 16)]
```
| ディレクトリ | 内容 |
| --- | --- |
| `apps/web` | 画面(Next.js) |
| `apps/api` | API サーバー |
| `db/migrations` | DB マイグレーション |
| `docs/` | 設計資料・運用手順 |
## ローカルでの起動
前提: Node.js 22、Docker Desktop(または互換ツール)
```bash
git clone git@github.com:example-org/bihin-kanri.git
cd bihin-kanri
cp .env.example .env
docker compose up -d db
npm ci
npm run db:migrate
npm run dev
```
ブラウザで <http://localhost:3000> を開き、ログイン画面が出れば成功です。
テスト用アカウントは `admin@example.com` / `password` です(ローカル専用)。
## 環境変数
| 変数名 | 必須 | 例 | 説明 |
| --- | --- | --- | --- |
| `DATABASE_URL` | 必須 | `postgres://app:app@localhost:5432/bihin` | 接続先 DB |
| `SESSION_SECRET` | 必須 | `openssl rand -hex 32` の出力 | セッション署名用の鍵 |
| `MAIL_FROM` | 任意 | `noreply@example.com` | 返却期限メールの送信元 |
| `LOG_LEVEL` | 任意 | `info` | `debug` / `info` / `warn` / `error` |
## よく使うコマンド
| コマンド | 用途 |
| --- | --- |
| `npm run dev` | 開発サーバー起動 |
| `npm test` | 単体テスト |
| `npm run lint` | Lint と Markdown チェック |
| `npm run db:migrate` | マイグレーション適用 |
## デプロイ
`main` ブランチへのマージで、ステージング環境へ自動デプロイされます。
本番への反映手順は [docs/deploy.md](docs/deploy.md) を参照してください。
<details>
<summary>トラブルシューティング</summary>
- `ECONNREFUSED 127.0.0.1:5432` が出る: `docker compose ps` で db コンテナが起動しているか確認します
- `npm ci` が失敗する: `node -v` が 22 系か確認します
</details>
## 問い合わせ先
- 機能の要望: 総務チーム(Slack `#bihin-request`)
- 不具合: このリポジトリの Issue
ポイントは次の3つです。
- 起動手順の最後に「成功の目印」を書く(「ログイン画面が出れば成功です」)。手順の途中で止まったのか、最後まで進んだのかが本人にわかります。
- 環境変数は「必須か」「例」を必ず書く。値そのもの(本番の鍵など)は書かず、取得場所を書きます。
- 問い合わせ先は人名ではなくチャンネルやチーム名にすると、担当が変わっても更新が不要です。
テンプレート3:CLI ツール
--help の出力をそのまま載せると、オプションの説明がコードと一致しやすくなります。終了コードの表は、シェルスクリプトから呼ぶ人に役立ちます。
# logtail-lite
複数のログファイルを同時に追いかけ、キーワードで色分けして表示する CLI ツールです。

## インストール
```bash
# npm
npm install -g logtail-lite
# インストールせずに試す
npx logtail-lite --help
```
## クイックスタート
```bash
logtail-lite app.log worker.log --highlight ERROR,WARN
```
## 使い方
```text
Usage: logtail-lite [options] <files...>
Options:
-n, --lines <number> 最初に表示する末尾の行数 (default: 10)
-H, --highlight <words> カンマ区切りで色付けするキーワード
-f, --filter <regex> 一致した行だけ表示
--no-color 色を付けない
-h, --help ヘルプを表示
-V, --version バージョンを表示
```
## 設定ファイル
ホームディレクトリの `~/.logtailrc.json` に既定値を書けます。
```json
{
"lines": 50,
"highlight": ["ERROR", "WARN"]
}
```
## 終了コード
| コード | 意味 |
| --- | --- |
| `0` | 正常終了(Ctrl+C を含む) |
| `1` | 引数の誤り |
| `2` | ファイルが見つからない |
## 開発
```bash
git clone https://github.com/example/logtail-lite.git
cd logtail-lite
npm ci
npm test
npm link # ローカルの logtail-lite コマンドとして使う
```
## ライセンス
[MIT](LICENSE)
テンプレート4:個人ポートフォリオ
読み手は「この人がどう考えて作ったか」を知りたい採用担当やレビュアーです。機能の羅列よりも、作った理由と工夫した点を具体的に書くと伝わります。
# 読書記録アプリ「よみログ」
読んだ本と感想を記録し、月ごとの読書量をグラフで振り返れる Web アプリです。
学習目的で、設計からデプロイまで一人で作りました。
**デモ**: <https://yomilog.example.com>(ゲストログインあり)
<picture>
<source media="(prefers-color-scheme: dark)" srcset="docs/screenshot-dark.png">
<img alt="よみログのトップ画面" src="docs/screenshot-light.png" width="720">
</picture>
## 作った理由
紙のメモでは「今月何冊読んだか」がすぐにわからなかったため、記録と集計を一つにまとめたいと考えました。
## 機能
- 本の登録(ISBN 入力で書名と著者を自動入力)
- 感想の記録(Markdown 対応)
- 月別の読書量グラフ
- タグでの絞り込み
## 使用技術
| 分類 | 技術 |
| --- | --- |
| フロントエンド | React 19 / TypeScript / Vite |
| バックエンド | Hono / Node.js 22 |
| DB | PostgreSQL 16 |
| インフラ | Docker / GitHub Actions |
| テスト | Vitest / Playwright |
## 工夫した点
1. **一覧画面の表示を速くした**: 一覧取得を 1 回のクエリにまとめ、件数が増えても応答時間が変わらないようにしました
2. **テストを CI で自動実行**: プルリクエストごとに単体テストと E2E テストが走ります
3. **アクセシビリティ**: キーボードだけで全操作ができることを確認しました
## 今後やりたいこと
- [ ] 読みたい本リスト
- [ ] 他のユーザーとの本の共有
## ローカルでの起動
```bash
git clone https://github.com/example/yomilog.git
cd yomilog
cp .env.example .env
docker compose up -d
```
<http://localhost:5173> を開きます。
## 作者
- GitHub: [@example](https://github.com/example)
<picture> 要素を使うと、閲覧者が GitHub をダークテーマで見ているときは screenshot-dark.png、ライトテーマでは screenshot-light.png が表示されます。工夫した点は「何を・どうして・結果どうなったか」の3点で書くと、技術的な判断が伝わりやすくなります。
GitHub での README の表示仕様
GitHub は README を特別扱いし、リポジトリのトップに表示します。 2026年10月時点の GitHub Docs で確認した主な仕様は次のとおりです。
| 仕様 | 内容 | 書き方・使い方 |
|---|---|---|
| README の探索順 | .github/ → リポジトリのルート → docs/ の順に探し、最初に見つかった README を表示 |
ルートに置くのが一般的。.github/README.md があるとそちらが優先される |
| サブディレクトリの README | フォルダを開くと、そのフォルダの README が下に表示される | apps/web/README.md などでパッケージごとに説明できる |
| 目次の自動生成 | 見出しから目次が自動生成され、ファイル右上の「Outline」アイコンから開ける | 手書きの目次がなくても移動できる。長い README では手書き目次もあると親切 |
| 見出しへのリンク | 見出しが小文字化され、空白はハイフンに、記号は除かれてアンカーになる | [環境変数](#環境変数) のように書く |
| 相対リンク | docs/deploy.md や ../LICENSE のような相対パスは、表示中のブランチに合わせて解決される |
絶対 URL より相対リンクが推奨。クローンした環境でも動く |
| 画像 |  で表示。相対パス可 |
代替テキストを必ず書く |
| ダーク・ライト切り替え | <picture> と <source media="(prefers-color-scheme: dark)"> に対応 |
テンプレート4を参照 |
| 折りたたみ | <details> と <summary> で開閉できるブロックを作れる |
<summary> の後と </details> の前に空行を入れると中の Markdown が整形される |
| Mermaid 図 | コードブロックの言語に mermaid を指定すると図として表示 |
構成図やシーケンス図を画像なしで書ける |
| アラート | > [!NOTE] > [!TIP] > [!IMPORTANT] > [!WARNING] > [!CAUTION] の5種類 |
公式は「1記事に1〜2個まで」を推奨 |
| バッジ | GitHub Actions のバッジは https://github.com/OWNER/REPO/actions/workflows/ファイル名/badge.svg |
画像リンクとして [](...) の形で置く |
| サイズ上限 | 500 KiB を超えた部分は切り詰められる | 大きな表や長いログは別ファイルへ |
| プロフィール README | ユーザー名と同じ名前の公開リポジトリの README がプロフィールに表示される | 自己紹介ページとして使える |
アラート記法は次のように書きます。
> [!NOTE]
> 読み飛ばしてもよいが、知っておくと便利な補足です。
> [!WARNING]
> 実行前に確認が必要な注意点を書きます。
アラートは目立つぶん、多用すると重要度が伝わりにくくなります。 本当に読み飛ばされると困る1〜2点に絞ると効果的です。
markdownlint-cli2 で構文をチェックする
markdownlint-cli2 は、Markdown の書き方の揺れや崩れを検出するコマンドラインツールです。 空行の不足、見出しレベルの飛び、コードブロックの言語指定漏れなどを機械的に見つけられます。以下は Node.js v22.22.2、markdownlint-cli2 v0.23.3(markdownlint v0.41.1)で実行した結果です。
インストール
npm init -y
npm install -D markdownlint-cli2
npx markdownlint-cli2 --version
markdownlint-cli2 v0.23.3 (markdownlint v0.41.1)
崩れた README をチェックした結果
次のような、空行が少なく見出しレベルも飛んでいる README を用意しました。
# task-api
タスクを管理するAPIです。
### セットアップ
```
npm install
npm run dev
```
* 手順は [こちら](docs/setup.md)
- 詳細は [設定](docs/config.md) を参照
- [使い方](#使い方)
詳しくは https://example.com を見てください。
## ライセンス
MIT
npx markdownlint-cli2 README.md
実行結果(設定ファイルなし、既定ルール):
Summary: 16 issues in 1 file
README.md:1 error MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "# task-api"]
README.md:3 error MD001/heading-increment Heading levels should only increment by one level at a time [Expected: h2; Actual: h3]
README.md:3 error MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "### セットアップ"]
README.md:3 error MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "### セットアップ"]
README.md:4 error MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
README.md:4 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:7 error MD031/blanks-around-fences Fenced code blocks should be surrounded by blank lines [Context: "```"]
README.md:8 error MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "* 手順は [こちら](docs/setup.md)"]
README.md:8 error MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "* 手順は [こちら](docs/setup.md)"]
README.md:9:1 error MD004/ul-style Unordered list style [Expected: asterisk; Actual: dash]
README.md:9 error MD032/blanks-around-lists Lists should be surrounded by blank lines [Context: "- 詳細は [設定](docs/config.md) を参照"]
README.md:10:1 error MD004/ul-style Unordered list style [Expected: asterisk; Actual: dash]
README.md:10:3 error MD051/link-fragments Link fragments should be valid [Context: "[使い方](#使い方)"]
README.md:12:6 error MD034/no-bare-urls Bare URL used [Context: "https://example.com"]
README.md:13 error MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "## ライセンス"]
README.md:13 error MD022/blanks-around-headings Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## ライセンス"]
指摘ごとの直し方
| ルール | 意味 | 直し方 |
|---|---|---|
| MD001 | 見出しレベルが飛んでいる(h1 の次に h3) | ### を ## にする |
| MD004 | 箇条書きの記号(- と *)が混在 |
どちらかに統一。設定で "style": "dash" も指定できる |
| MD022 | 見出しの前後に空行がない | 見出しの上下に空行を入れる |
| MD031 | コードブロックの前後に空行がない | フェンスの上下に空行を入れる |
| MD032 | 箇条書きの前後に空行がない | リストの上下に空行を入れる |
| MD034 | URL がむき出し | <https://example.com> か [説明](https://example.com) にする |
| MD040 | コードブロックに言語名がない | ```bash のように言語を書く(シンタックスハイライトも効く) |
| MD051 | ページ内リンクの飛び先がない | 存在する見出しにリンクするか、見出しを追加する |
--fix を付けると、空行や記号の統一など機械的に直せるものは自動で修正されます。
npx markdownlint-cli2 --fix README.md
Attempted: 13 fixes in 1 file
Summary: 3 issues in 1 file
README.md:5 error MD001/heading-increment Heading levels should only increment by one level at a time [Expected: h2; Actual: h3]
README.md:7 error MD040/fenced-code-language Fenced code blocks should have a language specified [Context: "```"]
README.md:14:3 error MD051/link-fragments Link fragments should be valid [Context: "[使い方](#使い方)"]
16件中13件が自動修正され、残った3件(見出しレベル、言語名、リンク先)は意味を判断する必要があるため手で直します。
設定ファイル(日本語の README 向け)
プロジェクトのルートに .markdownlint-cli2.jsonc を置くと、ルールを調整できます。
{
"config": {
"default": true,
// 日本語は1行が長くなりやすく、表の行も長いので行長チェックを外す
"MD013": false,
// 箇条書きの記号を - に統一
"MD004": { "style": "dash" },
// README でよく使う HTML 要素だけ許可
"MD033": { "allowed_elements": ["details", "summary", "picture", "source", "img", "br"] }
},
"ignores": ["node_modules/**", "CHANGELOG.md"]
}
MD033 を調整しない場合、テンプレート2・4は次のように指摘されます(既定では HTML の直書きを指摘するルールのため)。
Summary: 5 issues in 2 files
app.md:74:1 error MD033/no-inline-html Inline HTML [Element: details]
app.md:75:1 error MD033/no-inline-html Inline HTML [Element: summary]
portfolio.md:8:1 error MD033/no-inline-html Inline HTML [Element: picture]
portfolio.md:9:3 error MD033/no-inline-html Inline HTML [Element: source]
portfolio.md:10:3 error MD033/no-inline-html Inline HTML [Element: img]
設定ファイルを置いた状態で、修正後の README とテンプレート4種をまとめてチェックした結果です。
npx markdownlint-cli2 "**/*.md" "#node_modules"
Linting: 7 files
Summary: 0 issues in 0 files
package.json の scripts に "lint:md": "markdownlint-cli2 \"**/*.md\" \"#node_modules\"" を登録しておくと、CI でも同じチェックを回せます。
リンク切れをチェックする
README の相対リンクやページ内リンクは、ファイルの移動や見出しの変更で切れやすい部分です。 ここでは npm の markdown-link-check v3.15.0 で確認しました。外部 URL は CI 環境によっては到達できないことがあるため、設定で外部 URL を除外し、リポジトリ内のリンクだけを確認しています。
{ "ignorePatterns": [ { "pattern": "^https?://" } ] }
npm install -D markdown-link-check
npx markdown-link-check -c mlc.json README.md
docs/config.md が存在せず、#使い方 という見出しもない状態での実行結果:
FILE: README.md
[✓] docs/setup.md
[✖] docs/config.md
[✖] #%E4%BD%BF%E3%81%84%E6%96%B9
[/] https://example.com
4 links checked.
ERROR: 2 dead links found!
[✖] docs/config.md → Status: 400
[✖] #%E4%BD%BF%E3%81%84%E6%96%B9 → Status: 404
docs/config.md を作り、## 使い方 の見出しを追加した後の結果:
FILE: README.md
[✓] docs/setup.md
[✓] docs/config.md
[✓] #%E4%BD%BF%E3%81%84%E6%96%B9
[/] https://example.com
4 links checked.
[/] は設定で除外したリンクです。日本語の見出しへのリンクは URL エンコードされて表示されますが、正しく検出されています。 markdownlint の MD051 もページ内リンクを確認できるので、両方を CI に入れておくと安心です。
よくある不足のチェックリスト
README で一番多いつまずきは「書いてある手順どおりに実行しても動かない」ことです。 書き終えたら、次の表で確認します。
| チェック項目 | よくある状態 | こうすると解決 |
|---|---|---|
| セットアップ手順を新しい環境で試したか | 自分の PC では動くが、他の人の環境では途中で止まる | 新しいディレクトリにクローンし直して、README のコマンドだけで動くか試す |
| 前提ツールのバージョンを書いたか | Node.js や Python のバージョン違いでエラーになる | 動作環境の表にバージョンを書く。.nvmrc や .python-version も置く |
| 環境変数をすべて説明したか | .env.example にあるのに README に説明がない、またはその逆 |
変数名・必須か・例・説明の表を作り、.env.example と一致させる |
| 秘密情報を書いていないか | 本番の鍵やパスワードを例として書いてしまう | 値ではなく「取得場所」を書く。例はダミー値にする |
| 成功の目印を書いたか | 起動したのかどうか判断できない | 「http://localhost:3000 でログイン画面が出れば成功」と書く |
コマンドに $ を付けていないか |
コピペすると $: command not found になる |
プロンプト記号は付けず、出力は別のブロックに分ける |
| コードブロックに言語名があるか | ハイライトされず読みにくい | ```bash ```json などを付ける(MD040 で検出可) |
| 相対リンクが切れていないか | ファイル移動後にリンクが 404 になる | markdown-link-check を CI で回す |
| 画像に代替テキストがあるか | 画像が読めない環境で内容が伝わらない |  のように書く |
| 依存の更新に追従しているか | README の手順が以前のバージョンのまま | 依存を上げるプルリクエストで README も一緒に直す。PR テンプレートに確認欄を置く |
| 問い合わせ先があるか | 困ったときにどこへ聞けばよいかわからない | Issue やチャンネル名を書く |
特に効果が大きいのは「新しい環境で README だけを見て動かしてみる」ことです。 Docker コンテナや別ユーザーで試すと、自分の PC にだけ入っているツールや設定に気づけます。
よくある質問
Q. README は英語と日本語のどちらで書けばよいですか?
A. 読み手に合わせます。社内向けなら日本語、海外の利用者も想定する公開ライブラリなら英語が一般的です。両方用意する場合は README.md(英語)と README.ja.md(日本語)のように分け、冒頭に互いへのリンクを置くと迷いません。
Q. README.md と README(拡張子なし)の違いは何ですか?
A. 拡張子が .md だと GitHub が Markdown として整形して表示します。拡張子なしやテキスト形式だと、そのままの文字として表示されます。見出しや表を使うなら README.md にします。
Q. README にどこまで詳しく書けばよいですか?
A. 「初めての人が最初の1回動かすまで」を目安にします。API の全仕様や運用手順の詳細は docs/ に分け、README からリンクすると読みやすさを保てます。GitHub では 500 KiB を超える部分が切り詰められる点も覚えておくと安心です。
Q. 目次は手書きしたほうがよいですか? A. GitHub には見出しから目次を自動生成する機能(Outline)があるので、短い README なら不要です。長い README や、GitHub 以外(エディタやドキュメントサイト)でも読まれる場合は、テンプレート2のように手書きの目次があると便利です。
まとめ
- README.md は「何か」「動かせるか」「詳しく使う」「関わる」の順に、上から読めば判断できる構成にする
- 必須は名前と一行説明・セットアップ・使い方・ライセンスの4つ。用途に応じて環境変数や API 表を足す
- 用途別テンプレート4種(ライブラリ、社内業務アプリ、CLI、ポートフォリオ)は置き換えるだけで使える
- GitHub は
.github/→ ルート →docs/の順に README を探し、目次の自動生成、Mermaid、アラート記法に対応している - markdownlint-cli2 の
--fixで機械的な崩れは自動修正でき、残りは意味を判断して手で直す - リンク切れは markdown-link-check で検出でき、CI に入れると最新に保ちやすい
- 新しい環境で README だけを見て動かしてみるのが、書き漏れを見つける一番の近道
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「README.mdの書き方|コピペで使える用途別テンプレート4種」
株式会社RJCでは、読み手に伝わるドキュメントの書き方を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。