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

2025-10-28

PowerCMS Xで実現するハイブリッド配信設計

CMSをヘッドレス(Headless)で使うか、従来の静的配信を続けるか——。
実際の制作現場では、どちらか一方に限らず、併用するケースが増えています。
PowerCMS X は、APIを活用した設計とテンプレート単位での出力切り替えにより、静的・動的・ヘッドレスの最適なバランスを取ることができます。
本記事では、どのような視点で両者を使い分けるかご紹介します。

制作現場で増えるAPI連携のニーズ

制作現場の要件定義では、近年以下のような声が増えています。

  • フロントは自由な技術で実装したい
  • 既存基盤や外部サービスとAPIで連携したい

PowerCMS X は、設計段階からAPIを活用した外部配信や連携を前提に据えることが可能です。
これにより、SPA(シングルページアプリケーション)/MPA(マルチページアプリケーション)、モバイルアプリ、デジタルサイネージなど、多様な配信チャネルへの展開が現実的になります。
実際の商談やQAでも「API連携はどの形式か?」といった質問が多く、制作会社にとって優先度が高いテーマといえます。

静的・動的・ヘッドレスを組み合わせる ― PowerCMS Xの柔軟な配信構成

コンテンツ配信方式は大きく分けて3種類です。

  1. 静的出力:HTMLを事前生成して配信。高速で安定。
  2. 動的出力:リクエスト時にサーバー側でHTMLを生成。検索結果や会員ページなど、リクエストごとに内容が変わる場合に利用。
  3. ヘッドレス(Headless、API経由):APIでデータを取得しフロントで描画。更新性・連携性に優れる。

さらにPowerCMS Xでは、これら静的・動的・ヘッドレスの各方式をテンプレート単位で組み合わせるハイブリッド運用が可能です。
例えば「更新頻度の低いページは静的」「検索やフォーム、会員ページは動的/ヘッドレス」といった、用途に応じた最適配置を実現できます。

どこをヘッドレスにするか? 配分設計とユースケース

配分設計の基本視点

観点 検討ポイント 適する方式
更新頻度 頻繁に更新される/リアルタイム性が必要 ヘッドレス
パフォーマンス要件 高トラフィック対応、CDNキャッシュ活用 静的
外部連携 検索・会員認証・在庫APIなどのリアルタイム連携 ヘッドレス
運用コスト 安定的に更新されるコンテンツ中心 静的

実装上のポイント

  • API設計:モデル粒度・リレーションを設計段階で明確化し、一覧/詳細/参照用エンドポイントを整理
  • 生成戦略:ビルド対象を更新頻度・依存関係で選定し、不要な全量ビルドを回避
  • キャッシュ/失効:CDN/EdgeのTTL設定やタグ付け失効で部分更新を仕組み化
  • プレビュー/ドラフト:承認フロー・公開予約と矛盾しないAPI設計

ハイブリッド配信の効果的な運用

ヘッドレスは「すべてをAPI化する」ことではなく、どこをAPI化するのが合理的かを見極めることが重要です。
テンプレート単位で静的/動的/混在を選べる柔軟性を組み合わせれば、速度・安全性・運用コストの最適なバランスを実現できます。

制作会社に求められるのは、更新頻度・承認フロー・依存関係などの要件から逆算した、モデル・配信・運用の統合設計です。
まずは既存案件の一部セクションを対象に、ハイブリッド配信の小規模な実証から始めることを推奨します。

 

カテゴリー:技術情報 | コラム・その他

投稿者:miura

ブログ内検索

アーカイブ


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