メイン

Tips アーカイブ

2009年12月 9日

MT5とSQLite

以前にも

MT5とMT4の動作環境の違いを調べてみました (エムロジック放課後プロジェクト)

このエントリで書きましたが、MT5ではSQLiteは対応していません。
しかし、MTをインストール時にはSQLiteも選択することができ、インストールも最後まで行うことができます。
実際に動かしてみても普通に使えるみたいなのですが、いくつか問題を発見しました。

ブログの削除ができない
ブログの一覧画面からブログを選択して「削除」ボタンを押すと「Can't call method "execute" on an undefined value」というエラーが出て削除ができません。
カスタムフィールドがうまく動かない
タグ名を「EntryDesc」としてテキストフィールドを追加したとき、<$MTEntryDesc$>タグを使っても再構築後に表示されない。これは、他の種類のフィールドでも同様で、「entrydesc」のように小文字にしないとうまく動かない

この他にも、まだ、問題はあるかもしれません。
もともとサポートしていないものなのですがから、正常に動作しなくても仕方ないと思いますが、もしかすると、同じようにエラーが起きて悩んでいる人もいるかも知れないので、ここに書いておきます。
MT5では素直にMySQLを使うのが良さそうです。

お問い合わせ

エムロジック株式会社ではMovable Typeによるサイト構築やプラグイン開発、iPhone・Windows等のアプリケーション開発業務を行っています。
お問い合わせはこちらまで。

2009年10月28日

プラグインからメニューをどこに追加するかを指定する

MTプラグインで、管理画面のメニューに項目を追加するには、レジストリを使います。
そこでは、「view」オプションを使って「どの画面」にメニューを追加するかを指定できます。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => "blog",
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じで、指定するとブログメニューにだけメニューが追加できます。

と、今まではこんな感じで、blogを指定すればブログメニューに、systemを指定すればシステムメニューに、view自体を指定しなければ両方に追加されたのですが、MT5からはビューが増えたこともあり、配列を渡すことで複数のviewを追加できるようになりました。

my $plugin = new MT::Plugin::Hoge({
    name => 'Hoge',
    registry => {
        applications => {
            cms => {
                menus => {
                    'tools:hoge' => {
                        label       => "Hoge",
                        order       => 800,
                        view        => [ "blog", "website", "system"],
                    },
                },
            },
        },
    },
});

MT->add_plugin($plugin);

こんな感じにすると、ブログ、システム、ウェブサイトのメニューに新しくメニューを追加することができるようになります。
ここでは、以下の指定ができます。

user
ユーザーダッシュボード
blog
ブログメニュー
system
システムメニュー
website
ウェブサイトメニュー

この中でも、「user」が非常に面白くて、これを指定すると、本来メニューが存在しないユーザーダッシュボードに追加したメニューがひとつだけぽつんと表示されます。
まさに、「俺メニュー」という感じです。
とても、面白いので、ぜひ試してみてください。

2009年9月 9日

MT5とMT4の動作環境の違いを調べてみました

先日MovableTypeの新しいバージョンであるMT5のβ版が公開されました。
さっそくインストールしてMT4との違いを調べている人もいるのではないかと思います。
僕は、MT4とMT5の動作環境の違いを調べてみました。
参考にしたのは、以下のドキュメントです。

必要インストール環境、動作環境 | Movable Type 4 ドキュメント

必要インストール環境(ウェブサーバー, DB)と、ブラウザ動作環境 | Movable Type 5 ドキュメント

現在β1なので、今後この条件も変わってくることもあるかもしれません。
とりあえず、β1のドキュメントで比較してみたいと思います。

続きを読む "MT5とMT4の動作環境の違いを調べてみました" »

2009年8月26日

デスクトップPCからスケジュールタスクを実行する方法 Windows編

MTのスケジュールタスク機能は、指定日投稿のほかにも公開キューによる再構築や迷惑コメント・トラックバックの削除、不要になったセッションやテンポラリファイルの削除など重要な処理を行っています(弊社でもいくつかのプラグインでスケジュールタスクを利用しています)。
MTの機能をフルに活用したいのであれば、この機能は可能な限り設定するべきです。

MTのスケジュールタスクを実行する方法として、もっとも一般的な対応はMTが動作しているサーバー上で、MTに含まれるスクリプト run-periodic-tasks を定期的に実行する方法ですが、定期的な実行を行うためには cron や Windows タスク・スケジューラ の設定が必要であり、利用するサーバーによってはこの設定を行うことができずに、スケジュールタスク機能を設定しないまま利用されている方もいらっしゃるのではないかと思います。

MTでは、サーバー上で run-periodic-tasks を実行できない場合の代替策として

指定日投稿や公開キュー等のスケジュール処理の設定 | Movable Type 4 ドキュメント
に書いてある
  • ログ・フィードの取得時に実行
  • XML-RPC API で拡張された mt.runPeriodicTasks の利用
