ヘッドレスCMS「Sanity」とは?特徴・料金・使い方を徹底解説

「ヘッドレスCMSって何?」「Sanityって他のCMSと何が違うの?」——そんな疑問を持つエンジニアやWeb担当者に向けて、Sanityの基本から実践的な使い方まで網羅的に解説します。

テックジム東京本校では、情報科目の受験対策指導やAI駆動開発コースもご用意しております。

目次


1. ヘッドレスCMSとは何か

従来のCMS(例:WordPress)は「ヘッド(フロントエンド)」と「ボディ(バックエンド)」が一体化した構造でした。これに対して、ヘッドレスCMSはコンテンツの管理・配信機能(バックエンド)のみを持ち、表示部分(フロントエンド)を持たないCMSのことを指します。

従来CMSとの違い

比較項目 従来のCMS(例:WordPress) ヘッドレスCMS
フロントエンド CMSが管理 自由に選択可能
コンテンツ配信 HTML生成 API(REST / GraphQL)経由
柔軟性 低い 高い
学習コスト 低い やや高い
マルチチャネル配信 困難 容易

ヘッドレスCMSの最大のメリットは、コンテンツをAPIで取得できるため、WebサイトだけでなくモバイルアプリやIoT機器など、あらゆるチャネルに同じコンテンツを配信できる点です。


2. Sanityとは?概要と歴史

Sanity(サニティ)は、2017年にノルウェーのオスロで創業されたSanity.io社が開発したヘッドレスCMSです。現在では世界中の企業・開発者に採用されており、Nike、Shopify、Figma、Sonosなどの有名企業も活用しています。

Sanityの概要

  • 公式サイト: https://www.sanity.io/
  • 設立: 2017年
  • 本社: ノルウェー・オスロ
  • 主な特徴: リアルタイムコラボレーション、カスタマイズ可能なStudio、GROQ言語

Sanityが他のヘッドレスCMSと一線を画すのは、コンテンツ管理画面(Sanity Studio)が完全にカスタマイズ可能なReactアプリとして提供されている点です。開発者が自分たちのワークフローに合わせて管理UIを自由に拡張できます。


3. Sanityの主な特徴・メリット

✅ 3-1. Sanity Studio(完全カスタマイズ可能な管理画面)

Sanity Studioは、Reactで構築されたオープンソースのコンテンツ管理インターフェースです。

  • コンポーネントを追加・変更してUIをカスタマイズ
  • 独自のプラグインを開発して機能拡張
  • プロジェクトのコードベースに組み込んで管理
# Sanity Studioの起動
npx sanity dev

✅ 3-2. リアルタイムコラボレーション

Sanityはコンテンツ編集にリアルタイムの同期機能を持っています。複数の編集者が同時にドキュメントを編集しても、コンフリクトなしに変更が反映されます。これはNotion的な共同作業体験をCMSにもたらします。

✅ 3-3. Portable Text(リッチテキストの標準化)

SanityのリッチテキストフォーマットはJSONベースのPortable Textとして保存されます。これにより:

  • 特定のレンダリングエンジンに依存しない
  • フロントエンド側で自由にHTMLやMarkdownに変換可能
  • カスタムブロック(コードブロック、埋め込みコンテンツなど)を追加可能

✅ 3-4. GROQ(強力なクエリ言語)

SanityはGraphQLに加えて、独自のクエリ言語**GROQ(Graph-Relational Object Queries)**をサポートしています。GROQはJSONデータを直感的に絞り込めるよう設計されており、コンテンツの取得が非常に柔軟に行えます。

✅ 3-5. CDNによる高速コンテンツ配信

SanityのコンテンツAPIはグローバルCDNを通じて配信されるため、世界中どこからアクセスしても高速にコンテンツを取得できます。

✅ 3-6. 強力な画像変換パイプライン(Sanity Image Pipeline)

Sanityに画像をアップロードするだけで、URLパラメーターでリサイズ・クロップ・フォーマット変換をオンザフライで実行できます。

https://cdn.sanity.io/images/{projectId}/{dataset}/{imageId}?w=800&h=600&fit=crop&auto=format

4. 他のヘッドレスCMSとの比較

Sanity vs Contentful

