Contentful・DatoCMS の代替

1 つの管理画面、N 個のプロジェクト、トラフィックで膨らまない請求

API ファーストのマルチテナント型ヘッドレス CMS。読み取りパスは API に一切届きません —— 訪問者が増えて上がるのは請求額ではなく、キャッシュヒット率です。

データは当社が運用するサーバー上に保管従量課金の外部サービスはゼロエンタープライズプランでは自社サーバーへ導入可能

数字で見る読み取りパス

読み取り 1 回あたりの DB クエリ
0
1 ページあたりの HTTP リクエスト
2
タイポ許容検索の応答時間
<50 ms
個別に無効化できるモジュール
7+

すべてのコンポーネントを自社インフラで

PostgreSQL
Valkey
Typesense
Garage · S3 互換
nginx エッジキャッシュ
NestJS
Drizzle
Next.js

機能

コンテンツ基盤を、悩みの種にしない

すべては API の背後にあり、管理画面に閉じ込められた機能はひとつもありません。

マルチテナントと RLS

プロジェクトごとに独立したスペースを持ちます。分離はアプリケーションではなくデータベースで行われ、PostgreSQL の行レベルセキュリティが、アプリケーション層に不具合があってもテナント間のデータ漏れを防ぎます。

スキーマエンジンとフィールドロール

コンテンツタイプはコードに埋め込まれていません。管理画面からでも API からでも定義できます。フィールドは titleslugbody といったロールを持ち、ビルドパイプラインと SEO 生成はフィールド名ではなくロールを見ます。

モジュール構成

メディア、検索、Webhook、SEO、GraphQL、インポート、アナリティクス —— それぞれ独立していて無効化できます。無効化してもデータは削除されず、再び有効にすれば中断した続きから動きます。

エッジから配信される読み取り

公開されたコンテンツはビルド時にイミュータブルなアドレスへ書き出され、nginx のエッジキャッシュから配信されます。コンテンツ件数が増えても訪問者が増えても、読み取りのコストは上がりません。

メディアライブラリ

S3 互換のオブジェクトストレージ(Garage)、3 ゾーンに複製される画像、自動生成される派生画像。アップロードしたファイルは自社インフラに留まり、従量課金の CDN へ渡ることはありません。

タイポ許容検索

Typesense による多言語全文検索。「Istanbul」を「Istanul」と打った訪問者にも正しいコンテンツが見つかり、応答は 50 ミリ秒未満で返ります。

Webhook

公開、更新、削除 —— あらゆるイベントがお客様のシステムへ通知されます。配信は永続キューに保持され、指数バックオフで再試行されます。プロセスが落ちてもイベントは失われません。

GraphQL

スキーマは手書きしません。スペースのコンテンツタイプから導出されます。新しいタイプを追加すれば、その時点でクエリ可能になります。クエリ爆弾への防御として、深さと長さの制限は必須です。

型安全な SDK

@corpusctl/client と React・Vue・Next.js 向けアダプター。ブロックレンダラーはデフォルトスタイルをまったく持ちません —— CSS を 1 行も押し付けません。デザインは完全にお客様のものです。

コード例

管理画面からでも、1 行のコマンドからでも

管理画面でできることには、すべて API の対応があります。インターフェースに閉じ込められた機能はありません。

publish.sh
# 1) コンテンツタイプを定義 —— スキーマはコードに埋め込まれていません
curl -X PUT "$API/v1/content-types/post" \
  -H "authorization: Bearer $TOKEN" \
  -H "x-corpusctl-tenant: $TENANT" \
  -H "content-type: application/json" \
  -d '{
    "name": "post",
    "title": "Post",
    "fields": [
      { "name": "title", "type": "text",   "role": "title", "required": true },
      { "name": "slug",  "type": "slug",   "role": "slug",  "required": true },
      { "name": "body",  "type": "blocks", "role": "body" }
    ]
  }'

# 2) 下書きを作成
curl -X POST "$API/v1/documents" \
  -H "authorization: Bearer $TOKEN" \
  -H "x-corpusctl-tenant: $TENANT" \
  -d '{ "type": "post", "data": { "title": "Hello", "slug": "hello" } }'

# 3) 公開 —— 検証、ビルド、エッジへの反映を 1 回の呼び出しで
curl -X POST "$API/v1/documents/$ID/publish" \
  -H "authorization: Bearer $TOKEN" \
  -H "x-corpusctl-tenant: $TENANT"

# → { "data": { "version": 3, "contentHash": "…", "durationMs": 42 } }

読み取りパスはデータベースに触れません

  • コンテンツアドレス指定のキャッシュ。 アドレスはコンテンツのハッシュそのものです。変わりようがないため無期限に保存でき、「古いデータ」という問題自体がなくなります。
  • トラフィックが増えてもコストは増えません。 読み取りリクエストが API に届かないため、計測すべき呼び出しがありません。請求額が訪問者と一緒に増えることはありません。
  • 書き込みと読み取りは別のクラス。 ReadClient は秘密のトークンを持たずブラウザでも動きます。ManagementClient はサーバー専用です。1 つのクラスにまとめていたら、トークンの流出は 1 行のミスで起きていたはずです。