の2通りの方法が用意されています。
どちらの方法もサーバーの設定を必要とせず外部からMTのスケジュールタスクを実行させることが可能なのですが、その設定方法については具体的に解説されていません。

このサイトでは以前Rubyスクリプトを用いた方法を紹介しましたが、今回は、Windowsに限定した、WSH(VBScript)を使った方法を紹介したいと思います。
この方法は、IEがインストールされているWindows XP/Windpows Server 2003以上の環境であれば、追加のソフトを必要としないことが特徴です。

続きを読む "デスクトップPCからスケジュールタスクを実行する方法 Windows編" »

2009年7月23日

ブログごとにプラグインの有効/無効を切り替える

MTプラグインは、MTシステムにインストールするとシステム単位の有効/無効は指定できますが、ブログごとの有効/無効を指定することができません(2009/07現在)。
システムに実装されていない以上プラグインで実装するしかないわけです。
毎回同じようなコードを書くわけで、いいかげんテンプレート化できてきたので、ここで、紹介しておこうと思います。

続きを読む "ブログごとにプラグインの有効/無効を切り替える" »

2009年5月13日

MAMPとMacGDBpでPHPスクリプトのデバッグ環境を構築する

少し前に「MAMPにMTをインストールする際のメモ」という記事を書きましたが、今回はそこで書き忘れたPHPのデバッグ環境の構築について書いてみたいと思います。

MacGDBpのインストール

PHPスクリプトをリモートデバッグするには MacGDBpという、XdebugのGUIフロントエンドを使用します。ダウンロード、アーカイブ展開後、MacGDBp本体をアプリケーションフォルダにコピーするだけです。

Xdebugのインストール

次にサーバ側にXdebugエクステンションをインストールします。XdebugのバイナリパッケージがActiveStateにありますのでこれを利用します。Komodo Debugger Extensionsから"Komodo 5.1 Remote Debugging Packages"の欄にある"PHP Remote Debugging / Mac OS X"をダウンロードし、展開します。

展開するとPHPのバージョンごとにエクステンションがありますので、MAMPで使用しているPHPのバージョン(MAMP 1.7.2の場合はPHP 5.2.6)にあわせてエクステンション(xdebug.so)を選択し、以下の場所へコピーします。

$ cd 5.2
$ cp xdebug.so /Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922

Xdebugの設定

Xdebugを使えるようにするには、/Applications/MAMP/conf/php5/php.iniを編集し、
以下の設定をファイルの最後へ追加します。

[xdebug]
zend_extension="/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_autostart=1

また、Zend Optimizerを無効にするため、以下の行の先頭にセミコロンを入れ、コメントにします。

zend_extension_manager.optimizer=/Applications/MAMP/bin/php5/zend/lib/Optimizer-3.3.3

MacGDBpでスクリプトをデバッグする

MacGDBpを起動すると、デバッガ画面が開きます。この状態で、デバッグしたいページをブラウザからアクセスすると、ブラウザ上には何も表示されませんが、MacGDBpでは次のような画面になり、スクリプトの先頭で停止します。

macgdbp_debugger.jpg

画面上部左側では、変数の内容を確認できます。

スクリプトを任意の場所で停止したい場合は、Breakpointsウィンドウを開き、画面下部の「+」をクリックしてスクリプトを指定し、画面上部に表示されたスクリプトから停止させたい箇所の行番号部分をクリックします。

macgdbp_break.jpg

これでPHPスクリプトのデバッグが出来るようになり、ダイナミックパブリッシングに対応したMTプラグインの開発効率が上がるはず(?)です。

2009年4月22日

cronやログフィードを使わずにスケジュールタスクを実行する方法

MTで指定日投稿やその他のスケジュールタスクを実行するには、cronなどで定期的にrun-periodic-taskを実行する方法が良く知られています。
この他にも、ログ・フィードを取得するタイミングでスケジュールタスクを実行することもできます。
しかし、前者はcrontabに登録しなくてはいけませんし、後者はフィードを定期的に取得する必要があります。フィードリーダーなどに登録して自動的に取得する方法もありますが、ログの情報を外部に預けることに抵抗がある人もいるのではないかと思います。

そこで、第三の方法です。
XML-RPCを使う方法があります。

XML-RPC - Wikipedia

XML-RPCを使うと、外部のアプリケーションからMTに用意されたAPIを実行することができます。
XML-RPC APIを用いたブログエディタもたくさん開発されています。
今回は、XML-RPC APIの「runPeriodicTasks」メソッドを呼ぶことで、スケジュールタスクを実行します。
試しに、Rubyでさくさくとスクリプトを書いてみました。

require 'xmlrpc/client'

uri = "http://localhost/cgi-bin/mt/mt-xmlrpc.cgi"
username = "username"
password = "password"

client = XMLRPC::Client.new2( uri )
mt = client.proxy("mt")

begin
  result = mt.runPeriodicTasks(username, password)
rescue XMLRPC::FaultException => e
  puts "fault #{e.faultCode}: #{e.faultString}"
end

