2025-12-05
PowerCMS X は速度が速いことを謳った CMS で、ありがたいことにご利用のお客様からも速度に関してご好評いただいております。
この記事ではその理由のひとつである「キャッシュ」を簡単にご紹介いたします。
PowerCMS X には様々な種類のキャッシュがあります。
どのキャッシュも「処理を行った際に結果を保存しておき、その後、同じ処理を行うときに保存しておいた結果を再利用する」というものです。何度も同じ処理を繰り返す際に速度を速くする狙いです。通常は CMS 利用者が意識する必要はありません。
製品サポートには「キャッシュは削除・リセットしても大丈夫なのですか?」とよくご質問いただきます。
キャッシュは処理速度を向上させることが目的なので、キャッシュの削除・リセットを行っても CMS の挙動が変化するといったことはありません。
「PowerCMS X が内部的にキャッシュという仕組みを利用して速度向上を図っているんだな」という事を知っていただけたら幸いです。
誤解を恐れずに言ってしまうと「キャッシュとは、処理した結果を保存する仕組み」です。
(キャッシュしたデータ自体を「キャッシュ」と呼ぶこともあります。)
PowerCMS X では処理速度の向上のためにキャッシュを活用するつくりになっています。
さて、一言で「キャッシュ」と言っても実は様々なレイヤーでキャッシュは活用されています。
例えばウェブブラウザでページを表示する場合であれば、
といった具合です。
会話の中で「キャッシュ」という単語が出てきたときには「どのキャッシュの話題なのか?」を確認することが大事になってきます。
PowerCMS X では様々な処理でキャッシュを利用しており、目的別に様々な種類があります。
| PowerCMS X のキャッシュ種類 | 説明 |
|---|---|
| アプリケーション・キャッシュ | アプリケーションの全般設定、データベースのスキーマ、翻訳フレーズ など |
| テンプレート・コンパイルキャッシュ | テンプレート・タグをネイティブ PHP コードにコンパイルしたコード |
| データベース・クエリキャッシュ | データベースに対して発行した SQL クエリの実行結果 |
| プラグイン・キャッシュ | プラグインによってキャッシュされたデータ |
| ビルド・キャッシュ | テンプレート・タグ「<mt:include>」「<mt:cacheblock>」によってキャッシュされたビューのビルド結果 |
| コンパイル済ビュー | テンプレート・タグを PHP コードにコンパイル済のビュー |
| コンパイル済URLマップ | テンプレート・タグを PHP コードにコンパイル済の URL マップ |
| ユーザーの権限 | ユーザーおよびユーザーグループに設定されたロール・権限をマージした、ユーザー毎の権限マップデータ |
| 期限切れのセッション | データベースに保存された有効期限切れのセッション |
| APIキャッシュ | RESTful API から返却された JSON データ |
使い勝手がよい PowerCMS X 是非ご活用ください。
2025-11-12
先週リリースした PowerCMS X ver.4.03では、サイト内検索 (SearchEstraierプラグイン/DocumentSearchプラグイン) についての大規模なアップデートが含まれています。その背景と具体的な設定の方法についてご紹介します。
改修のきっかけは大きく2つありました。ひとつめは、大量の文書がある環境で検索インデックスの作成(洗い替え)が終わらない(長時間かかる)ことです。
従来の検索インデックスの初期作成・洗い替え処理の流れは以下のようになっています(追加された環境変数「searchestraier_permanent_document」の指定がない場合、この流れに変更はありません)。
※1 スペースごとではなく、インデックスのパスごとに生成されます。複数のスペースで同じインデックスを利用しているケースがあるためです。
※2 すでに抽出されたテキストがある場合は処理をスキップします。
URLオブジェクトをループしてすべての対象ファイルを処理していますので、文書の数が多ければ多いほど時間がかかるようになります。そこで、数十万ドキュメントが対象になっているような環境でも検索インデックスの構築や洗い替えが高速に行えるように改修しました。改修の方針は以下のようなものです。
検索インデックスを作成するツールとして新たに Plugins/SearchEstraier/tools/searchIndexTools.php が追加されています。
※ searchIndexTools.php のマニュアルについては Plugins/SearchEstraier/docs/README-searchIndexTools.md にあるほか、searchIndexTools.php --help で参照できます。
検索インデックスの作成には、このスクリプトを使います。以下の手順で実行することで検索インデックスの作成・洗い替えができます。(--typeに指定している document は DocumentSearchプラグインが有効な時にのみ指定)
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive,document
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type gather
--type archive(,document)は、検索インデックスの元となる中間ファイル(文書ドラフト)を作成するコマンドです。実行すると以下のパスにファイルが生成されます(a6a7c92c7a28cc1fb7ce89e4cbb85227は検索インデックスのパスの md5ハッシュ値)。
<mt:property name="support_dir">/search/document_draft/a6a7c92c7a28cc1fb7ce89e4cbb85227/
生成されるファイルはテキストファイルで、以下のように「URLオブジェクトのID.est」というファイル名になります。
1.est
2.est
3.est...
これらのファイルですが、CMSの操作でオブジェクトが更新された場合は更新され、新規作成されたり下書きにされたものが再び公開された時には追加されます。削除されたときは、削除ではなく、以下のディレクトリに移動されます(その後、スケジュールタスクで一定時間経過しているものは削除されます)。
<mt:property name="support_dir">/search/document_unlink/a6a7c92c7a28cc1fb7ce89e4cbb85227/
上記の例では文書ドラフトの作成と、estcmd gather コマンドの実行を分けていますが、大量の文書がある場合、文書ドラフトの作成に時間がかかりますので、これを分割して行うことができます。HTMLなどのアーカイブと、DocumentSearchによるPDFなどの文書ドラフト作成を分けるには、以下のように --typeに1つずつ指定して各々実行します。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document
その他に、--workspace_ids, --models, --extensions の指定ができます。例えば、以下のように細かく分割して実行することができます。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive --workspace_ids 1 --models entry
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive --workspace_ids 1 --models page
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 1 --extensions pdf
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 1 --extensions xls,xlsx
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 1 --extensions doc,docx
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 1 --extensions ppt,pptx
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive --workspace_ids 2 --models entry
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type archive --workspace_ids 2 --models page
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 2 --extensions pdf
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 2--extensions xls,xlsx
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 2 --extensions doc,docx
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --workspace_ids 2 --extensions ppt,pptx
この例では、スペースごとに記事、ページ、PDF文書、Excel文書、Word文書、PowerPoint文書という単位に分割して実行しています。さらに、limit / offsetを指定することもできますので、更新のない夜間に実行する場合などであれば、さらに細かく分割して実行できます。並列して処理を行うことで総時間を短くすることもできます。単一のPHPスクリプトで大量の文書を処理すると、どうしても後半になるとスピードが落ちていくからです。
DocumentSearchプラグインでは、以下のディレクトリにPDFなどの文書から抽出したテキストデータを文書ドラフト形式でキャッシュします。
<mt:property name="support_dir">/cache/document_cache/
このキャッシュのみを先に生成することができます。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --cache_only --skip_exists
--skip_exists 指定をすると、すでにキャッシュファイルや文書ドラフトが生成されている場合は処理をスキップします。その分実行時間を短縮することができます。ですので、最初の検索インデックスの構築後、運用時は常に --skip_exists を付けて実行すると良いと思います。
これを実行した後で --cache_only 指定なしで以下を実行することで DocumentSearchによる文書ドラフトの生成が完了します。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type document --skip_exists
すべての文書ドラフトが生成されたら、--type gatherを実行します。このとき、キャッシュサイズを指定することで、インデックスの作成を高速化できます。また、文書ドラフトの生成はすでに済んでいますので、これまでの洗い替えと比較して圧倒的に短時間で処理が終了するはずです。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type gather --cache_size 1200
公式ドキュメントには以下の記載があります。searchIndexTools.php では初期値を 400に設定しています。あまり大きな数値を指定しても効果は限定的ではありますので、実際に計測して数値を設定すると良いでしょう。環境変数「searchestraier_gather_cache_size」に数値を設定すると、その数値が自動的に使われます。また、-xlオプションや-xhオプションなどは、searchIndexTools.phpが自動的に適用するようになっています。
文書を登録する処理では、インデックスの内部で持っているデータベースに膨大な量の書き込みを行います。データベースを参照するオーバーヘッドを抑えるために、Hyper Estraierは処理中のデータをメモリ上にキャッシュする仕組みを持っています。キャッシュが大きい方が登録処理は高速になりますが、スワップが起きるとかえって効率が落ちますので、実メモリの4割程度の大きさにするとよいようです。例えば1GBの実メモリを搭載しているマシンで作業をする場合、400MB程度が適切でしょう。また、10万件以上の文書を登録する場合、インデックスを作成する際に大規模用のチューニングをするように指定すると処理効率が向上します。
estcmdの-csオプションを使うとキャッシュサイズの指定ができます。サイズはメガバイト単位で指定します。デフォルトは64MBです。また、-xlオプションや-xhオプションを使うと大規模用のチューニングがなされます。
ここまでで、一つ目の課題、大量の文書がある環境で検索インデックスの作成(洗い替え)が終わらない(長時間かかる)問題は解決できます。続いてもう一点、大量の文書が対象のサイト内検索で属性検索が遅い問題についてです。
公式ドキュメントには下記のようにあります。
属性検索は属性データベースにおける全てのレコードを検査するために多くの時間がかかります。属性インデックスを作成すると、検査するレコードを絞り込むことによって属性検索を高速化することができます。属性インデックスはestcmd createコマンドで作成します。「-attr」オプションで対象となる属性名とデータ型を指定します。
この属性インデックスは新しいSearchEstraierプラグインのプラグイン設定で指定できます。適切に設定を行うと、劇的に検索速度が改善します(今回の改修のきっかけとなった案件ではおおよそ20倍速になりました!!)。
![]()
@model str,@mime_type str,@workspace_id num,@suffix str,@mdate seq
STROREQやSTREQ などを使うものは「str」、NUMEQなどを使うものは「num」、ソート順に利用するものは「seq」としてください。複数のスペースで同じインデックスのパスを設定している場合は、どこか1つのスペースで設定すればよく、すべてのスペースで指定する必要はありません。プラグイン設定ではもう一点、属性キーの設定も可能です。
一度文書ドラフトを作成して検索インデックスを構築すれば、CMSの運用時の追加更新削除は都度反映されるので、洗い替えを実行したいタイミングで(1日1回早朝や、週1回など) --type gatherを実行するように cronを設定すれば良いでしょう。
そのとき、cronに設定している worker.php に --exclude_ids searchestraier_update_idx,documentsearch_update_idx を指定して、不要な洗い替えが実行されないようにしてください。
共有ディスクに検索インデックスを置いている場合は特に注意する必要はありませんが、検索インデックスを各々のマシンの高速なディスクに設置すると検索のパフォーマンスを上げることができます。その場合は例えば15分おきに各マシンで以下を実行することで各マシンの検索インデックスに差分を反映できます。
この時、検索インデックスのパスを「<mt:property name="support_dir">/search/index」などの共有ディスクではなく、各マシンの高速なディスク上のパスに変更して、各マシンでコマンドを実行するようにします(共有ディスクのインデックスが大きくなると、複製に失敗することがあるため)。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type update --update_within 1000
※ --update_within はその秒以降に更新されたものを対象にするので、15分=900 ですが、少しバッファを見て1000などを指定すると良いでしょう。
同じく、洗い替えも各マシンで1日1回、週1回など実行するように設定してください。
sudo -u apache php Plugins/SearchEstraier/tools/searchIndexTools.php --type gather
2025-11-10
2025年11月7日(金)に「PowerCMS Conference 2025」を開催しました。オンラインと現地のハイブリッド開催となり、お申し込みは、現地参加46名・オンライン参加149名・合計195名となりました。


