« 2008年12月 | メイン | 2009年02月 »

2009年01月 アーカイブ

2009年01月18日

MovableTypeのモブログ化(1)

ブログの構築に非常に多く使用されているムーバブルタイプですが、どうしてもPC環境で使用するシステムという思い込みが強く、今まで携帯電話からの記事投稿に関して考えたことはありませんでした。ところが、先頃手掛けた案件にMovableTypeを導入とテンプレートのカスタマイズを行ったケースがあったのですが、その構築過程で、先方から『携帯からいつでも投稿することは出来ないだろうか?』という要求が出されました。

携帯電話から記事を投稿する「モブログ(Moblog)」は、モバイルとブログをあわせた(恐らく)日本独自の造語で、国内に存在する多くの無料ブログサービスでサポートされています。よくよく考えてみれば、MovableTypeでモブログをやりたいと言う要求は、それほど突飛なものではありません。普通にブログを使っている個人ユーザーからのニーズのみならず、例えば業務における出張や外出先から報告を行いたい場合、社内ないしは部門やグループ単位で使用しているMTによって構築された掲示板システム(Bulletin Board System)に対して即座に投稿を行って報告を行ったり、判断を広く求めるような用途も考えられます。ワークグループやプロジェクトチームなど、横のつながりが重要な組織での業務では、まずは現時点の状況を携帯で報告し、詳細な報告書は後日といった即時性が求められるかもしれません。

そう思って、MTのモバイル対応に関してまずは色々と調べてみましたら、いくつかモブログを実現するアプローチを発見することが出来ました。まずは、ウェブサービスで告知されている、携帯メールをブリッジしてXML-RPC APIで投稿を行うサービス。これは、そのウェブサービスにユーザー登録して、指定された書式で指定されたアドレスにメールを送信すると、MTに記事が投稿されると言うものです。こちらは利用が簡単そうですね。次に、MovableTypeが導入されているシステムと連携させる、PHPスクリプトやプラグインタイプのものがあります。こちらは、MTとの連携を組むのに設置やシステム関連の知識が要りますので、少々難しいと思えます。

さて、コンサルティングの立場からモブログ対応において考慮したい点は、どこにでも持ち歩けてデジカメも付いている携帯電話からの投稿は、やはり手軽さが身上だということでしょう。簡単に投稿できなくてはならないという要求からは、投稿記事の構造と操作性に関する背景が見えてきます。ブログを装飾する細かい書式などは不要で、文章と添付書類を関連付けて適切に処理することで記事が成立することを第一に・と割り切ってもいいかもしれません。投稿時にタグや書式などを色々と覚える必要があれば、面倒で利便性に欠くということです。同時に、携帯電話の入力インターフェイスを考えた場合、誰もが普通のメールを打つのと同じ感覚でサクサク投稿出来るようにしたいという要求も見えます。

冒頭に記述した当方が相談を受けた案件では、そのようなイメージから大まかな方針や仕様を合意にまとめました。次の段階からは、いよいよ技術コンサルティングと実装の計画を立てる必要があります。次回からは、その経過と納品までを備忘録としての記述を行いたいと思います。この案件については、当方一人で納品までをワンストップで行いますので、後々の資料になるように、全体を見渡せるまとまりのある記事群にしておきたいと思っています。

2009年01月20日

MovableTypeのモブログ化(2)

前回の記事の続きとなります。この稿では、ムーバブルタイプに対してモブログの投稿機能を実現するための技術コンサルティングに於けるアイディアプロセシングを記述します。

まず、案件の要求に関して以下の制限が設けられることを念頭に置く必要がありました。

  • サーバーを移転するなどのダイナミックな環境の変更は不可。現状に付加する形で実装する
    この要求は、コスト面や開発期間の短縮がその理由ですが、環境に対する変化を広げないと言う意味において管理側には重要な要素でしょう。
  • 第三者のサービスに依存しない
    第三者が公開しているサービスや配布されているスクリプトを使わずに、オリジナルの開発アプローチを採るということです。これは以下の要素から導かれた当方からの提案です。情報が第三者の管理下にあるサーバを経由することによる情報管理への危険性・使い勝手・バグへの対処・メンテナンス性・サービス終了や開発中止によるリスク、こういった諸条件を考えた場合に、当該案件のモブログ機能のソースとドキュメントは、発注者の手元に所有できることが望ましいと判断されます。

現在MTが運用されている環境を見てみると、.cgi .php が動作する共有レンタルサーバ上で動作しています。モブログと言えばメール送信による投稿が多く利用されていますが、共有サーバでメール関連の設定にタッチ出来ないことを考えると、このサーバ上でメールをポップしてプラグラムに送って処理を行うという連携は出来ないことになります。それではメールを使用しないアプローチについて検討してみると、携帯から投稿フォームのページをアクセスし、フォーム送信処理で投稿を行うアプローチが考えられます。但し、mt.cgiのフォームをそのまま呼び出して投稿しようとしても、MovableTypeではJavaScriptによる再構築処理などが多用されており、携帯端末からのアクセスではそういったトリガを起動できない可能性が残ります。

