株式会社プランニングA

コラム

column
2022.06.23

microCMSをphpで使ってみる

人気のヘッドレスCMSであるmicroCMSを使い、フロント側をNextやNuxtで作成した場合、GitHubにpushして、VercelNetlifyなどでデプロイする流れになりますが、慣れていない方にはまだまだ敷居が高いのではないでしょうか?

microCMSのAPIは様々な言語で利用できますが、phpではSDKを用意してくれています。
これを利用すればレンタルサーバーでも簡単にmicroCMSを利用することができます。
SDKは以下にあります。

https://github.com/microcmsio/microcms-php-sdk

phpのパッケージ管理システムであるcomposerはあらかじめインストールしてください。

https://getcomposer.org/

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もシンプルで良いなーと思いました。

阿部

お困りのことがございましたら
お気軽にご相談ください

結果につながる広告制作は
プランニングAへおまかせください。

contact