アルファサード株式会社 代表取締役社長 森崎 賢太郎
2025年はアルファサードにとって大きな転換期となりました。
これにより「朝日新聞グループの技術中核会社」として、クラウド・インフラを含む事業基盤の強化が進みました。
今年はパートナー制度をさらに拡張し、インフラパートナーとして株式会社ディレクターズと提携。PowerCMS クラウドの安定性・運用基盤を強化する取り組みが紹介されました。

アルファサード株式会社 執行役員 近藤 孝俊
PowerCMS 7 では、長年の課題だったレガシー領域の刷新と、現場で求められる実用的な機能改善が大きく進みました。
PowerCMS の状況
PowerCMS 7(2025/11/28正式リリース予定)
PowerCMS Conference 2025「あのときの未来、これからの未来 - PowerCMS 7 リリース」のリポート
当日資料
下記よりダウンロードしてください。
あのときの未来、これからの未来 - PowerCMS 7 リリース - (PDF)
アルファサード株式会社 ソフトウェア2部 部長 正木 愉美
PowerCMS X は「高速・自由度・セキュア運用」という基盤に加えて、「AI×アクセシビリティ×メディア配信」を中心に独自に進化しています。
PowerCMS X の最新情報
伝えるウェブのご紹介
当日資料
下記よりダウンロードしてください。
PowerCMS X & 伝えるウェブ 最新情報 (PDF)
アルファサード株式会社 ソフトウェア2部 佐藤 聖
制作会社・開発会社向けに展開している「PowerCMS パートナー制度」について説明がありました。

