MovableTypeの最近のブログ記事

はじめに

あなたのMovableTypeのプレビュー画面、遅くありませんか?

preview1.JPG
preview2.JPG

私のMovableTypeのプレビュー画面はめちゃくちゃ遅いです。

ストップウォッチで測ってみたら、「プレビュー」を押してから画面が出るまでに7秒かかりました。
編集画面に戻るときは「記事を編集」ボタンを押しますが、これも7秒です。

私は記事の見ばえが気になるので、記事を書くときに何回もプレビューします。
10回プレビューすると合計140秒も待たされます。
プレビューするたびに思考が寸断されて記事を書くモチベーションが失われてしまうことがよくあります。
ずっと悩みの種でした。

サーバがDTIのVPS(月490円のやつ)なので、最初はサーバのせいかと思いました。
CGIだから遅いのかなと思いました。

でも、実験してみてわかりました。

遅いのはサーバのせいじゃない。
CGIがPHPより遅いからでもない。

MovableTypeのプログラムが遅い。


そこで、プレビュー画面を超絶高速化する超絶テクニックを3つご紹介します。

方法1:記事画面をローカルに保存して、ローカルでHTMLを編集

・ブラウザでブログ記事を一つ表示します。(いわゆる"パーマリンク"をクリックすると出る画面)
・↓ブラウザのメニューから「名前を付けて保存」します。

preview3.png

・保存したHTMLファイルをエディタで編集します。
・そのHTMLファイルをブラウザで開くとプレビューできます。
・記事を本投稿するときは、ローカルで書いたHTMLを管理画面にコピペして投稿します。
メリット
・誰でもすぐできる。
・プレビューが一瞬である。
デメリット
・リッチテキストエディタを使えない。(HTMLタグを手書き)
・PCが変わると環境構築のやり直しが必要。
・画像を使うときは結局管理画面のプレビューを使うことになる。
・タグ、カテゴリの設定ができない。

方法2:JavaScriptでリアルタイムプレビュー画面を作る

まずはこちらをご覧ください。 → 瞬速プレビュー

ブラウザでフォームのテキストを編集すると、リアルタイムでプレビューできます。
プレビュー画面がWeb上にあるのがミソです。
ここで文章を書いたら、あとはMT管理画面を開いてコピペするだけです。
メリット
・どのPCからでもすぐ使える。
・プレビューが一瞬である。
デメリット
・リッチテキストエディタを使えない。(がんばれば実装できる)
・画像を使うときは結局管理画面のプレビューを使うことになる。
・タグ、カテゴリの設定ができない。

方法3:CGIでプレビュー画面を作る

上記の欠点をすべて克服した究極のソリューションがこれです。
まずはこちらをご覧ください。 → CGIによるプレビュー画面

これは、管理画面の記事編集画面で「自動保存」された文章をプレビューしています。
記事を書いてる途中に自動保存されたデータをDBから取り出して表示しています。

この方法であれば、管理画面の入力画面をそのまま使えますので、 WYSIWYGエディタも使えますし画像挿入・タグ・カテゴリ設定もできます。
つまり、MTのプレビュ―機能を完全に置き換えることができるのです。

そして、
表示にかかる時間はわずか0.2秒!
(※Google Chromeのデベロッパーツールで"Document"のロードが終わるまでの時間を測定)

35倍高速化!!

メリット
・どのPCからでもすぐ使える。
・プレビューが速い。
・記事入力を管理画面でできる。

実装方法は、DBのmt_sessionの値を取り出して表示しているだけです。
CGIのソースコードは今のところ非公開ですが、要望があれば公開したいと思います。
twitter・はてぶ・コメント欄などでご意見いただければ幸いです。

まとめ

プレビュー画面を速くする方法を3つ紹介しました。
プレビューの遅さに不満がある場合は、どれかを試してみてはいかがでしょうか?


MovableTypeにおいて、アーカイブマッピングを途中で変更すると悲劇が起こります。

特にパーマリンクにおいて、「_」(アンダースコア)と「-」(ハイフン)を共存させるのか、「-」のみで統一するのかは、一番最初に決めたルールから変更してはいけません。
MovableTypeでブログを構築すると、画面のフッターにデフォルトで "Powered by Movable Type Pro" という文字が入ります。

この "Powered by"は必ず入れないといけないのか?
調べてみました。
MT5に対応したAssetHandlerプラグインを導入してみました。
一個ずつちまちま画像をアップロードするのと比べてすごい便利ですね!
これで管理画面での画像アップロードの苦行から開放されそうです。

AssetHandlerとは何か?

