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:" 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 の新しい使い方など、他の利用ケースがありましたらお知らせ下さい。
- カテゴリー
- 技術情報
コメントを投稿する