Updated

コピペで試せるMarkdown記事の実践テンプレート

読者が迷わず再現できる技術記事を題材に、コマンド、検証、トラブル対応まで含めたMarkdownの実践例を紹介します。

Author

kinn00kinn新しい記事を見逃さない

Markdownの機能確認だけなら、見出し、表、画像を一つずつ並べれば済む。しかし、実際の技術記事で大切なのは、記法の数よりも読者が途中で迷わず、結果を自分で確かめられることだ。

この記事は、このブログで使えるMarkdownを見せながら、そのまま執筆時のチェックリストとして使える形にした。コマンド右上の「コピー」を押すと、プロンプト記号を含まないコマンドだけをコピーできる。

元の記法を確認したい場合は、この記事のRaw Markdownを開く。このサイトでは、公開記事のURL末尾に .md を付けると、frontmatterを含む原稿をプレーンテキストで読める。

この記事のゴール: 新しい記事を作り、ローカルで表示を確認し、公開前の検証までを再現できるようにする。

先に結論

再現しやすい技術記事には、少なくとも次の情報が必要になる。

  • 対象バージョンと作業ディレクトリ
  • そのままコピーできる、1操作単位のコマンド
  • 成功したと判断できる期待結果
  • 変更内容を確かめる検証コマンド
  • 失敗したときの確認場所と、安全な戻し方

「実行できた」と「正しくできた」は別なので、操作と検証をセットで書くのがポイントだ。

0. 前提条件を固定する

この記事の例は、このブログのrepository直下で実行する。必要な環境は次のとおり。

項目条件確認コマンド
Node.js22.12.0以上node --version
npmNode.jsに同梱されたものnpm --version
Gitrepositoryの差分確認に使用git --version

まず、3つをまとめて確認する。

node --version
npm --version
git --version

バージョン番号がそれぞれ表示されれば次へ進める。command not found や「認識されていません」と表示された場合は、記事作成より先に不足しているツールを導入する。

なぜ最初にバージョンを書くのか

同じコマンドでも、メジャーバージョンやOSが違えば結果は変わる。「最新版を使う」だけでは、後から記事を読んだ人が当時の条件を再現できない。実行結果を保証した環境を数字で残しておくと、問題の切り分けが速くなる。

1. 下書きを作る

記事作成CLIを対話形式で起動する。

npm run new:post

自動化したい場合は、値を引数で渡せる。以下は reproducible-guide というslugで下書きを作る例だ。

npm run new:post -- --slug reproducible-guide --title "再現できる手順書" --description "実行結果まで検証できる手順書の例です。" --tags 2026,markdown

成功すると、原稿と画像用ディレクトリが作られる。

src/content/blog/reproducible-guide.md
src/content/assets/reproducible-guide/

生成物を検証する

ファイルがあることだけでなく、Gitが新規ファイルとして認識していることも確認する。

git status --short

期待する表示は次のようになる。出力例はコマンドと別のブロックにし、誤って一緒にコピーされないようにする。

?? src/content/assets/reproducible-guide/
?? src/content/blog/reproducible-guide.md

2. frontmatterを埋める

記事のメタデータは冒頭のfrontmatterに置く。本文ではH1を重ねず、H2から始めると、ページタイトルとの役割が重複しない。

---
title: 再現できる手順書
slug: reproducible-guide
description: 実行結果まで検証できる手順書の例です。
publishedAt: 2026-08-27
draft: true
tags:
  - '2026'
  - markdown
---

slug とtagは小文字英数字とハイフンを使う。公開前までは draft: true のままにしておく。

画像は原稿から相対参照する

画像を src/content/assets/ 以下へ置き、Markdownには通常の相対パスを書く。公開先のR2 URLを原稿へ直接書かないため、保存先を変えても原稿が壊れにくい。次の例は、このrepositoryに実在する画像を参照している。

![Markdown記事のサンプル画像](../assets/sample-image.jpg)

代替テキストには「画像」ではなく、画像を見られない場合にも必要な内容を書く。

3. 手順と検証を対にする

操作だけを並べると、読者はどこまで成功したか判断できない。各手順を「操作 → 期待結果 → 検証」の小さな単位に分ける。

flowchart LR A[操作する] --> B[期待結果を見る] B --> C{検証に成功?} C -->|Yes| D[次の手順へ] C -->|No| E[状態を保存して原因を調べる]

このブログなら、公開前の最小検証はbuildだ。

npm run build

終了コードが 0 で、最後に Complete! が表示されればbuildは成功している。さらに、意図しない空白エラーがないかを確認する。

git diff --check

