ヘッドレスCMS「Contentful」入門ガイド ~従来CMSとの違いからメリット・使い方・主要機能まで解説してみた~

ヘッドレスCMS「Contentful」入門ガイド ~従来CMSとの違いからメリット・使い方・主要機能まで解説してみた~

Clock Icon2022.12.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、ベルリンオフィスの小西です。

Webアプリケーションやモバイルアプリの開発において、コンテンツ管理は避けて通れない重要な要素です。従来はWordPressやDrupalといったモノリシックなCMSが主流でしたが、近年「ヘッドレスCMS」というアプローチが開発現場でよく話題に上がるようになりました。

今回は、ヘッドレスCMSで特に人気の高い Contentful について、基本概念から実際の利用方法まで、初心者の方にも分かりやすく解説します。この記事を通じ、従来のCMSとの違い、導入メリット、具体的な実装方法についての理解が深まれば幸いです。

Contentfulとは? ヘッドレスCMSの基本を理解しよう

Contentfulは、ヘッドレスCMS(Content Management System) として設計されたクラウドベースのコンテンツ管理プラットフォームです。従来のWordPressやDrupalといったCMSとは根本的に異なるアプローチを採用しており、開発者とコンテンツ作成者の両方にとって新しい選択肢を提供してくれます。

Contentfulの概要と特徴

Contentfulの最大の特徴は、コンテンツと表示方法の完全な分離にあります。つまり、コンテンツの管理と表示方法が独立しているため、1つのコンテンツを複数のプラットフォーム(Webサイト、モバイルアプリ、デジタルサイネージなど)で自由に活用できます。

主な特徴として以下が挙げられます:

  • APIファーストな設計:すべての機能とコンテンツがRESTやGraphQL APIを通じて提供
  • クラウドネイティブ:インフラ管理不要で高いスケーラビリティを実現
  • 開発者フレンドリー:React、Vue.js、Next.jsなど主要なフレームワークに対応
  • 直感的な管理UI:非エンジニアでも使いやすいコンテンツ編集画面

ヘッドレスCMSとは何か

ヘッドレスCMSとは、従来のCMSから「頭(Head)」にあたるフロントエンド部分を取り除いたアーキテクチャです。

従来のCMS(モノリシック)の構造

コンテンツ管理 + フロントエンド表示 = 一体型システム

ヘッドレスCMSの構造

コンテンツ管理(バックエンド)← API → フロントエンド(自由に選択)

この分離により、開発者は表示部分を自由に設計でき、同じコンテンツを様々なデバイスやプラットフォームで活用できるようになります。

従来のCMSとの違い

従来のCMSとヘッドレスCMSの主な違いを整理してみましょう:

項目 従来のCMS(WordPress等) ヘッドレスCMS(Contentful等)
アーキテクチャ モノリシック(一体型) 分離型(API駆動)
フロントエンド テンプレート固定 完全カスタマイズ可能
配信先 主にWebサイト マルチプラットフォーム
開発の自由度 制限あり 非常に高い
学習コスト 中〜高
パフォーマンス サーバー依存 CDN最適化済み

なぜContentful? ヘッドレスアプローチのメリット

Contentfulのようなヘッドレスアプローチには、従来のCMSでは実現困難な多くのメリットがあります。

開発の自由度向上

プラットフォーム選択の自由
従来のCMSではPHPベースのテンプレートシステムに縛られがちでしたが、Contentfulなら好きな技術スタックで開発できます。Contentfulの対応プラットフォームは非常に幅広く、JavaScriptはもちろん、様々な言語やプラットフォームに対応しています:

  • Webフレームワーク:React/Next.js、Vue.js/Nuxt.js、Angular、Svelte/SvelteKit
  • モバイル開発:iOS (Swift)、Android (Kotlin/Java)、React Native、Flutter
  • サーバーサイド:Node.js、Python、Ruby、PHP、Java、.NET、Go
  • 静的サイトジェネレーター:Gatsby、Gridsome、Jekyll、Hugo

マルチチャネル配信

1つのコンテンツ、複数の出力先
Contentfulで管理するコンテンツは、APIを通じて様々なプラットフォームに配信できます:

  • Webサイト:レスポンシブデザイン対応
  • モバイルアプリ:iOS/Android ネイティブアプリ
  • デジタルサイネージ:店舗やイベント会場での表示
  • 音声デバイス:AlexaやGoogle Homeでの読み上げ
  • IoTデバイス:スマートディスプレイなどの新しいタッチポイント

