Techsy
お問い合わせ
始める
ブログ一覧へ戻る
guides

Strapi 5ガイド:セットアップ、API、プラグイン、デプロイ(2026年版)

著者: Mert Batur Gürbüz
Apr 6, 2026
3 分
目次
Strapi 5ガイド:セットアップ、API、プラグイン、デプロイ(2026年版)

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 4Strapi 5
サービスAPIEntity ServiceDocument Service
バンドラーWebpackVite
デフォルト言語JavaScriptTypeScript
ドラフトシステム単一トグル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を使用してください

最初のプロジェクトの作成

bash
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 develop

Strapiは http://localhost:1337 で起動します。初回アクセス時に管理者アカウントの作成を促されます。その後、管理パネルに入り、コンテンツタイプの構築準備が整います。

プロジェクト構造の概要

text
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コンテンツタイプのスキーマが内部でどのように見えるかの例です。

json
{
  "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} にエンドポイントを持ちます。以下は、フィルタとリレーションのポピュレーションを使用して記事を取得する方法です。

javascript
// 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を有効にします。

bash
npm run strapi install graphql

その後、/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とフロントエンドフレームワークの組み合わせの中で最も一般的なものの一つです。

typescript
// 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)をオーバーライドしながら、残りの自動生成された動作を維持することで拡張します。

typescript
// 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 });
    },
  })
);

カスタムサービスの記述

サービスは、コントローラー(および他のサービス)が呼び出すことができる再利用可能なビジネスロジックを保持します。コントローラーは薄く、サービスは厚く保ちましょう。

typescript
// 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 にカスタムルートを登録します。

typescript
// src/api/article/routes/custom-article.ts
export default {
  routes: [
    {
      method: 'POST',
      path: '/articles/:id/publish-notify',
      handler: 'article.publishAndNotify',
      config: {
        policies: ['admin::isAuthenticatedAdmin'],
      },
    },
  ],
};

その後、ハンドラーをコントローラーに追加します。

typescript
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を導入しました。公式プラグインチュートリアルでは全プロセスを解説していますが、要点は以下の通りです。

  1. npx @strapi/sdk-plugin init my-plugin を実行してスキャフォールディング
  2. プラグインのコンテンツタイプ、コントローラー、管理パネルUIを定義
  3. npm run build でビルドし、npmに公開

プラグインを構築するかカスタムコントローラーを記述するかという決定は、再利用性にかかっています。ロジックがプロジェクト固有の場合はコントローラーを使用してください。プロジェクト間で共有したりコミュニティと共有したい場合は、プラグインとしてパッケージ化します。

データベース構成:PostgreSQL、MySQL、それともSQLite?

StrapiはPostgreSQL、MySQL、MariaDB、SQLiteを標準でサポートしています。SQLiteはセットアップがゼロで済むため、新規プロジェクトのデフォルトとして出荷されており、開発やプロトタイピングに最適です。本番環境では、PostgreSQLが推奨され、Strapiチームが最も重点的にテストしているデータベースです。

以下は本番環境に対応したPostgreSQLの設定です。

typescript
// 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インフラを使用しているチーム完全サポートはい
MariaDBMySQL互換の代替案完全サポートはい
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/月110K/月1500MB
Essential$18/月1500K/月325GB
Pro$90/月無制限2M/月10100GB
Scale$450/月無制限10M/月25500GB

Strapi Cloudは本番環境への最短ルートです。しかし、ContentfulやSanityのホスティングと比較するとまだ成熟段階にあります。リージョンが少なく、アクセス制御の粒度が粗く、無料枠はかなり制限されています。サイドプロジェクトやMVPには無料枠が機能します。実際のトラフィックを扱う本番アプリでは、EssentialまたはProが必要になる可能性が高いです。

RailwayまたはRenderでのセルフホスティング

私たちの経験では、Railwayはセルフホスト型の本番Strapiインスタンスへの最短ルートです。GitHubリポジトリを接続し、環境変数を設定すると、Railwayが残りを処理します。詳細なプラットフォーム比較については、Railway vs Render比較をご覧ください。

以下は本番環境の環境設定です。

bash
# .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ガイドをチェックしてください。

