コンテンツへスキップ
(たった今)

Hono/HonoXブログをCloudflare Pages + GitHub Actionsで公開する手順

𝕏XでシェアB!はてなブックマークLINEでシェア
コピーしました!
Hono/HonoXブログをCloudflare Pages + GitHub Actionsで公開する手順

本記事では、Hono / HonoX + Vite で構築したブログを Cloudflare Pages にデプロイし、GitHub Actions で自動化する手順を解説します。当ブログの実際の構成をベースに、フォーク・クローンして自分のブログとして公開するまでの流れをまとめます。

目次

前提条件

以下がインストール・準備済みであることを前提とします。

項目説明
Node.jsv20 以上推奨
pnpmパッケージマネージャー(v10 推奨)
GitHub アカウントリポジトリのホスティング用
Cloudflare アカウントPages / API トークン用(無料プランで OK)

全体の構成イメージ

デプロイの流れは以下のとおりです。

  1. ローカルで記事を書いて git push
  2. GitHub Actions が main ブランチへの push を検知
  3. pnpm build でビルド(SSG で静的ファイルを生成)
  4. wrangler pages deploy で Cloudflare Pages にデプロイ
  5. Cloudflare Pages がサイトを配信

ステップ1:リポジトリの準備

フォークまたはクローン

GitHub 上で kn1515/hono-blog リポジトリをフォークするか、テンプレートとしてクローンします。

git clone https://github.com/kn1515/hono-blog.git
cd hono-blog

依存関係のインストール

pnpm install

ステップ2:Cloudflare Pages プロジェクトの作成

  1. Cloudflare ダッシュボード にログインする
  2. 左メニューから Workers & Pages を選択する
  3. CreatePages を選択する
  4. Direct Upload を選択する(Git 連携は使わない)
  5. プロジェクト名を入力する

初回は空でもよいので「Create Project」をクリックしてプロジェクトを作成します。実際のファイルは GitHub Actions から自動デプロイされます。


ステップ3:Cloudflare API トークンの発行

GitHub Actions から Cloudflare にデプロイするために、API トークンを発行します。

トークンの作成手順

  1. Cloudflare ダッシュボードの右上アイコン → マイプロフィール を開く
  2. API トークントークンを作成する をクリック
  3. カスタムトークンを作成する を選択
  4. 以下の権限を付与する
権限設定値
アカウント / Cloudflare Pages編集
  1. 概要に進むトークンを作成する をクリック
  2. 表示されたトークンをコピーして安全に保管する(再表示不可)

アカウント ID の確認

  1. Cloudflare ダッシュボードのトップページ左サイドバー、または任意のドメインの 概要 ページ右下に表示されている アカウント ID をコピーする

ステップ4:GitHub Actions シークレットの設定

リポジトリの Settings > Secrets and variables > Actions から、以下の 2 つのシークレットを登録します。

シークレット名
CLOUDFLARE_API_TOKENステップ3 で作成した API トークン
CLOUDFLARE_ACCOUNT_IDステップ3 で確認したアカウント ID

設定手順

  1. GitHub リポジトリのページで Settings タブを開く
  2. 左メニューの Secrets and variablesActions を選択
  3. New repository secret をクリック
  4. CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID をそれぞれ登録

ステップ5:wrangler.toml の設定

プロジェクトルートにある wrangler.toml を編集します。

name = "hono-blog"
pages_build_output_dir = "dist"
compatibility_date = "2024-04-04"

[env.production]
compatibility_date = "2024-04-04"
項目説明
nameCloudflare Pages のプロジェクト名と一致させる
pages_build_output_dirビルド成果物のディレクトリ(dist のまま)

ステップ6:GitHub Actions ワークフローの確認

.github/workflows/build.yaml にデプロイ用のワークフローが定義されています。中身を確認し、必要に応じてプロジェクト名を変更してください。

name: Build
on: push
permissions:
  contents: read
  statuses: write
