Hatena::Groupatokdirect

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

2009-04-21

ATOKダイレクトプラグインでは「同一ディレクトリのファイルを読む」ということはできない?(2009/04/21時点)

| 22:43

現在作成中のプラグインを作成していて気づいたことなのですが、ATOKダイレクトプラグインインストール時に「スクリプトと一緒にATOKの実行用ディレクトリにコピーするファイル」を指定できない(はず)なので、あらかじめ作ったテンプレートファイルを読み込んで処理するということは出来ません。

そのため、ATOK2009で追加されたcomment_xhtmlをテンプレートを使ってERBでさくさく ということは出来ないのです。

個人的にはなんとしても実行コード内にHTMLを混ぜたくなかったので分割方法を探しましたが、とりあえず以下の方法があるらしい。

つまり、ファイルの__END__の下にErbのテンプレートを書いてしまえばよい ということになります(ちなみに、上記ページのコメントでわたしが指摘しているように、File.readの引数は__FILE__にしておくと良いです)。

ただこの方法では、読み込めるファイルは一つ(comment_xhtmlを使う場合はXHTMLテンプレートで埋まってしまうでしょう・・・)というのと、他の非標準Rubyライブラリを持ってきて使うということが出来ないので、根本的な解決ではありませんね。

まあ、セットアップツールを使わない という手もなくはないですが。


出来ればセットアップツール側で何とか出来るとうれしいのですが。何か良い方法はないのでしょうか。

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)」みたいな感じで。

ID変換プラグインを公開します。

| 22:07

先日、あるオフ会にお土産がてら作成したプラグイン、ID変換プラグインを公開します。

お土産というだけあって作りも簡単ですし、プラグイン作成の参考にもなるかもしれませんw

これはなに?

各種IDの文字列をリンクに変換します。

リンクは以下の4種類です*2

ATOKをオフにして文字入力、選択して再変換 という操作を想定しているので、IDが全角で入力されてるなどの状況では動かないかもです。

変換できるIDは?

今のところ二つだけです。そのうち増やすかもしれません。

たとえば、@TakamiChieという文字列を再変換→Ctrl+Insすると「@TakamiChie」という感じでリンクが作れます(ついったーの場合、オフ会幹事などをやってる人には便利かもしれません)


使ってるRubyライブラリなど

標準外は使っていないはずです。Rubyの動作環境さえあれば動くはずです。


というわけで、確認をお願いします->id:ATOKDirect

日付変換プラグインを公開します。

| 21:43

先日開発日誌にて掲載した、日付変換プラグインをこちらにもアップロードします。

とりあえず詳細な説明は下記ページをご確認下さい

ダウンロードは、上記の通りSkyDriveにもありますが、以下よりダウンロード出来ます(今後バージョンアップした場合は下記のみアップデートする予定です)


インストール時にも説明が出ますが、簡単に説明すると

  • 次の水曜日
  • 来月の第2土曜日

などといった文章を実際の日付に変換するプラグインです。

おまけで「今日」、「明日」、「明後日」のほか、「明明後日」、「弥明後日」、「一昨昨日」も変換できるようにしてあります。

今後の予定としてOutlookの予定表と連携して、「今度のオフで」などと言った文字列を展開できるようにしたいなー と書いてはいますが、まだまだ当分先の話になりそうですw(時間も技術もないので)

とりあえず(Rubyの)非標準ライブラリなどは使っていないので、Rubyの動作環境さえあればすぐに使用できるはずです。


以上、ご確認お願いします>id:ATOKDirect

ATOKダイレクトプラグイン開発グループに参加しました

| 21:27

ATOKダイレクトプラグインの開発グループに参加しました。

――って、ここで書いても何の意味もないのですが(^^ゞ

とりあえず、興味もありますし、ぼちぼち作ってもいますので、良いのが出来たらこちらにも公開していこうと思います。


なお、ATOK2009対応です。一部ATOK2008でも動くものがありますが、別にそれを目的として作られているわけではありません。

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

*2:今後、これをベースとしたプラグインをいくつか予定しているので、変換フォーマットはこれを流用していくことになります

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皆様コメントありがとうございます。確認しました。
サブディレクトリにファイルを配置する方針で行こうと思います。