えせNewton(正式名称RX-78……ではなく「Newt On」)は、極秘裏に東京・中野にある秘密工場(どこが秘密じゃ!)で組み立て作業が進められていた。
「Macらしさ」と「UNIXのパワー」で適当に味付けしつつ、なんとなくそれっぽいインテリジェントな処理が行えることを目指す「えせNewton」は、「MacOS Xらしさ」の新たな定義をねらったプロジェクト。しかし、その途上には幾多の困難が待ち受けていた。
……時代の申し子か、悪魔の落とし子か、えせNewtonがついに記念すべき初起動を行う!!
勝手に漢字入力を確定しないで(T_T)
わけの分からない書き出しですが、とにかく「えせNewton」のプロトタイプ・コマンドシェルを作ってみました。
予告どおりMicrosoft Wordをシェルに、特定のコマンドのみ受け付ける機構を実装して、世間の反響をうかがいつつ 機能アップを図っていこうという考えです。
Wordのドキュメントに対して定期的に問い合わせを行い、文章の行が増えたら新規コマンドが追加されたと認識して、新規行のコマンド用キーワード(ミーティング、メールなど)を走査し、見つかったらさらに目的語などの緻密な走査を行うというものです。
最初のバージョンなので、まずは1秒間隔でWordのドキュメントに対して行数などを問い合わせてみました。ここで、予期せぬ事態が発生。問い合わせを行った瞬間に……なんと漢字変換中の文字列が確定されてしまう(ひらがな状態)ではありませんか。
アプリケーションの動作中に並行してアプリの状態を見るようなスクリプトを書いたのは(Finder以外では)初めてだったので、予想だにしなかった事態です。
日本語入力している最中に確定されてはたまらないので、なんとなくキリのいいところで5秒間隔でWordに問い合わせを行うことにしました。もしも、VB ScriptなどでWordの動きを拡張して、リターンをカラ打ちするとスクリプトを起動するとか、特定のコマンド(Command+何かのキー)の入力でスクリプトを起動するように、仕様を考えなくてはなりません。
それでも、5秒や10秒であれば、高速タイピング技による気合いと体力で乗り切れるに相違ありません。
テキストの照合に悩む(-ー;
Word文章のオブジェクト構造は割と簡単(標準的)で、大きなくくりの順番に、
document (文章全体)
paragraph(章)
sentence(文)……だったか(^-^;;
line(行)
word(単語)
character(文字)
となっています。ここでは、sentenceに注目し、この値が増えたら最新のsentenceを取得し、構成要素であるword(単語)を取り出してみることにします。
勢いで30行ほどのスクリプトを作ってしまいました。このプロトタイプでは、新規sentenceの最後のwordが「。」であれば新規コマンド入力として認識。さらに、該当するsentenceの中に「ミーティング」というwordが入っていれば、それを検出した旨アラート表示するようにします。
イベントを表示させながら動かしてみて……おかしいです。ログには新規Sentenceの検出とword切り分けが記録されているものの、それ以上先に処理が進みません。
内容的には、ぜんぜん凝ったことを書いてなかったので、こんなシンプルな状態でつまづくとさっぱり分かりません。文字列同士の比較演算ごときでつまづかれた日には、何も書けたものではありません。
MacOS X上のAppleScriptのバグでないかと疑い、簡単な文字列比較のスクリプトを書いて試し……おお、大丈夫のようです。問題に行き当たったら一番基礎レベルまで戻って検証を行う。一見遠回りに見えつつも、デバッグではこの手法が一番効果的です。
普通に文字列の比較を行って大丈夫なのに、sentenceから切り出したwordで比較を行うと、見た目はまったく同じなのに比較演算で同じであることを実証できない……。
「まさか、スタイル付きのテキストでwordが取得されているのでは?」
Microsoft Wordで基礎実験を行っていたときに、書式つきの文字列がイベントログに流れて驚いた記憶が脳裏をよぎりました。確かめてみるだけの価値はありそうです。
いつもの通り、デバッグ用サンプルコマンド文字列を入力。
「河原さんとミーティング。」
処理の随所に音声で処理状況をレポートするよう、デバッグ用の追加コードを書き、処理の流れを追ってみました。
“counted”……word数のカウントを行って……
“detected period”……sentence末端に句読点を認識したようです
“word 1″,”word 2”,”word 3″……sentence内のwordに対して、コマンド文字列の走査を行っています
“word 4″……お、「ミーティング」まで走査しました
“You got it!”……成功を告げるメッセージが流れました。OKです
ついで、「ミーティングの件です」とダイアログが表示され、「えせNewton バージョン0.01」がここに完成したのでした。
AppleScriptとしては、数十行のちっぽけなものですが、ワープロ上に打ち込んだ日本語の文章を認識し、文書内のコマンドをピックアップすることに成功したのです。
「えせNewton、大地に立つ!」
私の脳裏には、起動音を響かせながら排気ダクトから排気しつつ立ち上がるえせNewtonの雄志が焼き付いていたのでした(BGM:燃え上がれ○ンダム)。
Newt On Ver.0.2に向けて
超簡単なデモが行えて、かしこい方々には十分に衝撃を与えられる内容になってきました。
しかし、これでは内容が高尚すぎて一般の方々に理解してもらえません(^-^;。
そこで実際にスケジュールの登録を行うよう、Entourageの用語辞書を見てみたところ……彼の辞書に「スケジュール登録」の文字はなかったのでした。なんてこったい。
Entourageでは、メール経由でスケジュールの登録を受け付けるようになっており、その文字列をAppleScript側で組み立てれば、メール経由でスケジュール登録を行うことは可能です。
しかし、たかがスケジュール登録ごときでメール送信を行うのも、おおげさな気がします。そこで、Entourage以外のMacOS X用スケジューラーを探したところ……まだβ版状態のPalm Desktopに白羽の矢が立ちました。というよりも、他にMacOS X用のスケジューラでスクリプタブルなものを知りません。
用語辞書の内容を見てみると、Entourageよりはるかにスケジュール関係の用語がそろっているようです。ただ、その一方で、
「この用語辞書はClaris Organizerから引き継いだものなので、ありのままの状態で提供しているものであってPalmはサポートしません。もし何か興味深い提案があれば、devsupp@palm.comまでメールにてお知らせください」
という一文も書かれておりました。 なんとなく不安を覚えつつも、次に超えるべきハードル「スケジュール登録」の山が見えてきたところでしょうか。