jobs:
  build:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
      - uses: pnpm/action-setup@v3
        name: Install pnpm
        with:
          version: 10
          run_install: false
      - name: Get pnpm store directory
        shell: bash
        run: |
          echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
      - uses: actions/cache@v4
        name: Setup pnpm cache
        with:
          path: ${{ env.STORE_PATH }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-
      - name: Install dependencies
        run: pnpm install
      - name: Install Playwright Browsers
        run: pnpm run install:playwright
      - name: Build blog
        run: pnpm run build
      - name: Deploy
        id: deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
          accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
          command: pages deploy ./dist --project-name=hono-blog
      - name: Add publish URL as commit status
        uses: actions/github-script@v7
        with:
          script: |
            const sha = context.payload.pull_request?.head.sha ?? context.sha;
            await github.rest.repos.createCommitStatus({
              owner: context.repo.owner,
              repo: context.repo.repo,
              context: 'Cloudflare Pages',
              description: 'Cloudflare Pages deployment',
              state: 'success',
              sha,
              target_url: "${{ steps.deploy.outputs.deployment-url }}",
            });

ポイント解説

  • on: push: すべてのブランチへの push でワークフローが実行される
  • cloudflare/wrangler-action@v3: Cloudflare 公式の GitHub Action で wrangler コマンドを実行
  • --project-name=hono-blog: ここを自分の Cloudflare Pages プロジェクト名に変更する
  • commit status: デプロイ後のプレビュー URL をコミットステータスに記録し、PR 上から確認可能

ステップ7:サイト情報のカスタマイズ

自分のブログとして公開するために、以下のファイルを変更します。

vite.config.ts

base の URL を自分のドメインに変更します。

base:
  process.env.NODE_ENV === 'production' ? 'https://www.your-domain.com' : '/',

app/components/Author.tsx

著者名やプロフィール情報を自分の情報に変更します。

app/components/Header.tsx

サイトタイトルやナビゲーションリンクを変更します。

.github/workflows/build.yaml

--project-name を自分の Cloudflare Pages プロジェクト名に変更します。

command: pages deploy ./dist --project-name=<あなたのプロジェクト名>

ステップ8:Giscus(コメント機能)の設定

ブログ記事にコメント欄を表示したい場合、giscus を設定します。GitHub Discussions をバックエンドとしたコメントシステムです。

手順

  1. GitHub リポジトリの Settings > General > FeaturesDiscussions を有効にする
  2. Discussions で「Comments」カテゴリを作成する(形式: Announcement 推奨)
  3. giscus.app にアクセスし、設定値を生成する
    • リポジトリ: <ユーザー名>/<リポジトリ名>
    • ページとディスカッションのマッピング: pathname
    • カテゴリ: Comments
  4. 生成されたスクリプトから以下の値を取得し、app/routes/posts/_renderer.tsx 内の giscus スクリプトを書き換える
属性説明
data-repoリポジトリ名(例: username/hono-blog
data-repo-idリポジトリ ID
data-categoryカテゴリ名(例: Comments
data-category-idカテゴリ ID

デプロイの実行と確認

すべての設定が終わったら、main ブランチに push するだけで自動デプロイが走ります。

git add .
git commit -m "初回デプロイ"
git push origin main

デプロイの確認方法

  1. GitHub Actions: リポジトリの Actions タブでワークフローの実行状況を確認
  2. Cloudflare ダッシュボード: Workers & Pages でデプロイ履歴を確認
  3. プレビュー URL: コミットステータスに表示されるデプロイ URL をクリック

デフォルトでは https://<プロジェクト名>.pages.dev でアクセスできます。

カスタムドメインの設定(任意)

独自ドメインを使いたい場合:

  1. Cloudflare ダッシュボードで Workers & Pages → 対象プロジェクトを選択
  2. Custom domains タブから Set up a custom domain をクリック
  3. ドメインを入力し、DNS レコードの設定を行う

ローカルでの開発とプレビュー

開発サーバー

pnpm dev

Vite の開発サーバーが http://localhost:5173 で起動します。ホットリロード対応なので、記事の編集がリアルタイムで反映されます。

ローカルプレビュー(本番相当)

pnpm build
pnpm preview

wrangler pages dev を使って、Cloudflare Pages と同等の環境でローカルプレビューできます。

手動デプロイ

CI を使わず手動でデプロイしたい場合:

pnpm deploy

このコマンドは pnpm build && wrangler pages deploy ./dist を実行します。事前に CLOUDFLARE_API_TOKEN 環境変数の設定が必要です。


トラブルシューティング

GitHub Actions が失敗する

  • シークレットの確認: CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID が正しく設定されているか確認
  • プロジェクト名の不一致: --project-name が Cloudflare Pages のプロジェクト名と一致しているか確認
  • API トークンの権限: Cloudflare Pages の「編集」権限が付与されているか確認

ビルドエラーが発生する

  • Node.js のバージョンが v20 以上か確認
  • pnpm install で依存関係が正しくインストールされているか確認
  • pnpm build をローカルで実行してエラー内容を確認

デプロイ後にページが表示されない

  • wrangler.tomlpages_build_output_dirdist になっているか確認
  • ビルド成果物が dist/ ディレクトリに生成されているか確認

Giscus コメントが表示されない

  • GitHub Discussions が有効になっているか確認
  • giscus の data-repodata-repo-id が正しいか確認
  • Discussions に「Comments」カテゴリが存在するか確認

まとめ

本記事では、Hono/HonoX ブログを Cloudflare Pages + GitHub Actions で公開する手順を解説しました。

手順をまとめると:

  1. リポジトリの準備: フォーク・クローンして依存関係をインストール
  2. Cloudflare Pages: プロジェクトを作成(Direct Upload 方式)
  3. API トークン: Cloudflare Pages の編集権限を持つトークンを発行
  4. GitHub シークレット: トークンとアカウント ID を登録
  5. 設定ファイルの変更: wrangler.tomlvite.config.ts、ワークフローファイルのプロジェクト名を統一
  6. push して自動デプロイ: main ブランチへの push で CI/CD が走る

Cloudflare Pages の無料枠は十分に寛大で、個人ブログであれば無料で運用できます。GitHub Actions も公開リポジトリなら無料で利用可能です。ぜひ自分だけのブログを構築してみてください。

関連記事

カテゴリー