題名:Java Diary-40章

五郎の入り口に戻る

日付:2003/8/2

目次に戻る


GLBrowser

ある日会社で一緒に働いている男が

「こんなブラウザがあります」

とメールで教えてくれた。(そのとき私はブラウザについてあれこれ考える立場にあったのである)ほれほれと思いさっそく教えてもらったページにアクセス。そこでは何種類かインターネットへのアクセスを簡単にするソフトを公開されていたが、私が主に使ったのは「ListBrowser」である。

そのコンセプトは簡単明快。たとえばネットで何か調べ物をしようとする時には検索エンジンを使う。キーワードを放り込みボタンを押すと検索結果がずらずらと返ってくる。キーワードに該当するページのアドレスと、要約文(のようなもの)がついてくるから、それをみて「をを。これが該当しそうだ」というところをクリックして開けてみる。当たればそれでよし。はずれればまた元の検索結果を表示したページに戻り同じ事を繰り返す。

全く何の疑問もいだかずこの操作を繰り返していたのだが、このソフトの作者は「もう少しまともな方法があるのではないか」と思ったのだろう。そのましな方法とは

「検索結果の題名だけをリストにしてずらずら表示し該当ページに簡単にアクセスできるようにする。なぜならどのページにほしい情報があるかは、所詮ページを見るまでわからないからだ」

とただそれだけである。それだけなのだが、その効果には驚かされた。ふと気がつけばブラウザを使う時間の半分くらいはこちらのList Browserを使うようになっている。このように「誰もが”当然だ”と思っている不都合を簡単かつ確実な方法で改善する」というのはなかなかできることではない。

という訳でList Browserの使用頻度が高くなったわけだが、そのうち細かいところが気になってくる。いや、細かいことは放っておけばいいのだが、より大きな問題が迫ってくる。つまり私が個人で使っているMac上ではこのプログラムは動かないのである。

まさかMac Versionなんてないよなあ、と探してみるがやっぱりない。誰か似たようなもの作ってないかなあと思ってもない。となると道は一つしかない。

それまでも何度か「Google APIを使って何かできぬものか」と思いちょこちょこ試験だけはしていた。検索要求を投げて結果を受け取ることができるとこまでは来たのだが想像力及ばずそこから先には進んでいなかった。いまこそあの経験を生かすときだ。

そう思うとしょこしょこ作り始める、、前に私はしばし考える。さて、これを新しいアプリケーションとしようかどうしようか。今まで作ってきたGMailがあるではないか。たとえばこれを改良し、特定のフォルダを選択しているときはWeb検索する、というのはどうだろう。ついでにFinderの機能も統合してしまうというのはどうだろう。(このとき私は「Finderをどうにかできぬものか」という強迫観念にもとりつかれていたのだ)メールもWebもハードディスク内の検索もこの一つでOKというのは結構いいかなあ、、

などと視線を宙にさまよわせていたのがどれくらいの期間だったのかは覚えていない。そのうち思い切る。今動いているGMailに何かくっつけようと思えばそれはきっととんでもなく面倒な事を引き起こすであろう。最終的にどうするかは知らないがとりあえず別物にしておこう、と。

そう考えるとしょこしょこ作り始める。GMailにくっつけようという考えはすてたが、その経験は生かしたい。後から「ああしておけばよかった」というところは最初からつけておく。そのうちクラス構成はだんだんGMailに似てくる。ついでにコードまでコピーする。いらないものをコピーしておかしなことになる。

あれこれしている間になんとなくプログラムは動き始めた。Give Me less Windowというポリシーを持つ私としては、ウィンドウは一つにしたい。となると選択されたWebページを表示するところをアプリケーションの中に持たねばならぬのだが、不幸にして今のMacOSではこれはなかなかうまくいかない。GMailでHTMLメールを表示したときと同じ手を使えば一応表示されるのだが、所詮間に合わせのようなもので、本物のWebブラウザには遠く及ばない。

WindowsではInternet Explorerのコンポーネントが利用できるようになっており、Explorerそのままの機能をもったアプリケーションが作成できる。ああ、うらやましいなあ。Apple 純正のWebブラウザSafariでもいつの日か同じようなことができるのだろうが、それはいつになるともしれない。現在でも根性でそれをやってしまっている人がおり、ソースを公開してくれているのだが、不幸にして私はそれを理解するだけの根性を持っていない。それでも動き始めたプログラムはそれなりに使える。となるとますますHTML表示の貧弱さが気になってくる。なんとかする方法はないものか。

