Statamicとは
Laravelで使用できるCMS。CMSで有名なものはWordPressだが、StatamicはLaravel10やPHP8.xに対応しているモダンなCMS。
打倒WordPressとして開発されているらしい。
新規でプロジェクトを作成する場合はもちろん、既存のプロジェクトにもインストールできる。プラグインなども色々と用意されているようで、Livewireのプラグインもあった。
開発も活発に行われているのでセキュリティ的な観点からも問題無さそう。最近(2023/05/09)Statamic 4がリリースされた。
UIが現在日本語が用意されていないので、そこだけ注意。
唯一懸念するものがあるとすれば、日本語の情報がゼロなんじゃないかというレベルで全くヒットしないこと。公式のドキュメントはそこそこ分かりにくいので、機械翻訳しながらじっくり読もう。
料金
Statamicは無料で導入できるが、Proバージョンもある。
以下機械翻訳 + α.
Solo | Pro | Enterprise | |
---|---|---|---|
料金 | 無料 | 1年目259ドル、2年目以降59ドル | お問い合わせ |
40以上のフィールドタイプを使用しコンテンツを整理及び公開 | 無制限のユーザーアカウントとロール | 優先サポート SLA | |
無制限のコレクションと分類法 | 改訂、下書き、コンテンツ履歴 | カスタム調達またはベンダー契約 | |
すべてのフロントエンド機能 | マルチサイト、多言語、マルチユーザー編集 | オンボーディング、トレーニング、コンサルティングの利用 | |
1つの管理者ユーザーアカウントとコンテンツ フォーム | コントロール パネルで Git を統合 | 特殊なライセンス | |
基本的な開発者サポート |
ソロでも基本機能は使えるが、収益化ブログなどで改訂や下書き、コンテンツ履歴などを使用したい場合はProを契約しないといけなさそう。
でも試した感じだとソロでも下書き機能使える?要調査。
導入する
今回は既存のプロジェクトにインストールする場合の手順を記載する。
今回の環境・構成
- PHP 8.2
- Laravel 10.x
- Livewire 2.x
- WSL2
- Laradock
- Statamic 4
手順
1. composerで使用するコマンドを手動で追加
// composer.json
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi",
"@php artisan statamic:install --ansi", // 追加
"@php artisan statamic:search:update --all --ansi",
"@php artisan statamic:static:clear --ansi"
],
}
2. statamicインストール
以下のコマンドでcontent/
, resources/users/
, config/statamic/
が新たに作成される。
composer require statamic/cms --with-dependencies
composer require jonassiewertsen/statamic-livewire
3. config/auth.php
にpassword
を追加
// config/auth.php
'activations' => [
'provider' => 'users',
'table' => 'password_activations',
'expire' => 4320,
'throttle' => 60,
],
4. config/statamic/users.php
のpassword
を以下のように変更
// config/statamic/users.php
'passwords' => [
'resets' => 'users',
'activations' => 'activations',
],
5. migrationファイルの生成
以下のコマンドでdatabase/migration
にstatamicに必要なテーブル情報の入ったmigrationファイルが作成される。
php please auth:migration
6. migrationファイルの編集
既存のプロジェクトに合わせてmigrationファイルを変更するので、絡む情報などを適宜変更する。当方の環境では以下の用に変更した。
// database/migration/2023_06_01_101000_statamic_auth_tables.php
~~~~~省略~~~~~
public function up()
{
Schema::table('users', function (Blueprint $table) {
- $table->boolean('super')->default(false);
+ $table->boolean('super')->default(false)->after('profile_photo_path');
- $table->string('avatar')->nullable();
+ $table->string('avatar')->nullable()->after('profile_photo_path');
- $table->json('preferences')->nullable();
+ $table->json('preferences')->nullable()->after('profile_photo_path');
- $table->timestamp('last_login')->nullable();
+ $table->timestamp('last_login')->nullable()->change();
$table->string('password')->nullable()->change();
});
~~~~~省略~~~~~
}
~~~~~省略~~~~~
7. migration実行
php artisan migrate
8. データベースのusersテーブル編集
既存のusersテーブルをstatamicに対応させるためにこの工程が必要。
自分の(もしくは管理画面に入るユーザの)superフラグを立てる。
UPDATE FROM users SET super = 1 WHERE id = 1;
9. /cp
にアクセス
/cp
にアクセスするとログイン画面が表示され、ログインすることでstatamicのダッシュボードにアクセスできる。
これでstatamicが使えるようになった。
既存システムから記事の移植
Statamicでは各記事を.mdファイルとして格納するが、既存のサイトの記事がテーブルデータである場合、Statamicの形式に変換する必要がある。
移行する方法はいくつかあると思うが、自分では以下の方法でmdファイル化した。
1. collectionsの作成
Statamicでcollectionsを作成する。データベースで言うテーブルのような、投稿の持つモデルのようなもの。
/cp/collections
で作成できる。
今回は既存システムのモデルと同じposts
という名前で作成した。
2. seederファイル作成
移行時にコマンドでmdファイルが作成できるようにする。
php artisan make:seeder StatamicSeeder
3. seederファイル編集
モデルPost
を一つずつファイルに書き込む。
markdownファイルの構成は他にstatamicで管理したい情報があれば適宜追加してほしい。
public function run(): void
{
Post::all()->each(function ($post) {
$md = <<<EOF
---
published: true
blueprint: post
title: $post->title
updated_by: $post->updated_by
updated_at: {$post->updated_at->timestamp}
---
$post->content
EOF;
$res = Storage::build([
'driver' => 'local',
'root' => base_path(),
])
->put("content/collections/posts/{$post->created_at->format('Y-m-d')}.$post->title.md", $md);
echo $post->id . ($res ? ' success' : ' failed') . "\n";
});
// 便宜上、権限付与のコマンドを出力しておく
echo 'please run "chmod 775 -R ' . base_path('content/collections/posts') . "\"\n";
}
4. seeder実行、権限付与
php artisan db:seed --class=StatamicSeeder
chmod 775 -R /var/www/html/content/collections/posts
これで、/cp/collections
にアクセスしposts
に遷移すると、既存と同じ記事のデータが入ると思う。
statamicの使用方法
// 記述中...