はじめに
以前、HeadlessCMSのContentfulというWebサービスを使って簡単にブログを作成する方法について説明しました。今回は、日本製のHeadlessCMSであるmicroCMSを使って簡単にブログを作成する方法について説明します。
Contentfulを使って簡単にブログを作成する方法や、「そもそもHeadlessCMSって何?」という方は以下の記事を参照してください。
microCMSについて
microCMSは日本製のHeadlessCMSです。microCMSの一番の強みは言語が日本語だということでしょう。比較対象として挙げられるContentfulはフリープランでは英語かドイツ語しか選ぶことができません。
言語が日本語ということは、Webアプリの使用者が英語に慣れていないという場合にアドバンテージになります。使用者=開発者なら英語でもあまり気にしないかも知れませんが、クライアントからの依頼でHeadlessCMSを使ったブログ機能付きのWebアプリを作成するというときにmicroCMSは選択肢のひとつになり得るでしょう。
RailsでmicroCMSを使う
microCMSの準備
microCMSの登録、基本的な使い方は割愛します。
記事の作成
microCMSで適当な記事を作成しておきます。今回は以下のような記事を作成しました。
API-KEYの取得
左のメニューから歯車アイコンをクリックし、「API-KEY」をクリックします。
「表示」ボタンをクリックし、「X-API-KEY」をコピーしておきます。
エンドポイントの取得
左のメニューから作成したAPI名をクリックし、「API設定」をクリックします。
表示された「エンドポイント」をコピーしておきます。
ルーティングの設定
今回は記事を作成/編集/削除するルーティングは必要ないので、記事の一覧と詳細を表示するルーティングのみを追加します。config/routes.rb
に以下を追記します。
routes.rb
Rails.application.routes.draw do
# 以下を追記
resources :articles, only: [:index, :show]
end
コントローラーの設定
microCMSに接続するためのGemはないので、コントローラー内でHTTPClient
を使ってAPIへのリクエストを作成します。Gemfileに以下を追記してbundle install
を実行します。
Gemfile
gem 'httpclient'
以下のコマンドを実行して、記事のコントローラーを作成します。
$ rails generate controller Articles index show
作成したコントローラーに以下を追記します。API名(your-api-name
)はご自分のものに変更してください。
articles_controller.rb
class ArticlesController < ApplicationController
require "httpclient"
def index
@articles = microcms
end
def show
@article = microcms(params[:id])
end
private
def microcms(id=nil)
client = HTTPClient.new
response = client.get(
"https://your-api-name.microcms.io/api/v1/articles/#{id}",
header: { "X-API-KEY": Rails.application.credentials.microcms[:api_key] }
)
raise ActiveRecord::RecordNotFound if response.status == 404
raise Exception unless response.status == 200
JSON.parse(response.body, symbolize_names: true)
end
end
APIリクエストのステータスコードが404
の場合ActiveRecord::RecordNotFound
例外を発生させ、200
以外の場合Exception
例外を発生させています。ステータスコードが200
の場合のみ、レスポンス内容をJSON形式に変換し呼び出し元に返却します。
API-KEYは機密情報なのでCredentialsに登録します。以下のコマンドを実行して、Credentialsを起動します。
$ EDITOR=vi rails credentials:edit
microCMSのAPI-KEYを以下のように設定します。テストサーバーを起動している場合は再起動してください。
microcms:
api_key: "********-****-****-****-************"
ビューの設定
記事の一覧ページarticles/index.html.erb
を作成し、以下を記述します。
index.html.erb
<h1>記事一覧</h1>
<ul>
<% @articles[:contents].each do |article| %>
<li><%= link_to article[:title], article_path(article[:id]) %></li>
<% end %>
</ul>
Slimの場合は以下の通りです。
index.html.slim
h1 記事一覧
ul
- @articles[:contents].each do |article|
li
= link_to article[:title], article_path(article[:id])
記事の詳細ページarticles/show.html.erb
を作成し、以下を記述します。
show.html.erb
<h2><%= @article[:title] %></h2>
<%= @article[:content].html_safe %>
Slimの場合は以下の通りです。
show.html.slim
h2 = @article[:title]
= @article[:content].html_safe
動作確認
テストサーバーを起動していない場合は起動し、http://localhost:3000/articles
にアクセスします。
リンクをクリックすると記事の詳細ページに遷移します。
microCMSで記事の修正や追加をしてからRailsアプリを更新してみてください。microCMSで行った変更がRailsアプリで即時反映されることを確認できるかと思います。
まとめ
microCMSの使い方はContentfulとほとんど変わりません。ContentfulではなくあえてmicroCMSを使う理由としては、管理画面が日本語だということに尽きるでしょう。管理画面が日本語であればどんなクライアントにでも安心して使ってもらえるかと思います。
本記事を参考にして、Rails + microCMSでブログを作成していただければと思います。