PowerCMS X ブログ

2025-12-05

PowerCMS X のキャッシュ機能について

PowerCMS X は速度が速いことを謳った CMS で、ありがたいことにご利用のお客様からも速度に関してご好評いただいております。

この記事ではその理由のひとつである「キャッシュ」を簡単にご紹介いたします。

PowerCMS X におけるキャッシュについて、結論

PowerCMS X には様々な種類のキャッシュがあります。

どのキャッシュも「処理を行った際に結果を保存しておき、その後、同じ処理を行うときに保存しておいた結果を再利用する」というものです。何度も同じ処理を繰り返す際に速度を速くする狙いです。通常は CMS 利用者が意識する必要はありません。

製品サポートには「キャッシュは削除・リセットしても大丈夫なのですか?」とよくご質問いただきます。
キャッシュは処理速度を向上させることが目的なので、キャッシュの削除・リセットを行っても CMS の挙動が変化するといったことはありません。

「PowerCMS X が内部的にキャッシュという仕組みを利用して速度向上を図っているんだな」という事を知っていただけたら幸いです。

そもそもキャッシュとは何ですか?

誤解を恐れずに言ってしまうと「キャッシュとは、処理した結果を保存する仕組み」です。
(キャッシュしたデータ自体を「キャッシュ」と呼ぶこともあります。)

PowerCMS X では処理速度の向上のためにキャッシュを活用するつくりになっています。

キャッシュが活用されている場所

さて、一言で「キャッシュ」と言っても実は様々なレイヤーでキャッシュは活用されています。

例えばウェブブラウザでページを表示する場合であれば、

  • ウェブブラウザが持っているキャッシュ
  • CDN が持っているキャッシュ ( Amazon CloudFront など )
  • サーバー内のミドルウェア・ソフトウェアが持っているキャッシュ ( Apache や PHP など)
  • アプリケーションが持っているキャッシュ ( PowerCMS X など )

といった具合です。

会話の中で「キャッシュ」という単語が出てきたときには「どのキャッシュの話題なのか?」を確認することが大事になってきます。

PowerCMS X におけるキャッシュの種類

PowerCMS X では様々な処理でキャッシュを利用しており、目的別に様々な種類があります。

PowerCMS X のキャッシュ種類 説明
アプリケーション・キャッシュ アプリケーションの全般設定、データベースのスキーマ、翻訳フレーズ など
テンプレート・コンパイルキャッシュ テンプレート・タグをネイティブ PHP コードにコンパイルしたコード
データベース・クエリキャッシュ データベースに対して発行した SQL クエリの実行結果
プラグイン・キャッシュ プラグインによってキャッシュされたデータ
ビルド・キャッシュ テンプレート・タグ「<mt:include>」「<mt:cacheblock>」によってキャッシュされたビューのビルド結果
コンパイル済ビュー テンプレート・タグを PHP コードにコンパイル済のビュー
コンパイル済URLマップ テンプレート・タグを PHP コードにコンパイル済の URL マップ
ユーザーの権限 ユーザーおよびユーザーグループに設定されたロール・権限をマージした、ユーザー毎の権限マップデータ
期限切れのセッション データベースに保存された有効期限切れのセッション
APIキャッシュ RESTful API から返却された JSON データ

まとめ

  • PowerCMS X ではキャッシュを活用している
  • キャッシュは処理結果を再利用する仕組み
  • 処理結果が再利用されると、動作が速くなる
  • 動作が速いソフトは、使い勝手がよい

使い勝手がよい PowerCMS X 是非ご活用ください。

カテゴリー:コラム・その他 | 技術情報 | よくあるご質問

投稿者:たはかし

2025-11-12

大規模なウェブサイトのサイト内検索の設定と運用の改善

先週リリースした PowerCMS X ver.4.03では、サイト内検索 (SearchEstraierプラグイン/DocumentSearchプラグイン) についての大規模なアップデートが含まれています。その背景と具体的な設定の方法についてご紹介します。

大量文書の検索インデックスの作成

改修のきっかけは大きく2つありました。ひとつめは、大量の文書がある環境で検索インデックスの作成(洗い替え)が終わらない(長時間かかる)ことです。

従来の検索インデックスの初期作成・洗い替え処理の流れは以下のようになっています(追加された環境変数「searchestraier_permanent_document」の指定がない場合、この流れに変更はありません)。

  1. 検索インデックスのパスごとに work_dir配下に一時ディレクトリを生成します。※1
  2. SearchEstraierが対象となるアーカイブタイプの URLオブジェクトに対応する HTMLファイルを処理して文書ドラフトファイルを生成し、ディレクトリ配下に「URLオブジェクトのID.est」ファイル名で保存します。
  3. SearchEstraierの処理が終わったら DocumentSearchプラグインが指定されたモデル、指定された ファイルタイプのURLオブジェクトに対応するファイルからテキストを抽出して、supportディレクトリ配下の cache/document_cacheに「ファイルパスのmd5ハッシュ.est」ファイル名で保存します。※2
  4. そのまま抽出した文書とオブジェクトのメタデータを付与した文書ドラフトを生成してディレクトリ配下に「URLオブジェクトのID.est」ファイル名で保存します。
  5. すべてのファイルの処理が終わったらそのディレクトリに対して estcmd gatherコマンドでインデックスを作ります。
  6. 作業ディレクトリは破棄します。

