キャッシュドライバー

a-blog cms ではページキャッシュ、テンプレートキャッシュなどの複数のキャッシュが利用できますが、さらにキャッシュする場所や方式(ドライバー)も設定できます。

キャッシュドライバー

複数のキャッシュドライバーを用意しています。

データベースドライバー

データベース(MySQL)にキャッシュを保存します。 ある程度スピードも早く、複数台構成でもキャッシュを共有して利用できます。

ファイル キャッシュドライバー

ローカルのファイルシステムでファイルとしてキャッシュを行います。
他のAPCuやRedisなどのインメモリキャッシュに比べると低速になります。

PHPファイル キャッシュドライバー

PHPファイルとしてキャッシュします。OPcacheが有効だと高速に動作します。

メモリー キャッシュドライバー

メモリキャッシュになります。共有メモリではないので、アクセスの間だけ共有されます。

APCu キャッシュドライバー

APCu 拡張モジュールを使った、高性能な共有メモリキャッシュです。共有メモリに保存されるため、アプリケーションの性能を大幅に向上させることができます。

Redis キャッシュドライバー

Redis サーバーを使った 共有メモリキャッシュです。アプリケーションの性能を大幅に向上させることができます。複数台構成でもキャッシュを共有して利用できます。

設定変更方法

a-blog cms 設置ディレクトリに、.env ファイルを用意する必要があります。最初のパッケージに、env.txt ファイルがありますので、これを「.env」ファイルにリネームしてご利用ください。

ドライバーの変更

CACHE_xxxxxxx_DRIVER の値を変更することで、各キャッシュのキャッシュドライバーを変更することができます。
変更できる値は以下のものになっております。

  • database: データベース キャッシュドライバー
  • file: ファイル キャッシュドライバー
  • php: PHPファイル キャッシュドライバー
  • memory: メモリー キャッシュドライバー
  • apcu: APCuキャッシュドライバー
  • redis: Redis キャッシュドライバー

「コンフィグキャッシュ」「ページキャッシュ」に利用できるドライバーは下記3つのドライバーのみとなります。

  • database
  • file
  • redis

APCuを選択した場合、サーバー環境によっては、PHPプロセス毎にキャッシュがされてしまい、古いキャッシュが返ってきてしまう事があります。このような環境の場合は、他のキャッシュドライバーを選択ください。 * XSERVERの「Xアクセラレータ Ver.2」以外の場合、この環境となることを確認しています。

Webサーバーを複数台構成(プロフェッショナル以上)にする場合、キャッシュドライバーは「redis」をお勧めします。複数台で1つのキャッシュを参照でき、効率がよくなるためです。「Redis」が利用できない場合は、データベースキャッシュドライバーでもキャッシュを共有できますが、「redis」のほうがキャッシュ専用でパフォーマンスも出ますので「redis」が利用できる場合は「redis」をご利用ください。

CACHE_xxxxxxx_DRIVER には複数の値を「パイプ(|)」でつなげて設定することが出来ます。複数の値を設定した場合は、右から優先して利用できるドライバーがあったら、そのキャッシュドライバーを利用します。

CACHE_TEMPLATE_DRIVER=apcu|file

この場合、テンプレートキャッシュで、APCuが利用できる環境だとAPCuキャッシュを使用して、利用できない環境だとファイルキャッシュを使用します。

デフォルト設定

# キャッシュ設定
# Supported: apcu, php, memory, file, redis, database

# テンプレートのキャッシュをするドライバーを選択します
CACHE_TEMPLATE_DRIVER=file
CACHE_TEMPLATE_NAMESPACE=template
CACHE_TEMPLATE_LIFETIME=2678400

# フィールド情報のキャッシュをするドライバーを選択します
CACHE_FIELD_DRIVER=database
CACHE_FIELD_NAMESPACE=field
CACHE_FIELD_LIFETIME=86400

# モジュールのキャッシュをするドライバーを選択します
CACHE_MODULE_DRIVER=database
CACHE_MODULE_NAMESPACE=module
CACHE_MODULE_LIFETIME=86400

# 一時キャッシュで利用するドライバーを選択します
CACHE_TEMP_DRIVER=memory
CACHE_TEMP_NAMESPACE=temp
CACHE_TEMP_LIFETIME=10800

# コンフィグのキャッシュをするドライバーを選択します
# ページキャッシュに指定できるドライバーは、file, database, redis のみとなります。
CACHE_CONFIG_DRIVER=database
CACHE_CONFIG_NAMESPACE=config
CACHE_CONFIG_LIFETIME=2678400

# ページキャッシュをするドライバーを選択します
# ページキャッシュに指定できるドライバーは、file, database, redis のみとなります。
CACHE_PAGE_DRIVER=database
CACHE_PAGE_NAMESPACE=page

