PowerCMS ブログ

2017年06月13日

Perlスクリプトでデータベースの値を確認する

通常、PowerCMS (Movable Type) のデータを確認するには、管理画面へログインするなど操作を行ったり、データベースを直接参照する必要があります。

その他では開発を行うことでデータを確認できますが、じつは Movable Type に専用のスクリプトが同梱されており、そちらを少し紹介します。

list-objects スクリプト

スクリプトの名前は list-objects です。これは tools ディレクトリの中にあります。

$MT_HOME/tools/list-objects

※ $MT_HOME は PowerCMS (Movable Type) のインストール先を指します。

オブジェクトを一覧出力できる

list-objects は Movable Type のオブジェクトを一覧出力できます。オブジェクトとはウェブサイトやカテゴリ、記事やウェブページなどのデータの種類と思って頂いて問題ありません。

出力は list-objects を実行したコンソールへ標準出力されます。

使い方と出力例

実行は run-periodic-tasks などと同様に Movable Type のアプリケーションディレクトリから行い、いくつかのパラメータを指定します。

type
出力したいオブジェクトの種類を指定します。このパラメータは必須です。 (記事=entry、ウェブページ=page、ログ=logなど)
id
オブジェクトの id を指定します。指定するとその ID をもつ一件だけが出力されます。未指定の場合は全件が対象になります
cols
出力したい情報を指定します (id=ID、name=名前、など) 指定できるものはオブジェクトによって異なります

実行すると、最初にカラム名の行、続いてデータが出力されます。下記の場合は id を指定しているので、ID=1 の一件だけが出力されています。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --id=1
id:accessibility:allow_comments:allow_pings:approver_ids:atom_id:attachfiles:author_id:authored_on:basename:blog_id:category_id:class:comment_count:convert_breaks:created_by:created_on:creator_id:excerpt:ext_datas:external_preview_expired_on:external_preview_id:external_preview_is_active:is_edited_by:is_edited_now:is_edited_on:keywords:modified_by:modified_on:owner_id:parent_entry_id:pcms_unpublished_on:ping_count:pinged_urls:prefs:revision_comment:status:tangent_cache:template_id:template_module_id:text:text_more:title:to_ping_urls:unpublished:unpublished_on:week_number:current_revision
1:1::::::1:20160609141635:about_page:1::page:0::1:20160609141635::::::::::::20160609141635:::20160609131635:0::::1::::

このページはアバウトページ (自己紹介や会社概要など、プロフィール用のページ) として利用するウェブページの例です。

作成したウェブページに @ABOUT_PAGE というタグを設定すると、ページのヘッダ、フッタにあるナビゲーションにリンクが追加されます。

::アバウトページ::::201623:0

cols を指定すると指定したカラム名の情報だけが出力されます。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --id=1 --cols=id,title
id:title
1:アバウトページ

cols に指定できるカラム名がわからない場合は、cols を指定せずに一度実行して出力を見ることで何が指定できるかわかります。

list-objects のメリット

管理画面へのログインが必要ない

list-objects はスクリプトなので管理画面へログインの必要がありません。 プラグイン開発などデバッグ途中であればデータをすぐに確認でき、また何らかの理由で管理画面へのログイン情報がわからない場合にも有効です。

管理画面に表示されないデータが見られる

list-objects はデータとして存在するが、管理画面に表示されないデータも出力されます。 内部的にあるフラグやデータなどの確認を行う場合に SQL を発行しなくてもデータが確認できます。

プラグインのデータに対応している

list-objects では Movable Type 標準のデータだけではなく、プラグイン独自のデータも出力できます。例えば type=mailmagazine と指定することで MailMagazine プラグインのデータが出力できます。

出力が整形しやすい

list-objects は区切り文字が決まっているなどデータが整形されています。 定期的にデータを確認したい場合、テンプレートを使わずに一覧をまとめることができます。

list-object のデメリット

カスタムフィールドなどメタデータは出力されない

カスタムフィールドなど mt_foo_meta テーブルに保存されるデータは出力されません。

ブログなどの絞り込みが行えない

絞り込みが行えるのは id のみです。blog_id など他の情報では絞り込みが行えません。

ただし、出力結果を整形したり、grep を併用することでフィルタすることはできます。

例: id=1 のデータを grep でフィルタする


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --cols=blog_id,id,title | grep ":1:"
blog_id:id:title
2:1:アバウトページ

全件が出力される

id を指定しなかった場合は全件が出力されます。そのため件数が多いオブジェクトではかなり時間がかかる場合があります。

出力のフォーマットを自由にできない

出力されるフォーマットは区切り文字が : と固定されており、またデータに改行が含まれる場合は標準出力にも改行が含まれます。 とくに区切り文字が : のため URL などデータに : が含まれると区切り文字なのか区別がつきません。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=entry --cols=blog_id,,id,,title --id=1
blog_id::id::title
2::1::アバウトページ

使用例 : 定期的にログをファイル出力する

コマンドの工夫では list-objects の結果をファイル出力することができます。


$ cd $MT_HOME
$ perl ./tools/list-objects --type=log > /path/to/file/log.txt

さらに cron などへ設定することで結果のファイルを定期的に更新することができます。 出力先を工夫すればコンソールが使えない状況でも結果を定期的に確認することができると思います。


cd $MT_HOME && perl ./tools/list-objects --type=log > /path/to/file/log.txt

list-objects の新しい使い方など、他の利用ケースがありましたらお知らせ下さい。

カテゴリー
技術情報

ページの先頭へ