コマンドラインから特定のテンプレートをデバグできる mt-tmpl-test

コマンドラインから特定のテンプレートをデバグできる mt-tmpl-test

Posted at October 31,2008 12:03 PM
Tag:[MovableType, Performance, Template, Tool]

コマンドラインから、Movable Type の特定のテンプレートをデバグできる mt-tmpl-test now というツールが登場しました。

Making it easier to debug and test your templates
Making it easier to debug and test your templates

1.概要

このツールでは次のような出力を得ることができます。

  1. テンプレートの出力(任意のHTMLファイル名で標準出力を保存すればブラウザから参照可)
  2. テンプレートによって呼び出されたすべてのテンプレートタグ
  3. 再構築時間・SQL発行回数
  4. 再構築で実行されたSQLステートメント

出力するテンプレートの指定は、テンプレート名やテンプレートID で行います。カテゴリーアーカイブテンプレートはカテゴリー名またはカテゴリーID、ブログ記事アーカイブテンプレートはブログ記事名またはブログ記事ID を指定します(指定方法は後述)。

2.の「テンプレートによって呼び出されたすべてのテンプレートタグ」では、次のような内容も併せて出力します。

  1. テンプレートタグ実行時間
  2. テンプレートタグの起動回数
  3. テンプレートタグが1回起動されたときの平均実行時間
  4. テンプレートタグごとのSQL実行回数

次のようなものを標準出力します。

テンプレートによって呼び出されたすべてのテンプレートタグ

2.ツール実行に必要な Perl モジュール

mt-tmpl-test を実行するには Text::SimpleTable が必要です。PPM を起動して、Text-SimpleTable をインストールしてください。

Text::SimpleTable のインストール

ppm コマンドを使えばコマンドラインからもインストールできます。下は Windows + ActivePerl の例です。

コマンドラインからインストール

3.ツールの利用方法

Making it easier to debug and test your templates」のページにある「Download mt-tmpl-test now」のリンクを右クリックして「対象をファイルに保存」や「名前を付けてリンク先を保存」などを選択し、ファイルを mt-tmpl-test という名前で保存します。

ツールのダウンロード

保存したファイルをアプリケーションディレクトリの tools ディレクトリにアップロードして、実行できるよう、パーミッションを 705 や 755 などに変更します。

コマンドラインから次のような感じで起動します。

% cd /path/to/mt
% perl ./tools/mt-tmpl-test --blog=1 --template=1 --profile

Windows で実行する場合は、スラッシュ "/" を¥ に書き換えてください。

指定できるオプションパラメータは次の通りです。

オプションパラメータ設定内容
--blog <name>ブログ名またはブログIDを指定
--template <name>テンプレート名またはテンプレートIDを指定
--category <label>カテゴリー名またはカテゴリーIDを指定
--entry <title>ブログ記事タイトルまたはブログ記事IDを指定
--author <name>ユーザー名またはユーザーIDを指定
--archive <type>アーカイブ種別を指定
--profileSQLやテンプレートタグのプロファイルを出力
--debug <mode>MTのデバグモードを指定
--helpヘルプを表示

設定例をいくつか示します。パラメータとパラメータ値の間「=」でつなぐか、半角スペースを挿入してください。各パラメータは半角空白で区切ってください。

1番目のブログ(インストール時に作成されたブログ)のメインページテンプレート(ID:10)を出力

% perl ./tools/mt-tmpl-test --blog=1 --template=10

1番目のブログのブログ記事アーカイブ(ID:15)を、3番目のブログ記事を出力

% perl ./tools/mt-tmpl-test --blog=1 --template=15 --entry=3

1番目のブログのブログ記事リストアーカイブ(ID:17)を、月別アーカイブとしてを出力

% perl ./tools/mt-tmpl-test --blog=1 --template=17 --archive=Monthly

1番目のブログ(インストール時に作成されたブログ)のメインページテンプレート(ID:10)で、プロファイルも出力

% perl ./tools/mt-tmpl-test --blog=1 --template=10  --profile

4.プロファイルの出力例

プロファイルはテンプレート出力の後に出力されます。

