はじめに
Web開発の世界では、柔軟性と拡張性を求める声が高まっており、ヘッドレスCMS(コンテンツ管理システム)の需要が急増しています。
本記事では、当サイト(以下 エンジニアブログ)構築にも用いたオープンソースのStrapiの概要からインストール方法、基本的な使い方、カスタマイズ方法まで詳しく解説します!!
最初に私の思い出しも兼ねて…前提部分から解説します
そもそも…
CMSとは
CMS(Content Management System)は、ウェブサイトのコンテンツを簡単に作成、編集、管理するためのソフトウェアです。
プログラミングの知識がなくても、ユーザーは直感的なインターフェースを通じてウェブサイトのコンテンツを更新できます。
代表的なCMS
WordPress:
世界で最も人気のあるCMSで、ブログから企業サイトまで幅広く利用されています。
Joomla!:
柔軟性が高く、複雑なサイト構築にも対応できるCMSです。
Drupal:
高度なカスタマイズが可能で、大規模なウェブサイトに適しています。
ヘッドレスCMSとは
ヘッドレスCMS(Headless Content Management System)は、従来のCMSとは異なり、コンテンツの管理と表示を分離したシステムです。
具体的には、コンテンツ管理部分(バックエンド)と表示部分(フロントエンド)が独立しており、APIを通じてデータをやり取りします。
代表的なヘッドレスCMS
Contentful:
API駆動のコンテンツ管理が可能で、開発者に人気があります。
Sanity:
リアルタイムのコラボレーション機能を持つヘッドレスCMSです。
Strapi:
今回、エンジニアブログ構築用いたオープンソースのヘッドレスCMSです。
ようやく本題!
Strapiとは?
Strapiは、オープンソースのヘッドレスCMS(コンテンツ管理システム)です。
開発者がAPIを迅速に構築し、コンテンツを効率的に管理できるように設計されています。
StrapiはNode.jsで構築されており、柔軟性と拡張性に優れています。
※今回、エンジニアブログ構築で使用したいフロントエンドフレームワークは、Astroを使用しています。
Strapiの主な特徴
①ヘッドレスアーキテクチャ
フロントエンドとバックエンドを分離することで、技術スタックを自由に選択可能です。これにより、各々の部分を独立してスケールさせることができます。
② カスタマイズ性
プラグインシステムを採用しており、必要に応じて機能を拡張したり、独自のプラグインを開発したりすることが容易です。
③ ユーザー管理と認証
ロールベースのアクセス制御(RBAC)をサポートしており、細かな権限設定が可能です。これにより、安全なユーザー管理が実現します。
④ 自動生成API
コンテンツタイプを定義するだけで、自動的にRESTfulおよびGraphQL APIエンドポイントが生成されます。これにより、開発者は迅速にバックエンドを構築できます。
⑤ 豊富なプラグインと拡張機能
Strapiは公式およびコミュニティ製のプラグインが豊富で、さまざまな機能を簡単に追加できます。
Strapiのインストールとセットアップ
Strapiのセットアップはシンプルで、以下の手順に従って進めることができます。
① Node.jsとnpmのインストール
StrapiはNode.js上で動作するため、事前にNode.jsとnpmをインストールする必要があります。以下のコマンドでバージョンを確認します。
node -v
npm -v
② 新規プロジェクトの作成
npxを使用して新しいStrapiプロジェクトを作成します。
npx create-strapi-app my-strapi-app --quickstart
上記コマンドで、自動的に必要な依存関係がインストールされ、Strapiが起動します。
※Strapiを稼働させるサーバーサイドの構築周りは今回は割愛させていただきます。
Strapiの基本的な使い方
Strapiを使用してコンテンツ管理とAPIの構築を行う基本的な流れを紹介します。
①コンテンツタイプの作成
管理画面にログインし、新しいコンテンツタイプを作成します。
例えば、「ブログ記事(Article)」を作成し、タイトル、本文、公開日などのフィールドを追加します。
②データの入力
作成したコンテンツタイプにデータ(= ブログ記事本文やその他、その他ブログ記事に関わる情報)を入力します。
管理画面から直感的にデータの追加や編集が可能です。
③APIの利用
自動生成されたAPIエンドポイントを利用して、フロントエンドアプリケーションからデータを取得します。
例えば、ブログ記事を取得するAPIは以下のようになります。
GET http://localhost:1337/api/articles
fetchAPI関数を使用してStrapiからデータ取得を行う例
const postsResponse = await fetch(`${url}?${query}`, {
headers: {
Authorization: `Bearer ${import.meta.env.STRAPI_API_TOKEN}`,
},
})
Strapiの高度な機能
① プラグインの活用
・ GraphQLプラグイン: GraphQL APIを簡単に導入可能。
npm install @strapi/plugin-graphql
・ アップロードプラグイン: メディアファイルの管理を強化。
npm install @strapi/plugin-upload
② カスタム認証プロバイダー
外部認証サービス(例:OAuth、JWT)との連携が可能。
③ 国際化対応(i18n)
多言語対応のコンテンツ管理をサポート。
バージョン
現在のStrapiの最新はバージョン5ですが、開発当初はβ版のみの提供だったため、エンジニアブログではバージョン4で構築しています。
※バージョンの機能差異等はまたの機会の共有できればと思っています
実際の導入事例
多くの企業がStrapiを採用し、柔軟なコンテンツ管理と迅速なAPI開発を実現しています。
例えば、eコマースサイトでは商品データの管理やユーザー情報の連携に活用され、コンテンツ配信の効率化に寄与しています。
まとめ
Strapiは、ヘッドレスCMSの利点を最大限に活かすことができ、カスタマイズの柔軟性もあるなと実際に開発を行いながら、実感しました。
また、オープンソースであるため、コミュニティのサポートや資料も充実しており、安心して導入・運用を進められる印象を受けました。
エンジニアブログのサイト自体スタートしたてで、まだまだ改善できる箇所はいくつかあるので、修正してよりよいコンテンツにしていきたいと思います!
参考資料
Strapi公式サイト
Strapi公式ドキュメント
導入事例① コンテンツサイト(FACTORY マガジン)
KINTO FACTORYマガジン
導入事例② お知らせ機能の実装