アーキテクチャ

書き込みパスと読み取りパスは別物

公開ボタンはビルドを起動します。訪問者が読むのはそのビルドの成果物であって、システムそのものではありません。

書き込みパス読み取りパス(高速)管理画面 · ManagementClientAPI — NestJSPostgreSQLRLS · パーティション公開ビルドパイプラインフロントエンド · ReadClientnginx エッジキャッシュヒット → ミリ秒で応答ミス時オリジン — nginxオブジェクトストレージ — S3 互換<tenant>/c/<hash>.json · イミュータブル書き込み読み取り
2 つのパスが交わるのはオブジェクトストレージだけです。訪問者のトラフィックが API にも PostgreSQL にも到達しないため、書き込み側の負荷は読み取り側から完全に独立しています。

イミュータブルなアドレス

コンテンツはハッシュでアドレス指定されます。同じアドレスが別の内容を返すことは決してないため 30 日間キャッシュでき、公開のタイミングでマニフェストが更新されます。

マニフェストは分割される

どのマニフェストシャードを読むかは、slug からクライアント側で計算されます。1 万件のコンテンツを抱えるスペースでも、ダウンロードされるのは小さなファイル 1 つだけです。

バージョンとスケジュール

すべてのレコードはバージョン管理され、古いバージョンを下書きに復元できます。未来の日時を指定した公開も予約でき、スケジューラーが自らビルドを起動します。

比較

勝っているところ、そうでないところ

すべての行で当社が勝つわけではありません。この表は、お客様が何を選ぼうとしているかをはっきり示すためにあります。

corpusctl と Contentful・DatoCMS の比較 —— 2026年8月時点で公開されている製品情報に基づきます。
評価項目corpusctlContentfulDatoCMS
料金モデル定額プラン。読み取りリクエストが API に届かないため、計測される呼び出しがありません。API 呼び出し数・レコード数・ユーザー数で課金。超過分は追加料金。API 呼び出し数と転送量で課金。
複数プロジェクト管理コアに組み込み済み。管理画面は 1 つ、スペースは無制限。ユーザーはスペースごとに別のロールを持ちます。プロジェクトごとに「space」。多くのプランで space 単位の課金。プロジェクトごとに別環境。プロジェクト単位のプラン。
テナント分離データベースレベル —— PostgreSQL の行レベルセキュリティ(RLS)。アプリケーションレベル。詳細は非公開。アプリケーションレベル。詳細は非公開。
データの所在当社が運用するサーバー。エンタープライズプランなら完全に自社サーバーへ。ベンダーのクラウド。リージョン選択は上位プラン。ベンダーのクラウド。リージョン選択は上位プラン。
従量課金の外部サービスなし。PostgreSQL、Valkey、Typesense、Garage、nginx —— すべて自社インフラ上。あり。検索・画像・CDN の各レイヤーが従量課金。あり。画像 CDN と変換処理が従量課金。
押し付けられるレンダリングなし。ブロックレンダラーはデフォルトスタイルを持たず、未知のブロックはスキップされ、落ちることはありません。リッチテキストレンダラーを提供。スタイルの判断はお客様側。構造化テキストレンダラーを提供。スタイルの判断はお客様側。
機能の無効化すべての機能が無効化できるモジュール。無効化でもプラン変更でもデータは消えません。プラン上限により機能が使えなくなります。プラン上限により機能が使えなくなります。
グローバルエッジネットワーク単一リージョンのエッジキャッシュ。グローバル PoP 網はありませんマルチリージョンのグローバル CDN。マルチリージョンのグローバル CDN。
アプリマーケットプレイスなし。連携は Webhook と API で書きます。広範で成熟したアプリエコシステム。プラグインのエコシステムあり。
エンタープライズ成熟度若い製品。SSO と正式な SLA はロードマップ上。SOC 2、SSO、SLA —— 成熟。SSO と SLA は上位プラン。
ミリ秒単位でグローバルな読者に配信する必要があり、既製の連携マーケットプレイスが要るなら、正直な答えは「今日の時点では Contentful のほうが成熟している」です。一方、トルコとヨーロッパに配信し、複数プロジェクトを抱え、訪問者数で請求額が動くことを望まないチームにとっては、corpusctl は意図的により良いトレードオフです。

よくある質問

よくあるご質問

お探しのものが見つからない場合は [email protected] までご連絡ください。

最初のスペースを今日つくりましょう

アカウント作成は数分で終わります。メールアドレス、パスワード、スペースの名前があれば十分です。クレジットカードは必要ありません。移行にお困りでしたらご連絡ください。