さて前回の記事「[MovableType]「自動保存」されたブログ記事のデータはどこに保存されているのか?」で、「自動保存」された記事のデータはmt_sessionテーブルのsession_dataに保存されているのがわかりました。
ところがこのデータがまた厄介なのです。
前から謎だったのですが、今日ついに突き止めました。
MovableTypeで「自動保存」されたデータは、mt_sessionテーブルに保存されています。
公式ドキュメントにちゃんと解説があった。
MT::session 概要
任意の一時データを保存します。sessionという名前は、Movable Type が保存する一時データが投稿者のセッション情報しかなかった時代の名残りです。
MovableTypeにおいて、「自動保存」で保存された記事内容はどうやらmt_sessionテーブルに保存されているようなので、mt_sessionテーブルの中身を調べてみた。

注記

BuildTimeプラグインはMT5.1では正しく動きません。
MT5.1の環境に入れると、ブログ記事一覧などで「通信エラー (200)」というエラーが出ます。
これは、AjaxのレスポンスのJSONコードの末尾に"3.1234"のような余計な数字が入ってしまうからです。
したがって以下の記事はマネしないようにお願いします。
参考程度にお読みください。
前回の記事 [MovableType]管理画面の記事編集ツールバーでオリジナルボタンを追加する方法 の応用編です。

昔あったプラグイン「EntityRefButton」(私は使ったことないですが)とほぼ同じ機能をするボタンです。
MT 5.12で動作確認済みです。
MovableTypeの記事編集画面には、「太字にする」「引用開始」「箇条書きリスト」などのボタンがあって、これを使うことで、リンクをはったり<li>タグで囲んだりというのが簡単にできるようになっています。

mt-toolbar.png

これを「ツールバー」と呼びます。
(いわゆるWYSIWYGエディタというやつです。)
この「ツールバー」、実は簡単に自作ボタンを追加することができるんです。
ちょっとした手間で管理画面がめちゃくちゃ便利になりますので、ぜひ試してみてください。
XML-RPCでブログ記事を投稿するときにはmetaWeblog.newPostというメソッドを使います。
パラメータの5番目の項目で"publish"というフラグがあります。

ほとんどの日本語解説サイトでは"0:非公開, 1:公開"と解説されているのですがこれは間違いです。

XML-RPCを使ってMovableTypeに投稿する(PHP版)
Movable Type で使える XML-RPC API

正しくは、"0:再構築しない, 1:再構築する"です。
こちらの記事が正しいです。

[ThinkIT] 第2回:XML-RPCを利用したWeb API (1/2)

なぜこれに気づいたかというと、実行してみればわかります。
おまけに、MTのソースコード(XMLRPCServer.pm)を見ていたらコメントがありました。

MovableType5.12のXMLRPCServer.pm 356行目あたり。

    ## In 2.1 we changed the behavior of the $publish flag. Previously,
    ## it was used to determine the post status. That was a bad idea.
    ## So now entries added through XML-RPC are always set to publish,
    ## *unless* the user has set "NoPublishMeansDraft 1" in mt.cfg, which
    ## enables the old behavior.
(意訳)
バージョン2.1において、我々はこの'publish'フラグの挙動を変更しました。
以前は、このフラグは記事のステータスを決めるために使われていました。
しかしこれは悪いアイデアでした。
なので今はXRML-RPCから投稿された全ての記事は常に公開されます。
(ただし、mt.cfgで"NoPublishMeansDraft 1"に設定されている場合は古い挙動になります。)

私自身もこれまで間違った認識で間違った記事を書いてしまったので、全部直さないといけませんね。
失礼いたしました。

追記

既に同じ趣旨の記事を書いてる方がいらっしゃいました。
私の検索力が足りなかったようです。

MT XMLRPC metaWeblog.newPostのpublish属性
MTのmetaWeblog.newPost()にはまる
PerlのRPC::XML::Clientモジュールを使えば、MovableTypeのカテゴリ一覧を取得することができます。
PerlのXMLRPC::Liteモジュールを使えば、MovableTypeに簡単に記事を投稿することができます。
重たい管理画面にログインしなくて済むので非常に快適です。
前回の続きです。

記事本文中でHTMLタグなどを書きたい場合は、実体参照に変換してやる必要があります。
なぜなら、タグ<>をそのまま書いてしまうとXMLタグと認識されて文法エラーになるからです。

LinuxのPOSTコマンドを使うと、どこからでもMovableTypeの記事を投稿できます。

MovableTypeの管理画面の重さに嫌気がさして、管理画面を使わずに記事投稿する方法を模索しているDQNEOです。
こんにちわ。

LinuxのPOSTコマンドを使うと、リモートサーバ上のMovableTypeに記事を投稿できます。

XMLRPCを使って投稿するテスト。
参考
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html#w11
http://nomano.shiwaza.com/tnoma/blog/archives/001538.html

PerlでMovableTypeのカテゴリ一覧を取得する方法

事前にXMLRPC::LiteというCPANモジュールをインストールした上で、下記コードを実行します。

MovableTypeの初心者のうちは、「カテゴリ」のみ使うことをオススメします。

いろいろ触ってみて、下記の結論にたどり着きました。

人気記事

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMovableTypeカテゴリに属しているものが含まれています。

前のカテゴリはcoLinuxです。

次のカテゴリはJavaScriptです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事