題名:Java Diary-27章

五郎の入り口に戻る

日付:2001/12/19

目次に戻る


GFPut

この「大坪家の書庫」を毎日更新にしてから早一年と半年が経過している。そのために毎日FTPでページをアップロードするわけだ。そのたびにTransmitというプログラムを立ち上げるわけだが、近頃それが何かと面倒に思えてきた。

毎日更新するのは表紙とこの書庫日記。そのたびにファイルを表す名前をドラッグ&ドロップするとプログラムは律儀に

「上書きしてもいいですか」

と聞いてくる。それに対して私はいつもOkを押す。そしてディレクトリを上に上がったり下に下ったりする。かくのごとき操作が毎日繰り返される。

汎用のFTPソフトとしては確かにこういう機能がないと困るだろう。しかし日々の更新だけを考えたときにはもっと簡単な方法があってもいいのではないか?もっともこれは私のオリジナルではない。そもそもOS Xに移行しようと思ったときにあるFTPプログラムがあることを知ったのである。それは、今述べたような

「毎日の更新」

に機能をしぼったFTPプログラムで、設定をしたアイコンをいくつか登録しておき、そのうえに送りたいファイルをドラッグ&ドロップすると自動的に送ってくれるというものだ。これは便利かもしれない、と思って一度二度使おうとはしたのである。しかしそのうちどうにも面倒と思い出した。このプログラムでは送り先のディレクトリ一つごとに一つのファイルを作る必要がある。ファイルのもって行き先が複数あるのが面倒だ。

ファイルをドラッグ&ドロップする行き先は一つで、プログラムの方で自動的に送り先ディレクトリを設定することはできないか?いやできるはずだ。そう考えると頭の中にプログラムの構想がどーっと展開しはじめる。サーバー側と、ローカルのハードディスクはだいたい同じディレクトリ構造をしているわけだから、根本というか、基本となるアドレスだけ指定してやらば、そこからどのディレクトリをたどったどういう名前のファイルを書き換えればいいかはプログラムの側で分かるはず。

そんなことを考えるとプログラムに必要な機能がいくつか見えてくる。ドラッグ&ドロップされたファイルの認識。FTPの機能。後者の方はインターネットをあさると比較的簡単に見つかった。JavaでFTPをあれこれやるモジュールがフリーで発表されていたのである。ありがとうIT革命。これがなければコマンドライン上でftpコマンドを使おうかと思っていたが、それより簡単かつ確実にftpをコントロールできそうだ。しかし前者のドラッグ&ドロップの方はそれほど順調にはいかなかった。

いままで私はこの「ドラッグ&ドロップ」というのをさけて通ってきたのである。そういえば、どっかにJavaでの作り方があったような気がするなあと思いあれこれ探すが見つからない。しょうがない、と思いCocoaの勉強をしたサイトを観てみれば、でているではないか。Drag & Drop機能の作り方が。しめしめ、と思うのだがここから話は簡単に進まない。

Cocoaという枠組みではObjective-CとJavaが使えるということは前述した。そしてどちらかがMajorかといえば、本来サポートしていたObjective-Cなのである(すくなくとも今のところは)というわけでそのサンプルプログラムはObjective-Cでかかれている。あれこれ類推を働かせて解読しようとはするのだが、Drag & Dropはそうした類推だけでちゃちゃっっと作るにはあまりにも面倒である。

ううむ、どうしてくれよう、と思っていたら救いは意外なところから現れた。AppleのDeveloppers向けのサイトにきっちりとあったのである。JavaでかかれたDrag & Dropのサンプルプログラムが。ああ、やはり青い鳥はすぐ近くにいたのね。気づいてあげられなくてごめんなさい。などと妙なことを考えながらダウンロードしてみると見事に動く。中をみて適当にああ、これがいるんだろう。これはなくても動くだろう、などと考えること数時間Drag & Dropはこれでできあがり、といえる状態になった。

さてこれで部品というか難しそうなところはできたので、いよいよ画面を作ったりつなげたり、という作業になる。理論的には画面の作り方は懇切丁寧に(しかもJavaで)サイトに説明されているから問題はないはずだ。しかし今度は内なる敵に立ち向かわなければならないのである。すなわち「仕様の発散」という奴だ。