座談会には以下の登壇者が参加しました。
PowerCMS Royal Partner
アルファサード株式会社
PowerCMS、PowerCMS Xの褒めたいところ

改善要望
今後期待される点

株式会社ディレクターズ シニアマネージャ 松井 歩 氏
インフラパートナーである株式会社ディレクターズ様より、PowerCMS / PowerCMS X を安全に運用するための重要ポイントが共有されました。
特に効果の大きいポイント
サイト要件に応じて必要な要素を選べばよく、すべてを導入する必要はないと強調されました。SaaS が適したケースとセルフホストが向くケースの見極めについても話されました。
当日資料
下記よりダウンロードしてください。
PowerCMSを安心して利用するためのインフラガイド (PDF)
アルファサード株式会社 取締役(非常勤) 技術開発担当 野田 純生
野田 純生によるセッションでは、PowerCMS の未来に向けた技術戦略とアクセシビリティ強化の取り組みが語られました。
まとめ
野田 純生は、創業者としての立場にとどまらず、再び現場の技術へ深く関わりながら PowerCMS X の未来を切り開いていく姿勢を示しました。AI 活用による開発効率化、低レイヤー技術への挑戦、動画や PDF など多様なコンテンツのアクセシビリティ改善など、PowerCMS X の進化に向けた力強いメッセージでセッションは締めくくられました。
当日資料
下記よりダウンロードしてください。
進化を続ける PowerCMS X、その未来を語る (PDF)皆さまのご参加・ご協力のおかげで、実りあるカンファレンスとなりました。 ご登壇者・パートナー企業の皆さま、日頃より支えてくださるユーザーの皆さまに心より感謝申し上げます。

カテゴリー:イベント・セミナー情報
投稿者:Hirota