題名:Java Diary-29章

五郎の入り口に戻る

日付:2002/3/16

目次に戻る


GMail-Part1

前回までのあらすじ:

「なんとか日々の更新を楽にしたい」という考えにとりつかれた男は、日々更新用プログラムの第2弾を作りだす。しかし完成を目前にしたころから他のプログラムに興味が移ってしまった。かくして日々更新プログラムはなんとかサイトに掲載されたものの「サポートが面倒だ」というとんでもない理由により、宣伝もされないままひっそりと日々を送るのであった。

---

そもそもCocoa + Javaでプログラムを書こうなどという考えを持ち始めたのは

「自分でメーラーを作りたい」

という願望からだ。最初いきなり画面だけつくろうとしてあまりのわからなさに挫折はしたが、GBPutが完成に近づいたあたりから

「そろそろなんとかなるのではなかろうか」

という考えが頭をもたげ始める。となるとGBPutをきちんと世の中に出せるまで仕上げるよりもそちらのほうに心は移り始める。

最初にそのプログラムを作り始めたのがいつかはわからない。元々の構想だけならば2001年の夏の終わりくらいからスタートしたのではなかろうか。使いやすいメールプログラム、とはどんなものかあれこれ考える。仕事で生半可に覚えた知識を使い

「状態遷移図」

など書いてみたり。あるいは既存のGUIを構成する要素のうち、「これは使うなリスト」を作ってみたり。

この「これは使うなリスト」は私が父に電子メールプログラムの使い方を教えた経験から作り出したものである。ウィンドウが次々と開く。これだけでもう今何が行われていたのかよくわからなくなる。ダブルクリックというのはとても難しいことだ、、などと考えながらこんなリストを作ってみた。

 

目標:父上、母上に使ってもらえる電子メールプログラム

・日常の概念で説明が不可能な言葉は使わない。

・魔術を使わない(ボタンを押すと画面が変わるなど)

・セットアップだけには一般コンピュータユーザがかかわってもよい。

・遠隔地からメンテナンスが可能な機能を実装。

・Max一日数通程度の送受信。ただし仲間に一斉同報する機能は必要。

・添付ファイルで画像については自動解凍、表示

・Word,Excel添付ファイルについてはどうしましょう。。

・Mouse Enteredで説明を表示。クリックで実行だけ使用

 

使ってもよい言葉:

ボタン。(リスト)

 

使ってはいけない言葉:

Window,メニュー、モード、アイコン、スクロール、シフト

ポップアップ。右・左クリック。ドラッグ、ダブルクリック

 

 今こうして読み返してみるとできあがったプログラムがここから遠く離れてしまったことに愕然とする。作っていくと

「やっぱりあれって便利」

とか思い出すのだ。やはりGUIというのは伊達に数十年にわたって進化してきているわけではない、などと実感するのだが。

この中でかなりこだわって考えた物に「スクロールの廃止」があった。だいたい日常生活でスクロールさせて文章を読む人がいるだろうか?巻物じゃあるまいし。姉から来たメールを父が母に向かって

「読んでごらん」

ということがある。パソコンの画面を眺めることに問題はないのだが

「この続きはどうやって読むの?」

というと、右下にある小さな小さな三角印をクリックする必要に迫られるのだ。これをなんとかすることはできないだろうか。たとえば普段長い文章を読むときのようにページをめくるようにはならないか。

そう思ってインターネットであれこれ調べる。私の調べ方が悪かったのかもしれないが、あまりスクロールを目の敵にしている人、というのは多くはないようだ。しかしいくつかヒントになるものはあった。たとえば、マウスの付近だけ文字を拡大するような処理である。これならば読みたいところにマウスを持っていけば読めるわけだから少しはやりやすいかもしれない。あるいはそこまでやらなくても、横にタブのようなものを出しておき、ページを次々と読むことはできないか。しかしページ数が増えすぎるとタブが小さくなりすぎ、元の黙阿弥かそれより悪くなってしまうかもしれないなあ。

そんなことをあれこれ考えてはいたのだが、Cocoa+Javaの環境に慣れ親しんだ今となっては

「とりあえず今ある画面部品で作ってみるか」

という気になる。

今回メーラーを作るにあたり一から作る必要はなかった。その名もOME(Open Mail Environment)なるフリーのメーラーが公開されていたのだ。私はこのメーラーの必要な部分だけを使い、自分で作りたいところだけをつくればよい。

