Strapi(ストラピ)は、Node.jsとTypeScriptで書かれたオープンソースのヘッドレスCMSです。管理画面で定義したコンテンツの型からREST APIを自動で生成し、画面の表示はNext.jsやNuxtなど別のフロントエンドに任せます。本記事では2026年9月24日公開の最新版5.55.1をNode.js v26.5.0で作成・起動し、記事データをAPIで取り出すまでの実行結果をもとに、読み方・使い方・料金・選ぶべき場面を整理します。
まとめ:Strapiはセルフホストなら無料、APIの自由度と引き換えに運用は自前
- 読み方は「ストラピ」。Strapi Solutions SASが開発し、GitHubの strapi/strapi で公開されているヘッドレスCMSです。
- 最新版は5.55.1(2026年9月24日)。2026年9月はほぼ毎週マイナー版が出ています。
- 動作要件はNode.js v22・v24・v26。データベースはPostgreSQL・MySQL・MariaDB・SQLiteで、MongoDBは使えません。
- 導入は
npx create-strapi@latestの1コマンドで、既定のDBはSQLite、管理画面はhttp://localhost:1337/adminです。 - 作成直後のAPIは403を返します。Publicロールに find を許可すると公開されますが、その状態では
?status=draftを付けると下書きまで読めました。 - 料金はセルフホストのCommunityが無料、Growthが月45ドル(3席込み)。Strapi Cloudは月35ドルのStarterからで、2026年9月の料金表に無料プランはありません。
- v4は2026年4月でセキュリティ更新も終わりました。公式は2026年中に新しいメジャー版を出さないと表明しています。
以下、仕組み→要件→使い方→日本語化→料金→選定判断→v4移行の順に根拠と手順を示します。
Strapiの仕組みと読み方:APIだけを返すヘッドレスCMS
読み方「ストラピ」と開発元・ライセンスの条件
Strapiは日本語では「ストラピ」と読みます。開発元はStrapi Solutions SASで、ソースコードはGitHubの strapi/strapi リポジトリにあります。
ライセンスは無条件のMITではありません。リポジトリ直下のLICENSEは、ee/ ディレクトリ配下のEnterprise Editionを使わず、かつStrapi Cloudにアカウントを登録していない場合に「MIT Expat」を適用すると定めています。npmの @strapi/strapi もlicense欄は「SEE LICENSE IN LICENSE」です。OSSライセンスの社内審査がある組織は、この条件文をそのまま審査資料に添付するのが確実です。
WordPressとの違い:公開画面とコンテンツ管理の分離
WordPressはテーマがHTMLを組み立てて閲覧者に返します。Strapiが持つのは管理画面とAPIだけで、公開サイトのHTMLを作る機能はありません。フロントエンドはNext.jsやNuxt、スマートフォンアプリなどで別に作り、同じAPIから複数の画面へ配信します。
そのため「記事を書いたらすぐサイトに出る」状態を作るには、フロントエンドの実装とホスティングが別途必要です。ヘッドレスCMS全般の仕組みと主要サービスの比較はヘッドレスCMSとは?従来型CMSとの違い・主要サービス比較と選び方で扱っています。
Strapi 5の最新バージョンと動作要件(2026年9月時点)
npmの latest は5.55.1で、公開日は2026年9月24日です。Strapi 5の正式版は2024年9月に出ており、それ以降は5.x系のマイナー版を積み上げています。2026年9月は5.53.0(9日)、5.54.0(16日)、5.55.0(23日)、5.55.1(24日)と毎週のように版が上がりました。
| 項目 | 要件(5.55.1) |
|---|---|
| Node.js(公式ドキュメントの記載) | v22・v24・v26 |
| Node.jsの区分(2026年9月) | v22・v24はLTS、v26はCurrent |
| Node.js(package.jsonのengines) | >=20.0.0 <=26.x.x |
| PostgreSQL | 推奨17.0/最小14.0 |
| MySQL | 推奨8.4/最小8.0 |
| MariaDB | 推奨11.4/最小10.3 |
| SQLite | 3(既定のDB) |
| MongoDB・NoSQL | 非対応 |
要件の出典は公式インストール要件です。engines上はNode.js v20でもインストールできますが、公式ドキュメントのサポート対象はv22・v24・v26で、奇数版(v23・v25)も対象外です。Strapiのドキュメントは「LTSのみ対応」と書きながらv26を挙げていますが、Node.jsの公式リリース表では2026年9月時点のv26はまだLTS入り前のCurrentです。Node.jsは本番にLTS版だけを使うよう案内しているため、本番環境はv24、v26は検証用と分けて考えます。本記事の計測はv26.5.0で行い、作成・起動・API取得まで問題なく動きました。SQLiteを使う場合は、公式ドキュメントの要件にPythonも挙がっています。
フロントエンド側で使う公式クライアント @strapi/client(1.6.2)はenginesが <=24.x.x で、Strapi本体より範囲が狭い点に注意が必要です。Node.js v26で動かすフロントエンドにはインストール時にEBADENGINEの警告が出ます。
Strapiの使い方:プロジェクト作成からREST APIで記事を取得するまで
create-strapiでのプロジェクト作成と所要時間
npx create-strapi@latest my-project --non-interactive --skip-cloud
cd my-project
npm run develop
本記事と同じ版で再現するなら [email protected] と版を固定します。--non-interactive を付けると、TypeScript・依存パッケージのインストール・Gitの初期化・SQLiteという既定値で作成されます。対話形式では最初にStrapiへのログインか「Skip」かを選ばされ、ログインするとGrowthプランの30日試用が付き、Skipなら無料プランで作成されます。--skip-cloud はこのログイン手順を省くオプションです。前述のLICENSEはMIT適用の条件に「Cloudにアカウントを登録していないこと」を含むため、ライセンス審査のある組織は --skip-cloud で作成しておくと説明が単純になります。
Intel Mac・Node.js v26.5.0で5.55.1を作成した計測では、完了まで約400秒、node_modules は714MBでした。--skip-cloud を付けても依存には @strapi/plugin-cloud が入ります。npm run develop で起動すると .tmp/data.db にSQLiteのファイルができ、http://localhost:1337/admin で最初の管理者を登録する画面が開きます。
コンテンツタイプの定義:Content-Type Builderとschema.json
記事や商品といったデータの型は、管理画面のContent-Type Builderで項目を足して作ります。保存するとプロジェクト内にJSONファイルが書き出され、Gitで差分を管理できます。Content-Type Builderは開発環境でしか使えず、本番モードで起動したStrapiでは型を変更できません。
記事型を作ると src/api/article/content-types/article/schema.json に次の内容が保存されます。
{
"kind": "collectionType",
"collectionName": "articles",
"info": { "singularName": "article", "pluralName": "articles", "displayName": "Article" },
"options": { "draftAndPublish": true },
"attributes": {
"title": { "type": "string", "required": true },
"body": { "type": "text" }
}
}
pluralName がそのままAPIのパスになり、この例では /api/articles が一覧取得、/api/articles/:documentId が1件取得のエンドポイントです。draftAndPublish を有効にすると、1件のデータが下書きと公開済みの2つの状態を持ちます。
公開設定:作成直後は403、Publicロールに find と findOne を許可
$ curl -i http://localhost:1337/api/articles
HTTP/1.1 403 Forbidden
{"data":null,"error":{"status":403,"name":"ForbiddenError","message":"Forbidden","details":{}}}
コンテンツタイプを作っただけでは、GETもPOSTも403で拒否されます。トークンを付けないリクエストはUsers & PermissionsプラグインのPublicロールとして扱われるため、管理画面の Settings → Users & Permissions plugin → Roles → Public で、Articleの find(一覧)と findOne(1件)だけにチェックを入れます。create・update・deleteはPublicに付けません。
ここに1つ落とし穴があります。Publicに find を許可した状態で /api/articles?status=draft を叩くと、未公開の下書きも返ってきました(5.55.1で確認)。status はREST APIの正規のパラメーターで、既定が公開版というだけです。下書きを外に見せたくないサイトでは、Publicに権限を付けず、読み取り専用のAPIトークンをサーバー側(Next.jsのサーバーコンポーネント等)に持たせて Authorization: Bearer で呼ぶ構成にします。
レスポンス形式:documentIdとフラットなdata
取得するデータは管理画面の Content Manager → Article → Create new entry で作ります。title と body を入力して「Publish」を押すと公開版ができ、「Save」だけでは下書きのままです。次の出力の id・documentId・日時は環境ごとに変わります。
$ curl http://localhost:1337/api/articles
{
"data": [
{
"id": 2,
"documentId": "e0ppqqlrcrcwe2ysthyvp7uy",
"title": "Hello Strapi",
"body": "first entry",
"createdAt": "2026-09-27T18:27:42.025Z",
"updatedAt": "2026-09-27T18:27:42.025Z",
"publishedAt": "2026-09-27T18:27:42.032Z"
}
],
"meta": { "pagination": { "page": 1, "pageSize": 25, "pageCount": 1, "total": 1 } }
}
Strapi 5ではv4にあった attributes の入れ子がなくなり、フィールドが data の要素に直接並びます。一覧取得の data は配列なので data[0].title、1件取得では data がオブジェクトになり data.title で参照します。1件取得のキーは数値の id ではなく documentId です。上の例で /api/articles/e0ppqqlrcrcwe2ysthyvp7uy は200、/api/articles/2 は404でした。
SQLiteの中身を見ると、1件の記事が下書きの行(id=1)と公開済みの行(id=2)の2行で保存され、同じ document_id を共有していました。数値の id は公開のたびに変わりうる行番号なので、フロントエンドのURLやキャッシュのキーには使わず、documentId か独自のslugを使います。
書き込みの既定値にも差があります。REST APIの POST は status を省くと即公開になり、サーバー側コードで使うDocument Service API(strapi.documents())は省くと下書きになります。同じ「作成」でも経路で結果が違うので、移行スクリプトでは status を必ず明示します。
GraphQLとJavaScriptクライアントでの取得
GraphQLは標準では入っておらず、未導入の状態で /graphql を開くと404でした。npm install @strapi/plugin-graphql で追加すると /graphql にエンドポイントとApollo Serverベースのサンドボックスが現れます。RESTとGraphQLのどちらで取得するかの判断軸はREST APIとGraphQLの違いと使い分けにまとめています。
フロントエンド側のプロジェクトで npm install @strapi/client を実行し、次のコードを fetch.mjs として保存して node fetch.mjs で動かします。トークンなしで呼ぶ例なので、Publicロールに find を許可した状態が前提です。前述のようにPublicを閉じてAPIトークンで読む構成では、strapi({ baseURL, auth: 'トークン' }) と auth を渡します。
import { strapi } from '@strapi/client';
const client = strapi({ baseURL: 'http://localhost:1337/api' });
const articles = client.collection('articles');
const res = await articles.find({ sort: 'createdAt:desc' });
console.log(res.data.map((a) => a.title));
公式クライアント @strapi/client は、コレクション型を collection()、シングル型を single() で扱い、メディアライブラリは client.files.find() のように files プロパティから操作します。baseURL には /api まで含め、プロトコル(http・https)が無いと StrapiInitializationError になります。
管理画面の日本語化:src/admin/app.tsxに ja を追加
管理画面は英語で起動します。create-strapiが生成する src/admin/app.example.tsx には言語コードの一覧がコメントアウトで並んでおり、'ja' も含まれています。ファイル名を app.tsx に変え、'ja' のコメントを外すと、管理画面の言語の選択肢に日本語が加わります。日本語の訳文ファイル(ja.json)は @strapi/admin に同梱されています。
// src/admin/app.tsx
import type { StrapiApp } from '@strapi/strapi/admin';
export default {
config: {
locales: ['ja'],
},
bootstrap(app: StrapiApp) {},
};
追加後は管理画面右上のプロフィールからインターフェース言語に日本語を選びます。npm run develop 中なら管理画面が再ビルドされますが、npm run start で動かす本番環境では npm run build をやり直すまで反映されません。訳が欠けている項目は英語のまま残り、config.translations で個別に上書きできます。管理画面の表示言語とは別に、記事そのものを日英で出し分けるにはInternationalization(i18n)機能を使います。こちらは無料のCommunityプランにも含まれています。
Strapiの料金:CMSライセンスとStrapi Cloudの2本立て
料金表は、機能のライセンスであるCMSプランと、Strapi社がサーバーを運用するStrapi Cloudの2本立てです(いずれも2026年9月28日時点・税別)。CMSプランはセルフホストでもCloudでも同じ体系で、Cloudの料金はその上に乗るホスティング費です。出典は公式CMS料金と公式Cloud料金です。
| CMSプラン | 月額 | 主な追加機能 |
|---|---|---|
| Community | 無料 | REST・GraphQL・RBAC・i18n、件数無制限 |
| Growth | 45ドル(3席込み) | Releases、Content History(14日)、Live Preview |
| Growth+SSO | 150ドル追加(追加席50ドル/席) | Okta等のSAML・OAuth2ログイン |
| Enterprise | 個別見積もり | Review Workflows、Audit Logs |
| Cloudプラン | 月額/プロジェクト | APIリクエスト/月 | 待機時 |
|---|---|---|---|
| Starter | 35ドル | 10万 | スリープ |
| Pro | 90ドル | 100万 | 常時稼働 |
| Business | 450ドル | 1,000万 | 常時稼働・SLA 99.9% |
Growthの席は3席を超えると1席あたり月15ドルずつ増えます。編集部が変更履歴の復元や公開日の予約をまとめて使いたいならGrowth、公開前の承認フロー(Review Workflows)が必須の組織はEnterpriseしか選択肢がありません。
Cloudの料金表に載っているのはStarter・Pro・Businessの3つで、無料プランの掲載はありません。Starterはアイドル状態が続くとスリープし、次のリクエストで復帰するまで待ちが生じます。ビルド時にだけAPIを呼ぶ静的サイトなら影響は小さく、閲覧のたびにAPIを呼ぶ構成で常時稼働が要るならPro以上を選びます。
CloudのプランはホスティングだけでCMSの有料機能を含みません。Cloud上でContent HistoryやSSOを使うには、Growth以上のCMSライセンスを別に購入してプロジェクトに適用します。
Strapiを選ぶ場面・選ばない場面
Strapiの採用条件:自社DBでの保管とAPIの独自設計
CommunityプランはAPIリクエスト数・件数・ロール数がすべて無制限で、ライセンス料がかかりません。運用費はサーバー代とアップデート・監視の人件費になります。ContentfulのようなSaaS型はレコード数やAPI呼び出し数で料金が上がるため(詳細はContentfulとは?API構成と料金の増え方・移行手順を実コードで解説)、件数が多いカタログやアクセスの多い会員サイトではStrapiのほうが費用を読みやすくなります。コントローラーを書き換えてAPIの返し方を変えられるので、既存システムとの連携で独自のエンドポイントが要る場合にも向きます。
Strapiの不採用条件:保守担当の不在と自由配置のページ編集
StrapiのセキュリティポリシーはサポートをStrapi 5の最新の安定版だけに限っています。2026年9月のように毎週版が上がる製品を、アップデート担当者のいない体制でセルフホストすると、脆弱性の修正が届かない古い版のまま放置されます。保守の人手を確保できないなら、Cloudを使うかSaaS型を選びます。
編集者が白紙からページのレイアウトを自由に組みたい場合もStrapiは合いません。Dynamic Zonesを使えば、開発者があらかじめ用意した部品(見出し・画像・CTAなど)を編集者が追加・並べ替えできますが、新しい見た目の部品を増やすにはフロントエンドの実装が要ります。自由配置のページビルダーが前提ならWordPressのほうが早く立ち上がります。スキーマをTypeScriptのコードで定義し、Next.jsと同じアプリに同居させたい場合はPayload CMSとは?使い方・Next.js統合・Strapiとの違いを解説で比較した Payload が候補になります。
Strapi v4のサポート終了とv5への移行判断
公式のセキュリティポリシーでは、v4は通常サポートが2025年10月、セキュリティ更新が2026年4月に終わり、End Of Lifeとされています。v4で稼働しているサイトは、脆弱性が見つかっても修正版が出ない状態です。
移行は npx @strapi/upgrade のコード変換ツールで一部を自動化できますが、前述のレスポンス形式のフラット化と documentId への切り替えはフロントエンド側の改修が要ります。MySQL 5の非対応、SQLiteドライバーの better-sqlite3 への一本化もDB側の確認項目です。v5の新機能と移行手順の詳細はStrapi v5が開発現場で注目される背景と基本アーキテクチャの全体像で解説しています。
Strapiの開発チームはGitHub Discussion #25117で「2026年にStrapiのメジャー版を出す予定はない」と明言しました。この計画どおりなら、v5へ移ったサイトは2026年中にメジャー版の移行作業を抱えずに済む見込みです。
Strapiに関するよくある質問
Strapiの読み方は?
日本語では「ストラピ」と読みます。綴りは S-t-r-a-p-i です。npmのパッケージ名は @strapi/strapi、プロジェクト作成用のコマンドは create-strapi で、どちらも同じ綴りです。
Strapiは無料で使えますか?
自社サーバーで動かすCommunityプランは無料で、件数やAPIリクエスト数の上限もありません。Content HistoryやReleasesを使うには月45ドルのGrowth、承認フローにはEnterpriseが必要です。ホスティングまで任せるStrapi Cloudは月35ドルのStarterからで、2026年9月時点の料金表に無料プランはありません。
StrapiとWordPressはどちらを選ぶべきですか?
Webサイト1つを編集者中心で運用するならWordPressです。テーマで表示まで完結し、フロントエンドの開発が要りません。Webとアプリに同じデータを配信する、表示をNext.jsなどで作り込むといった要件があり、Node.jsのサーバーを保守できる体制があるならStrapiが向きます。
Strapiの管理画面は日本語化できますか?
できます。src/admin/app.example.tsx を app.tsx に改名し、config.locales に 'ja' を入れると管理画面の言語に日本語が加わります。訳文ファイルは標準で同梱されています。訳が欠けている項目は config.translations で上書きします。
Strapi 6はいつ出ますか?
公式の発表はありません。開発チームはGitHub Discussion #25117で、2026年中はメジャー版を出さず、安定性とアップグレードのしやすさを優先すると表明しています。2026年9月時点の最新版は5.55.1で、当面は5.x系のマイナー版が続く見込みです。