コマンドラインから特定のテンプレートをデバグできる mt-tmpl-test
コマンドラインから、Movable Type の特定のテンプレートをデバグできる mt-tmpl-test now というツールが登場しました。
Making it easier to debug and test your templates
1.概要
このツールでは次のような出力を得ることができます。
- テンプレートの出力(任意のHTMLファイル名で標準出力を保存すればブラウザから参照可)
- テンプレートによって呼び出されたすべてのテンプレートタグ
- 再構築時間・SQL発行回数
- 再構築で実行されたSQLステートメント
出力するテンプレートの指定は、テンプレート名やテンプレートID で行います。カテゴリーアーカイブテンプレートはカテゴリー名またはカテゴリーID、ブログ記事アーカイブテンプレートはブログ記事名またはブログ記事ID を指定します(指定方法は後述)。
2.の「テンプレートによって呼び出されたすべてのテンプレートタグ」では、次のような内容も併せて出力します。
- テンプレートタグ実行時間
- テンプレートタグの起動回数
- テンプレートタグが1回起動されたときの平均実行時間
- テンプレートタグごとのSQL実行回数
次のようなものを標準出力します。
2.ツール実行に必要な Perl モジュール
mt-tmpl-test を実行するには Text::SimpleTable が必要です。PPM を起動して、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> | アーカイブ種別を指定 |
--profile | SQLやテンプレートタグのプロファイルを出力 |
--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 | |
'------------------------------------------------------------------+-----------'
- Movable Typeのアカウント・パスワードを忘れたときのツール「MT-Medic」
- remove_old_sessions で不要なセッションデータを削除する