# redisのコネクション設定をします
CACHE_REDIS_HOST=
CACHE_REDIS_PASSWORD=
CACHE_REDIS_PORT=6379

Redis を利用するには、Redisサーバーの情報を設定する必要があります。
また、PHPの拡張モジュールとしてRedisが入っている必要があります。

CACHE_REDIS_HOST=
CACHE_REDIS_PASSWORD=
CACHE_REDIS_PORT=6379

Webhook機能

外部サービスとの連携を強化するWebhook機能についてご紹介します。Ver.3.0から追加された機能です。

Webhook機能を使えば、Webhookとの連携に対応したツールとa-blog cms を連携できます。
例えばサイトの通知を受け取りたい場合、更新したら通知するという指示を与えておき、更新されるたびに外部サービスに通知する仕組みを作れるようになります。

具体的には、a-blog cms で記事が更新されたら、Slackに通知をしたり、IFTTTなどのWebサービスを経由してTwitterやFacebookなどのSNSに自動で投稿できます。

a-blog cms がサポートしているイベント

  • エントリー(作成・更新・削除・公開)
  • ユーザー(作成・更新・削除・退会・ログイン・会員登録)
  • フォーム(送信)

a-blog cms では送信側のみ対応しています。
例えば、a-blog cms でエントリーを更新したら通知したり、a-blog cms のフォームに投稿されたら外部ツールにデータを投稿するといったa-blog cmsが起点となった仕組みを作成できます。

Webhook機能の使い方

Webhook機能を有効化する

ルートディレクトリにあるconfig.server.phpの HOOK_ENABLE1 にし、Webhookを有効化します。

define('HOOK_ENABLE', 1);

Webhookの設定を作成する

管理画面 > Webhookの順にページを移動して作成します。

設定

以下はWebhook機能の基本的な設定です。

セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」から「Webhook URL」に設定するURLのホストを「.env」ファイルに設定する必要があります。

WEBHOOK_WHITE_LIST=hooks.slack.com,xxxxxx.com # Webhookでリクエスト可能なホストをカンマ区切りで指定ください。


ステータス チェックするとWebhookの設定が有効になります
タイプ イベントをフックするタイプを指定します
イベント フックするイベントを指定します
Webhook URL WebhookのPOST先のURLを指定します
リクエスト履歴 チェックをすると、リクエスト履歴を残します
グローバル チェックをすると、このWebhookが下の階層のブログも対象になります

ペイロード

ペイロードをカスタマイズする際には下記の設定を使用します。



カスタム ペイロードをカスタムする際にチェックをつけて「テンプレート」の項目を有効化します。
テンプレート ペイロードをテンプレートを使って組み立てます。「カスタム」にチェックが付けられている場合、テンプレートに入力された値が適用されます。

Webhookのリクエスト履歴を確認する

セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」から デフォルトでレスポンス情報が閲覧できないようになっております。閲覧する場合は「.env」ファイルで以下項目を変更ください。 また閲覧が終わりましたら設定は元に戻してください

WEBHOOK_RESPONSE_VIEW=disabled # (disabled|enable) WebhookのログにHTTPレスポンス情報を表示するかどうか設定します。セキュリティのため、確認する時のみ「enable」に設定ください。

リクエスト履歴にチェックをつけて、ログを記録します。一度でも機能が動作していたら、管理画面>Wehook>ログの順にページを移動し、リクエスト履歴を確認できます。

ステータスコードの状態を確認できます。もしエラーになっていたら、エラーのステータスコードが表示されます。
(HTTPレスポンスステータスコードについての詳細はMDNのドキュメントをご確認ください)


Webhookの設定とリクエスト履歴が掲載されている

Webhook履歴のページ


ペイロードのテンプレートをカスタマイズする

ペイロードのテンプレートをカスタマイズするには、使用できる変数を確認するため、一度リクエスト履歴で成功レスポンス(200~299)以外のステータスコードを記録しなければなりません。一度、ペイロードの「カスタム」のチェックを外してWebhookを動作させ、エラーを出してください。

エラーのステータスコードを出したリクエスト履歴の詳細を開くと、下図のようなRequest Bodyが値として返ってきます。そうすると、使用できる変数が確認できます。

以下の場合は、タイプが「エントリー」、イベントが「公開」に設定した状態です。



セキュリティアップデートにより「Ver. 3.1.12」と「Ver. 3.0.32」からペイロードをカスタマイズするテンプレートエンジンが変更され、Twig が利用できるようになりました。テンプレート記法がかわっているため、CMSをアップデートされた場合はテンプレートの修正が必要な可能性があります。

第一階層の値を取得する

第一階層の値を取得したい場合は、{{変数名}}とペイロードのテンプレート欄に記述します。
たとえば、エントリーのURLを取得したい場合は、{{url}}になります。

