VitePressでドキュメントサイト構築してGitHub Pagesで公開してみた
はじめに
VitePressを試してみようと思ったきっかけ
Next.jsに入門したくて、Claudeに入門手順や演習のドキュメントをMarkdownで作成してもらいました。
ただ、ローカルのMarkdownファイルのままだと見づらいし、今後他の人に共有することがあるかもしれないので、そうなるとパブリック公開のWebサイトにするのが一番良さそうだなと思いました。
以前、「Markdownをそのままサイト化できるツール」として、MkDocsは使用したことがあったのですが、せっかくなので使ったことのないツールを使いたいなと思い探していたところ、VitePressに出会いました。
こんな人におすすめ!
- 爆速でページを公開したい人 - セットアップから公開まで10分で完了
- Markdownで手軽にドキュメントを書きたい人 - 独自記法なし、普段のMarkdownがそのまま使える
- 環境構築を最小限にしたい人 - Node.jsさえあればOK
- 無料でサイトを公開したい人 - GitHub Pagesで完全無料
- ローカルで確認しながら書きたい人 - 保存するだけで即プレビュー反映
VitePressとは?
概要
ざっくり言うと、Markdownファイルをいい感じのWebサイトに変換してくれるツールです。
内部的にはViteを使っているので、ReactやVueでViteを使ったことがある人なら馴染みのある爆速の開発体験がそのまま得られます。
主な特徴
- Vite駆動: 開発サーバーの起動が瞬時、HMR(Hot Module Replacement)が爆速
- Vue 3ベース: Composition APIが使える、TypeScriptフレンドリー
- Markdownファースト:
.mdファイルをそのままページとして認識 - 軽量: 最小限の依存関係、シンプルな設計
セットアップ手順
前提条件
以下の環境で動作確認しています:
| 項目 | バージョン |
|---|---|
| OS | macOS 15 (Sequoia) |
| Git | 2.39.5 |
| Node.js | v24.12.0 |
| pnpm | 10.21.0 |
Note: Git、Node.js 18以上、pnpm(またはnpm/yarn)がインストールされていれば動作します。
1. プロジェクトの初期化
まず、作業ディレクトリに移動してVitePressをインストールします。
# プロジェクトディレクトリ(今回は演習資料を格納するので「practice」という名前にしました)に移動
cd practice
# package.jsonの作成(まだない場合)
pnpm init
# VitePressのインストール
pnpm add -D vitepress
2. VitePressの初期設定
VitePressの初期化コマンドを実行します。
pnpm vitepress init
以下のような質問に答えます:
┌ Welcome to VitePress!
│
◇ Where should VitePress initialize the config?
│ ./ ← 設定ファイルをどこに作成するか。今回は現在のディレクトリを選択。
│
◇ Where should VitePress look for your markdown files?
│ ./ ← どのディレクトリに公開したいマークダウンファイルを置いてるか。今回は現在のディレクトリを選択。
│
◇ Site title:
│ Next.js入門ドキュメント ← サイトのタイトルを入力。
│
◇ Site description:
│ Next.js入門のための演習教材 ← サイトの説明を入力。
│
◇ Theme:
│ Default Theme ← テーマを選択。今回はデフォルトを選択。
│
◇ Use TypeScript for config and theme files?
│ Yes ← コンフィグファイルでTypeScriptを使用するか。
│
◇ Add VitePress npm scripts to package.json?
│ Yes ← 開発サーバーの起動コマンド(vitepress dev)等をpackage.jsonに記載するか。
│
◇ Add a prefix for VitePress npm scripts?
│ Yes ← コマンドにプレフィックスを利用するか。「doc」のような任意のプレフィックスを付与可能。※次の設問参照
│
◇ Prefix for VitePress npm scripts:
│ doc ← これにより doc:dev, doc:build などのコマンドになる(デフォルトだとdev, buildの形式)
│
└ Done! Now run pnpm run doc:dev and start writing.

