「UNIXコマンドを使おう!」
さて、普通ならばこのへんでCocoaのコントロールの使い方をずらずらと説明していくのでしょうが、正直いってめんどくさいです(笑)。それに、意味もなく部品の使い方ばかり説明されてもつまらないでしょう? ——たぶん、AppleScriptを勉強してみようと思う人の最大の不安要因は「実用になるものが作れるのか?」ということでしょう。そこで、簡単なアプリを作りながら、必要な部品はその都度説明していくことにします。
AppleScript Studioで作れる、もっとも簡単で実用的なアプリ、それは「UNIXコマンドを利用したもの」でしょう。Mac OS
Xは、ご存じのようにUNIXをベースに構築されています。そのため、さまざまなUNIXコマンドを内部に持っているのです。中にはターミナルを使ってコマンドを利用してみた人もいることでしょう。
多くのMac OS Xユーザーは、いくら「用意してある」からといってUNIXコマンドなんて使いません。だって、せっかくMacを買ったのに、何が悲しゅうてコマンド入力なんてせにゃならんのです? ——そこに、AppleScriptの介入する余地があります。AppleScriptには、UNIXコマンドを実行するための命令が用意されているんです。そして、AppleScript
Studioを使えばボタンやテキストフィールドも自由に使える。ということは? 「肝心の機能はUNIXコマンドにやってもらって、そのインターフェイスを用意する」だけで、ちょっとした実用アプリが作れてしまう、ということになります。
AppleScriptからUNIXコマンドを実行する命令は、以下のようなものです。
do shell script 《実行するコマンドのテキスト》
ここで《》部分に実行するコマンドの文を指定すれば、それが実行されます。また、コマンドの中には様々な値を返すものもありますが、そうしたものはこの命令実行直後にresultを使って得ることができます。
では簡単な例として、「超簡単電卓」を作ってみましょう。——では、AppleScript Studioのアプリケーションプロジェクトを新しく作成して下さい。そして、デザインウィンドウに以下のように3つの部品を作製します。
・NSTextFieldを2つ
これは、既に使ったことのある部品ですからわかりますね。テキストの編集可能なNSTextFieldを2つ配置します。これは、計算する式を入力するためのものと、結果を書き出すために使うものです。式の方は少し大きめにしておきましょう。
そしてAppleScriptの名前を、式用を「f_field」、答え用を「q_field」と設定しておきます。
・NSButtonを1つ
計算を実行するためのボタンです。プッシュボタンタイプのものを1つ作成し、Titleを「計算」とでもしておきましょう。そしてAppleScriptの名前を「calcbtn」とし、clickedイベントと使用するスクリプトファイルのチェックをONにしておきます。
そして、配置しているウィンドウのAppleScriptの名前を「win1」と設定し、部品類は出来上がりです。後はProject Builderに戻り、NSButtonのclickedイベントハンドラを記述するだけです。これは以下のようになります。
on clicked theObject |
たったこれだけです。できたらプロジェクトをビルド&実行してみましょう。そして式のテキストフィールドに計算する式(+−*/()^といった演算記号が使えます)を入力し、ボタンを押すと、計算結果が答えのテキストフィールドに書き出されます。いわゆる電卓と違い、式を直接テキストで書き込めるので、けっこう便利でしょ?
これは、「bc」という式のテキストを計算するコマンドを使ったものです。まずtext field "f_field"からstring valueを取りだし、それを元に以下のようにしてコマンドを実行しています。
do shell script "echo" & space & "'" & str1 & "' |bc"
このコマンドは、「echo 《式のテキスト》 | bc」と実行することで、式のテキストを計算した結果を出力します。それをresultから変数に取り出し、contents
of text field "q_field"に設定しているだけです。実に簡単ですね? なお、途中にあるspaceというのは、半角スペースを示す定数です。別に
" " と半角スペースのテキストをそのまま書いてもかまいません。好みで使って下さい。
UNIXコマンドは、実にたくさんのものが標準で組み込まれています。それを、たった1行のdo shell script文だけで、こんなに簡単に利用できてしまうのです。なんだか、誰にでも実用アプリが作れそうな気がしてきたでしょう?
基本がわかったら、もうちょっと実用的なものを作ってみましょう。例えば、「超簡易カレンダー」なんてどうでしょう?——まず、AppleScript
Studioのアプリケーションプロジェクトを新規に用意して下さい。そしてデザインウィンドウに、以下の4つの部品を配置します。
・NSText Fieldを2つ
テキスト編集の可能なNSTextFieldを2つ配置して下さい。これは、年と月の数字を入力するためのものです。それぞれ、AppleScriptの名前を「yfield」「mfield」としておきましょう。
また、わかりやすくするために、更にテキスト編集のできないNSTextField(System Font Textと表示されたもの)を使って「年」「月」というテキスト表示を作り、yfieldとmfieldの横に配置しておくとよいでしょう。
・NSButtonを1つ
カレンダーを表示するためのボタンです。通常のプッシュボタンのTypeのものを1つ配置し、Titleに「表示」とでも設定しておきましょう。そしてInfoウィンドウの「AppleScript」を表示し、名前を「calbtn」に、clickedイベントとスクリプトファイルのチェックをONにしておきます。
・NSTextViewを1つ
これは初めて登場する部品です。ツールパレットの左から5番目のアイコンの中にあります。右上のテキストがいろいろ書き込まれた部品が、NSTextViewです。
この部品には、いろいろなオプションが用意されています。詳細は後で説明するので、とりあえずNSTextViewを配置して適当な大きさに調整し、Infoウィンドウで以下のアトリビュート(とAppleScript設定)を変更して下さい。
- Multiple Fonts Allowed——OFFにする
- Show ScrollBar——OFFにする
- フォント——NSTextViewを選択し、「Format」メニューの「Font」で設定する。フォント/サイズは適当でいいが、必ず等幅フォントにしておくこと。
- AppleScript名——Infoウィンドウの「AppleScript」に切り替え、普通にNSTextViewを選択すると、なぜかInfoウィンドウのタイトルに「NSScrollView Info」と表示される。ここで名前を「calscroll」と入力する。更にNSTextViewをダブルクリックすると、Infoウィンドウのタイトルは「NSTextView Info」と変わる。ここで名前を「caltext」と入力する。
以上、部品の設定が一通りできたら、例によってウィンドウのAppleScriptの名前を「win1」として作業終了です。後は、Project
Builderに戻って、clickedハンドラに以下のスクリプトを記述すれば完成です。
on clicked theObject |
これで、プロジェクトをビルド&実行してみて下さい。そして現れたウィンドウで年と月を入力し、ボタンをクリックして下さい。その年月のカレンダーが表示されますよ。たったこれだけのスクリプトで、割とまともなカレンダーソフトが作れてしまうなんて、すごいじゃないですか!
さて、ここではまず「NSTextView」というものが登場しました。これについてから説明してましょう。——これは、長いテキストを扱うための専用部品です。テキスト関係としては「NSTextField」というのが既に登場しましたが、これは1行のテキストを入力するためのものでした。何行にも渡るような長いテキストや、リッチテキストなどを扱う場合には、このNSTextViewが用いられるのです。
このNSTextViewは、長い文を扱えるようにするため、ちょっと面白い構造になっています。まず「NSScrollView」というスクロールバーを持った部品があり、その中にNSTextViewというテキストを扱う部品が組み込まれた形になっているのです。こうすることで、長い文章の場合には自動的にスクロールバーが表示されスクロールしながらテキスト編集ができるようになっているのですね。
このスクロール用の部品NSScrollViewの中にNSTextViewが組み込まれているという構造を、よく頭に入れておいてください。でなければ、NSScrollViewが選択されているのに勘違いして「NSTextViewを設定しているのだ」と思ってしまったりするかも知れません。
マトリックスのところで「内部に組み込まれている部品を選択するには、部品を選択してから更にダブルクリックする」といいました。このことは、他の部品でも共通しています。ある部品の中に更に部品が組み込まれているときは、ダブルクリックすることで内部の部品が選択できるのです。
従って、NSTextViewの設定などを行なう場合には、まずNSTextViewを選択し、(この段階では外側のNSScrollViewが選択されているので)更にダブルクリックすると内側のNSTextViewが選択できるわけですね。——実はアトリビュートに関してはNSScrollViewは表示されないので、ただ選択するだけでNSTextViewのアトリビュートが設定できるようになるのですが、AppleScriptの設定などを行なう場合には「ダブルクリックして内側の部品を選択する」ということをよく頭に入れて作業しないといけません。
では、NSTextViewに用意されている主な部品について、ここで簡単にまとめておきましょう。
- Color——表示色。Textでテキストの色を、backgroundで背景色を設定する。
- Border——ボーダー(枠表示)。立体、平面、なし、の3つがある。
- Editable——編集可能か。
- Multiple Font Allowed——マルチフォント(リッチテキスト)表示にするか。
- Show ScrollBar——スクロールバーを表示するか。
ざっとこのぐらい覚えておけばいいでしょう。今回、カレンダーは半角のテキストでないときれいに表示されないので、Multiple Font AllowedをOFFにしてフォント変更できないようにしたわけですね。
cal [ 月 年]
・set X of ABC of EFG of XYZ to "A"
↓
・tell XYZ
set X of ABC of EFG to "A"
end tell
↓
・tell EFG of XYZ
set X of ABC to "A"
end tell
↓
・tell ABC of EFG of XYZ
set X to "A"
end tell