谢懿Shine

谢懿Shine

Freiheit als Autonomie

AstroブログプロジェクトでNotionをCMSとして設定し使用する方法

Notion 統合説明文書#

この文書では、Astro ブログプロジェクトで Notion を CMS として設定および使用する方法を紹介します。この実装は、NotionNext の主要機能を完全にコピーしており、コンテンツの取得、キャッシュ、ISR(増分静的再生成)および自動更新メカニズムを含んでいます。

コア機能#

  • Notion データベースとして CMS - Notion で全てのブログ記事を作成、管理
  • ISR メカニズム - 混合レンダリングモード、静的生成とサーバーレンダリングを組み合わせ
  • キャッシュシステム - 高性能キャッシュにより API 呼び出しを削減
  • 増分更新 - webhook と再検証 API を通じて増分更新をサポート
  • 完全互換性 - 既存のブログの Markdown front matter 形式と完全に互換性あり

環境変数設定#

プロジェクトのルートディレクトリに.envファイルを作成し、以下の設定を追加します:

# 必須項目
NOTION_TOKEN=your_notion_integration_token
NOTION_DATABASE_ID=your_notion_database_id

# オプション設定項目
NOTION_CACHE_SECONDS=300           # キャッシュ時間(秒)
USE_CACHE_IN_DEV=false             # 開発環境でキャッシュを有効にするか
NOTION_WEBHOOK_SECRET=your_secret   # Webhookキー
REVALIDATE_TOKEN=NOTION_ISR_SECRET  # 再検証APIのトークン
ENABLE_ISR=true                     # ISR機能を有効にするか
NOTION_ACTIVE_USER=your_user_id     # NotionユーザーID(特定の機能が必要な場合あり)
VERCEL_DEPLOY_HOOK_URL=your_hook_url # VercelデプロイフックURL

Notion データベース設定#

Notion でデータベースを作成し、ブログの front matter 形式に一致する以下の属性を追加します:

属性名タイプ説明対応 front matter フィールド
Titleタイトル記事のタイトルtitle
SlugテキストURL パス(オプション、未記入の場合はタイトルから生成)slug
Date日付公開日published
UpdatedDate日付更新日(オプション)updated
Descriptionテキスト記事の説明description
Tags複数選択記事のタグtags
Category選択記事のカテゴリcategory
Imageファイル / リンクカバー画像image
Publishedチェックボックス公開するかdraft(反転)
Draftチェックボックス草稿かどうか(オプション)draft
Lang選択記事の言語(オプション)lang

Notion API 統合設定#

  1. Notion 統合を作成: https://www.notion.so/my-integrations
  2. 統合トークンを取得し、NOTION_TOKEN環境変数に設定
  3. Notion データベース ID をコピー(データベース共有リンクから取得)し、NOTION_DATABASE_ID環境変数に設定
  4. あなたの統合をデータベースに共有

デプロイ設定#

Vercel デプロイ#

  1. Vercel で全ての環境変数を設定
  2. 混合 SSG+SSR モードを有効にする
  3. Vercel デプロイフックを作成し、VERCEL_DEPLOY_HOOK_URL環境変数に設定

Webhook の設定(オプションだが推奨)#

  1. カスタム Notion 統合を作成
  2. Webhook エンドポイントを設定: https://your-domain.com/api/notion/webhook
  3. コールバックイベントを設定: page_updated, page_created
  4. セキュリティキーを設定し、環境変数に追加

使用方法#

設定が完了したら、以下のページにアクセスできます:

  • /notion - すべての Notion 記事のリストを表示
  • /notion/post/[slug] - 特定の記事の詳細を表示

API エンドポイント#

システムは以下の API エンドポイントを提供します:

  • GET /api/notion/posts - 記事リストを取得、ページネーションとフィルタリングをサポート
  • GET /api/notion/post/[slug] - 特定の記事の詳細を取得
  • POST /api/notion/revalidate - キャッシュを再検証(REVALIDATE_TOKEN を提供する必要あり)
  • POST /api/notion/webhook - Notion 更新イベントを受信

NotionNext vs 本実装#

私たちは NotionNext のコア機能を完全に移植しましたが、主な違いは以下の通りです:

  1. アーキテクチャの違い:Next.js の ISR ではなく、Astro の混合レンダリングを使用
  2. パフォーマンス最適化:ISR を模倣するカスタムキャッシュシステムを実装
  3. 互換性:属性マッピングが既存のブログの Markdown 形式に適合
  4. デプロイモード:Vercel アダプターを使用してエッジ関数をサポート

トラブルシューティング#

問題が発生した場合:

  1. 環境変数の設定を確認
  2. Notion 統合がデータベースに正しく共有されていることを確認
  3. データベース構造が上記の要件に合致しているか確認
  4. コンソールエラーログを確認
  5. /api/notion/revalidateエンドポイントを通じて手動でキャッシュを更新してみる
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。