マイキーボード計画、AppleScriptに挑戦した

メタキーを入れ替える

 Das Keyboardを買って、使い勝手は極めて上々なのでありますが、ただひとつ不満に思うことがありまして、それはなにかといいますと、メタキーの問題です。いや、でもこれはDas Keyboardの問題ではないですね。Macintosh用に作られていないキーボードすべての抱える問題です。つまり、Windows用にデザインされたキーボードをMacintoshにつなぐと、CommandとOptionの位置が逆になってしまうという、そういう話でした。

 で、CommandとOptionが逆になると極めて使いにくくなるのは当然のことで、こうした状況を解消するためにMac OS X 10.4ではメタキーを変更することができます。対象となるのは、Caps Lock、Control、OptionそしてCommandの四つです。これらをそれぞれ入れ替えてみたり、あるいは機能停止してみたり(ってそんな人いるの?)。こうした機能が付いたのは、正直Mac miniのおかげであると思います。ありがとう、Mac mini!

 変更は、システム環境設定キーボードとマウス内のキーボード修飾キー...でできまして、これでCommand、Optionを入れ替えれば、Das Keyboard、つまり104キーボードをMacintosh用キーボードのように使えるというわけです。こいつはいいや。けれどいいことばかりではなくて、Command、Optionを入れ替えているわけだからiBook標準のキーボードが極めて使いにくくなって、常にDas Keyboardが繋がっていたらよいのですが、私の環境においてはそういうわけでもないから、こいつは困ったなあ。毎回毎回、環境設定開いて、画面切り替えて、ボタン押して、ポップアップで選んで、なんてやってられるかい。

 だから、この面倒で、けれど頻繁におこなうだろう操作を自動化するべく、Apple Scriptを書いてみようかという話になっていたのでした。

挫折の連続

 私はこれまでAppleScriptをほとんどさわってはこなくって、それこそ漢字Talk 7の頃にちょっとさわったくらいで、その後はまったくでありました。けど、それほど難儀そうな言語じゃないし、Apple謹製のスクリプトでAppleのソフトウェアを動かすのだからきっと簡単に違いないと高をくくっていたのでした。

 そうしたら、もう大変です。エラーが出まくるのです。サンプルスクリプトを読んで、試して、インターネットでも調べて、けれど私の環境ではエラーが出ます。世の中とはうまくしたもので、PCキーボードをラップトップMacintoshで使う人のためにといって、まさに私の欲しているスクリプトを公開してくれている人も見つけたのですが、これもうまくいかない。とにかく、わからないことの連続で、駄目だ、このチャレンジは駄目だったと、一時は投げてしまいたくなるほどに駄目でした。

 発生していたエラーというのは、NSReceiverEvaluationScriptError: 4でして、これで調べると結構有用な情報も出るのですが、その情報に従って試してみても駄目。もしかしたらシステム環境設定の仕様が変わってしまってるのかもとまで思って、けれど私にはそれを調べる術がなくって、けれどもさ、AppleScriptを書いている人たちは、あのウィンドウに含まれるボタンをはじめとするアイテムの構造やら名前やら、いったいどうやって調べてるの? とずっと疑問でした。そしてその疑問は、AppleのGUI Scriptingに関するページを発見するまで続いたのです。

ブレイクスルー

 GUI Scriptingのページを読んで、私のふたつの疑問は一度に解消したのでした。まずひとつは、AppleScriptでUIを操作しようという場合には、ユニバーサルアクセスを開いて補助装置を使用可能にするにチェックを入れてやらないといけない。

システム環境設定:ユニバーサルアクセス
画面下部に補助装置を使用可能にするの項目が見える

 そして、もうひとつは、オブジェクトの階層を調べることのできるユーティリティUI Element Inspectorがあるということでした。

 実際、UI Element Inspectorを手にしたら問題は解決したようなもので、このページに行き当たるまでの四日間は、エラーに苦しみながらトライを繰り返して、そのおかげでだいたいAppleScriptの基本的な考え方が見えはじめていたから、もう本当にあっという間にプログラムは完成したのでした。一時間かからなかった。というか、十五分くらいで書けたんじゃないでしょうか。とにかく、今までの苦労はなんだったんだと思うくらいには簡単に片づいて驚いたのでした。

スクリプト

 私はできたら、キーボードが接続されているかどうかをプログラムが判定して、自動的にメタキーを設定してくれるようにしたいなと思っていました。でも、機器の接続状況をスクリプトで調べられるかどうかがわからなかったものですから、最悪は二種類のスクリプトを書いて、ドックにふたつ並べておこうと思ったんですが、ところがありがたいことに、なんとかなったのです。決め手は、キーボードを繋いだときにだけ出現するボタンでありました。

システム環境設定:キーボードとマウス
キーボードの種類を変更...が決め手だった

 外付けキーボードを繋いだときにだけ出現するボタンとは、キーボードとマウス内のキーボードの種類を変更...でした。このボタンを押すとキーボード設定アシスタントが起動して、キーボードの種類を判別してくれるのですが、とにかくこのボタンがあるかどうかをスクリプトでチェックして、ボタンがあればDas Keyboard接続時、なければ未接続と判定できる。それで、挙動を変えてやればいいと思い当たって、そうして完成したのが以下のスクリプトです。

setKeyboard

tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.keyboard"
end tell

tell application "System Events"
    get properties
    tell process "System Preferences"
        click radio button "キーボード" of tab group 1 of window "キーボードとマウス"
        if (exists button "キーボードの種類を変更..." of tab group 1 of window "キーボードとマウス") then
            click button "修飾キー..." of tab group 1 of window "キーボードとマウス"
            click pop up button 3 of sheet 1 of window "キーボードとマウス"
            click menu item 4 of menu 1 of pop up button 3 of sheet 1 of window "キーボードとマウス"
            delay 0.5
            click pop up button 4 of sheet 1 of window "キーボードとマウス"
            click menu item 3 of menu 1 of pop up button 4 of sheet 1 of window "キーボードとマウス"
            delay 0.5
            click button "OK" of sheet 1 of window "キーボードとマウス"
        else
            click button "修飾キー..." of tab group 1 of window "キーボードとマウス"
            click button "デフォルトに戻す" of sheet 1 of window "キーボードとマウス"
            delay 0.5
            click button "OK" of sheet 1 of window "キーボードとマウス"
        end if
    end tell
end tell

tell application "System Preferences"
    quit
end tell

 短いスクリプトですよね。そりゃ十五分で書けるわけです。これをスクリプトエディタでもってアプリケーションとして保存してやればいいわけです。私はこうしてできた修飾キー切り替えプログラムをドックに登録して、キーボードを付けたり外したりするたびにクリックして、そうしたら自動的にスクリプトが状況を判断して正しく設定してくれます。人間が状況を判断する必要がないから、非常に楽。設定も自動的だから、選択を誤るということもなくてすごく楽です。

 けど、AppleScriptというのは懐かしのHyperTalkに似て、特にif, then, else, end ifのくだりを書いているときには、ちょっと感傷的になりました。ああ、懐かしいですね。思い返せば、HyperCardが私の最初のプログラミング環境でありました。私にコンピューティングの基礎は、間違いなくHyperCardによってなったのだと思って、ああ、それだけでも今回のチャレンジには意味があったと思います。


わたしの愛した機械へ トップページに戻る

公開日:2006.04.14
最終更新日:2006.04.14
webmaster@kototone.jp
Creative Commons License
こととねは、クリエイティブ・コモンズ・ライセンス(表示 - 継承 2.1 日本)の下でライセンスされています。