このOMEは、特定のフォルダの中にあれこれメールを区分けして格納してくれる。となるとまずはフォルダを表示する機能が必要なわけだ。GBputで慣れ親しんだNSBrowserの出番である。実は今回作るにあたり、一つお手本とすべきプログラムが存在していた。高橋さんという方が作成したOME_BrowserXCoSというのがそれである。これは同じくNSBrowserを使いフォルダを閲覧できるようになっているのだが、今観ているところより上位のフォルダに移動しようとすると私が排斥しようという理不尽な意欲に燃えている「横スクロールバーを操作」もしくは「ダブルクリック」をする必要がある。おまけにそれは画面をみただけではわからない。マニュアルを読むのが嫌いな私としては、使える機能はボタンの形で画面に出しておきたいななどと考える。

そんなことを考えながらまずはフォルダ閲覧部分を作り上げた。上の階層に移動できるときは、Browserの上部に

「Up]

と書かれたボタンが出現する。なんとか動くようになるとしばらくは喜んで使ってみる。ほーら。マニュアル読まなくてもUpって書いてあれば「上にいくんだな」ってわかるだろう。ほれほれ。と自分の中で何度も自画自賛の言葉を繰り返す。なぜそんなことをするかと言えば、まず第一にその機構を実現するためにかなり労力を費やしてしまったことに対し言い訳をしたいがためであり、第二に自分で自分が言った事を信じられなかったからだ。

ユーザーが操作したことによる結果をユーザーが理解しやすい形でフィードバックすることが使いやすさに貢献するのだ、と読んだような気もするし違っているかもしれない。いずれにせよ

「へっ?今何がおこったの?」

というのは大変使いにくいものだ。なのに私が苦心して作り上げたそのボタンを使った移動方法は自分でも

「へっ?今何がおこったの?」

と思いたくなるような代物だったのである。しかし機能が満足できることには違いない。多少の問題には目をつぶり先に進む。

次は指定されたフォルダの中身を一覧にして表示する機能である。ここでは表、すなわちNSTableというのを使用するのだが、これの使い方は(ありがたいことに)あちこちでたくさんのサンプルとともに説明されている。であるからなんとかなるのだが、問題は表示する内容の方だ。題名、差し出し人などはまあいいとして面倒なのは日付である。

それまで気にしたこともなかったのだが、電子メールの日付というのは実に様々な書き方をされているようだ。おまけにGMTだの+0900だの妙な呪文もいっぱい存在している。これをどうしてくれよう、と途方に暮れた私は

「先達の知恵にすがろう」

とOME_BrowserXCoSのソースファイルを観てみる。

すると一つのファイルを丸ごと使ってずいぶんと細かい処理をやっていることを知る。とはいってもオープンソースだから、そのまま持ってくればいいではないかとも思うのだが、OME_BrowserXCoSはObjective-Cで書かれているのだ。ところどころinitだのallocだのfreeだの正確な意味はしらないが戦慄を催させるのに十分な言葉がちりばめられている。一方私はJavaでプログラムを書くようになってからという物、メモリの確保だの解放だのにとんでもなくルーズになっている。今からこうした呪文の使い方を覚えるのは願い下げだ。

それでも一度は「よし。これをそのままJavaに移植しよう」と考えた。しかし3行進んだところでやになった。もっと楽な方法はないか。そう思いあれこれ情報をあさると(このころADSLを使った常時接続に移行していたのは実に幸運なことだった)Javaの大本であるところのSunがメール用のJavaライブラリをリリースしているようだ。クラスライブラリが使える時はそれを使え、というのが私の信条となれば迷う必要はない。メールの送信日付を文字列でつっこむとちゃんと解析してくれる関数も存在するようだ。よしこれを使えば一件落着。

そんなことをやりながらプログラムはのろのろとできあがっていく。一覧がなんとかできるようになると、今度は日付順にソートしなければ。とはいってもこれもGBPutで使った技である。とりあえずOK(実は全くそうではなかったのだが)次はメールの内容表示。これはこらなければ簡単である。