このスクリプトをテキストエディタなどに貼り付けて、scheduke_task.rbのようなファイル名で保存します。
uriにMTのmt-xmlrpc.cgiのURLを、usernameにはAPIを実行するユーザ名を、passwordにそのユーザの Webサービスパスワードを入力してください。
このスクリプトをWindowsのタスクスケジューラなどで定期的に実行すれば、MTのスケジュールタスクを実行することができます。設定が面倒なら、手動で実行しても良いでしょう(笑)
これなら、手元の普段使っているPCからでも操作ができます。

2009年3月25日

MAMPにMTをインストールする際のメモ

MT関連の開発にはMAMPに複数のバージョンのMTを同時にインストールして使っていますが、毎回新しいバージョンを入れる度にやり方をすっかり忘れているので、次にインストールする時のためにここにメモしておきます。

  1. MTのアーカイブを展開後、"mt425"等バージョン番号をつけたディレクトリ名にrenameし、DocumentRootへコピーする。
  2. 以下の内容でmt-config.cgiを作成する。
    CGIPath        /mt425/
    StaticWebPath  /mt425/mt-static/
    StaticFilePath /Applications/MAMP/htdocs/mt425/mt-static
    
    ObjectDriver DBI::mysql
    Database mt425
    DBUser root
    DBPassword xxxx
    DBHost localhost
    DBSocket /Applications/MAMP/tmp/mysql/mysql.sock
    
    MailTransfer sendmail
    SendMailPath /usr/sbin/sendmail
    
    MySQLのSoketファイルは/Applications/MAMP/tmp/mysql/mysql.sockにある。mt-config.cgiのDBSocketにはこれを設定する。
  3. バージョン毎のディレクトリ以下で直接cgiが動くよう、DocumentRootに以下の内容の.htaccessが存在するか確認し、なければ作成する。
    Options +ExecCGI
    AddHandler cgi-script .cgi
    
  4. mt-config.cgiで指定したデータベースを作成する。mysql/mysqladminは/Applications/MAMP/Library/binにある。
    > mysqladmin -u root -p create mt425 --default-character-set=utf8
    
  5. mt.cfgにアクセスする。

MAMPを起動しても、Apache/MySQLサーバの状態が「赤」になり、起動しないことがたまにあります。そういう場合は、/Applications/MAMP/bin/apache2/logs/httpd.pidが存在するならそれを削除してみます。MySQLで同様の場合は、/Applications/MAMP/tmp/mysql/mysql.pidを削除してみます。

2009年3月11日

MTのDBをSQLiteからMySQLへ

MTが動いているサーバを移転することになりました。
しかし、

  • 旧サーバはSQLiteしか使えない
  • 新サーバはMySQLしか使えない

ということで、SQLiteのファイルをそのまま移動して終わりと言うわけにはいきません。
どこかで、新サーバのMySQLにデータを移行するために変換を行う必要があります。
そこで、こんな方法を考えてみました。

  1. 旧サーバのSQLiteのデータベースファイルをローカルPCにバックアップする
  2. ローカル環境に構築したサーバに旧サーバのMTと同じバージョンのMTをインストールしておく
  3. バックアップしたSQLiteのバックアップファイルをローカル環境のMTで使えるようにMT側の設定を行い、ファイルを所定のディレクトリにおく
  4. ogawaさんの「MT Database Converter 」を使い、MySQLにコンバート
  5. MySQLのデータベースをdumpする
  6. dumpしたデータを新サーバのMySQLにインポートする

これで、うまくいくはずなんですが、はまったのが

旧サーバとローカルサーバのDBD::SQLiteのバージョンを揃える必要がある

という点でした。
今回は、旧サーバのバージョンにあわせてモジュールをインストールしました。

この手の作業は、仕事で時々発生することがあると思うので、ここにメモしておきます。

2009年2月25日

ActivePerl 5.10でMovable Typeの動作環境を作る

以前、「Win32版ApacheでMT環境を構築する際の注意点」や「Win32版Apache+FastCGIでMT環境を構築する」という記事でWindowsでMovable Typeの動作環境を作る話を書きました。
が、そもそもActivePerlインストール直後の状態では不足のモジュールがあり、Movable Typeを動作させるという最初の段階で、これらをインストールする必要があります。
またActivePerl 5.8やActivePerl 5.10など、バージョンによってその方法も異なってきます。
そこで、今回は、ActivePerl 5.10を使ってMovable Typeの環境を構築する場合にインストールするモジュールを整理しておきたいと思います。

続きを読む "ActivePerl 5.10でMovable Typeの動作環境を作る" »

2009年1月28日

Vista上のXAMPP1.7.0のセキュリティ画面での403エラーを回避する方法

WindowsマシンにXAMPPをインストールしてローカルサーバ環境をつくり、その上でMTを使ってサイト構築をしたり、プラグインのテストをしたりという方法は非常にポピュラーになってきています。