コンテンツの一元管理
複数のプラットフォームで同じコンテンツを使用する場合、Contentfulなら1箇所で更新するだけで全ての配信先に反映されます。これにより、情報の一貫性を保ちながら運用コストを大幅に削減できます。

パフォーマンスと拡張性

CDNによる高速配信
ContentfulはグローバルCDN(Content Delivery Network)を標準で提供しており、世界中のユーザーに高速でコンテンツを配信できます。

無制限なスケーラビリティ
クラウドネイティブな設計により、トラフィック急増にも自動的に対応します。「記事が増えてきたのでDB拡張しなきゃ...」というインフラの心配も不要です。

セキュリティとメンテナンス
サーバーの管理、セキュリティアップデート、バックアップなどの運用タスクはContentfulに任せて、開発に専念できます。

Contentfulの仕組みを理解する

全体像

Contentful の基本的な構造は、下記の図で説明できます。

Contentful 説明

最も重要なのは コンテンツモデル(Content model) です。

コンテンツモデルの概念

コンテンツモデルは、Contentfulにおけるデータ構造の設計図です。従来のCMSでいう「投稿タイプ」や「カスタムフィールド」に相当しますが、より柔軟で構造化されたアプローチを取ります。

記事に何を入力してもらうか」を定義する場所、というとイメージしやすいかもしれません。

コンテンツモデル設計の例
ブログ記事用のコンテンツモデルを考えてみましょう:

ブログ記事(Content Type)
├── タイトル(Text)
├── 本文(Rich Text)
├── アイキャッチ画像(Media)
├── 公開日(Date & Time)
├── 著者(Reference to Author)
├── カテゴリー(Reference to Category)
└── タグ(Text, multiple values)

フィールドタイプの豊富さ
フィールドとは、コンテンツの各項目(タイトル、本文、画像など)を管理するための入力欄のことです。Contentfulは50種類以上のフィールドタイプを提供しており、様々な種類のデータを入力できます:

  • 基本タイプ:Text、Number、Boolean、Date
  • リッチコンテンツ:Rich Text、Media(画像/動画)
  • 構造化データ:JSON Object、Location(地理座標)
  • 関連付け:Reference(他のエントリーとの関連)、Link(配列形式での複数関連)

スペースとエントリーの関係

スペース(Space)
スペースは、すべてのコンテンツを格納する「コンテナ」です。通常、1つのWebサイトやアプリケーションに対して1つのスペースを作成します。

エントリー(Entry)
エントリーは、コンテンツモデルの「型」に実際の情報を入力したものです。例えば「ブログ記事」というコンテンツモデルがある場合、「Contentfulに入門しよう!」や「ヘッドレスCMSのメリットを説明してみた」といった個々の記事がエントリーになります。

アセット(Asset)
画像、動画、PDFなどのファイルはアセットとして管理されます。アセットは複数のエントリーから参照できます。

その他の要素

  • Organization … 全リソースを所有する運用主体です。主に会社などの運営組織単位がこれにあたり、複数Spaceを所有できます。
  • User … 文字通り一人一人のユーザーを指します。各ユーザーアカウントはOrganizationやSpaceから独立したリソースとなっており、複数のOrganizationやSpaceに所属できます。
  • 環境(Environment) … 本番、ステージング、開発環境など、ブランチのように切り替えてコンテンツを安全に管理できます。

APIファーストの設計思想

Contentfulの全ての機能は、APIを通じて提供されます。これにより、一貫性のある開発体験と高い拡張性を実現しています。

Content Delivery API
公開済みコンテンツを取得するための読み取り専用API。CDNによって最適化されており、高速なコンテンツ配信が可能です。

// 基本的な取得例
const contentful = require('contentful');
const client = contentful.createClient({
  space: 'your-space-id',
  accessToken: 'your-access-token'
});

// ブログ記事一覧を取得
const entries = await client.getEntries({
  content_type: 'blogPost',
  limit: 10,
  order: '-sys.createdAt'
});

Content Preview API
Content Delivery APIとほぼ同様ですが、下書きの記事も取得できる点が異なります。またCDNは適用されていません。主に社内プレビューや開発用に利用します。

Content Management API
コンテンツのCRUD(作成、閲覧、更新、削除)を行うためのAPI。管理画面での操作と同等の機能をプログラム的に実行できます。上述2つの読み取りAPIはSpace単位で発行されますが、CMAはユーザー毎に発行します。

