2008年8月23日土曜日

メールのデザインについて考えてみた

たまたまJavaMailを実装してみる機会があり、メールのデザインについていろいろ考えさせられました。デザインといってもメールの仕様(設計といってもいいですね)についてです。

少し突っ込んでメールの仕様を見てみると分かりますが、インターネットメールのデザインは非常に興味深いものがあります。

その特徴をざっくり一言で表せば「歴史的にややこしい。数学的には美しい。実用的にはいまいち」というところに落ち着くでしょうか。

どのあたりが歴史的にややこしいのか。
あまり突っ込んで調べてはいませんが、BASE64とかMIMEのあたりがややこしいですね。メールは基本的に7bitの文字しか送れなかったとか(これは技術的な制約だったのかそれとも初期の誤った意思決定によるものなのか・・・)、その辺に由来すると思われます。

どのあたりが数学的に美しいのか。
メールは複数の部分(MULTI-PART)を持つものとして定められています。メッセージの本文自体がPARTであり、そのPARTが別のPARTを含むことができます。PARTはさらに別のPARTを含むこともできます。
いわばファイル-ディレクトリ階層に似た再帰的な階層を取ることができるわけです。そしてプログラムで処理する場合も、再帰的アルゴリズムでメールメッセージを処理することができます。(再帰的アルゴリズムイメージ)
parseMessage(Message) {
if (Message.isMimeType("text/plain")) {
print(Message.getText());
} else {
parseMessage(Message.getContent());
}
}

例)メールにファイルを添付したり、別のメッセージを添付したり(そして添付されたメッセージが添付ファイル/添付メールを持つことも可能)

実用的にいまいちなのはなぜか。
メールの仕様によればいくらでも添付ファイル/添付メール/添付ファイル付きメールの添付ができてしまいます。
誰が100個の添付ファイルを必要とするでしょうか。誰が100階層の添付ファイル階層を必要とするでしょうか。
再帰的に処理できるのは確かに美しい。しかし、日本語の文字化けの問題やMIME指定のわずらわしさ、それにブラウザやメーラによる(勝手な)解釈を考慮に入れるとはっきり言ってカオス状態です。

確かにデザインは美しい。しかしその結果メールシステムの実装をややこしくしているとすれば、そのデザインは「美しくない」と言わざるを得ないのです。

ではなぜこのようなことになったのか。予期できない偶然によってか。結果的にややこしいと(日本の一開発者から)言われるようになったメールのデザインが、優れたデザインだと呼ばれる可能性はあったのか。

何だかわけの分からない問いになってしまいました。

私の思うところ、メールの仕様にはひとつ問題があります。それは「割り切らなかった」ということです。

例えば「メール本文はUNICODEテキストとして送ること。添付できるファイルは1個だけ。」という仕様だったとして、誰が困るでしょうか?

#まあUNICODEは極端ですけどね。欧米の科学者が7bitASCIIしか頭にないのは残念ながらしょうがないですしょう。あくまでおとぎ話です。

おそらく誰も困りません。それにメールの実装が簡単になり、誰でもメールソフトが作れるようになります。

#それがいいことかどうかも微妙ですけどね。

まあ、結論として言いたいのは、よいデザイン(=結果的に成功するデザイン)というのは必ずしも数学的に美しいかどうかそれだけではなく、どう割り切ったか、どこを切り捨てたか、という観点も重要になるのだなあ、とそういうことなのです。
まさにセンスですね。

0 件のコメント: