Craft Cross CMSのコンテンツを使ってAstroでWebサイトを構築する
- solution
- 2025年10月6日
こんにちは、Customer Engineerのgamiです!最近は『Slay the Spire』というドミニオンみたいなゲームにハマっています。
さて、先日リリースされた「Craft Cross CMS」は、いわゆるヘッドレスCMSとしての特徴を持っています。
Craft Cross CMS徹底解説:活用シーンからワークフローまで一挙公開!
CMS(Contents Management System)の中でも、一般に「ヘッドフル」なCMSであれば、Webサイト構築までをCMS側の機能で持っています。一方で「ヘッドレス」なCMSはその拡張性と引き換えに、Webサイト構築については開発者自身で面倒を見ないといけません。
そこで今回は、Webサイト構築を簡単にするフレームワークである「Astro」を使ってCraft Cross CMSのコンテンツを使ったWebサイトを構築する手順をご紹介します。
ヘッドレスCMSとは?
CMSに詳しくない方に向けて、まずはヘッドレスCMSとは何かについて簡単に補足します。
ヘッドレスCMSとは、フロントエンド(表示部分)とバックエンド(コンテンツ管理部分)が分離されたCMSのことです。従来のCMS(ヘッドフルCMS)は、コンテンツ管理とWebサイトの表示機能が一体化していましたが、ヘッドレスCMSでは以下のような特徴があります。
ヘッドレスCMSの特徴:
- API駆動:コンテンツはAPI経由で配信され、外部から柔軟に利用できる
- フロントエンドの自由度:任意のフレームワークで表示部分を構築可能
- マルチチャネル対応:Webサイト、モバイルアプリ、IoTデバイスなど複数のプラットフォームに同一コンテンツを配信可能
Craft Cross CMSもこのヘッドレスCMSの特徴を持ち、Webサイトを含むあらゆるチャネルから自由にコンテンツを利用できます。
Astroとは?
今回使うAstroについても、簡単に補足します。
Astroは、コンテンツ重視のWebサイト構築に特化した、現代的な静的サイトジェネレーター(SSG)です。オープンソースソフトウェアとして公開されており、無料で使うことができます。
サービスサイトのロゴを見ると、名だたるグローバル企業のWebサイトで採用されているようです。
Astroは他のWebフレームワークと比べても、ブログやドキュメントサイトなどコンテンツが中心となるWebサイトの構築に強みがあります。そのため、ヘッドレスCMSと組み合わせてWebサイト構築に使われることも多くあります。実際、サービスサイトを見ても様々なCMSとの連携実績があるようです。
今回ホスティングで利用するCraft Sitesではサーバーサイドでの動的なHTML生成には対応していないため、Webサイトを構築するには静的なファイルをビルドして設置する必要があります。その点で、静的サイト生成に強みがあるAstroは、Craft Sitesとも相性のよいWebフレームワークと言えます。
アウトプットイメージ
今回は、サンプルコードを使って「Craft Cross CMSで入稿したブログ記事を掲載するWebサイト」を構築してみましょう。
最終的なアウトプットイメージは次の通りです。
ブログ記事コンテンツをCraft Cross CMSで入稿します。
すると、そのコンテンツを使って次のようなブログサイトができあがります。
構成図は次の通りです。
今回は、Craft Cross CMS側でコンテンツを公開したときに自動でWebサイトをビルド & デプロイするような自動化の仕組みを構築します。ここでは例として、GitHub Actionsを使ってワークフローを実行し、Craft Sitesに対してWebサイトをデプロイします。
Astroを使うことで、Craft Cross CMSのコンテンツを埋め込む形でWebサイトのHTML/CSS/JavaScript等をビルドすることができます。
なお、開発時はローカル開発環境でコード修正やWebサイトの表示確認をします。また、Craft Sitesへのデプロイについても、まずは手動アップロードでの表示確認手順を紹介し、前述の自動デプロイの仕組み構築については後から補足します。
ちなみに、今回は例としてAstroとGitHub Actionsを使った構成を紹介していますが、AstroではなくNext.jsなど静的サイト生成に対応した他のWebフレームワークを使うこともできます。またGitHub Actionsについても、CircleCIなどその他のCI/CDプラットフォームに置き換えることも可能です。
注意点
前提として、次の点に注意をしてください。
- 今回紹介する手順を試すには、 Web開発のための最低限のエンジニアリング知識が必要となります
- 必要な前提知識の例: シェルスクリプト, Node.js, npm, Git
- Craft Functions、Craft Sites、Craft Cross CMS、API v2が利用できるKARTEプロジェクトが必要です
設定手順
設定の手順は次の通りです。
- Craft Cross CMSでモデルおよびコンテンツを作成する
- CDNタイプのAPI v2アプリを作成する
- Astroを使ったローカル開発環境を構築する
- Craft Sitesのサイトを作成する
- Craft Sitesにビルド結果を手動アップロードする
順番に見てみましょう。
1. Craft Cross CMSでモデルおよびコンテンツを作成する
まず、Astroで表示するブログコンテンツを管理するためのモデルをCraft Cross CMSで作成し、サンプルコンテンツを入稿します。
- [Craft > コンテンツ一覧 > コンテンツ設定] の [モデルを追加]から、モデル作成画面を開きます
- 以下のフィールドを持つモデルを作成してください:
| フィールド名 | タイプ | 表示名 |
|---|---|---|
| title | テキスト | タイトル |
| image | 画像 | サムネイル画像 |
| content | リッチテキスト | 本文 |
| pubDate | 日付 | リリース日 |
| description | テキスト | 詳細文 |
| author | 選択 | 著者 |
| tags | 選択(複数) | タグ |
- モデルを作成後、いくつかのサンプルコンテンツを入稿し、公開しておいてください
2. CDNタイプのAPI v2アプリを作成する
AstroからCraft Cross CMSのコンテンツを取得するために、CDNタイプのAPI v2アプリを作成し、必要なスコープを設定します。
-
Astroからコンテンツを取得するために、CDNタイプのAPI v2アプリを作成します
-
以下のスコープを持つ
cdnタイプのアプリを作成してください:beta.cdn.cms.content.getbeta.cdn.cms.content.list
作成後、アクセストークンを控えておいてください。このトークンは後ほど使用します。
3. Astroを使ったローカル開発環境を構築する
今回の記事のために用意した次のサンプルコードを使用して、Astroのローカル開発環境を構築し、CMSとの連携設定をします。
craft-codes/astro/cross-cms-astro-sample at main · plaidev/craft-codes
- 上記サンプルコードを、ローカルにgit cloneします
- ターミナル上でダウンロードしたAstroプロジェクトのディレクトリに移動し、依存モジュールをインストールします
$ cd craft-codes/astro/cross-cms-astro-sample
$ npm install
- プロジェクトルートに
.envファイルを作成し、以下の形式で実際の環境変数の値を記載して保存します
# cdnタイプAPI v2アプリのアクセストークン
CMS_CDN_API_ACCESS_TOKEN=atf0.xxxxxx
# [Craft > CMS設定 > APIエンドポイント] から確認できる、CDN APIのホスト名
CMS_CDN_API_HOST=a1b2c3d4.cdn-api.karte.io
# 作成したCMSモデルのID
CMS_BLOG_MODEL_ID=a1234567890b2345678901c3
- 開発サーバーを起動します
$ npm run dev
- ブラウザで
http://localhost:4321にアクセスし、Webサイトが表示されることを確認します
ここまでで、ローカル開発環境におけるCraft Cross CMSのコンテンツを使ったWebサイトの静的ビルドについては体験できました。
4. Craft Sitesのサイトを作成する
ここからは、Craft SitesにWebサイトをデプロイするための方法を紹介します。
まずは、ビルドしたAstroサイトをホスティングするためのCraft Sitesサイトを作成します。
- [Craft > サイト]の[新規作成]から、適当な設定でサイトを作成します
- 検証目的であれば、ドメインは [自動でドメインを払い出す] を使って問題ありません
- [キャッシュTTL] を0にしておくとサイト更新時にすぐに変更を確認できるので、検証時はおすすめです
5. Craft Sitesにビルド結果を手動アップロードする
次に、Astroプロジェクトを本番用にビルドし、生成された静的ファイルをCraft Sitesに手動アップロードして、Webサイトを公開します。
- ターミナル上でAstroプロジェクトのディレクトリに移動し、本番用のビルドを実行します
$ cd craft-codes/astro/cross-cms-astro-sample
$ npm run build
-
ビルドが完了し、
distフォルダに静的ファイルが生成されたことを確認します -
Craft Sitesの管理画面から先ほど作成したサイトを開き、この
distフォルダの中身をルートディレクトリに展開する形でアップロードし、全ファイルを公開します- 手順(例)
- [フォルダのアップロード] で
distフォルダをアップロード distフォルダ配下の全ファイルを [公開する]distフォルダを指定してルートディレクトリに [移動]
- [フォルダのアップロード] で
- 手順(例)
-
アップロード完了後、Craft SitesのURLにアクセスして、正常にWebサイトが表示されることを確認します
これで、ビルドしたWebサイトをCraft Sitesに手動デプロイすることができました。
補足:GitHub Actionsを使った自動デプロイの設定
前述のように、実運用を考えると、「Craft Cross CMSでコンテンツを更新したときにはWebサイト側にも自動でその更新内容が反映されるような自動化」ができた方が便利です。
一般的には、次のようなワークフローを構築し、Webサイトのビルドやデプロイを自動化します。
- Craft Cross CMSのHook設定によって、コンテンツの作成や変更の公開/非公開をhookしてCraft Functionsを実行するようにする
- Craft FunctionsからGitHub ActionsなどのCI/CDツールのジョブを実行する
- CI/CDツールのジョブ上で、Astroを使ったビルドとCraft Sitesへのデプロイを実行する
今回は、GitHub Actionsを使った次のような自動化フローを実現するための設定例を簡単に紹介します。
GitHub側での設定
ソースコードの管理およびワークフロー実行のためのGitHubリポジトリを作成して、自動デプロイ用のワークフローを定義します。
-
GitHub上で、repository_dispatchイベントを起こすのに必要な権限を持ったPersonal access tokensを作成します
-
GitHubリポジトリを作成します
-
Astroアプリケーションのソースコードをリポジトリにpushします
-
次のサンプルコードを参考に、
.github/workflows配下にGitHub Actionsワークフローの設定ファイルを作成します -
以下のシークレットと変数をGitHubリポジトリに追加します
- Repository secrets:
SITES_API_TOKEN: Craft Sitesを操作するためのAPI v2アプリのアクセストークン(後述)
- Repository variables:
CMS_CDN_API_ACCESS_TOKEN: .envファイルの設定値と同様CMS_CDN_API_HOST: .envファイルの設定値と同様CMS_BLOG_MODEL_ID: .envファイルの設定値と同様SITE_NAME: デプロイ対象のCraft Sitesサイト名
- Repository secrets:
KARTE側での設定
KARTE側では、Craft Cross CMSの変更を検知してCraft Functionsを実行しGitHub Actions側に通知するための設定が必要になります。
- 次の権限を持った
tokenタイプのAPI v2アプリを作成しますbeta.craft.sites.content.uploadbeta.craft.sites.content.invalidatebeta.craft.sites.content.updateVisibilitybeta.cms.content.get
- (作成したAPI v2アプリのアクセストークンを、前述したGitHub Repository secretsに設定します)
- 作成したGitHub側のPersonal access tokensを、Craft Secret Managerに登録します
- 次のサンプルコードを使って、イベント駆動タイプのCraft Functionsを作成します
- 作成したAPI v2アプリの [Hook設定] に次のような設定を追加します
- [トリガー設定]
- KARTE CMS: コンテンツの公開時
- KARTE CMS: コンテンツの非公開時
- [チャンネル設定 > craft]
- 先程作成したファンクションを設定し、有効化する
- [トリガー設定]
この設定により、CMSのコンテンツ公開/非公開時のHookの仕組みでCraft Functionsが自動実行されるようになります。そこからGitHub側にrepository_dispatchイベントが発生して、それをトリガーにしてGitHub Actions上でAstroを使ったWebサイトのビルドやCraft Sitesへのアップロードが走るようになります。
おわりに
今回はCraft Cross CMSのコンテンツを使ってAstroでWebサイトを構築する方法について紹介しました。
この構成により、効率的なコンテンツ管理と高速なWebサイトの両立が可能になります。特にGitHub ActionsなどのCI/CDツールとの連携により、CMSでの更新が即座にWebサイトに反映される自動化された運用を実現できます。
ぜひ皆さんも試してみてください!