Hatena::Groupatokdirect

高見知英のATOKダイレクトプラグイン日記

 | 

2009-04-21

ATOKダイレクトプラグインのデバッグ方法について

| 22:30

ATOKダイレクトプラグインは、ATOK.comで公開されているatok_direct_debuggerで出力を確認することが出来ます。

しかし、これだけだと期待したパターンを全て確認するのは骨が折れます(わたしは折れます)、デバッガを使わないでも最低限の出力テストはしておきたいもの。


そこでわたしは、Rubyの機能、__FILE__定数を使って、最後に以下のような記述を書いています。

if __FILE__ == $0 then
 ・・・・テストコード・・・・
end

こうすることによって、このif文の中はこのスクリプト直接実行したときのみ実行されます。つまりはATOKダイレクトプラグインとして実行したいときには呼び出されない という意味。まあ、ここまでならたぶん、Rubyの入門書にも記載されていることでしょうが。

ここに、以下のような感じで、モジュールのテストコードを書き連ねていく。

  def regexp_test(pattern, test, request = true)
    ans = request == (pattern === test)
    puts "#{test} => #{ans ? 'OK' : 'NG'}"
  end

  regexp_test(Atok_plugin::IDPatterns[0][:pattern], "id:TakamiChie")
  regexp_test(Atok_plugin::IDPatterns[1][:pattern], "@TakamiChie")

↑の場合は以下のように出力されることが期待されますね。

id:TakamiChie => OK

@TakamiChie => OK

一般的なユニットテストとは違います*1が、出力文字列をそのまま表示できるので、ATOKプラグインのようなものの判断には割と適しているといえるでしょう。

わたしはこれを、Ginnieを使ってみるで言及したGinnieのスクリプトを使って、F5から常にスクリプトを実行できるようにして使ってます。


なお、WindowsコマンドプロンプトはShift-JIS文字列しか表示できないので、日本語の文字列を表示するときには、nkfライブラリが必須です。

NKF.nkf('-sxm0', d['comment'])」というような感じで出力結果を常にShift-JISに変換してから表示するようにしましょう。

なお、配列などの構造化データを出力するのに便利なppは、そのままでは文字コード変換が出来ませんが――。

pp - Rubyリファレンスマニュアルに記載のとおり、ppをrequireした時点で「Object#pretty_inspect」というメソッドが追加されているので、これを使いましょう。

NKF.nkf('-sxm0', d.pretty_inspect)」みたいな感じで。

*1:ここでいう一般的なユニットテストとは、nUnitのようなあらかじめ指定した期待値とマッチするかどうか出判断するタイプのものをさしています

ATOKDirectATOKDirect2009/04/22 09:58よろしくお願いいたします!

kujirahandkujirahand2009/04/22 18:27ATOKプラグインでテンプレートなど使いたい場合は、初回実行時に、そのユーザーのマイドキュメントやAppDataフォルダなどに、テンプレートファイルを展開しておく方法を使えば可能と思います。(アンインストールの時にゴミが残るのがいやならば、テンポラリフォルダの適当なフォルダを素材置き場とすれば、一定期間経過後によきに削除してくれます。)

ATOKDirectATOKDirect2009/04/22 20:23id:just_hirabayaがアップした「フォルダリスト」のプラグインで、プラグイン以外のファイルをセットアップに含める方法を紹介しています。ご確認ください。
http://atokdirect.g.hatena.ne.jp/just_hirabaya/20090422

t_daichot_daicho2009/04/23 00:41> 同一ディレクトリのファイル
僕は電卓プラグインでrbファイルを2つ転送していますが、ちゃんと使えていますよ。
requireなどするなら、ATOKダイレクトのディレクトリがロードパスに含まれてないから絶対パス指定する必要がありましたが。

TakamiChieTakamiChie2009/04/26 19:06皆様コメントありがとうございます。確認しました。
サブディレクトリにファイルを配置する方針で行こうと思います。

 |