GraphQL API
RESTに加えて、GraphQLクエリにも対応。必要なデータのみを効率的に取得でき、フロントエンドパフォーマンスの向上に貢献します。

query {
  blogPostCollection(limit: 5) {
    items {
      title
      publishDate
      author {
        name
      }
      featuredImage {
        url
      }
    }
  }
}

この設計思想により、開発者は使い慣れたツールや手法でContentfulを活用でき、学習コストを最小限に抑えながら高度な機能を実現できます。

Contentfulの投稿の流れ

Contentfulで記事を投稿してサイト表示するには、大きく次の3つのステップを踏みます。

contentful

実際のダッシュボードでどのように記事投稿を行うか説明します。

1. コンテンツモデルの定義

ヘッダーの [Content model (コンテンツモデル)] からコンテンツモデル一覧ページに移動し、[Add content type (新規追加)]をクリックします。

コンテンツモデル名、ID、説明文を追加して [Create] します。

  • コンテンツモデル名は日本語でも可
  • IDはAPIでモデルを指定する際に利用するため、アルファベットかつユニークである必要がある

[フィールドを追加] をクリックし、作成したモデルに入力用のフォールドを追加していきます。


入力フィールドのタイプを選択します

フィールドタイプ 説明
Rich text リッチテキストによる長文入力が可能
Text テキスト入力が可能。短文、リスト、もしくはマークダウン形式の長文テキスト
Number 数値を選択
Date and Time 日時をカレンダーから選択可能
Location 地図上から任意の地点を選択
Media 画像やファイルなどのアセットをアップロード可能
Boolean Yes もしくは No の二択式フィールド
JSON JSON形式で自由にデータ入力が可能
Reference 他のモデルのエントリーとリンクさせることが可能

例えば短文テキストフィールドを作成する場合を例に取ります。

まずは [Text] を選択します。

任意のフィールド名(日本語可)、フィールドIDを入力し、 type として [Short text, exact search] を選択し、 [Create and configure] に進みます。

[Settings] タブで、

  • [This field represents the Entry title] にチェックを入れると Contentful 上においてもそのフィールドが記事タイトルとして扱われるため、検索しやすくなります。1つのコンテンツモデルにつき1つのフィールドのみタイトルとして設定できます。
  • [Enable localization of this field] にチェックを入れると、あらかじめ設定した複数の言語(Locale)ごとにフィールド入力ができるようになります。

[Validation] タブからは、フィールド入力時のバリデーションを制御できます。

フィールドのバリデーションでは下記の設定が可能です。

  • 必須 … 入力されない場合に記事を保存できない
  • ユニーク … 他の記事と値が重複できない
  • 文字数制限 … 指定した文字数以内の入力のみ可能にする
  • 特定のパターンのみ許可 … 正規表現で特定の入力パターンのみ許可する
  • 特定のパターンを禁止 … 正規表現で特定の入力パターンを禁止する
  • 特定の値のみ許可 … 特定の値のオプションを利用する

[Default value] タブに移動すると、フィールドに初期値として入力しておきたい値を設定可能です(placeholder)。

[Appearance] タブではフィールドの見た目を設定できます。URL、ドロップダウン、ラジオボタン、スラッグ形式などが選択可能で、自動的に適切なバリデーションも付与してくれるため便利です。

諸々の設定ができたら [Confirm] で設定を完了します。

フィールドが追加されました。同じ要領で、任意のフィールドを追加していきます。

2. 記事の投稿

1で作成したコンテンツモデルに対して記事を投稿します。

ヘッダーの [Content] からコンテンツ一覧ページに移動し、[Add Entry] から先ほど作成したモデル名をクリックします。

記事の投稿画面に遷移します。入力可能なフィールドは1で設定されたフィールドに準拠します(下の例では3つのフィールドが追加されています)。

準備ができたら右上の [Publish] をクリックすると、公開ステータスで記事が保存され、API から記事を取得できるようになります。

3. 記事の表示

ヘッドレス CMS では、記事を表示する「ビュー」側(フロントエンド)は自分で開発する必要があります。

下記はJamstack構成の例です。

Contentful with Jamstack Example

DevelopersIOでは「Contentfulで構築してみた」系のブログが日々執筆されていますので、ぜひ参考にしてみてください。

知っておきたい便利な機能

以上で基本的な説明はカバーできていると思うのですが、それ以外の便利な機能も一部紹介します。

アセットライブラリー

