デバッグの基本

beep命令で知らせる

 バグを調べる場合、まず気になるのが、どの部分まで実行されているかということです。
 これを簡単に調べる一番の方法は、適当な場所にbeep命令を書き込む事です。

-- ここまでも、スクリプトがある
beep --ちゃんと実行されてるかな?
-- ここからも、スクリプトがある

display dialog命令で知らせる

 beep命令と同じ使い方で、display dialog命令を適当な場所に書いておくという方法があります。
 文字列に変換できるものならば、値の内容を確認できますし、数カ所においても表示内容を変える事によって、それぞれを区別できるのも利点です。
 ただし、beep命令と違って、いちいちクリックする必要があるのも面倒です。
 また、幾つも仕掛けると、それを取り除くのも面倒です。開発中はコメントにしておけば、書いたり消したりするよりも楽ですから、通常は必要なくなったからといってもいちいち削除したりはしません。
 スクリプトが完成してから正規表現をサポートしているエディタでも使って、一挙に削除すればいいでしょう。

set n to random number 5
-- ここまでも、スクリプトがある
display dialog "n = " & n
-- ここからも、スクリプトがある
-- display dialog "n = " & n
-- さらに、スクリプトがある

結果ウィンドウを活用する

 スクリプトが数十行程度のものになってくると、ハンドラ単位でデバックするのが簡単です。
 その際、利用者定義命令の引数を色々と変えて実行し、結果で値を確認するのが楽でしょう。
 ハンドラを切り出した場合の基本的な形は、次のようになります。

theHandler(" 表示予報" ) -- ここには引数をリテラルで書いて、ばんばん書き換える

on theHandler(theParameter)
	-- なんかバギー(buggy)なことやってるらしい
	return theParameter -- 細工は流々、結果を御覧じろ
end theHandler

 とにかく、スクリプトの最後のresultの値が結果ウィンドウに表示されますから、命令の実験から、ハンドラの動作確認まで、一番お世話になるデバッグ手法だと思います。

履歴ウィンドウを活用する

 AppleScript機能拡張に内臓のOSAXという変な扱いの命令に、デバッグ用のものが幾つか用意されています。
 こんな変なことするんだったら「スクリプト編集プログラム」をスクリプタブルにしろよ、とAppleに毒づきたくなりますが、そこは押さえて、Appleさん便利な命令を用意してくれてありがとう、と卑屈に使っていきましょう。
 log命令は、display dialogと同じ使い方ができますが、いちいちボタンを押さなくていいのが楽です。
 出力は「スクリプト編集プログラム」の履歴ウィンドウで確認できます。start log,stop log命令で、表示の制御ができますから、display dialog のようにコメントをつけて、表示しないようにする必要はありません。

log "履歴に出力"

スクリプタブルなエディタを活用する

 エディタにどんどん出力するのも手です。
 出力した後に、すぐエディタでデータが扱えるので、応用が効くのが魅力です。
 ただし、テキストしか出力できないのと、そのエディタ自体を扱うスクリプトでは使いにくいのが難点です。

tell application "QuoEdit"  to set selection to theText

テキストファイルに出力する

 テキストファイルにどんどん出力するという手もあります。
 一応、どんなデータも出力できるのが利点ですが、あまり使い勝手は良く無いでしょう。

debugHandler("ログに出力するデータ" & return)

on debugHandler(theValue)
	try
		set fPointer to open for access (file "Macintosh HD:debugLog.txt") with write permission
		write theValue to fPointer starting at eof
	on error
	end try
	close access fPointer
end debugHandler

 Tanaka's osaxのMT Write Fileを使えば、文字列のみですが、簡単に書き込みができます。

専用のデバッガを使う

 お金に余裕がある場合や、常に大きめのスクリプトを作る必要性がある場合は、サードパーティー製のデバッガを使うのも手です。
 Script Debugger 3.0は、ユーザーも多く、スクリプトエディタとしても高機能です。
 デバッガを使えば、変数の内容を確認しながら実行したり、一行ずつ実行したりする事もできます。
 とは言え、AppleScriptで巨大なアプリケーションを作る必要はほとんど無いので、大抵は「スクリプト編集プログラム」で間に合うと思います。

 プログラムにつきもののバグですが、これらのデバッグ手法を使って、上手につき合っていきましょう。


2000-07-27