比較項目 Sanity Contentful
無料枠 3プロジェクト、20万APIリクエスト/月 1スペース、25,000レコード
カスタマイズ性 非常に高い(Studioを改造可能) 中程度
クエリ言語 GROQ / GraphQL REST / GraphQL
リアルタイム同期 あり なし
学習コスト やや高い 低〜中
日本語サポート ドキュメントは英語のみ 英語のみ

Sanity vs microCMS

比較項目 Sanity microCMS
提供元 Sanity.io(ノルウェー) microCMS(日本)
日本語対応 ドキュメントは英語 完全日本語対応
無料枠 充実 1サービスまで
カスタマイズ性 高い 中程度
向いている規模 中〜大規模 小〜中規模

Sanity vs Strapi

比較項目 Sanity Strapi
ホスティング SaaS(クラウド管理) セルフホスト可能
オープンソース Studioのみ コア全体
費用 無料〜有料プラン サーバー費用のみ(無料)
スケーラビリティ 高い インフラ次第

5. Sanityの料金プラン

Sanityの料金は以下の通りです(2025年時点)。

プラン 月額料金 主な制限
Free 無料 3プロジェクト、20万APIリクエスト/月、5GBアセット
Growth $15〜/月 APIリクエスト追加、より多くのユーザー
Enterprise カスタム SLA保証、専任サポート、高度なセキュリティ

💡 ポイント: 個人開発や小規模プロジェクトであれば、無料プランで十分に運用できます。APIリクエスト数が超過した場合でも、従量課金制で追加利用できます。


6. Sanityのセットアップ・始め方

必要な環境

  • Node.js 18以上
  • npmまたはpnpm

ステップ1:Sanityプロジェクトの作成

npm create sanity@latest

CLIの対話形式に従って、プロジェクト名・データセット・テンプレートを選択します。

ステップ2:プロジェクトの起動

cd my-sanity-project
npm run dev

ブラウザで http://localhost:3333 にアクセスすると、Sanity Studioが表示されます。

ステップ3:スキーマの定義

schemaTypes フォルダにコンテンツの型定義を追加します。

// schemaTypes/post.js
export default {
  name: 'post',
  title: 'ブログ記事',
  type: 'document',
  fields: [
    {
      name: 'title',
      title: 'タイトル',
      type: 'string',
      validation: Rule => Rule.required()
    },
    {
      name: 'slug',
      title: 'スラッグ',
      type: 'slug',
      options: { source: 'title' }
    },
    {
      name: 'body',
      title: '本文',
      type: 'array',
      of: [{ type: 'block' }] // Portable Text
    },
    {
      name: 'publishedAt',
      title: '公開日',
      type: 'datetime'
    }
  ]
}

ステップ4:コンテンツAPIの呼び出し

import { createClient } from '@sanity/client'

const client = createClient({
  projectId: 'your-project-id',
  dataset: 'production',
  useCdn: true,
  apiVersion: '2024-01-01',
})

const posts = await client.fetch(`*[_type == "post"] | order(publishedAt desc)`)

7. GROQ:Sanity独自のクエリ言語

GROQはSanityが開発したJSON向けのクエリ言語で、直感的な構文でデータを絞り込めます。

基本的なGROQクエリ例

// 全ての公開済み記事を取得
*[_type == "post" && !(_id in path("drafts.**"))]

// タイトルと本文のみ取得(プロジェクション)
*[_type == "post"]{
  title,
  body,
  "authorName": author->name
}

// 最新10件を日付順で取得
*[_type == "post"] | order(publishedAt desc) [0...10] {
  title,
  publishedAt,
  slug
}

// 特定カテゴリの記事を取得
*[_type == "post" && category->slug.current == "tech"]{
  title,
  body
}

GROQの強みは、参照(Reference)を -> で辿れる点にあります。SQLのJOINのような操作を直感的に記述できます。


8. Next.jsとSanityの連携方法

SanityはNext.jsとの相性が非常によく、公式でも推奨されている組み合わせです。

インストール

npm install next-sanity @sanity/image-url

sanity.config.ts の設定

import { defineConfig } from 'sanity'
import { structureTool } from 'sanity/structure'

export default defineConfig({
  name: 'default',
  title: 'My Blog',
  projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID!,
  dataset: process.env.NEXT_PUBLIC_SANITY_DATASET!,
  plugins: [structureTool()],
  schema: {
    types: [], // スキーマをここに追加
  },
})