Template Tag Utilization:
.----------+----------------------+--------+---------+--------+--------+-------.
| Time     | Tag                  | Calls  | Avg     | SQL    | Hits   | Miss  |
+----------+----------------------+--------+---------+--------+--------+-------+
| 0.224    | include              | 66     | 0.003   | 61     | 22     | 22    |
| 0.107    | entrypermalink       | 50     | 0.002   | 21     | 1      | 1     |
| 0.095    | entrytrackbackdata   | 10     | 0.010   | 36     | 18     | 18    |
| 0.051    | entryiftagged        | 16     | 0.003   | 16     | 42     | 25    |
| 0.049    | filetemplate         | 90     | 0.001   | 0      | 0      | 0     |
| 0.042    | entries              | 6      | 0.007   | 6      | 36     | 11    |
| 0.037    | categorycount        | 12     | 0.003   | 12     | 0      | 0     |
| 0.033    | comments             | 6      | 0.006   | 6      | 19     | 14    |
| 0.030    | tags                 | 2      | 0.015   | 3      | 41     | 16    |
| 0.029    | link                 | 6      | 0.005   | 12     | 6      | 5     |
| 0.024    | entrycategories      | 9      | 0.003   | 10     | 12     | 1     |
| 0.024    | else                 | 39     | 0.001   | 0      | 0      | 0     |
| 0.022    | archivelink          | 8      | 0.003   | 9      | 0      | 0     |
| 0.022    | archivelist          | 1      | 0.022   | 2      | 0      | 0     |
| 0.022    | subcatsrecurse       | 9      | 0.002   | 11     | 2      | 2     |
| 0.019    | archivedate          | 150    | 0.000   | 0      | 0      | 0     |
| 0.018    | tagsearchlink        | 148    | 0.000   | 0      | 0      | 0     |
| 0.015    | categoryarchivelink  | 15     | 0.001   | 1      | 0      | 0     |
| 0.012    | toplevelcategories   | 1      | 0.012   | 2      | 7      | 4     |
| 0.011    | widgetset            | 2      | 0.006   | 4      | 2      | 2     |
| 0.011    | entrytags            | 6      | 0.002   | 0      | 0      | 0     |
| 0.009    | blogpingcount        | 2      | 0.004   | 1      | 0      | 0     |
| 0.008    | if                   | 112    | 0.000   | 0      | 0      | 0     |
| 0.008    | pings                | 2      | 0.004   | 2      | 6      | 3     |
| 0.005    | ifcommentsactive     | 30     | 0.000   | 0      | 0      | 0     |
| 0.005    | archivefile          | 67     | 0.000   | 0      | 0      | 0     |
| 0.004    | entrylink            | 8      | 0.001   | 0      | 0      | 0     |
| 0.004    | ifarchivetypeenabled | 3      | 0.001   | 2      | 0      | 0     |
| 0.004    | subcategorypath      | 15     | 0.000   | 0      | 0      | 0     |
| 0.003    | entrycategory        | 10     | 0.000   | 1      | 0      | 0     |
| 0.003    | tagrank              | 32     | 0.000   | 0      | 0      | 0     |
| 0.002    | blogcommentcount     | 1      | 0.002   | 1      | 0      | 0     |
| 0.002    | tagname              | 74     | 0.000   | 0      | 0      | 0     |
| 0.002    | entrybody            | 19     | 0.000   | 0      | 0      | 0     |
| 0.002    | setvar               | 29     | 0.000   | 0      | 0      | 0     |
| 0.001    | entrydate            | 10     | 0.000   | 0      | 0      | 0     |
| 0.001    | dateheader           | 10     | 0.000   | 0      | 0      | 0     |
| 0.001    | archivetitle         | 8      | 0.000   | 0      | 0      | 0     |
| 0.001    | blogid               | 43     | 0.000   | 0      | 0      | 0     |
| 0.001    | entryid              | 39     | 0.000   | 0      | 0      | 0     |
| 0.001    | indexbasename        | 23     | 0.000   | 0      | 0      | 0     |
| 0.001    | ifpingsactive        | 20     | 0.000   | 0      | 0      | 0     |
| 0.001    | entrytitle           | 24     | 0.000   | 0      | 0      | 0     |
| 0.001    | entrymore            | 10     | 0.000   | 0      | 0      | 0     |
| 0.001    | categorylabel        | 21     | 0.000   | 0      | 0      | 0     |
| 0.001    | commentdate          | 5      | 0.000   | 0      | 0      | 0     |
| 0.001    | categorybasename     | 15     | 0.000   | 0      | 0      | 0     |
| 0.000    | categorydescription  | 15     | 0.000   | 0      | 0      | 0     |
| 0.000    | productname          | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | commentauthor        | 5      | 0.000   | 0      | 0      | 0     |
| 0.000    | entrycommentcount    | 10     | 0.000   | 0      | 0      | 0     |
| 0.000    | archivecount         | 8      | 0.000   | 0      | 0      | 0     |
| 0.000    | entrytrackbackcount  | 9      | 0.000   | 0      | 0      | 0     |
| 0.000    | commentid            | 10     | 0.000   | 0      | 0      | 0     |
| 0.000    | subcatisfirst        | 9      | 0.000   | 0      | 0      | 0     |
| 0.000    | subcatislast         | 9      | 0.000   | 0      | 0      | 0     |
| 0.000    | staticwebpath        | 2      | 0.000   | 0      | 0      | 0     |
| 0.000    | unless               | 2      | 0.000   | 0      | 0      | 0     |
| 0.000    | publishcharset       | 2      | 0.000   | 0      | 0      | 0     |
| 0.000    | blogname             | 3      | 0.000   | 0      | 0      | 0     |
| 0.000    | cgipath              | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | elseif               | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | getvar               | 2      | 0.000   | 0      | 0      | 0     |
| 0.000    | entriesheader        | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | defaultlanguage      | 2      | 0.000   | 0      | 0      | 0     |
| 0.000    | archivelistheader    | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | entriesfooter        | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | archivelistfooter    | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | blogifcclicense      | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | searchscript         | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | blogurl              | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | searchmaxresults     | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | cclicenserdf         | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | blogdescription      | 1      | 0.000   | 0      | 0      | 0     |
| 0.000    | version              | 1      | 0.000   | 0      | 0      | 0     |
'----------+----------------------+--------+---------+--------+--------+-------'
  Total Queries: 219
  Total Build Time: 1.02736