そこで、下のような思考を経て、最終的に採用する実装アプローチを求めました。

  1. 携帯専用の投稿フォームを作って、そことMTをブリッジする中間処理を行って、携帯からの記事投稿を実現する。しかし、この方法では、input type="file" のフォームに対応している携帯でないと添付書類のアップロードが出来ないので、formを使用した投稿による携帯への対応は取れない
  2. メールによる投稿では、共有サーバ内で処理が完結できないので、外部にメールを受け取ってパース処理を行うことが出来るサーバが必要となる。そこで、当方で提供している非公開のサーバを利用し、そこで処理を行ってMTの設置してある共有サーバへとブリッジする。環境面では共有サーバ内で完結できないが、現実的なアプローチである

この段階までの技術コンサルティングから導き出された、案件を実現させる具体的な工数は以下となります。

  1. 共有サーバをサーバα、当方のメールサーバをサーバβとする
  2. サーバβ上で、モブログ投稿用のメールアカウントを作成する
  3. サーバβのPostfix(MTA=Mail Transfer Agent)が使用するコンフィギュレーションファイル aliases を変更し、モブログ投稿用メールの配信先を中間処理プログラム(C, php, cgiなどで記述)へのパイプとする
  4. この中間処理プログラムとは、送られてきたメールの内容や添付書類を解析してデータ化し、そのデータをサーバαのMTに直接送って記事投稿を完了させる内容で記述される
  5. サーバβに中間処理プログラムを設置する

これで、サーバβの指定されたメールアドレスにメールが送られると、そのメールはPostfixによって中間処理プログラムに送られ、そのプログラムは即時にデータを取り出してサーバαのMTに直接記事を投稿しますので、モブログが実現できることになります。中間処理プログラムの役割が非常に重要で、メールで送られてきたデータが意図している記事投稿であるかどうかの判断など、細かい記述を行わないとなりません。うっかり途中で送信したメールが記事になってしまったり、投稿の為のメールアドレスにスパムが届くようになってしまったら、とんでもない記事が投稿されてしまう可能性があります。こういったことに対処するための最低限のルール作成は必要となるでしょう。

次回は、開発の過程を追って、実装の経過と結果に関してまとめます。

2009年01月31日

MovableTypeのモブログ化(3)

引き続いてムーバブルタイプのモブログ化の記事です。条件や前提などに関しては、前の記事を辿ってご覧ください。前回から暫く時間が空いてしまいましたが、本日の夜半から実装に取り掛かり、朝方にほぼ完成してテストを終えました。以下、ソースコードを横目に実装の経過を追っていきます。

まず、メールをトリガにするところは前回の記事の段階で済ませてありました。モブログ投稿用のメールアドレスにメールが送信されると、Postfixは同じサーバ上の.phpスクリプトにメールの内容をパイプで渡します。.phpスクリプトから見ると、php://stdin の入力にメールの内容が渡されます。

まずはメールの内容を確認します。

  • boundaryがあるか?あれば、メールをboundaryで分割
  • boundaryがなければ、プレーンテキストのメールとみなして本文を取り出す
  • boundaryがある場合、boundaryで分割されたContent-Typeをチェックして、本文始め各添付書類に分ける
  • 添付書類がある場合、MovableTypeが動作する別サーバにリソースを置かなくてはならない。これは、スクリプトからftpを呼び出してリソースをアップロードする
ここまで難しいところは全くありませんが、メールの書式(例えば RFC2047:encoded-word の構文など)の知識は必要です。メールの解析が終わったら、その整合性をチェックします。おかしな(もしくは想定していない)Content-TypeのMIMEが送信されてきていないか?空メールが投稿されていないか?などに関して、動作させたい条件に合わせて厳重にチェックを行います。更に、改行文字を改行タグに変換する・添付書類を呼び出したりするためのHTMLタグ挿入など、本文の整形を行います。

続いて、整形した内容のムーバブルタイプへの投稿ですが、普通は XML-RPC APIを使用して送るのだと思います。が、今回は時間がありませんので、直接他のサーバにあるMovableTypeのmt.cgiを、httpで叩くことにしました(※APIが用意されていれば、それを使用するのが通常のアプローチだと思います。今回の当方のやり方はイレギュラーですが、XML-RPC APIを調べる時間が惜しかったのです)。こちらも、それほど難しくはありません。習得している技術への習熟や慣れ次第だと思います。が、もし今後CMSの用途でMovableTypeを拡張する今回のような案件があれば、その時は予算と時間を用意してXML-RPC APIを使用したアプローチを取るつもりです。

投稿をした後は、MTの再構築が必要になります。これも、XMLRPC-APIを使用すれば、再構築を指示するメソッドがあるのでしょうが、ここまでXML-RPCを使わなかった以上、やはりhttpでmt.cgiを叩きます。これで、ムーバブルタイプのモブログ化が完了しました。

最後に、どうもXML-RPCを使う気にならなかったのは、ajaxやPEARなどもそうですが、その使い方を覚えなきゃならない時間が惜しいのと、便利なものを使ってしまうと、それがなくては何も出来なくなってしまったり、根本的な深い理解に繋がらず、応用が全く利かなくなってしまう(んじゃないかと思ってしまう)からです。そんなわけで、当方はフルスクラッチの開発がほとんどです。第三者の可読性や開発効率を考えると、ライブラリ群を使うほうがいいのかもしれませんが。

About 2009年01月

2009年01月にブログ「案件・業務の進捗記録と備忘録」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年12月です。

次のアーカイブは2009年02月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。