自分であれこれ作っていく。するとふと「作る側」から「使う側」に意識が飛んでいく。すると「ここはもっとこうした方がいいのではないか」とか「これでは使用者が誤操作しやすい」とか考え出す。するとやることはごそっと増える。そのうちCocoaにはDrawer-引き出しという部品が使えることを知った。私は一目でこれが気に入った。いるときだけ引き出しがすっと開く。いらなければ消える。ぽこんとでてくるダイアログというのが何となく気に入らなくなってきている昨今、これはまさに救世主ではないか。しかしこれもいつものことなのだが、使い始めてしばらくは張り切りすぎて「それにふさわしくない使い方」ばかりをやらかすのである。

このDrawerに何を配置するかは、3度ほど変わった。最終的には転送モードとか、ファイルの転送を自動で行うか、ボタン操作で行うかの選択スイッチをつけることにしたのだが、そうなると他の設定はまた別の画面を考えなければならなくなる。あれこれ頭をひねったが思いつかない。しょうがないから別ウィンドウを出すことにした。

しかしこれが例によって一筋なわではいかない。いわゆるダイアログという奴なのだが、新しい環境でこうしたものを表示するときにはいつでも一苦労だ。今まで参考にしてきたサイトに

「ダイアログの表示の仕方」

という章があるから、喜んで書いてある通りにプログラムを打ち込んでみる。コンパイルすると見事に表示だ。わーいわーいと思って観るが、そのすぐ後を読むと

「後でこの方法は安全でないということがわかった」

と書いてあり、別の方法が記述されている。コンパイルするときにあれこれ警告がでるから変だなあとは思ったのだが、やはりこういう落ちであったか。とはいってもそのサイトに情報を載せてくれた人に文句を言うのは筋違い。相手の言うことをちゃんと最後まで聞かないでやってみて何かトラブルが起こるとは、安っぽいギャグの定番ではないか。自分の愚かさを呪いつつ私はプログラムを書き直す。あれこれ試行錯誤すること数刻。ようやくダイアログが表示されるようになった。

わーいわーいと思うがここからがまた一苦労である。このダイアログではユーザーの入力を受け取ることになっている。そしてユーザーが好き勝手に打つ込むキーをなんとか読みとる、というのはいつも大変面倒な作業だ。ユーザーはすべての情報を入力する前に気が変わって他のことを始めるかもしれない。その時書きかけの情報はどうしよう。しょうがない。記録しておいてやれ、と思うと親愛なるプログラムは

「値がありまっせーん」

とかメッセージを表示してお亡くなりになってくれる。ええい、それぐらいなんとかしろ、と言ったところで相手は黙っている。

一歩進むと3箇所くらいに越えなければならない障害があることがわかる。しまいには

「このプログラムを世間様に発表しようなどという野望はすてよう。自分専用と思えばこれでいいではないか」

とも思うのだが、なぜかあきらめが悪くなっている私はさらに前に進もうとする。しかし何事にも終わりはくるもので(もちろんその「終わり」は私のやる気の消失かもしれないのだが)ようやく機能についてもめどが立った。そして全体のプログラムが結合できる状態になったのである。

というわけでさっそく試験だ。一番気にしていたFTPの部分は結構直感的にご機嫌に動作してくれることが解っていた。であるからして各部でだいたいめどが立てば全体はそこそこ動くはずだ。もっともこの「はず」というのは裏切られるのがこの世の常なのだが、それは今回も同様。あれこれ試験をしている間に何度妙なファイルをアップロードしてしまったことだろう。しかしいつしかそれも収束し、プログラムはそこそこ動作し始めた。

こんなことをしていたら、11月の23日から始まる3連休はあらかた終わってしまった。ううむ。もともとこの3連休はどこかに放浪の旅に行く予定だったのだ。そして一応静岡まで行って一泊したのだが、そこで気力がつきて帰ってきてしまった。放浪の旅というのは何度か取りするのだが、確固たる計画がないだけに気分がのっていて、かつおもしろい何かに出会うということがないとどうにも前に進めない。しかしそれは理由の半分で、このプログラム作成にとりつかれてしまった、というのが理由の残り半分かもしれない。

とにかくプログラムはそこそこ動くようになり、11月27日の更新からは、今まで使っていたTransmitではなく、今やGFPutと名付けた(なんといういい加減な名前だ)プログラムでサイトを更新するようにした。今や私が思い描いた

「毎日の更新も楽々」

という環境が手に入ったのだ。

 

