
Strapi 5ガイド:セットアップ、API、プラグイン、デプロイ(2026年版)
Strapiは、Node.js上で構築されたオープンソースのヘッドレスCMSで、API、データベース、デプロイを完全に制御できます。他人のインフラストラクチャへのアクセス権を借りるホスティング型CMSプラットフォームとは異なり、Strapiはあなたのサーバー上で動作し、コンテンツスキーマからRESTおよびGraphQLエンドポイントを生成し、プレーンなJavaScriptまたはTypeScriptを使用してバックエンドのあらゆる層をカスタマイズできます。
このガイドでは、最初の npx create-strapi からRailwayやStrapi Cloudへの本番デプロイまで、Strapi 5に特化して解説します。すべてのコード例はコピー&ペースト可能で、Strapi 5.xに対してテスト済みです。
| 項目 | 値 |
|---|---|
| タイプ | オープンソースのヘッドレスCMS |
| 言語 | JavaScript / TypeScript (Node.js) |
| 現在のバージョン | Strapi 5 |
| ライセンス | MIT(コミュニティ)/ 独自ライセンス(エンタープライズ) |
| データベース対応 | PostgreSQL, MySQL, MariaDB, SQLite |
| APIタイプ | REST + GraphQL(どちらも組み込み) |
| ホスティング | セルフホスト または Strapi Cloud |
| クラウド価格 | 無料枠あり、その後月額$18〜 |
| GitHubスター数 | 65,000+ |
| 最適な用途 | 完全なコード所有権とAPIのカスタマイズを求めるチーム |
Strapiとは何か、そしてどのように機能するのか?
Strapiは、セルフホスト型のAPIファーストなコンテンツ管理システムであり、コンテンツのバックエンドをフロントエンドから分離します。ビジュアルビルダーまたはコードを通じてコンテンツスキーマを定義すると、Strapiは任意のフロントエンドフレームワークが消費できるCRUD APIエンドポイント(RESTおよびGraphQLの両方)を自動的に生成します。管理パネルはReactベースのUIであり、公式Strapiドキュメントによると、コンテンツ編集者はコードに触れることなくエントリーを作成・管理できます。
ヘッドレスCMS vs 従来型CMS
WordPressのような従来型CMSでは、コンテンツとプレゼンテーション層が結合されています。ブログ記事、ページ、メディアはすべて、訪問者にHTMLをレンダリングする同じシステム内に存在します。これは、モバイルアプリ、マーケティング用マイクロサイト、ドキュメントポータルなどで同時に同じコンテンツが必要になるまでは問題なく機能します。
ヘッドレスCMSはフロントエンドを完全に取り除きます。Strapiはコンテンツを保存し、APIエンドポイントを通じてJSONとして提供します。Next.jsサイト、React Nativeアプリ、IoTダッシュボードはすべて、同じStrapiバックエンドからデータを取得します。単一の信頼できる情報源(Single Source of Truth)から、複数の消費者へ配信できるのです。
Strapi以外の選択肢を検討している場合は、当社のヘッドレスCMS比較で主要なプラットフォームを並べて解説しています。
Strapiのアーキテクチャ
Strapiのスタックはシンプルです。Node.jsサーバーが、データベース(PostgreSQL、MySQL、またはSQLite)とフロントエンドアプリケーションの間に位置します。管理パネル(Reactシングルページアプリ)は、フロントエンドが使用するものと同じAPIに接続しますが、権限が強化されています。
フローは以下の通りです。データベースがコンテンツを保持します。StrapiのORM層(Knex.jsベース)がそれをクエリします。API層がRESTおよびGraphQLエンドポイントを公開します。Next.js、Nuxt、Astro、Gatsby、またはモバイルアプリなどのフロントエンドは、それらのエンドポイントからJSONを取得します。Strapi自体はエンドユーザーに対してHTMLをレンダリングすることはありません。
Strapi GitHubリポジトリには65,000以上のスターがあり、プラットフォーム上で最も人気のあるオープンソースCMSプロジェクトの一つとなっています。
Strapi 5の新機能は?
Strapi 5は大幅な書き換えであり、Entity Service APIを新しいDocument Service APIに置き換え、管理パネルのビルドにWebpackからViteへ切り替え、新規プロジェクトのデフォルト言語としてTypeScriptを導入しました。これらは漸進的な更新ではなく、Strapi 5概要ページで詳述されているように、内部アーキテクチャが大幅に変更されました。
Strapi 5開発者向け変更履歴によると、開発者にとって最も重要な変更点は以下の通りです。
- Document Service API が Entity Service API を置き換え、よりクリーンなメソッド署名、より良いTypeScript型、CRUD操作のための統一インターフェースを提供
- Draft & Publishの再構築。管理パネル内の2タブシステムにより、下書き状態と公開状態のコンテンツを分離
- コンテンツ履歴。管理画面から直接、任意のエントリーの以前のバージョンを表示および復元可能
- プレビュー機能。公開前に実際のフロントエンドでコンテンツをプレビュー可能(コンテンツタイプごとに設定)
- ViteがWebpackを置き換え。管理パネルのビルドが著しく高速化(ビルド時間で約60%の改善を確認)
- TypeScriptファーストアプローチ。新規プロジェクトはデフォルトでTypeScriptでスキャフォールディング
- AI Content-Type Builder。自然言語の説明やFigmaデザインからコンテンツスキーマを生成。これは2026年の新機能で、他のヘッドレスCMSはまだ提供していません
- 簡素化されたAPIレスポンス。RESTおよびGraphQLの両方で、よりフラットなJSON構造
- 新しいPlugin SDK。Strapiプラグインの構築と配布のための streamlined API
| 機能 | Strapi 4 | Strapi 5 |
|---|---|---|
| サービスAPI | Entity Service | Document Service |
| バンドラー | Webpack | Vite |
| デフォルト言語 | JavaScript | TypeScript |
| ドラフトシステム | 単一トグル | 2タブ(下書き/公開) |
| コンテンツ履歴 | プラグイン必要 | 組み込み |
| フロントエンドプレビュー | 利用不可 | ネイティブプレビューAPI |
| APIレスポンス形式 | 深くネストされた | フラット構造 |
| スキーマ生成 | 手動のみ | AI + 手動 |
Strapi 5のインストールとセットアップ方法
Strapi 5プロジェクトのセットアップには約2分かかります。Node.js 18以降、およびnpm、yarn、pnpmのいずれかが必要です。Strapiは、Strapiクイックスタートガイドに記載されているように、単一のコマンドから管理パネル、データベース接続、API層を含む完全なプロジェクトをスキャフォールディングします。
前提条件
- Node.js 18+(20 LTS推奨)
- npm 6+、yarn、または pnpm
- データベース:開発用にはSQLiteがそのまま動作します。本番環境にはPostgreSQLを使用してください
最初のプロジェクトの作成
npx create-strapi@latest my-project
# Interactive prompts:
# ? Choose your preferred language: TypeScript
# ? Choose your default database client: sqlite
# ? Start with an example structure?: Yes (recommended for first-timers)
cd my-project
npm run developStrapiは http://localhost:1337 で起動します。初回アクセス時に管理者アカウントの作成を促されます。その後、管理パネルに入り、コンテンツタイプの構築準備が整います。
プロジェクト構造の概要
my-project/
├── config/
│ ├── database.ts # Database connection
│ ├── server.ts # Host, port, app keys
│ ├── admin.ts # Admin panel config
│ └── plugins.ts # Plugin configuration
├── src/
│ ├── api/ # Your content types live here
│ │ └── article/
│ │ ├── content-types/
│ │ │ └── article/schema.json
│ │ ├── controllers/article.ts
│ │ ├── routes/article.ts
│ │ └── services/article.ts
│ ├── plugins/ # Custom plugins
│ └── index.ts # App bootstrap/lifecycle
├── public/ # Static files
├── .env # Environment variables
└── package.json各コンテンツタイプは src/api/ 下に独自のフォルダを持ち、スキーマ、コントローラー、ルート、サービスファイルが含まれます。Strapiは管理パネルを通じてコンテンツタイプを作成する際にこれらを自動的に生成しますが、手動で作成することも可能です。
コンテンツタイプの構築とコンテンツ管理
コンテンツタイプはStrapiの心臓部であり、データスキーマを定義し、APIエンドポイント、管理パネルフォーム、データベーステーブルを自動的に生成します。Strapiは主に2つのタイプをサポートしています。コレクションタイプ(ブログ記事や製品など、多数のエントリーが存在するもの)とシングルタイプ(ホームページやサイト設定など、エントリーが1つだけ存在するもの)です。
Content-Type Builderのウォークスルー
Strapi管理パネルのContent-Type Builderを使用すると、視覚的にスキーマを定義できます。Text、Rich Text、Media、Number、Boolean、Relation、Component、Dynamic Zone、JSONなどのフィールドタイプを選択すると、Strapiがスキーマファイルを記述してくれます。
以下は、Articleコンテンツタイプのスキーマが内部でどのように見えるかの例です。
{
"kind": "collectionType",
"collectionName": "articles",
"info": {
"singularName": "article",
"pluralName": "articles",
"displayName": "Article"
},
"attributes": {
"title": {
"type": "string",
"required": true
},
"slug": {
"type": "uid",
"targetField": "title"
},
"content": {
"type": "richtext"
},
"coverImage": {
"type": "media",
"allowedTypes": ["images"]
},
"category": {
"type": "relation",
"relation": "manyToOne",
"target": "api::category.category"
},
"publishedAt": {
"type": "datetime"
}
}
}また、新しいAI Content-Type Builderを使用して、「タイトル、スラッグ、リッチテキストコンテンツ、カバー画像、カテゴリを持つブログが必要です」といった平易な英語の説明からスキーマを生成することもできます。StrapiはスキーマJSONを生成し、データベーステーブルを作成します。プロトタイピングにおいて非常に有用です。
コンポーネントとダイナミックゾーン
コンポーネントは再利用可能なフィールドグループです。コンテンツ構造のためのReactコンポーネントのようなものだと考えてください。metaTitle、metaDescription、canonicalUrl フィールドを持つ「SEO」コンポーネントは、任意のコンテンツタイプに添付できます。
ダイナミックゾーンはこれをさらに発展させたもので、コンテンツ編集者がコンポーネントのリストから選択して柔軟なページレイアウトを構築できるようにします。ランディングページには、ヒーローコンポーネント、次にフィーチャーグリッド、次に testimonials スライダーといった具合に、すべて編集者が選択し順序付けます。このパターンは、ページごとに異なる構造を持つマーケティングサイトで人気があります。
Draft & Publishによるコンテンツ管理
Strapi 5ではDraft & Publishシステムが刷新されました。単一のトグルではなく、コンテンツマネージャー内に2つの別々のタブ(下書き用と公開用)が表示されるようになりました。編集者はライブコンテンツに影響を与えることなく、下書きを自由に変更できます。準備ができたら公開し、下書きが新しい公開バージョンになります。何か問題が発生した場合、コンテンツ履歴を使用すると以前の状態にロールバックできます。
Strapi API(RESTおよびGraphQL)の利用
Strapiは、作成したすべてのコンテンツタイプに対してRESTおよびGraphQLエンドポイントを自動生成します。REST APIは設定不要で即時利用可能です。GraphQLは組み込みプラグインを有効にする必要がありますが、セットアップには約30秒しかかかりません。Strapi REST APIドキュメントによると、両方のAPIはフィルタリング、ソート、ページネーション、フィールド選択、リレーションのポピュレーションをサポートしています。
REST APIクエリ
すべてのコレクションタイプは /api/{pluralName} にエンドポイントを持ちます。以下は、フィルタとリレーションのポピュレーションを使用して記事を取得する方法です。
// Fetch published articles, sorted by date, with category populated
const response = await fetch(
'http://localhost:1337/api/articles?' + new URLSearchParams({
'filters[publishedAt][$notNull]': 'true',
'sort': 'publishedAt:desc',
'populate': 'category,coverImage',
'pagination[page]': '1',
'pagination[pageSize]': '10',
'fields[0]': 'title',
'fields[1]': 'slug',
'fields[2]': 'publishedAt'
}),
{
headers: {
'Authorization': `Bearer ${API_TOKEN}`
}
}
);
const { data, meta } = await response.json();
// data: array of articles
// meta.pagination: { page, pageSize, pageCount, total }Strapi 5ではレスポンス形式がフラットになりました。v4では data.attributes.title を掘り下げる必要がありましたが、v5では単に data.title です。小さな変更ですが、QOL(生活の質)の大きな向上です。
GraphQLのセットアップとクエリ
プラグインをインストールしてGraphQLを有効にします。
npm run strapi install graphqlその後、/graphql でクエリを実行します。
query GetArticles {
articles(
filters: { publishedAt: { notNull: true } }
sort: "publishedAt:desc"
pagination: { page: 1, pageSize: 10 }
) {
title
slug
publishedAt
category {
name
}
coverImage {
url
alternativeText
}
}
}GraphQLは、フロントエンドで深くネストされたリレーションが必要な場合に特に便利です。異なる populate パラメータを使用した複数のREST呼び出しを行う代わりに、1つのGraphQLクエリで必要なものを正確に取得できます。
Next.jsでのStrapiコンテンツ取得
以下は、Next.js App RouterページでStrapiコンテンツを取得する実用的な例です。これはStrapiとフロントエンドフレームワークの組み合わせの中で最も一般的なものの一つです。
// app/blog/page.tsx
async function getArticles() {
const res = await fetch(
`${process.env.STRAPI_URL}/api/articles?populate=category,coverImage&sort=publishedAt:desc`,
{
headers: {
Authorization: `Bearer ${process.env.STRAPI_TOKEN}`,
},
next: { revalidate: 60 }, // ISR: revalidate every 60 seconds
}
);
if (!res.ok) throw new Error('Failed to fetch articles');
const { data } = await res.json();
return data;
}
export default async function BlogPage() {
const articles = await getArticles();
return (
<main>
{articles.map((article) => (
<article key={article.documentId}>
<h2>{article.title}</h2>
<span>{article.category?.name}</span>
</article>
))}
</main>
);
}v5では documentId に注目してください。これはv4の数値 id を置き換えます。これを見過ごすと移行時に問題になる詳細の一つです。
Strapiにおけるカスタムコントローラー、サービス、ルート
カスタムコントローラーは、StrapiがContentfulやSanityのようなSaaS型ヘッドレスCMSプラットフォームと真に差別化される部分です。StrapiはNode.jsアプリケーションとしてあなたのサーバー上で動作するため、自動生成されたエンドポイントを独自のビジネスロジック、入力検証、データ変換、外部API呼び出し、通知トリガーなどでオーバーライドできます。Express.jsアプリで行うようなことは何でも可能です。私が発見したのは、チームがホスティング型の代替案よりもStrapiを選択する理由となる機能こそ、これだということです。
Strapi ControllersドキュメントではAPI全体をカバーしています。ここでは、公式のサービスおよびコントローラーの例に基づいて、私が最もよく使用するパターンを紹介します。
コアコントローラーの拡張
Strapiは createCoreController ファクトリを提供します。特定のアクション(find、findOne、create、update、delete)をオーバーライドしながら、残りの自動生成された動作を維持することで拡張します。
// src/api/article/controllers/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreController(
'api::article.article',
({ strapi }) => ({
// Override the default find to add custom filtering
async find(ctx) {
// Validate and sanitize the incoming query
const sanitizedQuery = await this.sanitizeQuery(ctx);
// Add your custom logic -- e.g., only return articles
// that belong to the authenticated user's organization
const user = ctx.state.user;
if (user?.organization) {
sanitizedQuery.filters = {
...sanitizedQuery.filters,
organization: user.organization.id,
};
}
const { results, pagination } = await strapi
.service('api::article.article')
.find(sanitizedQuery);
const sanitizedResults = await this.sanitizeOutput(results, ctx);
return this.transformResponse(sanitizedResults, { pagination });
},
})
);カスタムサービスの記述
サービスは、コントローラー(および他のサービス)が呼び出すことができる再利用可能なビジネスロジックを保持します。コントローラーは薄く、サービスは厚く保ちましょう。
// src/api/article/services/article.ts
import { factories } from '@strapi/strapi';
export default factories.createCoreService(
'api::article.article',
({ strapi }) => ({
// Custom method: publish article and notify subscribers
async publishAndNotify(documentId: string) {
const article = await strapi.documents('api::article.article').update({
documentId,
data: { publishedAt: new Date() },
status: 'published',
});
// Call an external notification service
const subscribers = await strapi
.service('api::subscriber.subscriber')
.find({ filters: { active: true } });
await Promise.allSettled(
subscribers.results.map((sub) =>
fetch(process.env.NOTIFICATION_WEBHOOK, {
method: 'POST',
body: JSON.stringify({
email: sub.email,
article: article.title,
}),
})
)
);
return article;
},
})
);カスタムルートの追加
自動生成されたCRUDルート alongside にカスタムルートを登録します。
// src/api/article/routes/custom-article.ts
export default {
routes: [
{
method: 'POST',
path: '/articles/:id/publish-notify',
handler: 'article.publishAndNotify',
config: {
policies: ['admin::isAuthenticatedAdmin'],
},
},
],
};その後、ハンドラーをコントローラーに追加します。
async publishAndNotify(ctx) {
const { id } = ctx.params;
const article = await strapi
.service('api::article.article')
.publishAndNotify(id);
return this.transformResponse(article);
}このようなバックエンドのカスタマイズは、ContentfulやSanityでは単純に不可能です。別途サーバーレス関数やミドルウェア層が必要になります。Strapiでは、すべてが1つのコードベース内にあります。
プラグインエコシステムと自作プラグインの構築
Strapiのプラグインマーケットプレイスには、SEOメタデータからStripe決済までをカバーする500以上のプラグインがあります。一部は公式(Strapiチームによってメンテナンス)、その他はコミュニティ製です。npmパッケージと同様に品質は様々なので、インストール前にGitHubのスター数、最近のコミット、Strapi 5の互換性を確認してください。
必須プラグイン
これらはStrapiに同梱されているか、1コマンドでインストール可能です。
- GraphQL:
/graphqlエンドポイントとGraphQL Playgroundを追加 - i18n:ロケールベースのコンテンツバリエーションによる国際化サポート
- Users & Permissions:認証、ロール、公開/認証済みAPIアクセス
- Upload:ローカルストレージ、AWS S3、またはCloudinaryプロバイダーを持つメディアライブラリ
- Email:SendGrid、Mailgun、Amazon SES、またはSMTPを介したトランザクションメール
チェックすべきコミュニティプラグイン:@strapi/plugin-seo(メタタグとソーシャルカード)、strapi-plugin-sitemap(自動生成XMLサイトマップ)、および strapi-plugin-content-versioning(組み込みのコンテンツ履歴を超えたきめ細かいバージョン管理)。
カスタムプラグインの構築(Strapi 5 SDK)
Strapi 5はプラグイン開発を簡素化する新しいPlugin SDKを導入しました。公式プラグインチュートリアルでは全プロセスを解説していますが、要点は以下の通りです。
npx @strapi/sdk-plugin init my-pluginを実行してスキャフォールディング- プラグインのコンテンツタイプ、コントローラー、管理パネルUIを定義
npm run buildでビルドし、npmに公開
プラグインを構築するかカスタムコントローラーを記述するかという決定は、再利用性にかかっています。ロジックがプロジェクト固有の場合はコントローラーを使用してください。プロジェクト間で共有したりコミュニティと共有したい場合は、プラグインとしてパッケージ化します。
データベース構成:PostgreSQL、MySQL、それともSQLite?
StrapiはPostgreSQL、MySQL、MariaDB、SQLiteを標準でサポートしています。SQLiteはセットアップがゼロで済むため、新規プロジェクトのデフォルトとして出荷されており、開発やプロトタイピングに最適です。本番環境では、PostgreSQLが推奨され、Strapiチームが最も重点的にテストしているデータベースです。
以下は本番環境に対応したPostgreSQLの設定です。
// config/database.ts
export default ({ env }) => ({
connection: {
client: 'postgres',
connection: {
host: env('DATABASE_HOST', 'localhost'),
port: env.int('DATABASE_PORT', 5432),
database: env('DATABASE_NAME', 'strapi'),
user: env('DATABASE_USERNAME', 'strapi'),
password: env('DATABASE_PASSWORD', ''),
ssl: env.bool('DATABASE_SSL', false) && {
rejectUnauthorized: env.bool('DATABASE_SSL_REJECT', true),
},
},
pool: {
min: env.int('DATABASE_POOL_MIN', 2),
max: env.int('DATABASE_POOL_MAX', 10),
},
},
});データベースの選択肢を検討している場合、当社のPostgreSQL vs MySQL比較で違いを詳しく解説しています。
| データベース | 最適な用途 | Strapiサポート | 本番環境対応? |
|---|---|---|---|
| PostgreSQL | 本番ワークロード、複雑なクエリ、JSONフィールド | プライマリ(最もテスト済み) | はい |
| MySQL 8+ | すでにMySQLインフラを使用しているチーム | 完全サポート | はい |
| MariaDB | MySQL互換の代替案 | 完全サポート | はい |
| SQLite | ローカル開発、プロトタイピング、CI/CD | 完全サポート | いいえ(単一ライター、同時アクセス不可) |
10,000以上のエントリーを持つコンテンツ重視のアプリケーションでは、コネクションプーリング(PgBouncer)を使用したPostgreSQLが負荷をうまく処理します。SQLiteは数百の同時リクエストで書き込み競合の問題を示し始めます。ブログ管理には問題ありませんが、高トラフィックのAPIには問題となります。
Strapiの本番環境へのデプロイ
本番環境へのデプロイは、多くのStrapiガイドが停止する場所であり、多くの開発者が詰まる場所です。Strapiには永続的なNode.jsサーバー(静的サイトではありません)、データベース、メディアストレージ、適切な環境設定が必要です。パスは2つあります。Strapi Cloud(マネージド)または、Strapiデプロイドキュメントで概説されているように、Railway、Render、DigitalOceanなどのプラットフォームでのセルフホストです。
Strapi Cloud(マネージド)
Strapi Cloudは公式のホスティングオプションです。サーバーのプロビジョニング、データベース管理、CDN、バックアップを処理します。 tier は以下の通りです。
| Tier | 価格 | プロジェクト数 | APIコール数 | シート数 | ストレージ |
|---|---|---|---|---|---|
| Free | $0/月 | 1 | 10K/月 | 1 | 500MB |
| Essential | $18/月 | 1 | 500K/月 | 3 | 25GB |
| Pro | $90/月 | 無制限 | 2M/月 | 10 | 100GB |
| Scale | $450/月 | 無制限 | 10M/月 | 25 | 500GB |
Strapi Cloudは本番環境への最短ルートです。しかし、ContentfulやSanityのホスティングと比較するとまだ成熟段階にあります。リージョンが少なく、アクセス制御の粒度が粗く、無料枠はかなり制限されています。サイドプロジェクトやMVPには無料枠が機能します。実際のトラフィックを扱う本番アプリでは、EssentialまたはProが必要になる可能性が高いです。
RailwayまたはRenderでのセルフホスティング
私たちの経験では、Railwayはセルフホスト型の本番Strapiインスタンスへの最短ルートです。GitHubリポジトリを接続し、環境変数を設定すると、Railwayが残りを処理します。詳細なプラットフォーム比較については、Railway vs Render比較をご覧ください。
以下は本番環境の環境設定です。
# .env.production
NODE_ENV=production
HOST=0.0.0.0
PORT=1337
# App keys (generate unique values!)
APP_KEYS=key1,key2,key3,key4
API_TOKEN_SALT=your-api-token-salt
ADMIN_JWT_SECRET=your-admin-jwt-secret
JWT_SECRET=your-jwt-secret
TRANSFER_TOKEN_SALT=your-transfer-token-salt
# Database (Railway provides DATABASE_URL automatically)
DATABASE_CLIENT=postgres
DATABASE_HOST=${PGHOST}
DATABASE_PORT=${PGPORT}
DATABASE_NAME=${PGDATABASE}
DATABASE_USERNAME=${PGUSER}
DATABASE_PASSWORD=${PGPASSWORD}
DATABASE_SSL=true
# Media storage (S3-compatible)
AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_REGION=us-east-1
AWS_BUCKET=your-strapi-uploadsコンテナを好む場合は、StrapiをDocker化してどこにでもデプロイできます。コンテナ化オプションに関するガイドをご覧ください。RailwayはDockerfileなしで自動ビルドするためのNixpacksもサポートしています。
本番環境チェックリスト
公開前に以下を確認してください。
- 管理パネルのビルド:
npm run buildを実行します。これにより、本番用にReact管理パネルがコンパイルされます - プロセスマネージャー: PM2を使用してStrapiを実行し続け、クラッシュ時に自動再起動させます
- ヘルスチェック: Strapiは
/_healthを公開します(HTTP 204を返す)。ロードバランサーをこれに向けます - メディアストレージ: ローカルアップロードからS3またはCloudinaryに切り替えます。ほとんどのPaaSプラットフォームではローカルストレージは永続化されません
- リバースプロキシ: SSL終端と静的ファイルキャッシングのために、Strapiの前にNginxまたはCaddyを配置します
- 環境変数: シークレットをコミットしないでください。プラットフォームネイティブの環境変数管理を使用します
Strapi vs Sanity vs Contentful:どれを選ぶべきか?
Strapi、Sanity、Contentfulの選択は、次の3つのことに依存します。セルフホスティングが必要かどうか、チームがコンテンツでどのようにコラボレーションするか、予算制約です。これら3つはすべて本番環境に対応したヘッドレスCMSプラットフォームですが、根本的に異なるトレードオフを行っています。より深い coverage については、Sanity CMSガイドとContentfulガイドをチェックしてください。
| 基準 | Strapi | Sanity | Contentful |
|---|---|---|---|
| オープンソース | はい (MIT) | いいえ (独自) | いいえ (独自) |
| セルフホスティング | はい (必須またはCloud) | いいえ (ホスティングのみ) | いいえ (ホスティングのみ) |
| リアルタイムコラボレーション | いいえ | はい (Google Docs風) | 限定的 |
| クエリ言語 | REST + GraphQL | GROQ + GraphQL | REST + GraphQL |
| 無料枠 | コミュニティ版 (無制限) | 500K APIリクエスト/月 | 5ユーザー、25Kレコード |
| カスタムバックエンドロジック | 完全なNode.jsアクセス | サーバーレス関数のみ | Webhookのみ |
| エンタープライズガバナンス | 成長中 | 強力 | 最強 |
| 学習曲線 | 中程度 (Node.jsの知識が役立つ) | 中程度 (GROQは独特) | 低〜中程度 |
意思決定フレームワーク:実際の制約に基づいて選択してください
| 必要なもの... | 選択 | 理由 |
|---|---|---|
| 完全なコード所有権 + セルフホスティング | Strapi | 完全なバックエンドアクセスを持つ唯一のオープンソースオプション |
| リアルタイムの編集コラボレーション | Sanity | Google Docs風のマルチプレイヤー編集 |
| エンタープライズコンプライアンス (SOC2, HIPAA) | Contentful | 最も成熟したガバナンスと監査ツール |
| tightest budget (小規模チーム) | Strapi Community | 永久無料、セルフホスト |
| ノーコードコンテンツ管理 | WordPress | 非開発者にとって依然として最も簡単 |
| 外部サービスなしのカスタムAPIロジック | Strapi | 1つのコードベース内のコントローラー、サービス、ルート |
Techsyでは、Strapi、Sanity、Contentfulを使用してヘッドレスCMSアーキテクチャを構築しています。プロジェクトに適したCMSの選択にお困りの方、または本番環境に対応したStrapiセットアップをご希望の方は、無料相談をご利用ください。
率直な長所、短所、およびStrapiを使用すべきでない場合
3つのクライアントプロジェクトでStrapi 5をテストした後、率直な内訳をここに示します。Strapiはバックエンドの完全な制御を求めるチームには優れていますが、誰にとっても正しいツールではありません。
長所:
- 完全なコード所有権。あなたのデータ、あなたのサーバー、あなたのルール
- ベンダーロックインのないMITライセンス
- v5でのTypeScriptファーストと強力な型推論
- コンテンツスキーマから自動生成されるRESTおよびGraphQLエンドポイント
- アクティブなコミュニティ:65,000+ GitHubスター、20,000+メンバーのDiscord
- マーケットプレイスに500以上のプラグイン
- カスタムコントローラーによりExpress.jsレベルのバックエンド柔軟性を実現
- セルフホストしたくない場合、Strapi Cloudはマネージドオプションを提供
短所:
- セルフホスティングには運用作業が必要。更新、監視、バックアップに月10〜20時間を想定
- リアルタイムコラボレーションなし(2人の編集者がお互いの変更を上書きする可能性がある)
- Strapi 4から5への移行には摩擦がある。Entity ServiceからDocument Serviceへ、新しいレスポンス形式、プラグイン互換性のギャップ
- Strapi Cloudは、ContentfulやSanityのホスティングプラットフォームと比較してまだ成熟段階
- Contentfulと比較してエンタープライズ採用が少なく、コンプライアンス認証も少ない
- 管理パネルのカスタマイズは可能だが、Strapiの内部APIに関する深い知識が必要
Strapiを使用すべきでない場合:
- リアルタイムコラボレーションが必要。編集チームが同時にコンテンツ作業を行う場合?Sanityを使用してください。Strapiにはマルチプレイヤー編集機能がありません。
- エンタープライズガバナンスとSOC2が必要。コンプライアンス重視の組織ですか?Contentfulはガバナンスツールで10年の先行利点があります。
- 非技術系チーム、開発者サポートなし。Strapiはセットアップ、デプロイ、メンテナンスに開発者が必要です。チーム全員がマーケターの場合、SaaS CMSまたはWordPressを検討してください。
- サーバーレスファーストアーキテクチャ。Strapiは永続的なサーバーが必要です。エッジ関数とサーバーレスのみで構築する場合、SanityまたはContentfulの方が適しています。
FAQ
Strapiとは何ですか、またどのように機能しますか?
StrapiはNode.js上に構築されたオープンソースのヘッドレスCMSです。ビジュアルビルダーまたはコードを通じてコンテンツタイプを定義すると、StrapiはRESTおよびGraphQL APIエンドポイントを自動生成します。フロントエンドアプリケーションはこれらのエンドポイントからJSONとしてコンテンツを取得します。管理パネルは、コンテンツ編集者がコードを書かずにエントリーを管理できるReactベースのインターフェースを提供します。
Strapiは無料で使用できますか?
はい。Strapi Community EditionはMITライセンスの下で無料かつオープンソースです。使用制限、シート制限、APIコール上限なしで、独自のサーバーにセルフホストできます。Strapi Cloud(マネージドホスティングオプション)には、月間10,000 APIコールまでの無料枠があり、有料プランは月額$18から始まります。
StrapiとContentfulの違いは何ですか?
Strapiはオープンソースでセルフホスト型であり、完全なコードアクセスとデータ所有権を提供します。Contentfulは、より強力なエンタープライズガバナンス、コンプライアンス認証、大規模な編集ツールセットを備えた独自SaaSプラットフォームです。コード制御と予算の柔軟性にはStrapiを選択してください。エンタープライズコンプライアンスの必要性や、マネージドインフラストラクチャを必要とする大規模な編集チームにはContentfulを選択してください。
Strapiは初心者に向いていますか?
基本的なNode.jsとJavaScriptの知識があれば、Strapiは初心者にも使いやすいです。管理パネルとContent-Type Builderは視覚的で直感的であり、コンテンツモデリングにはコードは不要です。デプロイとカスタムバックエンドロジックには開発者の経験が必要です。コーディングの背景がない絶対的な初心者の場合、WordPressまたは完全にマネージドされたSaaS CMSの方が簡単な出発点となります。
Strapiはどのデータベースを使用しますか?
StrapiはPostgreSQL、MySQL、MariaDB、SQLiteをサポートしています。新規プロジェクトは、ゼロセットアップの開発のためにデフォルトでSQLiteになります。本番ワークロードにはPostgreSQLが推奨されます。これはStrapiで最もテストされているデータベースであり、同時アクセス、複雑なクエリ、JSONフィールドタイプをうまく処理します。データベース接続は config/database.ts で設定します。
Strapiを本番環境にデプロイするにはどうすればよいですか?
StrapiをStrapi Cloud(月額$18から始まるマネージドホスティング)にデプロイするか、Railway、Render、DigitalOcean、AWSなどのプラットフォームでセルフホストできます。セルフホスティングには、Node.jsサーバー、PostgreSQLデータベース、環境変数、メディアストレージ(S3またはCloudinary)、PM2などのプロセスマネージャーの設定が必要です。管理パネルをコンパイルするために、デプロイ前に npm run build を実行します。
StrapiはWordPressより優れていますか?
StrapiとWordPressは異なる問題を解決します。Strapiは、任意のフロントエンドにJSON APIを提供するヘッドレスCMSであり、カスタムアプリ、マルチプラットフォームコンテンツ配信、JavaScript重視のサイトを構築する開発者に最適です。WordPressはHTMLページをレンダリングする従来型CMSであり、コードを書かずにテーマ、ドラッグ&ドロップビルダー、大規模なプラグインエコシステムを望む非技術系ユーザーに適しています。
Strapiの欠点は何ですか?
主な欠点は、セルフホスティングによる運用オーバーヘッド(更新、監視、バックアップ)、編集チーム向けのリアルタイムコラボレーションの欠如、メジャーバージョン間の移行摩擦(v4からv5にはコード変更が必要)、およびContentfulと比較して成熟度の低いエンタープライズオファリングです。Strapi Cloudはホスティングの負担を軽減しますが、機能とグローバルな可用性の面でまだ追いついている段階です。
Strapiは大規模アプリケーションを処理できますか?
はい。適切なインフラストラクチャがあれば、Strapiは大規模アプリケーションを処理できます。コネクションプーリングを備えたPostgreSQL、ロードバランサー背後での水平スケーリング、メディアアセット用のCDN、キャッシング用のRedisなどです。IBM、NASA、Toyotaなどの企業が本番環境でStrapiを使用しています。ボトルネックは通常、Strapi自体ではなく、データベースのパフォーマンスとホスティング設定です。
Strapi Cloudとは何ですか、また費用はいくらですか?
Strapi Cloudは、Strapiプロジェクト向けの公式マネージドホスティングプラットフォームです。サーバーのプロビジョニング、データベース管理、CDN、自動バックアップを処理します。価格は無料枠(1プロジェクト、月間10K APIコール)から始まり、その後Essentialが月額$18、Proが月額$90、Scaleが月額$450です。各ティアはAPIコール制限、チームシート数、ストレージ容量を増加させます。