.------------------------------------------------------------------+-----------.
| Query                                                            | Number    |
+------------------------------------------------------------------+-----------+
| RAMCACHE_GET ?                                                   | 214       |
| RAMCACHE_ADD ?                                                   | 124       |
| SELECT templatemap_id, templatemap_archive_type, templatemap_bl- | 30        |
| og_id, templatemap_build_interval, templatemap_build_type, temp- |           |
| latemap_file_template, templatemap_is_preferred, templatemap_te- |           |
| mplate_id FROM mt_templatemap WHERE (templatemap_archive_type =- |           |
|  ?) AND (templatemap_blog_id = ?) LIMIT 1                        |           |
| SELECT template_id, template_blog_id, template_build_dynamic, t- | 25        |
| emplate_build_interval, template_build_type, template_created_b- |           |
| y, template_created_on, template_identifier, template_linked_fi- |           |
| le, template_linked_file_mtime, template_linked_file_size, temp- |           |
| late_modified_by, template_modified_on, template_name, template- |           |
| _outfile, template_rebuild_me, template_text, template_type FRO- |           |
| M mt_template WHERE (template_id IN (?))                         |           |
| SELECT template_id FROM mt_template WHERE (template_name = ?) A- | 20        |
| ND (template_type = ?) AND (template_blog_id IN (?,?)) ORDER BY- |           |
|  template_blog_id DESC                                           |           |
| SELECT template_meta_template_id, template_meta_type, template_- | 20        |
| meta_vchar, template_meta_vchar_idx, template_meta_vdatetime, t- |           |
| emplate_meta_vdatetime_idx, template_meta_vinteger, template_me- |           |
| ta_vinteger_idx, template_meta_vfloat, template_meta_vfloat_idx- |           |
| , template_meta_vblob, template_meta_vclob FROM mt_template_met- |           |
| a WHERE (template_meta_template_id = ?)                          |           |
| SELECT placement_id, placement_blog_id, placement_category_id, - | 19        |
| placement_entry_id, placement_is_primary FROM mt_placement WHER- |           |
| E (placement_entry_id = ?)                                       |           |
| SELECT COUNT(*) FROM mt_entry, mt_placement WHERE (entry_status- | 12        |
|  = ?) AND (entry_class = ?) AND (entry_blog_id = ?) AND (placem- |           |
| ent_category_id = ?) AND (entry_id = placement_entry_id)         |           |
| SELECT DISTINCT tag_id, tag_name FROM mt_tag, mt_objecttag WHER- | 10        |
| E (objecttag_object_id = ?) AND (objecttag_object_datasource = - |           |
| ?) AND (tag_id = objecttag_tag_id) ORDER BY tag_name ASC         |           |
| SELECT category_id FROM mt_category WHERE (category_parent = ?)- | 9         |
|  AND (category_class = ?) AND (category_blog_id = ?)             |           |
| SELECT category_id, category_allow_pings, category_author_id, c- | 9         |
| ategory_basename, category_blog_id, category_class, category_cr- |           |
| eated_by, category_created_on, category_description, category_l- |           |
| abel, category_modified_by, category_modified_on, category_pare- |           |
| nt, category_ping_urls FROM mt_category WHERE (category_id = ?)- |           |
|  LIMIT 1                                                         |           |
| SELECT trackback_id FROM mt_trackback WHERE (trackback_entry_id- | 9         |
|  = ?) LIMIT 1                                                    |           |
| SELECT trackback_id, trackback_blog_id, trackback_category_id, - | 9         |
| trackback_created_by, trackback_created_on, trackback_descripti- |           |
| on, trackback_entry_id, trackback_is_disabled, trackback_modifi- |           |
| ed_by, trackback_modified_on, trackback_passphrase, trackback_r- |           |
| ss_file, trackback_title, trackback_url FROM mt_trackback WHERE- |           |
|  (trackback_id IN (?))                                           |           |
| SELECT template_id FROM mt_template WHERE (template_identifier - | 6         |
| = ?) AND (template_type = ?) AND (template_blog_id = ?) LIMIT 1  |           |
| SELECT category_id, category_allow_pings, category_author_id, c- | 3         |
| ategory_basename, category_blog_id, category_class, category_cr- |           |
| eated_by, category_created_on, category_description, category_l- |           |
| abel, category_modified_by, category_modified_on, category_pare- |           |
| nt, category_ping_urls FROM mt_category WHERE (category_id IN (- |           |
| ?))                                                              |           |
| SELECT comment_id FROM mt_comment WHERE (comment_visible = ?) A- | 3         |
| ND (comment_blog_id = ?) AND (comment_entry_id = ?) ORDER BY co- |           |
| mment_created_on DESC                                            |           |
| SELECT templatemap_id, templatemap_archive_type, templatemap_bl- | 3         |
| og_id, templatemap_build_interval, templatemap_build_type, temp- |           |
| latemap_file_template, templatemap_is_preferred, templatemap_te- |           |
| mplate_id FROM mt_templatemap WHERE (templatemap_is_preferred =- |           |
|  ?) AND (templatemap_archive_type = ?) AND (templatemap_blog_id- |           |
|  = ?) LIMIT 1                                                    |           |
| SELECT entry_id FROM mt_entry WHERE (entry_status = ?) AND (ent- | 2         |
| ry_blog_id = ?) AND (entry_class = ?) ORDER BY entry_authored_o- |           |
| n DESC LIMIT 10                                                  |           |
| SELECT tag_id, tag_is_private, tag_n8d_id, tag_name FROM mt_tag- | 2         |
|  WHERE (tag_id IN (?,?,?,?))                                     |           |
| SELECT template_id FROM mt_template WHERE (template_name = ?) A- | 2         |
| ND (template_blog_id IN (?,?)) AND (template_type = ?) LIMIT 1   |           |
'------------------------------------------------------------------+-----------'
関連記事
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)