こうやってスクリーンショットなど撮ってみるとなかなかかっこいいがとにかくこの環境で作成する最初のプログラムだから細かいところで何度も躓く。基本的な使い方は実に簡単で、上の図の手前にあるウィンドウにファイルをドラッグ&ドロップすると設定されたサーバーに送信される、それだけである。手前のウィンドウの下にでろんとでているのが今回新しく使ったDrawer、後ろのウィンドウはこれまたさんざん苦労した設定用のWindowだ。本当はMac OS Xらしくかっこよく手前のウィンドウのメニューバーからでろっとでるはずなのだが、なぜかうまく動かず別ウィンドウになってしまう。あれこれやったがあきらめて放っておくことにした。

図の中で1,2とあるのが特に(つまらないことで)苦労した点である。まず1番であるが、Cocoaの中にはNSFormという部品がある。これはテキスト入力フィールドとその題名を一対にして扱える大変便利な部品だ。最初私は感動した。これさえあれば、あの面倒な画面作成がずいぶん楽になるではないか。

しかし(例によって)話はそう簡単にはすすまない。問題はパスワードである。秘密にしておくべきパスワードが画面上に堂々と表示されるというのはいかにも間抜けだ。しかしあるべき●●●といった表示はどうやったらできるのか。あれこれ探し回ったあげくNSSecureTextFieldという部品があることを知った。ををこれで問題解決か。

しかしNSFormの中の一つだけをNSSecureTextFieldに変更するのはどうやればいのだろう。あれこれ探したが結局答えが見つからない。Formの一つだけに、NSSecureTextFieldを重ねて書いてやろうとも思ったが、最終的には入力するフィールドとそのタイトルを別々に作って並べることにした。これではせっかくのNSFormも宝の持ち腐れである。しかし解決策が見つからないからしょうがない。

次には2番目の苦労点である。なんだ、よくあるラジオボタンが並んでいるだけではないか、と私も他人ごとならば思うだろう。この部品はちゃんと準備されていてドラッグ&ドロップだけで好きなところに貼り付けることができる。その簡単さに感動したのもつかの間私は簡単に壁にぶつかった。用意されているのは二つラジオボタンの部品。これを3っつにするにはどうすればいいのだろう。

きっと知っていれば簡単にできるはずだ、と思いながらもなんともならない。さっきのNSFormのように二つ並べてみようかとも思ったがそれではあまりにも間抜けだし一つ余分になってしまう。常時接続になったのをいいことにインターネットを検索すること数刻。結局解決策はもっと近くにいた。疲れ果てた私はInterface Builderのヘルプメニューから参照できるFAQを観たのである。

私は確たる理由なく、このFAQというものを当てにしていなかった。きっとどうでもいいような初歩的な問題に対する答えだけが記されているに違いない。この予想が正しいかどうかは別として私が忘れていたのは自分がぶつかっていたのはまさしくその「初歩的な問題」だったという事実である。

その答えはあっさり書いてあった。「option keyをおしながら枠を大きくするようにドラッグすると数が増えるよん」

やってみると簡単にボタンの数が増える。ああ、やはり青い鳥はこんな近くにいたのね。それに気がつかないなんて私ってなんてお馬鹿さん。ぽかぽかぽか、と自分の頭など殴ってみても何事も改善されるわけではないのだが。

さて、かくして私は自己満足の固まりとなり、さっそくこのGFPutを使いサイトの更新をしてみる。ほーら、こうやって自分が更新したいファイルだけをもってきてここに乗せれば、一発更新さー。

正直に書けば、このプロセスは私が思い描いた通りかなりうまくうごいたのである。しかし使えば使うほど私の頭の中にある疑問がわき上がってきたのも事実である。

「本当にこれは使いやすいのか」

ファインダーの上で一生懸命ファイルを探す。マウスをずりずりと動かしてGFPutのウィンドウまで持ってくる。しかし場合によってはそれは隠れているかもしれない。となると最初に位置を慎重に設定しておく必要がある。そしてファイルのドラッグとはやっぱり簡単ではない。なんということだ。これだけ苦労したのに結局使いやすくないではないか。

しかし今や私は

「楽して楽な生活」

道を羅刹となって邁進している状態である。(羅刹ってなんだろう)しばし頭をひねった後、別の構想が頭に浮かび始めた。

 

前の章 | 次の章


注釈