ここ数日、国内向けにはほとんどメールを書いた覚えはないが、海外とメールのやりとりを激しく行っていた。
1にも2にも、Xcode 3.1GMのバグがひどかったからだ。
「ひどい」の定義にもいろいろある。たとえば……再現するのが難しく、さまざまな複合要因によって生じるバグというのは、まー「ひどい」というよりは「大変な」という表現が似合うバグだろう。そんな内容であれば、同情したくなるぐらいだ。
ここで言う「ひどい」とは……誰もが行うような操作内容で、だいたい誰でも遭遇するようなもので、かつ発生状況を目で見てあきらかに分るものという「お粗末な」バグのことを指している。本でいうなら、背表紙に誤植があるようなものである(月刊誌で1回やってしまったことがある。あれは悔やまれた)。
Xcode 3.1上でAppleScript Studioのプロジェクトを作成して、たった1行、
display dialog “こんにちは”
と書いてコンパイル(構文確認)を行うだけでいい。Xcode 3.1上の表示がめちゃくちゃになり、なんの言語だか分らない表示になる。「文字化け」のひどいやつ、という感じだろうか。日本語が分らないUS Appleのテスターでも、一目で見て分ろうというものだ。
■Chris Espinosaとの因縁
実は、このバグについては……日本国内の一部スクリプターの間では「了解事項」だった。とりあえずの対処方法まで分っていたのだが、まさか正式版でそれはありえないだろう、といった空気がないこともなかったのだ。
なんで公にその激しいバグの所在を公表できなかったかといえば、Xcode 3.1自体がまだBetaの段階であり、かつ……iPhone SDKの一部として配布されていたために、バグだろうがなんだろうが、iPhone SDKに関する話は御法度という状況だった。
そして、XcodeのGM版が登場。満を持して登場した「Golden Master」版である。順当にバグが出て、事前に分かっていた方法でさっくり対応。なんとかまあだましだましAppleScript Studioの開発に使えるよねという状態にはなった。
そんな状況で、Xcode MLにAppleの開発ツール担当……つまり責任者のChris EspinosaがXcode 3.1 GM版の紹介とNDAの解除を宣言した。Espinosaは、オリジナルのMacの開発チームにいたほどの古株社員で、開発畑一本で25年ほどAppleに在籍している。Macの開発メンバーといえば、アンディ・ハーツフェルドなどが有名だが、Espinosaもその1人だ。
Espinosaとは少々因縁がある。AppleScript Studio MLで、Objective-CとAppleScriptの動作速度比較を行っていて、「ほら、Objective-Cの方が速いでしょ」という、おとなげないんだかなんだかよく分らない話を投稿していた。Xcodeやらの開発ツールを使い慣れたAppleScript Studioベースの開発者をObjective-Cの開発ベースに移行させたいという腹があったのかもしれない。しかし、速度比較などといいつつ大変にお粗末な(わざと遅くなるような)コードを出していたので、さっくりAppleScriptを書き換えてEspinosaのコードの数倍の速度に高速化して再比較。あまりObjective-Cと有為な速度差がないところまで最適化できた。
「ああ、Objective-Cって速いね〜。AppleScriptより0.01秒も速いや〜。で、おっさん、あんた初心者?」
……以来、彼はプライドをいたく傷つけられたのか、AppleScript Studio MLに一度も顔を出さなくなった。
そんなやりとりを思い出しつつも、正式ルートできちんとバグレポートを書こうが、初台に行って窮状を訴えようが(これは、LeopardになってAppleScriptの文字列の扱いが壊滅的だ、という話)、効果がなかったので万策尽きていたのだ。
■Xcode Users MLへの攻撃とその反響
で、そんな時にやってきたEspinosaによるXcode 3.1のリリース宣言。
待っていましたよ、この瞬間を……このEspinosaの投稿の次にバグを糾弾するメールを投げれば、インパクトでかいだろうな〜と。だいたい、開発ツールのバグについてはEspinosaに責任があるわけで、(バグてんこもりでリリースするという)悪しき流れを変えるためには、Espinosaに直接喧嘩を売るしかないだろう。ケンカは大物に売るから意味があるのであって、そんじょそこいらの小物を相手にしていても仕方がない。
……で、ケンカ売ってみた。日本語で書くのとおなじように挑発してみた。オラオラ、GMって何の略だ? おめえらの辞書に載っているGMの定義を書いてみやがれ、この社員番号8番!!!
いや〜、英文でケンカ売るなんて慣れてないもんだから「これで乗ってこなかったらどうしよう?」と心配したものだが……
…………反響でかすぎて面食らいました(汗)。まあ非難ごうごうなわけで(大汗) 多分、Xcode Users MLに参加している日本人の開発者も引いてたんじゃないかと。
そして直接飛んで来るカミソリメールの数々! 「一時的にメールアカウントを取得して、返信が来る前にアカウントを消す」という念の入ったカミソリメールの投げ方も見せていただいた。うーーん、度胸がないんだか卑怯なだけなんだかよく分らないぞ。
もう、Mail.appのウィンドウの向こうから、怨念みたいなものを感じるわけですよ。この、バカ! 他人の家に土足で上がり込んでくる失礼なイエローモンキーが! みたいな。しかも、ロジックとか一切なし。知性のカケラもないようなメールが飛んでくるわけで……。
ML上で、そんなに騒動を広げるつもりはなかった。ケンカというのは、どうやって収めるかというのが重要であって、だいたい3日以内に収めるとか、このあたりの戦略目標を落としたらやめようとか、そういう「見通し」があるのがいいケンカである。しかも、こちらに非があるわけでもない。一応、プライドを踏みにじられたEspinosaがGMの定義についてとおり一遍の解説を行ったら「潮時」と考えていた。
で、しつこくカミソリメールを投げてくる人間に対しては、優しくあやすように主旨を説明してあげて、ああ、怖がらせちゃったんだね、ごめんね……でも、「Go Away!」って言われても数年前からずっとメンバーになってるし、物理的に遠くにいるはずなので遠くに行くって言っても無理なんだよ、とか(汗)
ただ、数日間サンドバック状態だったので、英文メールが来ると「またカミソリメールなんじゃないか?」といや〜な気分になったりしたものだ。まあ、実際のところはほとんどがスパムだったのだが。
Espinosaが屈辱にぷるぷる震えながら(このへん想像)、GMの定義について当たり前の話を投稿したので、ここは引くことにした。それ以上何かやったら、良識派から(さらなる)袋だたきにあいそうな気配も漂っていたためだ。その後のXcode Users MLでは穏健派によるXcode 3.1のバグ報告祭の様相を呈しており、「文句っていうのはこうつけるんだよ」みたいな、「大人な対応」の見本市会場になっていた。
だが、動かないものを動かすためには、このぐらいの荒療治が必要だと考えていたのだ。
■ホームグラウンドのAppleScript Studio MLへの帰還
いや〜な英文のオンパレードだったので、少しは心をきれいにしようと思い、ホームグラウンドのAppleScript Studio MLに投稿してみた。同様にXcode 3.1のバグについての話題が出ていたので、そちらの話でしばし盛り上がる。
そこに、AppleScriptエンジニアリング担当のChris Nebelが(珍しく)出てきた。Espinosaを引きずり出すための仮想敵としてかつて糾弾していたエンジニアだ。本来はEspinosaをひきずり出して糾弾するのがよいのだが、そこにプレッシャーをかけるために、下っ端担当者を糾弾するという戦術に出ていたのだ。
ただ、やっぱりコンニャク問答というか……つかみどころのないヘラヘラした受け答えばかりなので、あまり攻撃しても効果がないと思っていたところだ。つまらないので飽きていたし。
Xcode 3.1のバグについてはBug Reportを書けという通り一遍の話をしやがるので、
「なんだお前ら、バグレポート見ても直しもしないくせに!!!!」
と、ブチ切れ…………Keynoteでバカ丁寧なバグレポートを作成した。
US Appleへの不信感は日に日に増していくばかりで、最近は「Appleのエンジニアは文字が読めない」「Appleのエンジニアは義務教育を卒業していない」「Appleのエンジニアには思考力がない」と思えるほどの有様である。きっと夜中に小人が出てきて、かわりに開発をやっているに違いない。
Appleのスタッフにありがちなのだが、連中は「PowerPoint脳」ならぬ「Keynote脳」になっていやしまいか? 文章で説明しても理解しないのだが、Keynoteで説明するとよく分るらしい(汗)
かような理由によって、Keynoteでバカていねいなレポートを作成してNebelとEspinosaに直接送りつけた。Espinosaから返信が来るなどとは思ってもいなかったが、Nebelからはすぐさま返信が来た。
「通常はこのような形式でのレポートは受け付けていないのだが、残念なことにもらったバグレポートは完璧だった。バグの発生箇所や発生原因まですべて理解できた」とのこと。ASチームに非がなく、Xcodeチームのせいだということが分って安心したらしい。
ほかにも、「われわれ日本人は怒っているんだぞ」ということを表現するために、バグレポートの表紙に思いっきり怖い顔をした写真を貼り付けて送りつけた。Nebelの普段の高慢ちきなメール内容とはうって変わって「お怒りは十分に理解している」などといった丁寧な文面が見られた。普段なら、「すみません」の「す」の字も書いてこないような相手であることを考えれば、最大限の譲歩といえるだろう。
■嫌いでも、情報のやりとりを行わなければならない?
あまりフレンドリーな間柄ではないNebelとではあるが、仕方なくメールのやりとりをした。その中で判明したことがいくつかある。
・これは明らかにXcode 3.1側のバグ。AppleScript処理系に由来するものではない
・日本のScripterの多くが、AppleScript書式で記号などを日本語以外のフォントに指定しており(昔は記号用フォントにOsakaを指定すると文字化けしたことへの対策の名残り)、これをUS AppleのXcodeチームのエンジニアが考慮していなかった
・Script EditorのAppleScript書式で、日本語以外のフォント(Courierとか)を指定しているところを日本語のフォント(Osakaとか)に変更すると、AppleScript Studioのプログラムリストが構文確認後に文字化けすることはない。ただし、文字のスペーシングなどは滅茶苦茶であり、修正の必要がある
バグレポートを書いても一向に直らない「ひらがなとカタカナを判別できない」件についてはどうなのか? バグレポートを書いてもさっぱり対応されていないぞ、と聞いてみたところ……
「この件は、厳密にいえば『バグ』ではない。AppleScriptも(Mac OS X 10.5でUnicodeネイティブになったことによって)Unicodeの文字列照合アルゴリズムに則っている。ひらがなとカタカナはLevel 4で処理されており、英語がLevel 3で処理されていることを考えると、より重要度が低い(less significant)ものとして扱われている。言い換えると、ひらがなの「あ」とカタカナの「ア」は、同じベースキャラクターの(些細な)バリエーションとして扱われている。これには私自身驚いたが、私自身は日本語のネイティブスピーカーではない。あなた方はネイティブスピーカーであり、この事実はさぞあなた方を驚かせたことだろう。ただ、この事実がどのような現象を起こすかについては私も明確に認識していたわけではなかった。
この新たにMac OS X 10.5で発生した(ひらがなとカタカナを同一視する)振る舞いについては、私自身問題だと思っているが、一方でUnicodeの文字列照合アルゴリズムに手を加えることを望んでいるものでもない。日本のAppleのスタッフに、私に直接コンタクトするよう依頼してほしい。この件について、より好ましい展望やアイデアを日本人スタッフから聞きたい。」
ということのようだ(意訳のため、一部ストレートに内容を反映していない可能性がある点を付記しておく)。
この話は、率直な話であろうことは一応理解しつつも、納得できる話ではなかった。裏をとれていないし、単なる「時間稼ぎ」と受け止められる理由もあったからだ。
なぜなら、Mac OS X 10.5上のAppleScriptの「offset of」節においては、ひらがなとカタカナが区別して処理されているからである。そのことをすぐさま指摘したが、それに対する返答は得られていない。なぜ、「offset of」においては区別して処理されているのか? そこだけ特殊な処理が行われているのか?
US Appleとの戦いは、まだまだ続くのであった。