コラム
column
2022.06.23
microCMSをphpで使ってみる
人気のヘッドレスCMSであるmicroCMSを使い、フロント側をNextやNuxtで作成した場合、GitHubにpushして、VercelやNetlifyなどでデプロイする流れになりますが、慣れていない方にはまだまだ敷居が高いのではないでしょうか?
microCMSのAPIは様々な言語で利用できますが、phpではSDKを用意してくれています。
これを利用すればレンタルサーバーでも簡単にmicroCMSを利用することができます。
SDKは以下にあります。
https://github.com/microcmsio/microcms-php-sdk
phpのパッケージ管理システムであるcomposerはあらかじめインストールしてください。
composerでsdkをインストールします。
$ composer init
$ composer require microcmsio/microcms-php-sdk
ドメインやAPIキーの設定を行います。
<?php
require_once('vendor/autoload.php');
$client = new \Microcms\Client(
"YOUR_DOMAIN", // YOUR_DOMAIN is the XXXX part of XXXX.microcms.io
"YOUR_API_KEY" // API Key
);
ページの取得してみます。シンプルで最高です。
<?php $data = $client->get("pages", "abcdefghi");?>
<h1><?php echo h($data->title);?></h1>
<div><?php echo h($data->body);?></div>
getパラメータからID取得してブログの単一記事の取得
<?php
$id = $_GET['id'];
try {
$content = $client->get("blog", $id);
} catch (Exception $e) {
if ($e->getCode() == 404) {
header("Location: ../404.php");
exit;
}
}
?>
<h1><?php echo $content->title;?></h1>
<div><?php echo $content->body;?></div>
ページナビゲーション付き記事一覧の取得
<?php
$limit = 10;
if (isset($_GET['page'])) {
if ($_GET['page'] === '1') {
$offset = 0;
} else {
$page = $limit * $_GET['page'];
$offset = $page - $limit;
}
} else {
$offset = 0;
}
try {
$lists = $client->list("blog", [
"limit" => $limit,
"orders" => ["-createdAt"],
"fields" => ["id", "title", "image01"],
"depth" => 1,
"offset" => $offset,
]);
$pagecounts = ceil($lists->totalCount / $limit);
$contents = $lists->contents;
} catch (Exception $e) {
if ($e->getCode() == 404) {
header("Location: ../404.php");
exit;
}
}
?>
<?php foreach ($contents as $content): ?>
<li>
<a href="?id=<?php echo $content->id; ?>"><?php echo $content->title; ?></a>
</li>
<?php endforeach; ?>
<div id="pageNavi">
<ul>
<?php for ($i=1; $i <= $pagecounts; $i++): ?>
<li><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php endfor; ?>
</ul>
</div>
Lighthouseの結果も良好です。
phpの8を使いましたが速いです。
他にも以下のことが可能です。
・下書きプレビュー機能
・画像のwebp形式対応による高速読み込み
・OGP対応
・セッションハイジャック対策、メールヘッダインジェクション対策を行ったお問い合わせフォームの設置
・お問い合わせをkintoneやhubspotに送信
jamstackも良いけど使い慣れたphpもシンプルで良いなーと思いました。
阿部