先日、僕も手持ちのMac mini上のVistaにXAMPPをインストールして、いざ! ローカルサーバ環境構築! と意気込んでみたのですが、インストールが終わりセキュリティの設定をしようというところで、タイトルのエラーにぶち当たりました。

続きを読む "Vista上のXAMPP1.7.0のセキュリティ画面での403エラーを回避する方法" »

2009年1月14日

管理画面で使わないメニュー項目を非表示にする

Windows関係のネタは一旦お休みしてMovable Typeの管理画面カスタマイズの小ネタを書いていこうと思います。

Movable Type を用いた案件などで、まれに「使えないメニュー項目を表示しないでほしい」という要望を聞くことかあるのですが、実は、これには簡単な解決方法があります。
公式なドキュメントには書かれていないのですが、Movable Type 4.1以降には「HideDisabledMenus」という環境変数が追加されています。この値を 1 にすることで、通常グレーアウトされるメニュー項目が非表示になります。
設定はmt-config.cgiに次の1行を挿入します。

HideDisabledMenus 1

デフォルトは 0 ですので、設定しない限り非表示にはなりません。
また、この設定はアンドキュメント(?)ですので自己責任でお使いください。

さて、この設定で非表示になるメニュー項目は、「使えない」メニュー項目なのですが、これはアクセスしているユーザーに付与された権限によって、判断されています。
ユーザーが「使わない」メニュー項目を非表示にしたい場合には、そのユーザーの権限を「使えない」と判断される権限に変更する必要があります。

例えば、「ウェブページの管理(「一覧」→「ウェブページ」)」のメニュー項目(manage:page)は、「ウェブページの管理(manage_pages)」権限がないユーザーには使えませんので、この項目を非表示にするためにはユーザーが 「ウェブページの管理(manage_pages)」権限を持たない状態に設定しなければなりません。
また、ユーザーに付与される権限は、複数の権限を組み合わせた「ロール」で管理されており、このロールを作成・編集し、適切に割り当てることで、ユーザーが持つ権限をカスタマイズすることになります。

しかし、この段階的な権限設定はユーザー管理を徹底したいサイトでは便利な機能ですが、その反面設定の手数が多くなってしまい、熟知していないと設定ミスの原因にもなりかねません。

そこでこういったメニューへの要望をプラグインで実現する方法を紹介したいと思います。

続きを読む "管理画面で使わないメニュー項目を非表示にする" »

2008年12月24日

シェルアクセスできないレンタルサーバでMTのプラグインをデバッグする

今回もMTのデバッグネタです。 先日、弊社のプラグインをインストールしたところうまく動かない、というお客様がいらっしゃいました。手元の環境では問題なく動作していますが、お客様の管理画面にアクセスして調べてみると、やはりうまく動作してません。サーバのシェルにアクセスして調べようにも、お客様が契約されたレンタルサーバでは、シェルでのアクセスが出来ない環境でした。 こういう状況で使えるのが "PerlScript プラグイン":http://bradchoate.com/weblog/2002/07/27/mtperlscript です。このプラグインは、テンプレート内にPerlのスクリプトを記述できるようにするもので、再構築時にスクリプトを実行し、その結果を出力します。 プラグインには2つスクリプトが同梱されていて、それぞれ指定された場所へインストールするようドキュメントに書かれていますが、私は以下のようにファイルを配置し、プラグインディレクトリへコピーしました。 ==
    PerlScript
    |-- lib
    |   `-- bradchoate
    |       `-- perlscript.pm
    `-- perlscript.pl
== 使い方は、テンプレートにPerlスクリプトを記述し、MTPerlScriptタグで囲うだけです。 例として、MTのコンフィグをダンプするスクリプトを書くと以下のようになります。 ==
<MTPerlScript>
require MT;
require YAML;
print YAML::Dump(MT::config);
</MTPerlScript>
== 1つのテンプレートの中にMTPerlScriptタグをいくつも置くこともできます。 ==
<MTPerlScript>
print "begining of template";
</MTPerlScript>

<MTPerlScript>
print "end of template";
</MTPerlScript>
== サブルーチンを定義することも出来ます。 ==
<MTPerlScript package="mylib" once="1">
sub log {
  my ($str) = @_;
  print "<p>log: $str</p>\n";
}
</MTPerlScript>

<MTPerlScript>
mylib::log("middle of template");
</MTPerlScript>
== 作成したテンプレートを再構築し、出力内容を確認するという手順を繰返して、デバッグします。 かなり便利かつ強力なプラグインですが、その反面、テンプレートの編集権限さえあれば、何でも出来てしまう危険なプラグインでもありますので、取り扱いにはご注意ください。

2008年11月26日

Windows環境のMTでmemcachedを使う

懲りることを知らない私は、前回に引き続きWindows関係のネタを書いていこうと思います。

Movable Type 4 では、分散型メモリキャッシュシステムであるmemcachedを使ったキャッシュ機構が組み込まれています。
システム自体は、大規模なシステムでこそより大きな効果を発揮する性質のものではありますが、メモリに余裕があれば、単体での利用でもかなりの効果を望めます。
また、MT::Memcachedを使った開発を行う場合、ローカル環境で動作確認できると大変便利です。

そこで、今回はWindows環境のMovable Typeでmemcachedを利用する方法を紹介したいと思います。

続きを読む "Windows環境のMTでmemcachedを使う" »

2008年11月12日

MTの一部の機能をコマンドラインから操作する

プラグイン(には限りませんが)を書いていると、これから書こうとしているコードやちょっとした思いつきが正しく動くのかどうか確認したくなることがあります。 確認のためには、最低限の動作をするプラグインに仕上げ、ブラウザからアクセスし、ログあるいはデバッガで確認するという手順を踏む必要がありますが、確認したいコードがたった1行、例えば、MT->version_number()がどういう形式の値を返すのか知りたい、というときには、いちいち前述のような作業を行うのは面倒です。また、最低限の動作をさせるために書いた部分に問題があり、もともと確認したかったところへなかなか到達しない、ということもありがちです。 そうした場合に、役に立つのが、コマンドラインからMTの一部の機能を操作するスクリプトです。(スクリプトといっても、デバッガが起動し、MTのインスタンスを生成した後、breakするだけなのですが...。) ==
#!/usr/bin/perl -d

use lib '../lib';
use vars qw( $mt );
use MT;

BEGIN {
    $mt = MT->new;
}

$DB::signal = 1;
== これをMTをインストールしたディレクトリの下にある、toolsディレクトリに配置して、そこから起動します。ここではconsoleというファイル名にしています。 ==
$ perl console

Loading DB routines from perl5db.pl version 1.28
Editor support available.

Enter h or `h h' for help, or `man perldebug' for more help.

