よくある質問(FAQ)
Strapi を使うときに遭遇しやすい質問と、その回答・対処の概要です。
本番やステージングでコンテンツタイプを作成・更新できないのはなぜですか?
Strapi はモデル設定(スキーマ定義)を ./src/api/restaurant/content-types/restaurant/schema.json などのファイルに保存します。Node.js の動作として変更を反映するにはサーバー再起動が必要になり、本番サービスの停止リスクがあります。また、この種の変更はソース管理で追跡すべきです。
一般的な開発の流れは次のとおりです。
- 開発 — ローカルで Strapi を開発し、変更をソース管理にプッシュする
- ステージング — ソース管理から「本番に近い」環境へデプロイして検証する
- 本番 — 問題なければ本番へデプロイする
- 必要に応じて繰り返す。バージョン管理とテストをこまめに行うことが推奨されます
本番環境でモデルの作成・更新を許可する予定は現時点でも将来もなく、モデル設定をデータベースに移す計画もありません。公式に推奨されている回避策もありません。
Strapi はコンテンツのデプロイや移行を扱いますか?
Data Transfer 機能で、Strapi インスタンス間のエクスポート・インポートや、アーカイブファイルとのやりとりができます。環境間のコンテンツ移行に使えます。
ユーザーが管理パネルにログインできません
Strapi 3.0 beta 以降、エンドユーザー(REST / GraphQL のユーザー)と管理者(管理パネルユーザー)が分離され、通常のユーザーには管理パネルへのアクセスを与えられません。背景の詳細は Strapi の ブログ記事 を参照してください。
Admin & Permissions(RBAC)により、管理パネル内でロールごとにアクセスや一部フィールド権限を制御できます。コンテンツタイプ、シングルタイプ、プラグイン、設定などへの権限もロールに割り当てられます。
HTTP だと管理画面のログインに失敗するのはなぜですか?
v5.24.0 以降、Strapi の管理パネルはセッションに HTTP のみの安全なクッキーを使います。ブラウザは非セキュアな HTTP ではこのクッキーを保存・送信しないため、HTTPS なしでは管理ログインが完了しません。対処の例:
- Nginx、Caddy、Traefik、ロードバランサー、クラウドプロバイダーなどで TLS を終端し、管理パネルを HTTPS で公開する
- プロキシが
X-Forwarded-Protoなど適切なヘッダーを転送し、Strapi が安全な接続と認識できるようにする
組み込みサーバーでのローカル開発では、開発用設定でクッキーが secure にならないため、これまでどおり利用できます。
PaaS 上でデータベースやアップロードがリセットされるのはなぜですか?
--quickstart で作成したプロジェクトは既定で SQLite を使います。Heroku、DigitalOcean Apps、Google App Engine など多くの PaaS はファイルシステムが 一時的(エフェメラル) だったり読み取り専用だったりするため、コンテナ(dyno)が再利用されるたびにファイルの変更は失われます。SQLite とローカルアップロードはファイルシステム上にあるため、最後のリセット以降の変更が消えます。dyno は少なくとも 1 日 1 回以上、多くの場合はさらに頻繁、またはデプロイ時にリセットされます。
Heroku の PostgreSQL などのデータベースアドオン利用が推奨されます。ファイルアップロードは Cloudinary や AWS S3 などサードパーティのプロバイダーを使ってください。
無料の Strapi Cloud を有料プランにアップグレードするには?
Strapi Cloud には無料プランがあります。有料プラン に進むときは、Strapi Cloud プロジェクト設定の Plans セクションを利用します(詳細は Cloud ドキュメント)。
Strapi をサーバーレス環境で動かせますか?
Strapi の起動には数秒かかる処理があり、サーバーレスが想定する高速コールドスタートとは相性が悪いです。Strapi は常時稼働サービスとして設計されており、近々コールドスタート時間を短縮する予定もありません。そのためサーバーレスではリクエストごとに秒単位の待ちが生じやすく、ミリ秒単位の応答は期待しにくいです。アーキテクチャ選定の早期段階で考慮してください。
コンテンツマネージャーのレイアウト設定をモデル設定に保存できますか?
現状は未サポートです。config:dump と config:restore コマンドで、デプロイや環境間の移行をしやすくしています。
モデル設定にレイアウトを含めない理由には次があります。
- コンテンツの国際化や管理画面の翻訳と衝突しうる
- レイアウトはロール・権限により異なりうる
- モデルは同じでも、コンテンツ作成者向けの別インターフェース(将来的なモバイルアプリなど)ではラベルやレイアウトが異なりうる
これらの理由からモデル設定ファイ ルに載せるのは誤解を生むとの判断です。環境間の移行・デプロイを簡単にすることが望ましい解決策です。
プラグインをカスタマイズするには?
Strapi は extension という仕組みを使います。プラグインは node_modules に置かれるため、プログラムによるフックで一部を上書きします。
独自のサードパーティ認証プロバイダーを追加できますか?
可能です。ドキュメント に従うか、users-permissions のコードを参考に、全員のためのプロバイダー追加を PR で提案することもできます。将来的には現在の grant / purest ベースから、アップロードプロバイダーに似た分割型へ移行する計画がありますが、時期は未確定です。
既定の ID の型や名前を変更できますか?
いいえ。既定の id 名の変更や、PostgreSQL での UUID などへのデータ型切り替えは現状できません。将来の対応は検討中です。
ダイナミックゾーンや多形リレーションでフィルターや深いフィルターはできますか?
複雑さとパフォーマンス上の理由から、ダイナミックゾーンや多形リレーション向けのフィルター提供予定はありません。
Strapi で SSL を設定するには?
Strapi 単体で SSL を完結させる機能は用意していません。低いポートに Node を直接さらすことは危険だからです。
Linux では 1024 未満のポートにバインドするには通常 root が必要で、典型的な SSL の 443 は root で動かすことになりがちです。
また証明書の更新後に Node アプリを再起動しないと SSL 変更が効かない、という問題もあります。
そのため Nginx、Caddy、HAProxy、Apache、Traefik などのプロキシでエッジを処理し、Strapi へルーティングすることを推奨します。アップストリームプロキシ向けの設定は環境の server.json にあります。proxy ブロックはすべて埋める必要があり、認証プロバイダーやアップロードプラグインなどが標準の localhost:1337 をプロキシ URL に置き換えます。
Strapi プロジェクトで TypeScript は使えますか?
Strapi v4.2.0-beta.1 以降で TypeScript がサポートされています。コア開発者向けドキュメント各所に TypeScript のコード例があり、TypeScript サポート のページも参照してください。
ビルドエラー Error: Cannot find module @strapi/XXX を直すには
次の対処の前に、プロジェクトでパッケージマネージャーのインストールコマンドを実行済みか確認してください。
現行の Strapi は依存関係の hoisting を前提としています。
多くのパッケージマネージャーは既定で hoisting しますが、うまくいかない場合は設定で強制できます。
- npm または pnpm: プロジェクトの
.npmrcにhoist=trueを追加する(pnpm のドキュメント) - Yarn:
.yarnrcでnmHoistingLimitsを設定する(Yarn のドキュメント)
機能 X は利用可能ですか?
公開ロードマップ で開発中・未着手の要望を確認したり、新しい要望を投稿できます。
Strapi 用の MCP サーバーはありますか?
現時点で MCP(Model Context Protocol)サーバーは提供されていませんが、準備が進んでいます。 ドキュメント向け MCP は開発中で近日公開予定とのことです。その他の AI 関連ツールや Strapi 操作用の追加 MCP についても検討中です。