3. 設定ファイルの確認
.vitepress/config.ts が自動生成されます。初期状態では以下のような内容になっています:
// .vitepress/config.ts
import { defineConfig } from 'vitepress'
// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "Next.js入門ドキュメント",
description: "Next.js入門のための演習教材",
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Home', link: '/' },
{ text: 'Examples', link: '/markdown-examples' }
],
sidebar: [
{
text: 'Examples',
items: [
{ text: 'Markdown Examples', link: '/markdown-examples' },
{ text: 'Runtime API Examples', link: '/api-examples' }
]
}
],
socialLinks: [
{ icon: 'github', link: 'https://github.com/yuta-ishii-cm/next-app-task-manager' }
]
}
})
4. package.jsonの確認
package.jsonにスクリプトが自動追加されます。以下のような内容になります:
{
"type": "module",
"devDependencies": {
"vitepress": "2.0.0-alpha.15"
},
"scripts": {
"doc:dev": "vitepress dev",
"doc:build": "vitepress build",
"doc:preview": "vitepress preview"
}
}
5. 開発サーバーの起動
# 開発サーバーを起動
pnpm doc:dev
ブラウザで http://localhost:5173 にアクセスすると、サイトが表示されます。

6. 教材ファイルの配置
今回用意した教材のMarkdownファイルは以下の構成です:
practice/
├── .vitepress/
│ └── config.ts # VitePressの設定ファイル
├── index.md # トップページ
├── phase1.md # Phase 1: 基礎編
├── phase2.md # Phase 2: UI構築編
├── phase3.md # Phase 3: データ操作編
├── phase4.md # Phase 4: 完成編
└── optional.md # 発展課題集(Optional)
VitePressでは、Markdownファイルをルートディレクトリに配置するだけでページとして認識されます。ファイル名がそのままURLパスになります(例: phase1.md → /phase1)。
7. カスタマイズ
デフォルト状態ではサンプルページ(Examples)へのリンクが表示されています。自分のコンテンツに合わせてカスタマイズしましょう。
設定ファイル(config.ts)の編集
.vitepress/config.ts を以下のように編集します:
import { defineConfig } from 'vitepress'
export default defineConfig({
title: "Next.js入門ドキュメント",
description: "Next.js入門のための演習教材",
lang: 'ja-JP', // 日本語対応
ignoreDeadLinks: [
/localhost/ // 教材内のlocalhostリンクはチェック対象外
],
themeConfig: {
// ナビゲーション
nav: [
{ text: 'ホーム', link: '/' },
{ text: 'はじめに', link: '/phase1' }
],
// サイドバー
sidebar: [
{
text: '演習',
items: [
{ text: 'Phase 1: 基礎編', link: '/phase1' },
{ text: 'Phase 2: UI構築編', link: '/phase2' },
{ text: 'Phase 3: データ操作編', link: '/phase3' },
{ text: 'Phase 4: 完成編', link: '/phase4' },
{ text: '発展課題集', link: '/optional' }
]
}
],
// ローカル検索を有効化
search: {
provider: 'local'
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/your-username/your-repo' }
]
}
})
主な変更点:
lang: 'ja-JP'で日本語設定ignoreDeadLinksで教材内のlocalhostリンクをチェック対象外に(ビルドエラー回避)navとsidebarを自分のコンテンツ構成に合わせて変更search.provider: 'local'でローカル検索を有効化
トップページ(index.md)の編集
index.md を編集してトップページをカスタマイズします:
---
layout: home # トップページ用のレイアウトを指定
hero: # ページ上部のメインビジュアル部分
name: "Next.js入門ドキュメント" # 大きく表示されるサイト名
text: "Next.js入門のための演習教材" # サブタイトル
tagline: Next.jsに入門してみよう # キャッチコピー
actions: # CTAボタン
- theme: brand # メインボタン(強調色)
text: Phase 1から始める
link: /phase1
- theme: alt # サブボタン(控えめな色)
text: GitHub
link: https://github.com/yuta-ishii-cm/next-app-task-manager
features: # ページ下部のカード形式で並ぶ特徴紹介セクション
- title: Phase 1 - 基礎編
details: App Routerの仕組み、ファイルベースルーティング、Server/Client Componentの違いを理解する
link: /phase1 # カードクリックで遷移するリンク先
linkText: 詳しく見る # リンクテキスト(省略可)
- title: Phase 2 - UI構築編
details: コンポーネント設計、TypeScriptでの型定義、Tailwind CSSでカンバンボードUIを構築する
link: /phase2
linkText: 詳しく見る
- title: Phase 3 - データ操作編
details: useStateでの状態管理、フォーム作成、イベントハンドリング、Server Actionsの基礎を学ぶ
link: /phase3
linkText: 詳しく見る
- title: Phase 4 - 完成編
details: Prismaでデータベース構築、Server ActionsでCRUD操作、Vercelへデプロイする
link: /phase4
linkText: 詳しく見る
- title: 発展課題集(Optional)
details: ドラッグ&ドロップ、楽観的更新など、さらにスキルアップしたい人向けのチャレンジ課題
link: /optional
linkText: 詳しく見る
---
実際に作ったもの
スクリーンショット
HOME