main::(console2:23):	$DB::signal = 1;
  DB<1> 
== スクリプトを起動すると、デバッガのプロンプトが表示されますので、後はperlのプログラムを記述するだけです。変数$mtがMTのインスタンスですので、これを使っていろいろと試すことができます。 たとえば、前述のバージョン番号を調べるのであれば、 ==
  DB<1> p $mt->version_number
4.22
== とします。 公開済みのエントリの一覧を取得し、タイトルを表示するには、 ==
  DB<2> @entries = MT::Entry->load({status=>MT::Entry::RELEASE()})

  DB<3> print $_->title,"\n" for @entries
Movable Type を利用してウェブサイトをリニューアルしました
Movable Type 4 へようこそ!

  DB<4> 
== などとします。 スクリプトの中にサブルーチンを定義しておくと便利です。例えば、変数をダンプするのに毎回、 ==
print Data::Dumper->Dump($v);
== と入力するのは面倒なので、 ==
sub dd {
    my ($v) = @_;
    require Data::Dumper;
    print Data::Dumper->Dump($v);
}
== と定義しておけば、 ==
dd $v
== だけで済みます。YAMLでフォーマットされたのが見やすければ、 ==
sub xx {
    my ($v) = @_;
    require YAML;
    print YAML::Dump($v);
}
== と定義しておき、 ==
xx $v
== とすることができます。 ちょっと動作を確認したい、という場面で役に立つと思いますが、いかがでしょうか?

2008年10月22日

MTプラグインの簡単なデバッグ方法

以前、

MovableType のプラグインをperl debuggerでデバッグする (エムロジック放課後プロジェクト)

このエントリで、perl debuggerを使ったデバッグの仕方を書きました。この中で、

Movable Type のプラグインをデバッグする方法というと、ログにメッセージや変数を出力する、いわゆる「printfデバッグ」になると思います。

と触れられている、いわゆる「printfデバッグ」について、今回は書いてみたいと思います。

続きを読む "MTプラグインの簡単なデバッグ方法" »

2008年10月 8日

Windows環境でMTのログをリアルタイムに見る

前回に引き続きWin32関係のネタを書いていきます。

前回Windowsのデバッグ用ツールDebugViewを用いてApacheのエラーログをリアルタイムに見ることができるようにしてみましたが、Movable Typeのログも見れると開発者的には便利だったりします。
そこで、今回は前回の応用ということでMovable Typeのログをリアルタイムに見るためのプラグインを紹介したいと思います。

DebugViewのインストール方法など事前の用意については、前回のエントリーを参照してください。

続きを読む "Windows環境でMTのログをリアルタイムに見る" »

2008年9月24日

MTプラグイン開発に欠かせない10のソフトウェア