※1 スペースごとではなく、インデックスのパスごとに生成されます。複数のスペースで同じインデックスを利用しているケースがあるためです。
※2 すでに抽出されたテキストがある場合は処理をスキップします。

URLオブジェクトをループしてすべての対象ファイルを処理していますので、文書の数が多ければ多いほど時間がかかるようになります。そこで、数十万ドキュメントが対象になっているような環境でも検索インデックスの構築や洗い替えが高速に行えるように改修しました。改修の方針は以下のようなものです。

  • 使い捨てをやめる(永続化)※PowerCMSは永続化されている
  • 処理を分割して実行できるように(一気通貫でなく、ステップごとに)

設定と準備

  • 環境変数「searchestraier_permanent_document」に「true」を指定します。

検索インデックスを作成するツールとして新たに 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でインデックスを生成する

すべての文書ドラフトが生成されたら、--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倍速になりました!!)

SearchEstraierのプラグイン設定モーダルのスクリーンショット

@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

カテゴリー:技術情報 | プラグイン

投稿者:Junnama Noda

2025-11-10

PowerCMS Conference 2025 を開催しました

PowerCMS Conference 2025 開催レポート

2025年11月7日(金)に「PowerCMS Conference 2025」を開催しました。オンラインと現地のハイブリッド開催となり、お申し込みは、現地参加46名・オンライン参加149名・合計195名となりました。

PowerCMS Conference 2025 ビジュアルイメージ

開会のごあいさつ

登壇中のアルファサード株式会社 代表取締役社長 森崎 賢太郎

アルファサード株式会社 代表取締役社長 森崎 賢太郎

2025年はアルファサードにとって大きな転換期となりました。

  • 2025年6月:朝日新聞社の100%子会社化
  • 2025年10月:朝日インタラクティブの受託開発事業を承継し、社員約60名に拡大

これにより「朝日新聞グループの技術中核会社」として、クラウド・インフラを含む事業基盤の強化が進みました。

パートナーシップとインフラ協業の拡大

今年はパートナー制度をさらに拡張し、インフラパートナーとして株式会社ディレクターズと提携。PowerCMS クラウドの安定性・運用基盤を強化する取り組みが紹介されました。

あのときの未来、これからの未来 - PowerCMS 7 リリース

登壇中のアルファサード株式会社 執行役員 近藤 孝俊

アルファサード株式会社 執行役員 近藤 孝俊

PowerCMS 7 では、長年の課題だったレガシー領域の刷新と、現場で求められる実用的な機能改善が大きく進みました。

PowerCMS の状況

  • 2021〜2025年にかけてクラウド売上 約200%、オンプレライセンス 約150%成長
  • サポート件数 9,578件、満足度 97.5%

PowerCMS 7(2025/11/28正式リリース予定)

  • TinyMCE v3 廃止、v4/v7 を選択可能
  • レガシープラグインの提供終了
  • 管理画面 UX 改善、GPT 対話モード付きサーチバー
  • セキュリティ設定の統合(MFA・IP 制限・ロックアウト等)
  • CDN 自動パージ、NG ワード検出、画像処理など運用面を強化
  • 複数ルートの汎用ワークフロー

PowerCMS Conference 2025「あのときの未来、これからの未来 - PowerCMS 7 リリース」のリポート

当日資料

下記よりダウンロードしてください。

あのときの未来、これからの未来 - PowerCMS 7 リリース - (PDF)

PowerCMS X & 伝えるウェブ 最新情報

登壇中のアルファサード株式会社 ソフトウェア2部 部長 正木 愉美

アルファサード株式会社 ソフトウェア2部 部長 正木 愉美

PowerCMS X は「高速・自由度・セキュア運用」という基盤に加えて、「AI×アクセシビリティ×メディア配信」を中心に独自に進化しています。

PowerCMS X の最新情報

  • PowerCMS X ver 4.03 リリース(当日13時、セキュリティアップデート含む)
  • 2025年5月 に PowerCMS X 4 リリース
  • メディア連携(Yahoo! ニュース等へ配信、先着3社「メディアパック」無償提供)
  • PowerCMS X 導入数がまもなく200に達する
  • AIによる自動字幕生成「ジマクル」、動画の字幕もアクセシビリティの一環
  • 「やさしい朝日新聞」を PowerCMS X で構築
  • 多要素認証機能をそれほど遠くない未来に実装予定あり

伝えるウェブのご紹介

  • ウェブサイトのやさしい日本語化(短文化・ふりがな付与・分かち書きなど)
  • 自治体などで文章作成支援ツールとして活用
  • 公式サイトで翻訳お試し機能を提供
  • 導入数270超、自治体等へのご提案時にはぜひ伝えるウェブも一緒に

当日資料

下記よりダウンロードしてください。

PowerCMS X & 伝えるウェブ 最新情報 (PDF)

