1. スキーマを生成する
NotCMSをインストールし、プロジェクトを初期化してデータベースのスキーマを取得します。releases データベースに以下のプロパティがある前提です。
npx notcms pull が生成したプロパティ名と型を使ってください。データベースに
slug がなければスキーマから削除し、下のURLヘルパーでは常にページIDを使います。
クライアントはサーバー側に置きます。NOTCMS_SECRET_KEY と
NOTCMS_WORKSPACE_ID をブラウザへ公開しないでください。
2. 公開条件と言語の方針を定義する
この例では、released_at があり、値が有効で未来の日付ではない記事を公開済みとします。
言語が未設定の場合は日本語として扱い、新しいリリースから並べます。チェックボックスなど別の公開フィールドを使う場合は変更してください。
生成される date 型のプロパティは string | null です。現在時刻と比較する前に解析してください。JavaScriptの Date オブジェクトではありません。
3. 詳細URLを安定させる
データベースにslugがあり空でない場合はslugを使います。slugがない場合はNotionのページIDへフォールバックし、version_number を識別子には使いません。
null を返して404にできるようにします。同じlocaleでslugが別の公開ページのIDと一致した場合も拒否します。slugがないデータベースでは常に一意なページIDを使います。
slugまたはIDを受け取るlocale-awareなルートでは、localeをresolverへ渡します。一覧から概要を選ぶ前に公開条件と言語を適用し、詳細を取得した後にも同じ条件を再確認します。
4. 言語フォールバックと空状態を追加する
言語フィルタはルートまたはページ境界で明示します。5. 詳細本文を取得する
list() は概要を返します。ページIDを解決した後、get() で本文を取得します。
version_number は未設定または製品間で重複する可能性があるため、表示用データとして扱い、ルートキーには使いません。任意のNotionプロパティも同じように扱います。
Notionから返されるリンク
Notion APIがhttps://app.notion.com/...のような絶対URLを返した場合、
NotCMS・SDK・Sync Actionは返されたURLを保持します。相対リンクに戻せるかどうかを推測して変換することはありません。公開サイトへのリンクは、Notionに完全なURL(例:
https://example.com/releases/ja/v1-2-0)を入力し、同期後にNotCMS APIの応答と生成されたMarkdownでリンク先を確認してください。通常のNotionページリンクを一律に削除・置換しないでください。