いかにも狙ったようなタイトルで申し訳ないですが、私、えんどうが普段、MTプラグイン開発で使っているソフトウェアを紹介してみようと思います。ちなみにOSは、MacOS X 10.5(Leopard)です。 * "MTPlugin-Starter":http://sourceforge.jp/projects/mtpluginstarter MTプラグインのひな形を作るPerlスクリプトです。これなしでスクラッチから書くなんてできません。 * "Carbon Emacs":http://homepage.mac.com/zenitani/emacs-j.html 長いこと使っている割には、ぜんぜん使いこなせていませんし、ほとんどカスタマイズもしていません。たまに他のエディタも使ってみますが、なぜかすぐにEmacsに戻ってきてしまいます。 * "MAMP":http://www.mamp.info/en/index.php apache/mysql/phpをまとめてインストールできるので重宝しています。この環境下に複数のバージョンのMTをインストールして使っています。 * "Terminal":http://www.apple.com/jp/macosx/ apache/php等のlogを表示させていますが、mysql, perldoc, perl debuggerなども開いています。 * Firefox/Safari 開発中はほぼFirefoxしか使いません。よく使うプラグインは、Firebug, Web Developper, Live HTTP Headersです。Safariは調べものと最終的なテストで使います。 * "Parallels":http://www.runexy.co.jp/products/parallels-mac/ おもにIE6でテストするためにWindows 2000を入れて使っています。ごくまれにLinux環境での動作確認に使用する場合もあります。 * "MacGDBp":http://www.bluestatic.org/software/macgdbp/ PHPのXDebugのフロントエンドです。GUIで操作しなければいけないのがちょっと面倒ですが、なかなか役に立ちます。 * "LimeChat":http://limechat.net/mac/index_ja.html 私は在宅で仕事をしているので、会社の他のメンバーに「ちょっと教えてー」と話かけるのに使います。もちろん雑談します。たまにお客様と連絡を取ったりもします。 * "辞書":http://www.apple.com/jp/macosx/ 変数やメソッドに名前を付けるときに使います。スペルチェックもしますが、和英辞書として使う方が多いです。 * "iTunes":http://www.apple.com/jp/macosx/ 音楽なしで仕事なんて考えられません。 最後はちょっと苦しい感じでしたが、なんとか10個挙げてみました。特にこれがないと困るという状況にならないよう、代替できるものがあるものを、なるべくカスタマイズせず、素のまま使うように心がけています。

2008年9月10日

まっさらな状態からテンプレート作成をおこなう方法

MTを使ってサイト構築をしたい場合、デフォルトのテンプレートは削除して、まっさらの状態からテンプレートを作っていきたいという場合が良くあります。
とりあえず、新規ブログを作成して、テンプレートを削除して、さて、テンプレートの作成をしましょう……という感じになると思います。手数的にはそれほど多くはないといえ、たくさんのブログから構築されているサイトなどでは、この作業自体を自動化できないかな、と思います。

そこで、こんなテンプレートセットを作りました。
システムテンプレート以外のテンプレートが空の状態のブログを作成できるテンプレートセット、です。
さすがに、システムテンプレートが空の状態だと、後で追加も出来ないので、困ったことになってしまうので、これだけは残してあります。

ファイルをダウンロード

このアーカイブをダウンロードして、解凍して出来た「initial_template_set」ディレクトリを、MTシステムの「plugins」ディレクトリの下に置いてください。
他のテンプレートセットとは同居できない場合もありますので、他のテンプレートセットは削除しておいた方がいいかもしれません。

新規ブログの作成時に「テンプレートセット」で「Initial template set」を選択します。これで、「すっぴん」なブログが作成できます。

結構地味に便利ですので、ぜひ、使ってみてください。

2008年8月28日

Win32版Apacheでリアルタイムにエラーログを見る

前回に引き続きWin32版Apache関係のネタを書いていきます。

ローカルにWin32版Apacheを用いたWebアプリケーション開発環境を構築した場合のメリットのひとつとして、ビルド・デバッグの手軽さという要素があるかと思います。
今回はローカル環境でそのような作業を行う場合に、役に立つかもしれないTipsを紹介しようと思います。

ファイルの配置ミスだったり、ファイル名のtypoだったり、Perlのモジュール不足だったり・・・ちょっとしたミスで期待した出力を得ることができない状況というのはよく発生することだと思います。
・・・よく発生するのは私だけかもしれません(笑)

このような状況に陥った場合には、まず最初にApacheのエラーログを見ることになると思いますが、事あるごとにテキストエディタでエラーログを開いて・・・という作業は結構かったるいものです。
私は一時期Apacheのログの最終行を表示するショートカットを作っていたりしました。

Windowsアプリケーションの開発者にはおなじみかもしれませんが、WindowsのAPIにOutputDebugStringというAPIがあります。
これは開発ツールが持つデバッガにデバッグ出力を行うためのものですが、開発ツールをインストールしなくとも、この出力を表示するDebugViewというツールがSysinternalsより公開されています(現在はMicrosoftが配布しています)
今回このツールを活用して、Win32版Apacheのエラーログをすばやく参照できるデバッグ補助環境を作りたいと思います。

続きを読む "Win32版Apacheでリアルタイムにエラーログを見る" »

2008年8月13日

ある月の日数をMTのテンプレート機能だけで求める

先日、あるお客様で、MTのテンプレートの中で「2008年の2月は何日あるか?というように、ある月の日数を知りたい」という方がいらっしゃいました。日数を知りたい月と年を指定すると、日数を返すテンプレートタグをプラグインとして作成しようかと考えていたところ、「できれば'MT標準の機能だけでやりたい」とおっしゃられるので、ちょっと考えてみたのが、以下のテンプレートです。