基準StrapiSanityContentful
オープンソースはい (MIT)いいえ (独自)いいえ (独自)
セルフホスティングはい (必須またはCloud)いいえ (ホスティングのみ)いいえ (ホスティングのみ)
リアルタイムコラボレーションいいえはい (Google Docs風)限定的
クエリ言語REST + GraphQLGROQ + GraphQLREST + GraphQL
無料枠コミュニティ版 (無制限)500K APIリクエスト/月5ユーザー、25Kレコード
カスタムバックエンドロジック完全なNode.jsアクセスサーバーレス関数のみWebhookのみ
エンタープライズガバナンス成長中強力最強
学習曲線中程度 (Node.jsの知識が役立つ)中程度 (GROQは独特)低〜中程度

意思決定フレームワーク:実際の制約に基づいて選択してください

必要なもの...選択理由
完全なコード所有権 + セルフホスティングStrapi完全なバックエンドアクセスを持つ唯一のオープンソースオプション
リアルタイムの編集コラボレーションSanityGoogle Docs風のマルチプレイヤー編集
エンタープライズコンプライアンス (SOC2, HIPAA)Contentful最も成熟したガバナンスと監査ツール
tightest budget (小規模チーム)Strapi Community永久無料、セルフホスト
ノーコードコンテンツ管理WordPress非開発者にとって依然として最も簡単
外部サービスなしのカスタムAPIロジックStrapi1つのコードベース内のコントローラー、サービス、ルート

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コール制限、チームシート数、ストレージ容量を増加させます。

タグ

strapi-guideheadless-cmsstrapi-5open-source-cmsnodejs-cms

記事をシェアする

関連記事

その他の記事 guides

guides
Jul 18, 2026

2026年LLM API価格比較:主要モデルの全料金一覧

2026年の完全なLLM API価格比較 — Claude、GPT-5.6、Gemini、DeepSeek、Qwen、GLM、Mistralの料金を100万トークン単位で並べ、公式価格ページから直接抽出しました。

12 min read 分
読む
guides
Apr 12, 2026

Surfer SEOガイド2026:コンテンツエディター、NLPスコアリング、AI検索

50本以上の記事でのテストに基づき、コンテンツエディターのワークフロー、NLPスコアリングシステム、GEO最適化のためのAI Tracker、API自動化を網羅した実践的なSurfer SEOガイド。

14 min read 分
読む
guides
Apr 12, 2026

Semrushガイド2026:全ツール解説(実例付き)

キーワード調査、サイト監査、競合分析、AIビジュアリティ追跡、MCPサーバー設定まで網羅した実践的なSemrushガイド。実際のSEOパイプラインからのコード例とワークフローを含みます。

14 min read 分
読む
すべての記事を表示
プロジェクトを始めよう

さあ、何かを作ろう。 特別なものへ?

ビジョンを、かたちに。変化を生むソフトウェアづくりは、私たちのチームにお任せください。

30分のスコーピング通話を予約する実績を見る

注目のツール

Claude Skills

すべて表示
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI自動化

すべて表示
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

注目のツール

Claude Skills

すべて表示
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI自動化

すべて表示
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

サービス

  • エンタープライズソリューション
  • モバイルアプリ
  • Webアプリケーション

ソリューション

  • CRMシステム
  • AI統合
  • ERPソリューション
  • 音声エージェント
  • プロセス自動化
  • サイバーセキュリティ

ライブラリ

  • ブログ
  • ポートフォリオ

コミュニティ

  • AI自動化
  • Claude Skills

ツール

  • モバイルアプリ開発費用計算ツール
  • OpenAI / LLM API 利用料金計算ツール
  • MVP(Minimum Viable Product)開発費用計算ツール
  • 音声AIエージェント構築費用計算ツール

会社情報

  • 概要
  • パートナー
  • お問い合わせ

法的情報

  • プライバシーポリシー
  • 利用規約
  • クッキーポリシー

サービス

  • エンタープライズソリューション
  • モバイルアプリ
  • Webアプリケーション

ソリューション

  • CRMシステム
  • AI統合
  • ERPソリューション
  • 音声エージェント
  • プロセス自動化
  • サイバーセキュリティ

ライブラリ

  • ブログ
  • ポートフォリオ

コミュニティ

  • AI自動化
  • Claude Skills

ツール

  • モバイルアプリ開発費用計算ツール
  • OpenAI / LLM API 利用料金計算ツール
  • MVP(Minimum Viable Product)開発費用計算ツール
  • 音声AIエージェント構築費用計算ツール

会社情報

  • 概要
  • パートナー
  • お問い合わせ
法的情報プライバシーポリシー利用規約クッキーポリシー
TECHSY
© 2026 Techsy. 無断複写・転載を禁じます