lib/sanity.ts の設定

import { createClient } from 'next-sanity'
import imageUrlBuilder from '@sanity/image-url'

export const client = createClient({
  projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID,
  dataset: process.env.NEXT_PUBLIC_SANITY_DATASET,
  apiVersion: '2024-01-01',
  useCdn: false,
})

const builder = imageUrlBuilder(client)
export const urlFor = (source: any) => builder.image(source)

ページでのデータ取得(App Router)

// app/blog/page.tsx
import { client } from '@/lib/sanity'

async function getPosts() {
  return client.fetch(`
    *[_type == "post"] | order(publishedAt desc) {
      _id,
      title,
      slug,
      publishedAt,
      "excerpt": pt::text(body)[0...120]
    }
  `)
}

export default async function BlogPage() {
  const posts = await getPosts()
  return (
    <main>
      {posts.map(post => (
        <article key={post._id}>
          <h2>{post.title}</h2>
          <p>{post.excerpt}</p>
        </article>
      ))}
    </main>
  )
}

9. Sanityのデメリット・注意点

⚠️ 日本語ドキュメントが少ない

Sanityの公式ドキュメントはすべて英語です。日本語の情報はQiitaやZennに存在しますが、microCMSなどの国産CMSと比べると情報量が少ないため、トラブル時の解決に時間がかかる場合があります。

⚠️ 学習コストがやや高い

GROQという独自クエリ言語を習得する必要があります。また、StudioのカスタマイズにはReactの知識が必要です。

⚠️ 大規模利用は有料プランが必要

APIリクエスト数や帯域が無料プランの制限を超える場合は、有料プランへのアップグレードが必要です。トラフィックの多いサイトではコストシミュレーションを事前に行うことが重要です。

⚠️ データはSanityのクラウドに保存される

セルフホスティングには対応していないため、データがSanity社のサーバー上に保存されます。データの主権(データサブレジデンシー)が重要な要件の場合は確認が必要です。


10. Sanityが向いているプロジェクト

✅ こんなプロジェクトにおすすめ

  • Next.js / Nuxt / SvelteKitなどのモダンフレームワークを使ったWebサイト
  • コンテンツをWebとモバイルアプリやSlackボットなど複数チャネルに配信したい
  • コンテンツ編集チームがリアルタイムで共同作業したい
  • 独自の編集UIを構築してノンエンジニアが使いやすくしたい
  • eコマースサイト(Shopifyとの連携実績多数)

❌ こんな場合は他のCMSを検討

  • WordPress的な「すぐに公開できるブログ」が欲しい
  • 日本語サポートを重視する(→ microCMSを検討)
  • 完全無料でセルフホストしたい(→ Strapi / Directus を検討)
  • エンジニアなしで非エンジニアのみで運用したい

11. まとめ

Sanityは、高いカスタマイズ性・リアルタイムコラボレーション・強力なAPIとクエリ言語を備えた、現代のWeb開発に最適なヘッドレスCMSです。

こんな人に向いている こんな人には向かない
モダンなJSフレームワークを使う開発者 WordPressの代替を探している非エンジニア
複数チャネルへのコンテンツ配信が必要 日本語情報を重視する
管理UIを自分たちの要件に合わせたい 完全無料でのセルフホストが必要

無料プランが充実しているため、まずは小規模プロジェクトで試してみることをおすすめします。Next.jsとSanityの組み合わせは特に相性がよく、公式のスターターキットも豊富に用意されています。


関連キーワード

ヘッドレスCMS / Sanity CMS / Sanity.io / GROQ / Sanity Studio / Next.js CMS / コンテンツ管理システム / microCMS比較 / Contentful比較 / JAMstack / APIファーストCMS


📝 この記事の情報は2026年時点のものです。料金やプラン内容は公式サイトで最新情報をご確認ください。 公式サイト: https://www.sanity.io/

    らくらくPython塾 – 読むだけでマスター

    共通テスト「情報I」対策解説講座

    実践で学ぶPython速習講座

    テックジム東京本校

    格安のプログラミングスクールといえば「テックジム」。
    講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
    対面型でより早くスキル獲得、月額2万円のプログラミングスクールです。
    情報科目の受験対策指導もご用意しております。