かくして、なんとか受け取ったメールの表示は行えるようになった。次にはメールのダウンロードをなんとかしてやろう、という気になる。基本的にはダウンロード専門のプログラムを起動するだけなのだが、「今ダウンロードしてます」やら「終わりましたよん」という表示をつけたい。進行途中の作業を示すものと言えばprogress barである。また新しい部品を使うことをおぼえなくちゃ。しばしの苦闘の後それがなんとか動くようになる。床屋のマークのようなBarがぐりぐりと動き、ダウンロード中であることを告げてくれる。ををこれはすばらしい。感動した私はしばらくその床屋マークに見とれる。

そんなことをやりながら作成はしょこしょこ進む。試験かたがた少しづつ使い始めるといつものことではあるのだが

「ユーザーとしての自分が要望する仕様の発散と、プログラマとしての自分が言い放つ”そんなことできるか”のせめぎあい」

に悩まされる。ダウンロードが終わる。これは床屋マークが引っ込むから明確に解る。しかしその後どのフォルダに新着メールが来たか解らないではないか。いちいち開けてみるのも面倒。となれば、フォルダのところに新着メール数表示とかできないかなあ。メールアドレスごとにどのフォルダに入れる設定するのをなんとか怠けてできないかなあ。元のOMEテキストファイルを編集する必要があるのだ。おまけに私はそのファイルのフォーマットを何度やっても覚えられない、ときている。

こうして頭の中に「やらなくちゃいけない項目」がある程度蓄積されてしまうとなんとはなしの重みを感じ、その一つ一つがとてつもなく面倒なことに思える。気をとりなおして一つ機能を実装してみるが、その間に要望リストは3っつくらい増えている。

そうはいってもまずはなんとか使えるレベルまでもっていかねばならない。次に作るのはメールの返信作成画面である。私はここで「画面」と書いたが、普通のメーラーだったら返信は別ウィンドウで開くところだ。しかし私はこの方法になんとはなしの違和感を覚えていたのである。「返信」ボタンを押すと画面の前面に返信ウィンドウが開く。元のメールはその陰に隠れている。(全文を引用する、という手もあるが)参照しようと思えばそれをクリックして前に持ってくる必要がある。ああ、なるほど。こうだったわけね、と思い続きを書こうとすれば今度は返信メールウィンドウをクリックして前にもってこなくちゃ。あれ、さっきなんて書いてあったっけと思えばまた同じ作業の繰り返し。

こうした操作はなんとも面倒である。(少なくとも私にとっては)では実生活で手紙に返信を書くときどうするかと言えば、たいていの人が今書いている手紙の下に元の手紙を置く、なんてことはしないだろう。横においておくと思う。そうしたことができないか。

この考えはそれこそメーラーを作ろうと考えたときから私の頭の中に宿っていた。最初は画面をびよーんと横にのばそうか、とかあれこれ考えていたのだが、Cocoa環境にはCuteな引き出し-NSDrawerがあるではないか。これを使って返信を書くことにしよう。

などと考えごそごそやっているうちになんとなくプログラムが動くようになる。「返信」とやるとさっと引き出しが開くのはなかなかご機嫌だ、と一人で喜んでいたが、そのうちある問題に気がついた。引き出しを使っていると返信文の幅が変えられないのである。おまけに元の文章と返信文を横に並べているから、使える幅は最大でも画面の半分でしかない。これで本当にいいのだろうか。やはり素直に別ウィンドウとし、幅をいっぱいに使えるようにすべきではないか。

ここらへんから私はメーラー脅迫神経症にかかりだしていた。たとえば電車の中、あるいは銀行の待合所でパソコンを使っている人がいると思わずその画面をのぞき込む。すると画面いっぱいにウィンドウを広げて使っている人が多い。ああ、やっぱり私の方法はだめだろうか。そうした絶望に沈むある日、救いをもたらしてくれる光景を目にしたのである。

それは駅のホームで携帯に向かってメールを打っている人の姿だった。今や携帯電話からメールを打つことなどめずらしくもないが、あの携帯の画面というのは横が異様に狭いではないか。それでも世間様にこれほどつかわれているのだから、それよりましなこのプログラムが問題であるはずはない。いや、最初は違和感があるだろうか、致命的な問題ではないはずだ。

こうして文字にしてみるとその説得力のなさに愕然とするが、とにかく私は自分で勝手に救いをでっちあげ、なおもメーラー作成の道に進むのであった。

 

前の章 | 次の章


注釈