第二階層以下の値を取得する

第二階層以下の値を取得したい場合は、->でつなぎます。実際には{{ 変数名.変数名2.変数名3 }}のような記述をペイロードのテンプレート欄におこないます。
たとえば、エントリータイトルを取得したい場合は{{ contents.entry.title }}になります。

テンプレートの記入例

ペイロードのテンプレート欄に下記のように記入すると出力できます。 { "value1" : "{{ url }}", "value2" : "{{ contents.entry.title }}" }

以下は、a-blog cms と Slack を連携し、Slackに通知を送るための記述です。
JSON形式の記述が採用されているため、「\n」で改行できます。

{
  "text": "ページを更新しました!\n「{{ contents.entry.title }}」\n{{ url }}",
  "username": "更新情報bot",
  "icon_emoji": ":dog:"
}

テンプレートにはカスタムフィールドの値を使用することも可能です。

{
    "webhook_id": "2",
    "webhook_name": "Slack\u901a\u77e5",
    "type": "entry",
    "event": "entry:created,entry:opened",
    "actor": {
        "uid": 1,
        "name": "admin"
    },
    "url": "http:\/\/acms.org\/entry-322.html",
    "contents": {
      ...(省略)...
      "field": {
            "message": "ここにmessageカスタムフィールドに登録された内容が入ります"
        }
    }
}

ペイロードのテンプレート欄には下記のように記入すると出力できます。

{
  "value1" : "{{ contents.field.message }}",
}

トラブルシューティング

リクエスト履歴のステータスコードがエラーになっていて動かない その1

ペイロードの「カスタム」のチェックが外れたままになっていないでしょうか?
テンプレートの変数を確認するために、カスタマイズしている最中は「カスタム」のチェックが外れた状態なので、Webhookの動作を確認したい時は「カスタム」にチェックをつけることを忘れないようにしましょう。

リクエスト履歴のステータスコードがエラーになっていて動かない その2

もしステータスコードがエラーになっていて、ログ>Response Bodyの項目で missing_text_or_fallback_or_attachmentsと表示されていたら、ペイロードの書き方が悪いかもしれません。見直してみてください。


missing_text_or_fallback_or_attachmentsと表示されている様子


ハンズオン記事

以下の記事では、Slackと連携する方法とIFTTTと連携してGoogle Driveにデータを保存する方法を紹介しています。動画もあるので、ぜひご覧ください。

モジュールのGET API機能

モジュールIDが出力する変数をAPI(JSON)で取得できる機能です。 Ver.3.0から利用できます。

いままではJSONデータを取得する際に、JSON形式のテンプレートを作成して対応していましたがその手間を省くことができます(※2022年1月19日現在は、Json_2Tplモジュールでは使用できません)。

API機能を使うための初期設定

管理画面 > コンフィグ > API設定 からAPI機能の設定を行います。



API有効化

API有効化にチェックを入れる事で、API機能が有効になります。

X-API-KEY

APIを使用してHTTP通信をする際に必要になります。HTTPリクエストヘッダーに含める必要があります。
API-KEYはコンフィグセット毎に生成されるので、異なるコンフィグセットを設定しているブログが存在する場合は注意しましょう。

Allow-Origin

APIリクエストを許可するドメインを設定します。
同一オリジンでAPIを使用する際には Allow-Origin の設定は不要です。

APIの制限

APIリクエストを制限することが出来ます。何も設定しないと、 外部から想定していない使われ方をすることもあるので、出来るだけ設定しましょう。

HTTP リファラー

リクエスト元のHTTPリファラーで制限します。 ワイルドカード アスタリスク(*)が利用できるようになっています。

IP アドレス

リクエスト元のIPアドレスで制限します。 ブラウザ(JavaScript)からのリクエストはエンドユーザーによってIPアドレスが変わるので、 サーバーサイドから利用する場合に、IPアドレスで制限しましょう。

モジュールID設定

APIはモジュールIDを指定して、動作するようになります。上記の設定でAPIは有効になりましたが、利用するモジュールID側で、APIでの出力を許可するか設定する必要があります。

API出力したいモジュールIDの「条件設定」で、APIにチェックをつけてください。



エンドポイント

エンドポイントとはAPIにアクセスするためのURIのことを言います。a-blog cmsでは URLコンテキストの末尾に /api/:module_id/:module_id は任意のモジュールID)を追加したURIがエンドポイントになります。

例えば、a-blog cmsを https://example.com というURLで使用していて、summary_index というモジュールIDを設定したモジュールの情報を取得する場合のエンドポイントは以下になります。

https://example.com/api/summary_index/