Phase1のページ

ライトモードに切り替え

GitHub Pagesで公開する
1. ビルド設定の確認
GitHub Pagesで公開する場合、baseオプションの設定が必要です。リポジトリ名がサブパスになる場合は以下のように設定します:
// .vitepress/config.ts
export default defineConfig({
title: "Next.js入門ドキュメント",
description: "Next.js入門のための演習教材",
base: '/your-repo-name/', // リポジトリ名に合わせて変更(今回は)
// ...
})
2. GitHub Actionsワークフローの作成
.github/workflows/deploy.yml を作成します:
# ワークフロー名(GitHub Actionsの画面に表示される)
name: Deploy VitePress site to Pages
# ワークフローの実行トリガー
on:
push:
branches: [main] # mainブランチへのプッシュで自動実行
workflow_dispatch: # GitHub画面から手動実行も可能
# ワークフローに付与する権限
permissions:
contents: read # リポジトリの読み取り権限
pages: write # GitHub Pagesへの書き込み権限
id-token: write # OIDCトークンの発行権限(Pages認証に必要)
# 同時実行の制御
concurrency:
group: pages # 同じグループのワークフローは同時実行しない
cancel-in-progress: false # 実行中のワークフローはキャンセルしない
jobs:
# ========================================
# ビルドジョブ: サイトをビルドしてアーティファクトを作成
# ========================================
build:
runs-on: ubuntu-latest
steps:
# リポジトリのコードをチェックアウト
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 全履歴を取得(lastUpdatedの表示に必要)
# pnpmのセットアップ
- name: Setup pnpm
uses: pnpm/action-setup@v3
with:
version: 9
# Node.jsのセットアップ(pnpmキャッシュも有効化)
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
cache-dependency-path: practice/pnpm-lock.yaml
# GitHub Pagesの設定を取得
- name: Setup Pages
uses: actions/configure-pages@v4
# 依存パッケージのインストール
- name: Install dependencies
run: pnpm install
working-directory: practice
# VitePressでサイトをビルド(.vitepress/distに出力)
- name: Build with VitePress
run: pnpm doc:build
working-directory: practice
# ビルド成果物をアーティファクトとしてアップロード
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: practice/.vitepress/dist # ビルド出力ディレクトリ
# ========================================
# デプロイジョブ: ビルド成果物をGitHub Pagesに公開
# ========================================
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }} # デプロイ先URL
needs: build # buildジョブの完了を待つ
runs-on: ubuntu-latest
steps:
# GitHub Pagesにデプロイ
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
3. GitHub Pagesの設定
- GitHubリポジトリの Settings → Pages に移動


- Source で「GitHub Actions」を選択

4. デプロイの実行
変更をcommit & プッシュすると自動的にGitHub Actionsが実行され、数分後にサイトが公開されます。
Github Actionsの実行結果
緑のチェックになってればOK!

※失敗すると赤くなります!

実際に公開されたページ
以下リンクからアクセスできます。

まとめ
VitePressは「Markdownファイルを手軽にWebサイト化したい」というニーズに応えてくれるツールでした。ReactでViteを使ったことがある人なら、あの爆速の開発サーバー起動を知っていると思いますが、まさにあの体験がそのままドキュメントサイト構築でもできます。GitHub Pagesへのデプロイも簡単で、数分でサイトを公開できました。
その他:参考情報
公式リンク
便利なプラグイン・ツール
- vitepress-plugin-search - ローカル全文検索
- vitepress-plugin-mermaid - Mermaid図表のサポート
- @nolebase/vitepress-plugin-enhanced-readabilities - 読みやすさ向上プラグイン
- Algolia DocSearch - 高機能な検索







