TopMovable Typeツール > 2008年10月
2008年10月31日

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

October 31,2008 12:03 PM
Tag:[, , , ]
Permalink

コマンドラインから、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   |           |
'------------------------------------------------------------------+-----------'
Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

AMN
Categories
Monthly Archives
2020年
2019年
2018年
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3