<MTSetVarTemplate name="days_in_month">
<MTIf name="year">
<MTIf name="month">
<MTSetVar name="daysin[1]" value="31">
<MTSetVar name="daysin[2]" value="28">
<MTSetVar name="daysin[3]" value="31">
<MTSetVar name="daysin[4]" value="30">
<MTSetVar name="daysin[5]" value="31">
<MTSetVar name="daysin[6]" value="30">
<MTSetVar name="daysin[7]" value="31">
<MTSetVar name="daysin[8]" value="31">
<MTSetVar name="daysin[9]" value="30">
<MTSetVar name="daysin[10]" value="31">
<MTSetVar name="daysin[11]" value="30">
<MTSetVar name="daysin[12]" value="31">
<MTSetVarBlock name="days"><MTGetVar name="daysin" index="$month"></MTSetVarBlock>
<MTIf name="year" op="%" value="4" eq="0">
  <MTIf name="year" op="%" value="100">
    <MTSetVar name="leap_year" value="1">
  </MTIf>
<MTElseIf name="year" op="%" eq="0">
  <MTSetVar name="leap_year" value="1">
</MTIf>
<MTIf name="month" eq="2">
  <MTIf name="leap_year">
    <MTSetVar name="days" value="29">
  </MTIf>
</MTIf>
<MTGetVar name="days">
</MTIf>
</MTIf>
</MTSetVarTemplate>

上記テンプレートをテンプレートモジュールとして別途保存しておき、使いたいところで呼び出すか、使いたいテンプレートに貼付けておきます。

テンプレート変数として使用している、"days", "month", "year"等は同じ名称の変数が既に使われている可能性がありますが、その場合は、適当に変更してください。

2008年の各月の日数を求める例は、以下のようになります。

<h1>月の日数</h1>
<MTSetVar name="year" value="2008">
<ul>
<MTFor var="month" from="1" to="12">
<li>
<MTGetVar name="year">年<MTGetVar name="month">月は、
<MTGetVar name="days_in_month" strip_linefeeds="1" trim="1">日まであります。
</li>
</MTFor>
</ul>

これは、次のように表示されます。

    ・2008年1月は、 31日まであります。
    ・2008年2月は、 29日まであります。
    ・2008年3月は、 31日まであります。
    ・2008年4月は、 30日まであります。
    ・2008年5月は、 31日まであります。
    ・2008年6月は、 30日まであります。
    ・2008年7月は、 31日まであります。
    ・2008年8月は、 31日まであります。
    ・2008年9月は、 30日まであります。
    ・2008年10月は、 31日まであります。
    ・2008年11月は、 30日まであります。
    ・2008年12月は、 31日まであります。

このテンプレートは、これを使って作成したページ自体がボツになってしまったので、実際に使われることはなかったのですが、せっかくですので、ここでネタとして公開することにしました。

ほとんど実用的な使い道は思いつきませんが、MTCalendarタグを使わずにカレンダーを表示することに挑戦してみるのも楽しいかもしれません。

2008年7月23日

MacOSX用のアプリケーションを簡単に作るワザ

Mac用のアプリケーションは開発するのが難しいとよく言われます。
実際、難しいですし、MacOSXでの開発で使うObjective-Cも非常に変態的個性的で習得の壁も高いような気がします。
しかし、最近では少し事情も変わってきてさくさくっと開発できるようにもなってきています(もちろん、その先には大きな壁が立ちはだかってはいるのですけど)。
今回は、CoreDataというフレームワークを使って、コードを書かずに(一行も!)アプリケーションを作ってみます。
まるで魔法のようにアプリケーションが完成するので、ぜひ、実際に手を動かしてみてください。

続きを読む "MacOSX用のアプリケーションを簡単に作るワザ" »

2008年7月11日

Win32版Apache+FastCGIでMT環境を構築する

前回に引き続きWin32版Apache関係のTipsを書いていきたいと思います。

まもなくMovable Type 4.2が正式版になる予定ですが、MT4.2において進化した機能のひとつがFastCGI対応です。
これまでもFastCGI上で動作させることは可能だったのですが、安定性など不安要素があり、簡単にお勧めできる手法ではありませんでした。
今回MTOSでの成果が取り込まれたことにより、いくつかの既知の制限事項は残しているものの、安定性の問題はクリアされたようです。
そのため今回のバージョンアップを機に、FastCGI環境を試したいという方もいるかと思います。

そこで今回はWin32版ApacheのFastCGI環境でMovable Typeを動作させる方法について、いくつか書いておきたいと思います。

続きを読む "Win32版Apache+FastCGIでMT環境を構築する" »

2008年6月11日

MTPlugin-StarterをWindowsで使おう!

