はじめに
こんにちは。gengenです。
今回は最近使っているPHP製CMS「Grav」の紹介と、使うに至った経緯について書きたいと思います。
静的サイトジェネレーター辛すぎ問題
個人のブログを書くのにHugoという静的サイトジェネレーターを使っていました。
意識高くコードスニペットとかだけ置いてた時は良かったんですが、趣味のことなど幅広く書くようになるにつれて、
画像を挿入するのに手間がかかることや、出先で「あそこ間違えたな~」となっても直せない(そして忘れる)
といったところでストレスを感じるようになりました。
考えた移行先
はてなブログ等のブログプラットフォーム
どう考えても面倒がなく最適解な気がしますが、独自ドメインを使うときの料金がバカにならないのと、できれば自前でホストしてる感が欲しい...。
Headless CMS
Contentfulや、microCMSをしばらく試してみましたが、
単純にwebサイトのコンテンツを管理するためだけのものというわけではないので、ブログのバックエンドとしては多機能/複雑すぎて億劫になり使うのをやめてしまいました。
安心と信頼のWordPress
多機能ではありますがそもそもブログCMSなので使いづらいということも無く良いんですが、
個人のしょぼいブログ書くには若干オーバーな気がします。
Grav
そもそもHugoで不満だったのは画像の挿入が面倒なのと、スマートフォンから編集できないことで、
DBの面倒を見る必要がなく、記事が取り回しやすいマークダウンファイルとして溜まっていくことはメリットに感じてました。
もしかしたらHugoをサーバーサイドに持っていったようなCMSがあるのでは...と調べていてGravを見つけました。
データベースを使わずにテキストファイルですべてのデータを管理するFlatFileCMS(というジャンルらしい)でまさしく求めていた感じCMSでした
公式がDockerfileを公開してるので簡単に試せます。
基本的な機能
ディレクトリ構造でルーティングされます。
/user
└── /pages
└── /blogs
├── /blog-item-1
├── /blog-item-2
└── /blog-item-3
上記のように配置すると
~/blogs
~/blogs/blog-item-1
~/blogs/blog-item-2
~/blogs/blog-item-3
というパスにマッピングされてマークダウンファイルを配置していくだけでサイトが作れます。
また、マークダウンファイルのYAML front-matterで
content:
items: '@self.children'
order:
by: date
dir: desc
limit: 10
pagination: true
↑のようにコレクション定義することで簡単にリストページを作ることができます。
この例では単純にディレクトリは以下のページをコレクションにしてますが、
taxonomies(タグ, カテゴリ等)をもとに引っ張ってきたりすることもできます。
この辺りはHugoと似ているので移行が楽でした。
管理画面(プラグイン)
公式のプラグインを入れることで管理画面から記事を書くことができます。
当然ドラッグ&ドロップで画像をアップロードできますし、スマートフォンからも編集できるので個人的には十分です。
テーマによってはリストページ用の指定とかもGUIでできたりします。
おわりに
Gravはライトにブログを運用するのに十分な機能があると感じています。
DBも不要で気軽に運用できると思いますので是非使ってみてください。