ATOK には「ATOK ダイレクト」という機能があり、ユーザが入力した文字列を渡して、任意の Ruby、Python、Perl スクリプトを実行することができます。
開発の方法は上のページに書かれているのですが、結構面倒な手順があるので、atokplugin
というツールをつくりました。
このツールを使って、「いま」と入力したら ISO8601 の形式で日付・時刻を出すプラグインを作ってみます。
なお、atokplugin
は OSX Mavericks、ATOK 2013、Ruby 2.0+ でのみテストしています。それ以外の環境では動かない可能性が高いです。
ATOK ダイレクト API モジュール のインストール
プラグインの作成には JustSystem が提供している「ATOK ダイレクト API モジュール」が必要です。
下記ページの下の方にある「モジュールダウンロード」ボタンから adsapi26.dmg
をダウンロードします。
ダウンロードしたらマウントして適当なディレクトリにコピーします。
ここでは ~/adsapi25
にコピーしたものとします。
atokplugin のインストール
下記コマンドを実行します。
$ gem install bundler
$ git clone https://github.com/labocho/atokplugin.git
$ cd atokplugin
$ rake install
実行には ATOK ダイレクト API モジュール のパスを環境変数で指定する必要があります。~/.profile
などに下記の記述を追加しましょう。
export ATOK_TOOLS_ROOT=$HOME/adsapi26
プラグインの作成
ここからプラグインを作成します。
適当なディレクトリで atokplugin new
を実行します。使用する言語とプラグインの名前を指定します。プラグインの名前は date
、Python で書くことにします。
$ atokplugin new --lang python date
Create plugin directory: date
Copy plugin template: date/date.py
Create: date/LICENSE.TXT
Create: date/atokplugin.yml
Create: date/.gitignore
これから先は、上記コマンドで作成された date ディレクトリ内で作業します。
$ cd date
プラグインの開発
実際の処理は date.py
に書きます。まずはできあがりを見てみましょう。
#! /usr/bin/env python
# coding:utf-8
import datetime
def atok_plugin_run_process( a_request_data ):
result_data = {}
candidate_array = []
# datetime
if a_request_data['composition_string'] == u"いま":
now = datetime.datetime.now()
# 現在日時を ISO8601 形式にしたものを候補に追加
candidate_array.append({'hyoki': unicode(now.strftime("%Y-%m-%dT%H:%M:%S"))})
result_data[ 'candidate' ] = candidate_array
return result_data
要点は下記の通りです。
- 引数を 1 つとる
atok_plugin_run_process
関数を定義する 引数['composision_string']
にユーザの入力した文字列が入っている{'candidate': [{'hyoki': u"候補"}, ...]}
を返り値とする
サンプルにはコメント入れたり、XHTML 入れたりしている例もあります。
デバッガの実行
デバッガで動作を確認してみましょう。
$ atokplugin debug
Create temporary directory: /var/folders/q0/ync5c_c56nndjtzzg3cgth_c0000gn/T/d20140223-24845-evjeeb
Launch debugger
"表記" に「いま」と入力して "実行" をクリックしてみます。
"標準出力結果" に候補が表示されました。デバッガを起動したままでソースを書き換えることもできますので、期待する動作になるまで、いろいろ試してみてください。
プラグインのインストール
デバッガでうまく動作することを確認したら、インストールしましょう。
$ atokplugin install
Remove directory: pkg
Create directory: pkg
Build succeeded
Launch installer
インストーラが起動するので、指示に従って操作していけばインストールできます。
ログアウトを要求されるので、ログアウト / ログインし、「いま」と入力して ⌥T
を押します。
いい感じですね!
プラグインの配布
atokplugin build
を実行すると、pkg
ディレクトリに、インストーラを含む配布用のファイルを作成できます (atokplugin install
時にも作成されます)。
$ atokplugin build
Remove directory: pkg
Create directory: pkg
Build succeeded
$ tree pkg
pkg
├── DATA
│ ├── date.py
│ └── date.xml
├── LICENSE.TXT
├── SETUPINFO.XML
└── atok_plugin_installer.app
...
ATOK ダイレクト API モジュール のライセンス表示をみると、インストーラの再配布も大丈夫そうではあるんだけど、バイナリをプラグインの作者に配布させるのは、ちょっとどうかなとも思います。
トラブルシューティング
作成中 2 つの問題に突き当たりました。
Ruby で書けない
ATOK ダイレクト API モジュール に同梱されている Ruby 版のサンプルをデバッガで実行すると次のようなエラーが表示されます。
Ruby 1.8 の頃に使われていたライブラリ jcode
をロードしようとして失敗しています。Mavericks からデフォルトの Ruby が 2.0.0 に変わったのが原因でしょう。
たぶん回避するすべはないので、おとなしく Python か Perl で書きましょう。
いちおう、問い合わせフォームから報告はしておきました。
「検索処理でエラーが発生しました」と表示される
インストール後、文字列を入力して ⌥T
を押しても「検索処理でエラーが発生しました」と表示されて、候補が表示されませんでした。
ATOK の設定から「ATOKダイレクト for iTunes」を無効にしたら解決しました。これも iTunes のバージョンの関係ですかね。