Craft CMS で CSP 対応をする(導入編)

セキュリティ対策の一環として、CSP 対応を求められる機会が増えています。

コンテンツセキュリティポリシー (CSP) - HTTP | MDN
https://developer.mozilla.org/ja/docs/Web/HTTP/CSP

具体的な内容については MDN のドキュメントを参照していただくとして、Craft CMS で CSP 対応をする方法について、まとめてみたいと思います。

これは Craft CMS Advent Calendar 2024 9日目の記事です。

Craft CMS でサブドメインから特定のテンプレートにアクセスさせるには

Craft CMS では、フロントエンドからユーザー登録する仕組みを比較的簡単に用意することができます。 具体的な設定方法については、ひとまず過去記事や公式ドキュメントを参考にしていただくとして。

Front-End User Accounts | Craft CMS
https://craftcms.com/knowledge-base/front-end-user-accounts

「ログイン後のマイページ機能だけ、サイトの ベース URL として登録されていないサブドメインでアクセスさせたい」という場合は、ルーティングの調整が必要になります。

そこで、今回は Craf CMS でサブドメインからのアクセスをテンプレートと紐づける方法について、まとめてみます。
これは Craft CMS Advent Calendar 2024 7日目の記事です。

Craft CMS をアップグレードする際に注意するポイント

先日公開された Another Sky さんの記事を読んで、「自分もそこにハマりました...」と勝手に共感。

CraftCMSのエントリフィケーション計画対応をする際に遭遇したエラー | Another Sky
https://www.anothersky.jp/2024/12/craftcms-entrification-plan.html

システム本体やプラグイン側で適切なマイグレーション処理が用意される Craft CMS では、クラスメソッドの統廃合やデータベーススキーマの変更など、アップグレードに伴ってドラスティックな変更が加えられることがあり、思わぬところでつまずきがちです。

そこで、今回は Craf CMS をアップグレードする際に注意しているポイントについて、まとめてみます。
これは Craft CMS Advent Calendar 2024 4日目の記事です。

Craft CMS のテストメールを Mailpit で受信する

過去記事の「Craft CMS のテストメールを MailHog で受信する」で触れている通り、これまではローカル環境のテストメール受信を MailHog でまかなっていました。

「システムからの通知メールを受信する」程度の目的であれば、このまま利用し続けても問題なさそうではあるものの。次の理由から、Mailpit へ移行することにしました。

  • MailHog は2年以上更新されていない(更新する予定もない模様)
  • MailHog は ISO-2022-JP など、日本語のエンコーディングにデフォルトで対応していない(送信前に、明示的にエンコード処理を挟む必要があった)

そこで、今回は Mailpit への移行手順をまとめてみます。

Movable Type でエクスポートしたテーマの差分を効率的に比較する

Movable Type や PowerCMS(X を除く)で作成したテンプレートを「テーマ」としてエクスポートすると、デフォルトのファイル名は template_N.html(N は、テンプレート ID)となります。 この状態だと「どのファイルが、どのテンプレートに対応しているのか」が判断しづらいため、本番環境の最新データと手元のファイルとの差分を比較するのが手間・・・といった経験をお持ちの方は、少なからずいらっしゃることでしょう。

そこで、生成されるファイル名を制御できる「テンプレート識別子」を設定しておくと便利です。
Movable Type なら MTAppjQuery の導入、PowerCMS ならデバッグモードを有効にするだけで、テンプレートの編集画面で任意の「テンプレート識別子」をセットできるようになります。

MTAppjQuery でテンプレート識別子を設定可能にするには | プラグイン | Hei Blog
https://hei-a.net/blog/movable_type/plugin/template-identifier.html

テンプレートの識別子を変更したい | トラブルシューティング | ドキュメント | PowerCMS - カスタマイズする CMS
https://www.powercms.jp/products/document/troubleshooting/change-template-identifier.html

これで解決できればよいのですが、テーマを再適用したり、個別に新規テンプレートを作成したタイミングで意図せず template_N.mtml が生成されてしまうことがあります。開発フェーズであれば自由に調整できるものの、運用フェーズではすべてを管理するのが難しいこともしばしば。。。

そこで、ファイル名の整合性が取れない状態でエクスポートされた MTML ファイルを PHP でリネームする仕組みを考えてみました。

Craft CMS のエントリフィケーション計画について

2023年3月7日、Craft CMS の公式ブログにて、エントリフィケーション計画が発表されました。

The Entrification Plan | Craft CMS
https://craftcms.com/blog/entrification

これは「独立したエレメントタイプとして存在するカテゴリ・タグ・グローバルセットを将来的にエントリへ統合する」というもので、Craft 4.4 から自動変換するためのコンソールコマンドが用意されています。

最終的に Craft 6 で完了する計画ではあるものの、余裕があるうちに対応しておいた方が良さそうですね。

そこで、エントリフィケーション計画の概要と対応方法についてご紹介します。
これは Craft CMS Advent Calendar 2023 25日目の記事です。

Craft CMS で MySQL のテーブル文字コードと照合順序を変更する

先日、Craft CMS のデータベースを眺めてたところ、MySQL 8.0 でテーブルの文字コードが utf8mb3、照会順序が utf8mb3_general_ci になっている場合があることに気づきました。

文字コードは utf8 もしくは utf8mb4 を指定しているハズなので、にわかに不安が。。

公式リファレンスを確認したところ、そもそも utf8utf8mb3 のエイリアスで、MySQL 8.0 以降は非推奨なんですね。 将来的に削除される可能性があるということで、あらかじめ utf8mb4 に変更しておいた方が良さそうです。

MySQL :: MySQL 8.0 リファレンスマニュアル :: 10.9.2 utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコーディング)
https://dev.mysql.com/doc/refman/8.0/ja/charset-unicode-utf8mb3.html

そこで、今回は MySQL のテーブル文字コードと照合順序を変更する方法をご紹介したいと思います。
これは Craft CMS Advent Calendar 2023 23日目の記事です。

Craft CMS の二要素認証用デバイスが使えなくなった場合の対処法について

Craft CMS で二要素認証を導入する場合、3rd Party の Two-Factor Authentication プラグインを利用します。

Craft 3 / Craft 4 に対応しているフリーのプラグインで、管理者はインストール後に適用したいユーザーグループへプラグインのアクセス権限をセットするだけで済みます。一方、二要素認証を利用したいユーザーは、管理画面のプラグイン設定画面にある QR コードを認証アプリで読み込み、コード認証を行えばアカウントが保護されます。

このように導入と利用自体は簡単にできるものの、万一デバイスが使えなくなった場合、どうすればいいのでしょうか?

今回は、二要素認証用デバイスが使えなくなった場合の対処法について考えてみます。
これは Craft CMS Advent Calendar 2023 21日目の記事です。

Craft CMS で日本語タイトルをローマ字変換して slug にセットする(後編)

前編に引き続き、Craft CMS で日本語タイトルをローマ字変換して slug にセットする方法について考えていきますが、 実装にあたって欲しい機能は次の3つです。

  • エントリのタイトルをローマ字変換して slug にセットする
  • エントリの初回保存時のみ、実行する
  • slug に日本語が含まれない場合は、何もしない

このくらいであれば、モジュールとして用意するのが手軽で良さそうですね。

では、具体的な手順を見ていきましょう。
これは Craft CMS Advent Calendar 2023 20日目の記事です。