題名:Java Diary-36章

五郎の入り口に戻る

日付:2003/2/2

目次に戻る


GMail-Part8(Ver0.47)

Ver0.47では外見がかなり変わった。それまで引き出しを使っていたフォルダ一覧は結局他の部分と同じWindow中に表示することとした。このほうがフォルダ一覧の幅を調節できるから便利なはずだし。

またGMailを使う期間が長くなって来るにつれ、どうも画面配置が気に入らなくなってくる。左側にフォルダ一覧があるのはまあ良い。しかし残りの部分の上半分を題名一覧が占め、横に長く縦に短いエリアに一番読みたい本文が押し込められているような気になってくる。本文を全部読むためには縦にスクロールしなければならない。

なんとかならないものか?題名一覧と本文の間の区切りを縦にしてみるというのはどうだろう。頭の中ではこれはうまく働くはずであった。ところができあがってみるとなんとも「今一」である。題名一覧には題名、日付、差出人が横に並べられているから結構横幅をとる。いくら画面一杯にWindowを広げたところで題名一覧を読むのに支障がない程度に広げると本文の横幅が狭くなる。必要以上に行が折り返され、結局縦にスクロールしないと読めないようになる。これではなんのための配置変更だかわからない。しかしとりあえずその機能は残しておくようにした。

何が欠けて居るんだろうか。他に何かもっと面白い機能はできないか、とあれこれのメーラーを調べてみる。すると細かい差違はあるもののほとんど全てのメーラーは同じような画面配置に落ち着いてしまっていることを知る。ええい、面白くない、などと思っているうちに、ある意味悪名高い2chという掲示板の新Mac板で「Cocoaでメーラー作るよ」というスレッドが立っている事を知った。一からメーラーを作るとはなんという度胸であるか。私は表に見えるところだけ作ってひいひい言っているのに、などと感嘆しながら読んでいく。すると画面配置の論議がなされている中、ある人が提案したスクリーンショットが目に入ってくる。私はそれを観て

「これだ」

と思った。

既存のメーラー-例えばOutlook 等-では題名一覧を様々な条件でソートすることができるようになっている。差出人の欄をクリックすれば差出人でソートされる。日時でもソートできる。これは便利と言えば便利なのだが、問題もある。第一に不用意にそれらの欄をクリックしたりすると

「あれ?メールはどこへいったんだ?どうなったんだ」

と驚くことになる。第二に例えば差出人でソートすれば同一差出人からのメールが固まって表示されるわけだが、そもそもどんな差出人がいるのかは上から下まで表をみないとわからない。

この機能の本質は生かし、これらの問題を回避する方法はないものか、、と思っていたのだが、その画面イメージを観たとき、これが解決作なのかもしれないと思ったのである。一番左にフォルダ一覧があり、その横に差出人一覧、そのまた横に日付一覧がならんでいる。こうやって順々に選んでいくことにより自分が目的とするメールにたどりつけるという寸法だ。条件を指定してフィルタリングする欄が並んでいるようなイメージだろうか。よくよく考えてみればiTuneなんかもこんな配置をとっているではないか。

気に入ると早速無断でそのアイディアを借用である。題名一覧にはメールの種類(添付ファイル有/無、要返答/返信済み/未読)、差出人、日時があるからそれらの一覧を作って選択できるようにしよう。頭の中でいいかげんな完成予想図を画き私は一人悦にいる。ふふふ。これは画期的かもしれん。

さて、とプログラムを書き出す。するとあることに気がつく。本当に3種類もリストを作ってフィルタリングする意味があるのだろうか。(三つも作ろうとすると面倒なのである)だいたい種類なんて観ればわかるではないか。日時だって常に一方向にソートされているんだから混乱しようもないでしょ、などと頭の中で怠け者のプログラム作成者が声を上げる。自己陶酔に陥っていた頭の中の仕様作成者はそれに反論する言葉を失う。

かくして、差出人の一覧リストだけをつくることにした。すったもんだとやったあげく出来てみるとこれが結構ご機嫌である。機能の足りないところはすぐに目に付く。(例えば同じ人が複数のメールアドレスを使っている場合など一つにまとめて欲しいではないか)しかしそれに目をつぶっても時々使いたくなる。差出人の一覧を観ていると膨大な題名一覧の中では埋もれてしまっていた名前が浮かび上がり

「をを。こんな人からメールをもらったこともあったか」

などと思い返してみたり。あるいはジャンクメールを保存してあるフォルダでこの機能を使い

「をを。このメールアドレスからはずいぶんとたくさんメールが届いている。受信拒否にしよう」

とか。

さて、このような外見上の変化とは別に内部の処理も大きく変更していた。対象は特定のディレクトリに入っているメールの題名一覧を作る処理-いままでさんざんいじくり回してきたあの処理である。

一番最初は

フォルダを選択する→該当フォルダのメールを全部読む→一覧表示

とやっていた。最初のJavaバージョンは悲しいほど遅く、すったもんだのすえそこだけObjective-Cに書き換えたことは前述した。しかしこれでもまだ遅い。というわけで

起動→セーブして置いたメール題名のデータを読み込み→フォルダを選択→フォルダの中身が変わっていないか確認→変わっていたらその分だけ読み込み

に変えた。ところが日がたつにつれこの方式でも遅いと思い始めたのだ。当初

「メールの題名データを全部読み込むことに比べたら、変更の有無をチェックするのはとっても早い」

と思っていたのだが、どうもそうではないらしい。フォルダを選択するたびにディスクがごりごり動きしばらく待たされた後に題名一覧が表示される。ああ、鬱陶しい。

まず最初にメールが変更されたかどうかをチェックするのを高速にできぬかと思ってあれこれトライするが、どうにも遅い。何かそんな関数でもないかなあ、と思って探してみるが見つからない。

さて、どうしたものだろう。そもそもフォルダの中身が変更されたのをそんなにしゃかりきになってチェックする必要があるのだろうか。少なくともGMailを立ち上げている時はメールの操作は全てGMailで行うのだから何がおこっているか(少なくともGMailでは)解っているはずではないか。わからないのはメールを送受信した後だけのはず。(送受信は別のアプリケーションがやっているからだ)

そう考えるとあれこれプログラムを書き換え出す。本当の事を言えばこれを書いている時点でもまだバグが残っているのだが、とりあえずこの新方式でも動くようにはなった。

悪い癖でとりあえず動くようになるととにかくリリースしてしまえ、と考える。バージョン番号はキリの良い0.5ではなくそこからちょっと足りない0.47にした。新しく追加した

「差出人リスト」

は自分でも気に入っていたが、同時に足りない点にも気がついていたからである。前述した一人が複数のメールアドレスを使っている場合もそうだし、例えば自分がよくやりとりをする相手を固定して上位に持ってきたいとか、あるいは表示名を相手のアドレスではなく、自分が設定した名前にしたいとか。そういえばOS Xのアドレス帳との連携も必要だなあ。あるいはこの機能を拡張すれば、いくつかのメーラーで実装されている

「今日受け取ったメール」「昨日受け取ったメール」「ここ一週間」

というフィルタの機能も実現できそうだ。それらの機能を追加したところでVer0.5としよう。

などと考えてはみたのだが、例によって例のごとく話はそう進まないのであった。

前の章 | 次の章


注釈