ヘッドレス機能を使ってReactと連携してみた

はじめに

初心者でも直感的に操作でき、柔軟なカスタマイズが可能の「baserCMS」の
baserCMS 5系から追加されたヘッドレス機能を使って、モダンなフレームワークReactと連携方法をステップバイステップでご紹介します。

ヘッドレスCMSとは?

ヘッドレスCMSは、コンテンツを管理する部分と、表示(フロントエンド)の部分を分離することができます。
CMSはコンテンツ管理に特化して、フロントエンドは自由なフレームワークを活用できることが特徴です。

ヘッドレス機能を使って、baserCMSとReactを連携

1. 前準備

baserCMSのローカル環境

baserCMS 5.x以降をダウンロードしてローカル環境を構築してください。

ローカル環境作成は、こちらを参照ください。

2. web APIを有効にする

ヘッドレス機能を使用するには、Web APIを有効にする必要があります。 
.envファイルを開いて、USE_CORE_APIとUSE_CORE_ADMIN_APIをtrueに変更してください

「はじめまして!」というブログ記事を用意しました。
  これをbaserCMSのbaser APIを利用して取得して見ます。
ブログ記事一覧を取得するAPIを利用します。
下記、URLにアクセスしてみてください。
https://localhost/baser/api/bc-blog/blog_posts.json
先ほど登録したブログの情報がオブジェクト型で取得されています。
この情報を使ってReactの方で出力させます。

3. Reactローカル環境構築をしてみる

1. ターミナルでnodeとnpmがダウンロードされていることを確認してください。 

2. 次のコマンドで、Reactアプリをダウンロードしてください。
Happy Hackingという文字が出たらプロジェクトを作成できています。

3. プロジェクトフォルダに移動して、コマンドを入力してローカル環境を立ち上げてください。
Compiled successfully!という文字が出たら成功です。

 Local:            http://localhost:3000と書いてありますので、http://localhost:3000にアクセスしてみてください。
アクセスに成功すると、画像2枚目のようなページに遷移するはずです。

4. Reactでブログ記事を表示してみる

今回はsrc/App.tsxを編集してみましょう。

編集すると、画像のように表示画面も変わるようになっています。

App.tsxにサンプルでコードを記述しました。主な処理として以下の通りです。

・BlogPostsオブジェクトを格納するための型を定義しています。 (5行目〜11行目)

・fetchでブログ記事一覧データを取得するAPIのURLを指定してブログ記事一覧データを取得しています。  (19行目)

フロント画面への表示箇所

先ほどfetchで取得したposts 配列の各要素を post という変数に代入して繰り返し処理します。
今回はid、_eyecatch、createdのデータを使用しています。 

※スタイルはTailwind CSSを利用しています。

5. 完成

baserCMSからブログ記事を取得して、Reactで作成したwebページに表示させることができました! 
管理画面からブログの数を増やした時でも、Reactの方に反映もされるようになっています!

最後に

この記事ではbaserCMS5で追加されたヘッドレス機能を使って、ReactとbaserCMSを連携しました。
これにより、コンテンツ管理と開発を効率よく分離できるモダンな構成が可能になりました。

 


baserCMSではbaser APIとして、コンテンツの取得やブログの取得などさまざまなAPIが用意されています。
詳しくは下記URLを参照ください
https://baserproject.github.io/5/web_api/baser_api/

分からないことがあれば、ドキュメントやユーザーズフォーラムが助けになると思います。
次回も役立つ情報をお届けするので、ぜひチェックしてみてください!

ドキュメント: https://baserproject.github.io/5/
ユーザーズフォーラム: https://forum.basercms.net/

  • このエントリーをはてなブックマークに追加

AUTHOR

岩崎 隆一

岩崎 隆一 アシスタントエンジニア

福岡県出身です。
前々職ではSESとして保守運用作業を中心に、前職ではWebエンジニアとして開発をやってました。
趣味はゲーム、映画、読書、スポーツ(見る専)、観光、etc…たくさんあります。
何かしら共通の趣味があると思うので、その時は楽しくお話ししたいです。
まだまだ若輩者ですが、焦らず着実にエンジニアとしてステップアップできるために頑張ってまいります。

こんな記事も書いています