画像や動画などのアセットを管理する機能です。実はContentful単体で画像CDN最適化・配信・変換まで行えてしまい、なかなかに優秀です。詳しくは下記記事にまとめています。

Contentfulだけで画像変換が割と優秀。フォーマット変換・リサイズ・顔切り抜きなど試してみたよ

権限管理

ユーザーを権限が紐づいたグループに所属させることで、細かな制限が可能になります。

先で挙げた[ブログ]というモデルを例にとると、チームにEditor(各記事をレビューする責任者) と Writer(記事を執筆する人) がいる場合、

  • 記事は誰でも執筆できる
  • ただし公開できるのはEditorのみ
  • [記事タイトル]と[記事サムネイル]はEditorのみ編集可能。

のような制限が実現できます。なおEditor/Writerというのは一例で、これ以外にも自由に役割を作成可能です。

Contentful上のほぼ全てのリソースが制御対象に含まれ、それぞれの条件で特定のアクションの許可もしくは拒否を強制できます。

カスタムアプリ

Contentfulはクラウドで動作しますが、CMSをJavascriptでカスタマイズできます。雑にいえばWordPressのプラグインに近いですが、CMSのデータベースに対して影響を与えることはありません。

ごく一例ですが、下記のような拡張機能が開発できます。

  • あらかじめ設定したルールに則った記事の自動校正
  • 独自のWisywigエディターへのリプレイス
  • AIによる自動翻訳アプリ
  • 外部サイトのビルド完了通知をContentfulで受けとる
  • Google Analytics分析をダッシュボードに表示する

また、**Forma 36 というオープンソースのデザインシステム**もContentfulから公開されており、UIに違和感のない形で機能拡張ができます。 Forma 36はReactコンポーネントとFigma UIで提供されています。

「自力でアプリ開発するのはしんどい」という方はサードパーティのマーケットプレイスから欲しい機能を探すこともできます。

ピュアなヘッドレスCMSでここまで拡張性が高いのもContentfulの特徴かと思います。

Workflows(ワークフロー)

記事の執筆から公開まで、チーム内でのレビューフローをContentful上で一元管理できます。
下記のような一連のステップを、Contentful上で完結して設定できます。

  1. Draft:ライターが記事を執筆・編集
  2. Review:編集者によるレビュー・校正
  3. Published:承認後の本番公開

Contentful Workflow

さらに、特定のコンテンツグループを指定した日時に一斉公開する__スケジュール公開機能__も備えており、キャンペーンやプロダクト発表などのタイミングを合わせた配信も簡単に実現できます。

アセット保護機能

公開前のアセットを外部からアクセスできないように制限することができます。詳しくは以前↓の記事を書きました。

Contentfulのアセット保護機能を解説 – 画像アクセスに認証を付与してみる

よくあるご質問

日頃お客様からよくいただく質問も掲載しておきます。

Q. Contentful ダッシュボードは日本語化されていますか?

A. ダッシュボードは英語版のみ提供されていますが、クラスメソッドで日本語化Chromeプラグインを提供しています。

Q. SEOはどのように対策しますか?

A. SEOに必要な情報をContentfulに集約し、メタタグの実装はフロントエンドで行うのが一般的です。そのための各種テンプレートも用意されています。

Q. 他のCMSからデータ移行することはできますか?

Contentfulでは他CMSやデータソースから、CLIやSDK、Pythonを使って記事データの移行が可能です。
移行時のスキーマ変換や数万記事以上の大規模な処理が必要な場合は、クラスメソッドでのサポートも可能です。

Q. 無料版と有料版の違いを教えてください。

無料版ではAPIリクエスト数や記事レコード数に制限があり、個人レベルの小規模なプロジェクトに適しています。
有料版ではクォータの引き上げや高度な機能が利用可能になります。
クラスメソッドを通じたご契約では、カスタムロール、アセット保護機能、監査ログなどエンタープライズ相当の機能がご利用いただけます。ご検討中のお客様は一度ご相談ください。

Contentfulの有料プランでは何ができるの? 無料版との違いや便利な機能を解説

最後に

Contentfulはここ数年のヘッドレスCMS界隈の中で最も勢いがありアップデートも頻繁にあるため、「登場した当初より全体像が掴みにくくなっているな〜」と思い今回の記事を書いてみました。

クラスメソッドではContentfulの契約のご相談、構築支援をしています。ご興味のある方、またすでにContentfulを使っていて利用方法でお困りの方がいましたら、ぜひ一度弊社までお問い合わせください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.