何も表示されなければ問題はない。コマンドの「無出力」が成功を意味する場合は、そのことを本文に明記しておく。

変更の要点を読む

差分全体を読む前に統計を見ると、画像の混入や想定外の大量変更に気づきやすい。

git diff --stat

次に本文の差分を確認する。

git diff -- src/content/blog/reproducible-guide.md

ファイル名を明示すると、他の作業中の差分を混ぜずに確認できる。

4. 危険なコマンドにガードレールを付ける

技術記事では、短さよりも事故を起こしにくいことを優先する。特に削除、上書き、deployを伴うコマンドには、対象と影響範囲を書く。

注意: npm run publish は検証だけでなく、R2・D1の同期、build、Cloudflareへのdeployまで実行する。動作確認だけなら npm run build を使う。

公開する準備が整ったら、frontmatterを draft: false に変えてから実行する。

npm run publish

パスワード、API token、.env の中身は、伏せ字であってもコピー用ブロックへ載せない。環境変数名だけを例示する。

export API_TOKEN="your-token-here"

上の値はプレースホルダーであり、そのままでは動かない。読者が置き換える箇所は、コマンドの直前か直後に明記する。

5. 失敗時の情報を残す

「失敗したらやり直す」だけでは、原因を消してしまうことがある。まず現在の状態を読み取り、ログを保存してから修正する。

npm run build *>&1 | Tee-Object -FilePath .tmp/build.log

macOSやLinuxでは次のようにする。

npm run build 2>&1 | tee .tmp/build.log
症状最初に確認する場所よくある原因
frontmatter errorエラーに出た記事名とfield必須field不足、slugの形式
image not foundMarkdownの相対パスファイル名の大文字・小文字、拡張子
broken internal link/blog/ から始まるURLslugの変更、末尾の余分なslash
deploy failureWranglerが返した最初のerrorlogin切れ、binding設定、network

下書きだけを安全に取り消す

この記事の例で新規作成したファイルが不要になった場合は、削除対象を先に確認する。

Get-Item -LiteralPath "src/content/blog/reproducible-guide.md"
Get-Item -LiteralPath "src/content/assets/reproducible-guide"

確認後、自分で今作った未追跡ファイルだけを削除する。既存記事や、他の作業者の差分には使わない。

Remove-Item -LiteralPath "src/content/blog/reproducible-guide.md"
Remove-Item -LiteralPath "src/content/assets/reproducible-guide" -Recurse

git reset --hard のようにrepository全体の変更を消すコマンドは、手軽な「やり直し」として記事へ載せない。

Markdown機能の使い分け

表現向いている用途避けたい使い方
太字結論、判断条件段落の大半を強調する
inline codecommand名、file名、field名長いコマンドを埋め込む
箇条書き順不同の条件手順の順番を表す
番号付きリスト順序が必要な操作順不同の特徴を並べる
引用注意、前提、引用通常の本文すべてを囲む
同じ観点での比較長文をセルへ詰め込む
脚注本筋を止める補足実行に必須の条件を隠す

URLを単独行に置くとリンクカードになる。たとえば、このブログの構成を詳しく説明した記事は内部カードとして表示できる。

外部URLも同じ記法でカードになる。

文中の通常リンクにしたい場合は、AstroのMarkdownガイドのようにリンク記法を使う。

脚注は、用語の由来や補足資料のように、読まなくても手順を完了できる情報へ使う。1

公開前チェックリスト

  • タイトルだけで読者と得られる結果が分かる
  • 対象OS、version、作業ディレクトリを書いた
  • コマンドへ $> などのプロンプト記号を含めていない
  • コマンドと出力例を別のコードブロックにした
  • 破壊的操作の前に対象を確認する手順を書いた
  • placeholderと、読者が置き換える値を説明した
  • 成功条件と失敗時の確認場所を書いた
  • 画像に内容の分かる代替テキストを付けた
  • npm run buildgit diff --check が成功した
  • Raw Markdownでも構造を追える

まとめ

Markdownの強みは、装飾を増やせることではなく、操作、結果、判断材料をプレーンテキストで残せることにある。

コマンドをコピー可能にし、前提条件、期待結果、検証、失敗時の手順まで揃えると、記事は「読んで分かった気になる説明」から「あとで再現できる資料」になる。表示結果と原稿を見比べたいときは、このページのRaw Markdownを参照してほしい。

Footnotes

  1. このブログではrepository内のMarkdownと元画像を正本とし、公開環境のデータはそこから再生成できるようにしている。

この記事を書いた人

kinn00kinnSoftware / Research / Writing