2025-06-13
2025年6月12日に「PowerCMS X ミーティング Vol.3」を開催しました。47名ものご参加をいただき、まことにありがとうございました。
このセミナーは、5月にリリースした PowerCMS X ver.4 と PowerCMS X クラウド WAF / CDN オプションについてのご紹介を中心に、JIS X 8341-3 の適合レベル A なのに手間のかかる動画の字幕作成を、PowerCMS X で簡単に作成するデモを行いました。
冒頭、予定にはなかったのですが、事前にいただいたご質問からデータ移行についてのご説明をはさみました。スクレイピングでのデータ移行はかなり便利ですので、ぜひお試しください。
この機能については、7月下旬にハンズオンセミナーを行う予定ですので、お楽しみに♪
こちらは、PowerCMS X で管理作成しているコンテンツを、ニュースサイトへ直接配信できる機能になります。
これにより、より早くよりスムーズなニュースサイトへのコンテンツ配信が可能になり、運用者の負担の軽減も可能になります。
こちらは先着3社様に限り、設定作業なども含めて無償で行います。
下記ページの「お問い合わせボタン」よりご連絡ください。
外部ニュース配信機能を備えた PowerCMS X メディアパックキャンペーン
https://powercmsx.jp/mediapack/index.html
PowerCMS X 4 では、多くのご要望をいただいた LINE との連携にも対応しました。
X の連携機能と同様、コンテンツの公開時に LINE へも投稿できます。
投稿時に必ず入れたいテキストの設定などは、テンプレートタグを使って設定が可能です。
LINE 登録いただいたお客様にだけの特別なお知らせなどにご活用いただけると思います。
このほかにもお客様からのご要望に応えた機能としまして
などがあります。
次バージョンのリリースは未定ですが、お客様からのリクエストが多い機能は順次実装される可能性があります。ぜひお気軽にご連絡ください。
問い合わせ
https://powercmsx.jp/contact/contact_us.html
PowerCMS X Version 4 新機能の概要(pdf 3.8MB)
PowerCMS X でもクラウドサービスを展開していますが、みなさまご存じでしたでしょうか。
PowerCMSクラウドは、Microsoft Azure 上で構成されていますが、PowerCMS Xクラウドは AWS 上に構築しています。最近は、クラウドサービスへのお問い合わせが増えてきています。
クラウドでできることのご紹介から、プランの違いなどをご説明しました。
PowerCMS X Cloud Security に次いで非常にご要望の多かった WAF をオプションに追加しました。
協力会社によるプロキシ型の WAF ソリューションです。今春にパッケージに対する脆弱性診断もおこない、いままでかなわなかったセキュリティ要件にも自信を持って○をつけられるようになります。レポート作成のオプションもございますので、ぜひご検討ください。
もとより PowerCMS X では、S3、CloudFront との連携機能を有していて、PowerCMS Xクラウドでもフロントサーバーとして提供していましたが、より大規模な配信を見据えて転送量上限の異なる3プランを発表しました。
PowerCMS X での、S3、CloudFront との連携機能について、より高度な設定や、追加で Elemental MediaConvert とも連携することができるようになりました。これらにより、動画配信の実現はもちろん、発生する費用の削減が可能になります。
PowerCMS X クラウド および WAF と CDN オプションの紹介 (pdf 2.5MB)
PowerCMS X には、AI を活用した機能がすでにいくつか搭載されています。
日本橋という地名に対して、東京では「にほんばし」、大阪では「にっぽんばし」と読み方が違います。
これは野田の鉄板ネタで、「難波の次の駅は日本橋です」というテキストに対して、「にほんばし」とふりがながつくと、これは「にっぽんばし」と修正をします。
今日はそこではなく「難波」のイントネーションがおかしいからと修正。平坦に読み上げられていた「なんば」が、尻下がりの「なんば」に変わったときは、リアルに「すごい!」と声が出てしまいました。
2024年1月18日付で朝日新聞グループに加わったこともあり、朝日新聞社のツールとの連携もしています。
朝日新聞が大量に保有している過去30年分の記事データを、効率よく処理させるために前処理・フィルタリングをした上で、ディープラーニングの機構を用いて学習したデータを元にした API と連携しています。
自動要約生成API:朝日新聞社メディア研究開発センター 人工知能研究の取り組み
https://cl.asahi.com/api_data/headlinegeneration.html
こちらは、PowerCMS Xクラウドをご利用中のお客様は回数無制限、パッケージ版は APIコール数月100回までは無料でご利用いただけますので、ぜひお試しください。
Typoless は、朝日新聞社が新聞社のノウハウを最先端のAIで実現した校正支援のサービスです。
こちらはすでにリリースをしていますので、合わせてご確認いただければと思います。
Typoless(タイポレス) 朝日新聞社の文章校正AI
https://typoless.asahi.com/
PowerCMS X には、ver.3.03 で CMS で管理する動画の字幕を追加・編集する機能が追加されていました。
しかし、社内から字幕をつける作業の使い勝手があまりよくなく、非常に大変だという意見がでていました。
そこで、今バージョンでは AI の力を借りることで、動画から文字起こし、そのまま字幕として付与することができるようにしました。間違っている部分の修正はもちろん、文字の数、切り替えるタイミングなど細かい調整も可能となり、かなり便利になっています。
ほかにも、字幕の書体、表示位置、背景入りにするなどの選択も可能ですし、CMS からの書き出しについても字幕テキストだけ、音声だけ、動画に焼き付けてしまうなど、いろいろな方法があります。
すでに文字起こしをしたテキストがある場合は、ペーストすることで均等に割り付けも可能。BGM の追加や、別の動画をワイプで合成する、ナレーションを追加するなどの編集も可能と、本当に盛りだくさんです。
VideoCaptionsプラグインで動画に字幕をつける | PowerCMS X
https://powercmsx.jp/blog/video-subtitles.html
本日の資料
PowerCMS X AI による要約機能 / 動画字幕機能 (pdf 1.1MB)
本日冒頭で少し宣伝させていただきましたが、PowerCMS X に含まれている機能から、PDF のアクセシビリティに関するものだけを取り出してサービスとしてリリースしました。
単一ページの PDF であれば、下記のページからお試しいただけます。
伝えるPDF | 選挙公報の音声読み上げ対応を支援
https://tsutaeru.cloud/tsutaeru_pdf/index.html
6月26日 に、PowerCMS のウェビナーも行います。PowerCMSクラウドにも、WAF / CDN のオプションが追加となり、人気の高い PowerSync の性能強化についてのご紹介をいたします。
あわせて IR サイトの運用を円滑に行うためのノウハウもお話しします。ぜひ、こちらもご参加ください。
PowerCMS クラウド 新オプション WAF / CDN 紹介オンラインセミナー申し込みフォーム
https://www.powercms.jp/news/seminar-20250626.html
カテゴリー:イベント・セミナー情報
投稿者:佐藤ち
2025-06-10
PowerCMS X バージョン4 にてリッチテキストエディタで利用できる以下のボタンを新たに追加しました。
TinyMCEプラグインの設定で「ツールバー」に上記を追加することでリッチテキストエディタのボタンとして使用できるようになります。
pt-indent ボタンを使用すると選択した段落に字下げを適用することができます。
list-hiragana、list-katakana、list-japanese-formal、list-japanese-informal ではそれぞれリストの装飾を変更することができます。
「pt-indent」については HTMLコードに「pt-indent」という class 名が付与されます。
そのままではスタイルが適用されないため、エディタ用CSS(powercmsx/assets/css/editor.css)に下記のコードが必要になります。※1
.pt-indent {
text-indent: 1em;
}
また、テーマ(出力ページ)も対応する必要があるため、
スタイルシートを出力しているビュー(もしくはサイト用のスタイルシート)に上記のコードを追加します。※2
※1. 最新版のエディタ用CSS(powercmsx/assets/css/editor.css) には反映されているため修正は不要です。
※2. 最新版の Website / Media テーマには反映されているため新規にテーマを適用した場合は修正は不要です。
今回追加されたボタンは TinyMCE 4 を使用している環境(環境変数で「tinymce_version」に「4.x」を指定)ではご利用頂けません。
カテゴリー:プラグイン
投稿者:fujimoto
2025-06-09
PowerCMS ver.4.0で「VideoCaptions」が大幅に機能強化され、AI字幕作成や簡易動画編集などの機能が追加されました。
ストリーミング形式(HLS)への変換などもサポートされており、PowerCMS Xは動画 CMSとしても利用できるようになりました。
動画サイトの運営に関するリクエストに「編集中の動画に対する閲覧制限をしたい」「動画が外部に漏洩しないようにしたい」といったものがあります。
動画に閲覧制限をかける方法をいくつかご紹介します。
プラグイン「Members」による会員限定サイトを運営していることを前提とします。
Require all denied
ErrorDocument 403 /viewer.php
まず、/media/ディレクトリへのアクセスを制限します。特定の拡張子のファイルを対象にしても良いですが、ここでは全てのファイルに対して制限をかけます。ErrorDocument 403 /viewer.php を指定して、リクエストを PHPへ渡すようにします。
<?php
$base_path = '/opt/homebrew/var/www/powercmsx/'; // PowerCMS Xのディレクトリ
require_once( $base_path.'class.Prototype.php' );
$app = new Prototype();
$app->init();
$bootstrapper = new PTViewer();
if (!isset( $_SERVER['REDIRECT_URL'] ) ) {
// /viewer.phpへ直接アクセスがあった時
$bootstrapper->page_not_found( $app );
}
$redirect_url = $_SERVER['REDIRECT_URL'];
$dirname = dirname( $redirect_url );
$dir_name = '/' . $app->sanitize_dir( $dirname );
$file_name = basename( $redirect_url );
$file_name = $app->sanitize_file( $file_name );
$file_path = $app->document_root . $dir_name . $file_name;
if (! file_exists( $file_path ) ) {
// ファイルが存在しない
$bootstrapper->page_not_found( $app );
}
$obj = $app->db->model( 'upload_file' )->get_by_key( ['file_path' => $file_path ] );
if (! $obj->id ) {
// ファイルオブジェクトが存在しない
$bootstrapper->page_not_found( $app );
}
// 例えばファイルオブジェクトに statusカラムを追加している時
if ( $obj->status != 4 ) {
// ステータスが公開でない時
$bootstrapper->page_not_found( $app );
}
$member = $app->user( 'member' );
if (! $member ) {
// 会員サイトのログインチェック
$bootstrapper->page_not_found( $app, $obj->workspace, $app->translate( 'Permission denied.' ) );
}
// 必要に応じてメンバーの属性などをチェック
header( 'HTTP/1.1 200 OK' ); // 403ヘッダーを上書きする
$mime_type = $obj->mime_type;
header( "Content-Type: {$mime_type}" );
readfile( $file_path ); // ファイル出力
exit();
$bootstrapper->page_not_found( $app ); の結果はダイナミック・パブリッシュングのエラー表示となります。
readfileや echo file_get_contents( file_path );でも動画をブラウザへ返すことはできますが、
PHPを介して動画レスポンスを返していると大きなファイルサイズの動画へのリクエストが集中したりするとサーバーの負荷が一気に上がってしまいます。
そこで、mod_xsendfile を利用して、レスポンスはウェブサーバー(Apache)に任せてしまい、PHPでは権限のチェックのみを行うことにします。
mod_xsendfile.soをビルドしてサーバーに設置、httpd.confを編集します(編集後 httpdを再起動)。
LoadModule xsendfile_module lib/httpd/modules/mod_xsendfile.so
<Directory "/var/www">
XSendFile On
XSendFilePath "/var/www"
</Directory>
以下の部分を修正します。
header( 'HTTP/1.1 200 OK' ); // 403ヘッダーを上書きする
$mime_type = $obj->mime_type;
header( "Content-Type: {$mime_type}" );
readfile( $file_path ); // ファイル出力
exit();
ここを以下のように変更します。readfileを使わないため PHPでは権限のチェックのみを行うことで負荷を下げることができます。
header( 'HTTP/1.1 200 OK' ); // 403ヘッダーを上書きする
$mime_type = $obj->mime_type;
header( "Content-Type: {$mime_type}" );
header( "Content-Disposition: inline; filename=\"{$file_name}\"" );
header( "X-Sendfile: {$file_path}" ); // Apacheによるファイル出力
exit();
会員ではなく、管理画面へのログイン状況とそのファイルオブジェクトの編集権限によって制限をかける方法です。
<?php
$base_path = '/var/www/powercmsx/'; // PowerCMS Xのディレクトリ
require_once( $base_path.'class.Prototype.php' );
$app = new Prototype();
$app->init();
$bootstrapper = new PTViewer();
if (!isset( $_SERVER['REDIRECT_URL'] ) ) {
// /viewer.phpへ直接アクセスがあった時
$bootstrapper->page_not_found( $app );
}
$redirect_url = $_SERVER['REDIRECT_URL'];
$dirname = dirname( $redirect_url );
$dir_name = '/' . $app->sanitize_dir( $dirname );
$file_name = basename( $redirect_url );
$file_name = $app->sanitize_file( $file_name );
$file_path = $app->document_root . $dir_name . $file_name;
if (! file_exists( $file_path ) ) {
// ファイルが存在しない
$bootstrapper->page_not_found( $app );
}
$obj = $app->db->model( 'upload_file' )->get_by_key( ['file_path' => $file_path ] );
if (! $obj->id ) {
// ファイルオブジェクトが存在しない
$bootstrapper->page_not_found( $app );
}
$user = $app->user();
if (! $user ) {
// 管理画面にログインしていない
$bootstrapper->page_not_found( $app, $obj->workspace, $app->translate( 'Permission denied.' ) );
}
if ( $obj->status != 4 ) {
// ステータスが公開でない時
$can_do = $app->can_do( 'upload_file', 'edit', $obj );
if (! $can_do ) {
// 編集権限がない
$app->error( 'Permission denied.' );
}
}
header( 'HTTP/1.1 200 OK' );
$mime_type = $obj->mime_type;
header( "Content-Type: {$mime_type}" );
header( "Content-Disposition: inline; filename=\"{$file_name}\"" );
header( "X-Sendfile: {$file_path}" );
exit();
$app->error( 'Permission denied.' ); の結果は、管理画面の権限エラーメッセージとなります。