などと悶々としているある日私はSafariをApplescriptから操作できると言うことを知る。その範囲は限定された物だが、それでも指定したURLを表示する(当たり前と思われるかもしれないが、人間ではなくプログラムからの制御でこれをしたいのだ)ことはできそうだ。ではCocoaのプログラムからApplescriptを呼ぶのってどうやるんだ。えーっとえーっとと調べる。そのうちサファリとの連携が動き出す。

となると現金なもので、前のHTML表示などすっかり忘れ、その部分のウィンドウもはずしてしまう。いつの日かSafariがプログラム内に取り込めるようになったときのために設定選択だけは残して置くけど、後はしらないもんね。などとご満悦になって使っていられた時期はそう長くなかった。このSafariとの連携はありとあらゆる問題をひきおこしてくれたのである。いきなりプログラムが終了する。あるいはSafariが異常終了するのだが、こちらが何もしていないのに何故か再度立ち上がろうとする。そんなことが頻発する。

さて、どうしたものだろうと考えているうちあることに気がついた。WWDC2003が迫っており、そこでSafari1.0が発表される、という噂が半ば確定したこととして語られ始めたのである。正式版が発表ということは、きっと開発用のソフトウェアも発表されるに違いない。となればここまで苦労して別アプリとしてのSafariに拘ることはないではないか。そうだそうだそうしよう。

そう決めると私はしばらくGLBrowserをほったらかしにする。やがてやってきたWWDC2003では数々の新製品にまじってSafariのリリースもアナウンスされた。開発用ソフトもダウンロード可能になる。ダウンロードするとサンプルプログラムを動かしてみる。ほんのわずかなコードなのだが、殆どSafariができあがったと喜ぶ(この殆どから、ちゃんとまでは例によって長い道のりだったのだが)

しかし予想したこととは言え、提供されるインタフェースは全てObjective-Cである。GMailでJavaとObjective-Cをつなぐことは何度もやってきたがまたやらねばならない。まあがんばってみるか、とまたGLBrowserをいじりだす。ついこないだ外したHTML表示エリアを復活させ、トラブルを引き起こしていたSafariとの連携機能はさっぱりと外してしまう。

さて、HTML表示の肝になるのは、WebViewという画面部品である。これはObjecitve-Cの中でしか定義されておらず、javaから直接操作することができない。今までObjective-CをJavaから呼ぶのはやったことがあるが、こういう部品を扱うのは初めてだ。あれこれ試行錯誤の結果、Objective-CでWebView周りの処理を行うクラスを作ることにする。そのうちこのクラスが予想よりも多くの処理をしなければならない、ということに気がつく。開発用ソフトのドキュメントは公開されているが、今ひとつ使い方がわからない。こうしたときに「はじめてのブラウザの作り方」というページが公開され、大変参考になる。

やがてList Browser のような機能が動き出す。急にご機嫌になり、日常結構使うようになる。するとあれやこれやの機能を付け加えたくなり出す。最初は

「検索結果がつらつら眺められればいいや」

と思っていたのだが、「ブックマークが使えたらなあ」と思い出す。かといって自分でブックマークの管理を全部やるのもいやだ。Safariのブックマークファイルを読むことにする。Cocoaで読み込み易いファイルにはなっているもののその読み方を示すドキュメントなどもちろんない。試行錯誤しながらあれこれやる。履歴も記録するようにする。私はこの履歴というのがどのように使えるのか今ひとつピンと来ていないのだがとにかく実装。使えなかったら外してしまえばいいし。

このころからだんだんリリースすることを意識してプログラムを作り出す。エラー処理を(抜け抜けでも)作り始めたり、あるいは画面部品の上にマウスをおいた時に説明がでるようにしたり。しかしこの後者の操作をやったときに妙な事が起こりだした。プログラムの起動時に妙なエラーがでていきなり終了する。あれ?と思いその直前に追加したコードを削除する。しかしまた同じことが起こる。一体これはなんだ?ええい、わからない機能はごっそり取り除いてしまえ、ということで今回リリースのGLBrowserには各部品の説明がついていない。

などとやっていたあたりでいきなり「そろそろ公開するべえか」という願望が高まる。ダウンロード用のページを作ったが、公開までにはもう1ステップ。ListBrowserの作者に一声かけておくのが礼儀というものであろう。あまりにも内容酷似、というかMac版List Browserだもんねえ。かくかくしかじか。ListBrowserのMac版とでもいうべきものを作ってみました。返事はすぐに返ってきて特に問題がない、という内容。さてこれで天下晴れて公開したのが7月26日。しかし例によって公開直後からあれこれのバグに悩まされることになったのであった。

前の章 | 次の章


注釈