PowerCMS パートナー制度について

登壇中のアルファサード株式会社 ソフトウェア2部 佐藤 聖

アルファサード株式会社 ソフトウェア2部 佐藤 聖

制作会社・開発会社向けに展開している「PowerCMS パートナー制度」について説明がありました。

  • 製品をパートナー限定価格で提供
  • 非公開の技術資料・製品資料をダウンロード可能
  • 管理画面を共有しながら相談できるオンラインサポート
  • 提案・検証に利用できる製品ライセンスの提供
  • パートナーロゴ・製品ロゴ(SVG 形式)の利用

PowerCMS 座談会

PowerCMS 座談会の登壇者がステージに並んでいる

座談会には以下の登壇者が参加しました。

PowerCMS Royal Partner

  • 株式会社キノトロープ 高橋 輝 氏
  • 株式会社フォーク 関 智彦 氏
  • 株式会社ワンゴジュウゴ 佐藤 達茂 氏

アルファサード株式会社

  • 佐渡 昭彦
  • 三浦 貴之

PowerCMS、PowerCMS Xの褒めたいところ

  • PowerCMS、PowerCMS X の「安定性」「安心感」が高く、公開後のトラブルが少ない
  • サポート対応が非常に早く、無茶振りにも対応してくれるという声が多い
  • 静的出力によりセキュリティ・高速性が高く、WordPress からの移行で大幅改善した事例も紹介
  • 小さく始めて大きく育てられる拡張性が高い(後からの機能追加がしやすい)
  • 3環境構成(開発・ステージング・本番)が扱いやすく、安全に開発が進められる
  • 価格のバランスが良く、他 CMS と比較して導入しやすいとの評価
  • CDN・WAF・分離構成など、インフラ強化との相性が良い

PowerCMS 座談会で登壇者が回答している

改善要望

  • ワークフローの柔軟性をもっと細かくしたいという声
  • 管理画面の重さが課題となるケースもあり、サポートで解決した事例あり

今後期待される点

  • 生成 AI のさらなる活用(要約、SEO、アクセシビリティ補助など)
  • AI 検索に対応した構造化出力の強化

PowerCMS を安心して利用するためのインフラガイド

登壇中の株式会社ディレクターズ シニアマネージャ 松井 歩 氏

株式会社ディレクターズ シニアマネージャ 松井 歩 氏

インフラパートナーである株式会社ディレクターズ様より、PowerCMS / PowerCMS X を安全に運用するための重要ポイントが共有されました。

特に効果の大きいポイント

  • Web / CMS サーバーの分離
  • バックアップの多層化(日次・週次・月次)
  • 静的化+CDN キャッシュで高速化
  • WAF・IP 制限などのセキュリティ強化

サイト要件に応じて必要な要素を選べばよく、すべてを導入する必要はないと強調されました。SaaS が適したケースとセルフホストが向くケースの見極めについても話されました。

当日資料

下記よりダウンロードしてください。

PowerCMSを安心して利用するためのインフラガイド (PDF)

進化を続ける PowerCMS X、その未来を語る

登壇中のアルファサード株式会社 取締役(非常勤) 技術開発担当 野田 純生

アルファサード株式会社 取締役(非常勤) 技術開発担当 野田 純生

野田 純生によるセッションでは、PowerCMS の未来に向けた技術戦略とアクセシビリティ強化の取り組みが語られました。

  • 役員でありながら現場の技術担当として開発ににも携わる
  • ChatGPT 活用で C言語・Java など未経験分野にも挑戦
  • HyperEstraier・PDF 処理など低レイヤー技術へ踏み込む姿勢
  • チャレンジングな技術開発を継続
  • SaaS 運営で得た知見を製品へ反映する循環を強化
  • AIによる自動字幕生成「ジマクル」や「伝える PDF」など新サービスを PowerCMS X ベースで開発
  • PDF アクセシビリティの遅れに課題意識を持ち、自動タグ付けツールを開発
  • AI は“利用者の負担軽減”ではなく“発信側の品質向上”に使うべきと語る
  • 動画・PDF・やさしい日本語の 3分野を重点テーマに設定
  • 「アクセシビリティを競争力にする」ことを中核戦略として掲げる

まとめ

野田 純生は、創業者としての立場にとどまらず、再び現場の技術へ深く関わりながら PowerCMS X の未来を切り開いていく姿勢を示しました。AI 活用による開発効率化、低レイヤー技術への挑戦、動画や PDF など多様なコンテンツのアクセシビリティ改善など、PowerCMS X の進化に向けた力強いメッセージでセッションは締めくくられました。

当日資料

下記よりダウンロードしてください。

進化を続ける PowerCMS X、その未来を語る (PDF)

最後に

皆さまのご参加・ご協力のおかげで、実りあるカンファレンスとなりました。 ご登壇者・パートナー企業の皆さま、日頃より支えてくださるユーザーの皆さまに心より感謝申し上げます。

登壇者の集合写真

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

投稿者:Hirota

ブログ内検索

アーカイブ


日本語
ふりがな付き
English
简体中文
繁體中文
한국어