また、a-blog cmsの特徴であるURLコンテキストを利用することができます。
例えば、 summary_index のモジュールIDを設定したモジュールの情報のうち、カスタムフィールド「price」の値を「60000」で登録しているかつ2ページ目の情報だけを取得したい場合は以下のようなエンドポイントになります。

https://example.com/field/price/60000/page/2/api/summary_index/

API機能はモジュールIDを作成することができるすべてのモジュールに対応しています。

ハンズオン記事

以下の記事では、API機能を使って画面遷移なしでエントリーのフィルタリングをする方法を紹介しています。動画もあるので、ぜひご覧ください。

簡単アップデート(手動)

基本的にはオンラインアップデートを推奨しておりますが、Ver. 2.x から 3.0.x のようなメジャーアップデートはオンラインアップデートに対応しておりませんので、手動でのアップデートをお願いします。

手動アップデートの際には簡単アップデートの利用を推奨しています。以前は、FTPソフトを利用して多くのファイルを上書きする必要がありましたが、現在では 簡単アップデート (バージョンアップ作業の簡略化をする PHP ファイル)を用意しております。このプログラムを利用することで、パッケージのダウンロードから、解凍、ファイルの更新、旧ファイルのバックアップまでを自動化できます。

1. 簡単アップデート のダウンロード

ダウンロードの簡単アップデート よりアップデート用のプログラムをダウンロードします。

2. update.php ファイルのアップロード

バージョンの指定

サーバーの最新版を自動で判定してダウンロードするようになっておりますが、サーバーによってはエラーになる環境もあります。もし、実行時にエラーになるような時には 13行目の # を外してアップデートしたいバージョンを個別に指定してください。

アップロード

バージョンアップをする a-blog cms が動作しているサーバーのディレクトリに1ファイル update.php ファイルのみ、a-blog cms の index.php が設置されている同じディレクトリにアップロードします。

#$ablogcmsVersion = "3.0.15";

3. update.php ファイルの実行

update.phpを設置したURL(例:http://domain.com/update.php)にブラウザからアクセスすると以下のような画面が表示されます。


アップデート作業の前に、以下のものの準備をお願いします。

  • CMS の管理者権限のユーザーID と パスワード
  • Ver. 2.x から Ver. 3.0 へのアップデートの場合には新しい license.php

アップデートの実行

アップデートの実行には、利用している MySQL のパスワードを入力してアップデート実行を行なってください。アップデート処理としては、具体的には以下の処理が自動で行われます。

  1. 変更するファイルのバックアップ
  2. サーバーのPHPのバージョンにあわせて a-blog cms のパッケージをダウンロード&解凍
  3. インストールファイルを置くべき場所への移動
  4. バックアップファイルから戻すべきファイルやディレクトリ( 指定したテーマ、/php/ACMS/User、/php/AAPP、/private/config.system.yaml)を移動
  5. ダウンロードした必要の無いファイルの削除

※ バップアップについては、backup_年月日時分秒 の形式のディレクトリが作成されます。

以下の表示がされたら処理が完了しますので、次のステップへ進みます。


4. メンテナンスメニュー からデータベースのアップデート

サイトにアクセスし、メンテナンス画面が表示されることを確認してください。 メンテナンス画面から管理者権限の ユーザーID もしくは メールアドレスとパスワードを入力しログインします。

システムがバージョンアップの必要だと判定された際には「メンテナンスプログラムはアップデートの必要性を検出しました」と表示され「アップデート実行画面へ」のリンクが表示されます。



5. データベースの更新

セットアップ画面の[データベースの更新処理を実行]ボタンを押します。



6. セットアップディレクトリのリネーム

アップデートプログラムの実行が終了したら、FTPソフト等を利用して setup ディレクトリを推測されない名前に変更をしてください。削除しても構いませんが、場合によってインストールされている時と同様のバージョンの setup ディレクトリをアップロードする必要がある場合があります。

setup ディレクトリが存在するまではメンテナンスページが表示されます。

7. 表示確認と公開

a-blog cmsを設置しているアドレスにアクセスします。各ページの表示を確認し、問題が無ければ公開となります。 必要に応じてデバッグモードをONにすることで、各種エラーメッセージが表示されたり、キャッシュ機能が無効となるなど、動作確認のための状態となります。 サーバ上のファイル config.server.php 内の記述 「DEBUG_MODE」の値を確認の上、変更を行う場合は再度アップロードしてください。



デバッグモードON デバッグモードOFF
define('DEBUG_MODE', 1); define('DEBUG_MODE', 0);

以上でアップデートは完了です。

アップデート方法

主なアップデート方法は以下の3種類あります。

  • オンラインアップデート
  • 簡単アップデート (手動)
  • 手動アップデート

また、各アップデート時にはテンプレート修正が必要なバージョンがありますので、アップデート時には対象のバージョンだった場合ご対応の上、アップデートをお願いいたします。