エムロジックでは、プラグイン開発をスピーディに行うために独自に開発したツールを使っています。
これは、現在、オープンソースとして、「SourceForge.JP: Project Info - MTPlugin-Starter」で公開していますので、自由に使ってもらえます。
今回は、このMTPlugin-StarterをWindows上で使うための方法を解説してみたいと思います。

続きを読む "MTPlugin-StarterをWindowsで使おう!" »

2008年5月28日

Win32版ApacheでMT環境を構築する際の注意点

Win32環境でApache上にMovable Typeの環境を構築する場合、CGIプログラムをどのように実行させるかによって、いくつかの設定方法が存在します。

最近オールインワンのMTOS環境であるInstaMTがリリースされ、設定を意識せずMTOSの実行環境が手に入るようになりましたが、すでにApacheやActivePerlなどをインストールしている場合、オールインワンであることを余計に感じることもあるかと思います。

そこで今回、Win32版Apache上でMovable TypeをはじめとするPerl/CGIの実行環境についてまとめておきたいと思います。

続きを読む "Win32版ApacheでMT環境を構築する際の注意点" »

2008年4月22日

MovableType のプラグインをperl debuggerでデバッグする

Movable Type のプラグインをデバッグする方法というと、ログにメッセージや変数を出力する、いわゆる「printfデバッグ」になると思います。

ですが、怪しいと思う場所をすんなりと特定できなかったり、変数が想定していたのとは違う値を持っていたり、となるとログを取る場所や変数を変えたり、増やしたり、という作業を繰り返すわけですが、何度も同じ作業をやるのは面倒だし、時間はかかるし、イライラしてきます。

そういう時は、printfデバッグをさっさとあきらめ、perl debuggerを使ってデバッグします。

  1. ソースを編集し、デバッガを起動したい行の直前に、以下の1行(ブレークポイント)を設定します。(MTのコードはBEGINプロックで実行されるので、デバッガのプロンプトが出た時点では実行が完了しています。ですからソースに直接ブレークポイントを仕込んでおきます。)
  2. $DB::signal = 1;
      
  3. デバッガ用にターミナルを開き、デバイス名を調べます。
  4. # tty
    /dev/pts/0
      
  5. ターミナルのデバイスファイルのパーミッションを変更します。
  6. # chmod a+rw /dev/pts/0
      
  7. ターミナルのカラム、ライン数を調べます。
  8. # stty -a
    speed 9600 baud; rows 50; columns 102; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ;
    start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel
    -iutf8
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe -echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
      
  9. .htaccessを編集し、事前に調べたターミナルのデバイス名、カラム、ラインを環境変数として設定します。
  10. SetEnv PERLDB_OPTS TTY=/dev/pts/0
    SetEnv COLUMNS 102
    SetEnv LINES 50
      
  11. デバッガ用ターミナルで以下のコマンドを入力し、デバッガからの接続を待ちます。
  12. # clear; sleep 10000
      
  13. mt.cgiを編集し、perlに渡す引数を-dに変更します。
  14. #!/usr/bin/perl -d
      
  15. ブラウザからmt.cgiにアクセスします。
  16. 以下のような表示が出て、デバッガが開き、設定したブレークポイントで停止すれば成功です。
  17. Loading DB routines from perl5db.pl version 1.28
    Editor support available.
    
    Enter h or `h h' for help, or `man perldebug' for more help.
    
    MT::Plugin::Hoge::check_param(/var/www/html/mt/plugins/Hoge/hoge.pl:58):
    58:         my ($eh, $app, $param, $tmpl) = @_;
      DB<1>
      

これでさっくりとバグを直してしまいましょう。

2007年8月27日

MT4の「アイテム」を拡張する

先日、Movable Type 4 Hack-a-thonに参加してきました。

ハッカソンとは、プログラマが一堂に会して、黙々と、ときには見せ合ったり質問しあったりしながら、自分のしたいことについて自分のしたいようにプログラムを書くというイベントです。

ということで、思いっきりHackを楽しんできました。その成果は、MovableType用EasyPodcasting Plugin Ver.0.60になります。

今回は、そのHackをする中で、MT4の「アイテム」の拡張の仕方が分かったので、簡単にまとめておこうと思います。

続きを読む "MT4の「アイテム」を拡張する" »

2007年5月15日

すべてのブログをいっぺんに再構築するスクリプト - rebuild_all

すべてのブログをいっぺんに再構築するスクリプトを書いてみました。

使い方は、アーカイブに含まれる"rebuild_all"スクリプトをMovable Typeインストールディレクトリの「tools」ディレクトリの下にコピーし、起動するだけです。

$ tools/rebuild_all
rebuilding...
Blog: blog_1...ok
Blog: blog_2...ok
Blog: blog_3...ok
Blog: blog_4...ok
Blog: blog_5...ok
done
$

ダウンロード: rebuild_all.zip
ライセンス: MIT License

複数のブログを使ってサイトを構築している場合に便利だと思いますので、ぜひお試しください。

追記:
MovableType 4.0に対応しました。[2007/08/10]