半自動ATOK単語登録マクロ〜!Ver0.01

やること

  • ATOKで単語を一括登録する
    • 事前の作業がかなり長くても我慢
    • 単語登録がかなり遅いけど我慢
    • 途中で処理が止まることがあるけど我慢・・・ってダメ?(ぉ

※注意!
最低限の動作確認はしていますが、どんな挙動を起こすか分かりません。できればフルバックアップ、最低限ATOK辞書ファイルだけでもバックアップして試していただくようお願いします。また、手順を一通り読んで概略をつかんでから作業することをお勧めします。

概要

単語登録の処理手順を単語リストが終わるまで自動で決め打ち入力し続けます。

利用するアプリ

  • Excel Mobile
    • おそらくこのアプリを使うes用ツールは史上初めてじゃないかとw
  • execmulti
    • 複数アプリ連続実行アプリ
    • マクロ作りには欠かせません
  • KeyInputEmulator
    • キー入力エミュレートアプリ
    • マクロ作りには欠かせません
  • CQ
    • クリップボード履歴アプリ
    • 利用する文字列を先にまとめてコピーしておくのに使います
      • W-ZERO3 UtilityPlusにもクリップボード履歴がありますが、履歴内に同じ内容がある文字列をコピーしても、履歴の順番が変わらないのでマクロ用には使えないのです
  • nOpen
    • アプリ実行ツール
    • 動的に引数を指定してexecmultiを実行するのに使います
  • 適当なテキストエディタ
    • エクスポートした辞書ファイルを開くのに使います
  • 適当なランチャー
    • Excelを開いたままexecmultiを実行するのに使います
    • 画面回転キーなどの適当なアプリキーに割り当てといてください

手順

1.アプリ導入
  • Excel Mobile以外のアプリを\Program Files\アプリ名\アプリ名.exeにインストールしておく
  • \Program Files\execmult\execmulti.iniに以下の内容を追加して保存する

[ATOK_DIC_LOOP]
exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe| Ctrl+C Ctrl+Right Ctrl+C Left Ctrl+C Left Ctrl+C Left Ctrl+C Left Ctrl+C Left Ctrl+7 Ctrl+B 5 BS Tab
sleep=4200
exec=\Program Files\nOpen\nOpen.exe
exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe| Ctrl+B 2 Tab Tab Ctrl+B 5 Tab Tab Tab Enter Tab Enter Down
sleep=4000
exec=\Program Files\nOpen\nOpen.exe
exec=\Program Files\KeyInputEmulator\KeyInputEmulator.exe| Ctrl+B 4 Tab Tab Ctrl+B 5 Tab Tab Tab Enter

※8/28 12:30 タイミングの微調整をしました、多少は失敗しない確率が上がってる・・・はず。

  • ランチャーに以下の内容を登録する
    • 実行ファイル:\Program Files\execmult\execmulti.exe
    • オプション(引数):ATOK_DIC_LOOP
2.単語リストの準備

※この手順はesでもできますが極力PCで行ってください

  • 利用しているIMEから単語一覧をテキスト形式でエクスポートする
    • 手順は各IMEのマニュアルを確認してください
  • 単語一覧ファイルをテキストエディタで開いて、各行が「読み(Tab)単語(Tab)品詞(改行)」になっているか確認する
    • 異なる場合、Excelなどで列順を入れ替えといてください
  • 単語一覧をコピーして、Excelファイルの単語シート(A2セル)にテキスト形式で貼り付ける
    • 最初に数行コメントが書いてあるので読み終えたら上書きしちゃってください
    • テキスト形式で貼り付ける方法が分からなかったら、テキストファイルからコピーしてください
  • (PC版Excelのみ)単語シートで簡易チェック機能を利用して登録できない単語がないか確認する
    • 赤背景のセルがある単語は登録できないので適宜修正してください
  • 品詞シートを見て、定義されてない品詞があったら定義する
    • 方法はシート内の注意書きを参照してください
  • 結果シートを見て、不具合のありそうな行がないかざっと確認する
    • 単語シートで行削除を行うとその行がエラーになってたりします
  • ここまで終わったらファイルを保存する
3.単語登録
  • esに外部電源をつなぐ
    • 処理中に電池切れになるのを防ぐためです
  • CQを起動して常駐させておく
    • 常駐するとToday画面下部にアイコンが表示されます
  • Ctrl+Bを押してクリップボード履歴を表示してキャンセルする
    • 初回起動時だけ若干時間がかかるので、起動しとかないと失敗するようです
  • 2で作成したExcelファイルをesで開く
    • PCで作業した場合、ActiveSync等でes側にコピーしてください
  • 結果シートの登録する単語の左上(最初はA4)にカーソルを合わせる
  • ランチャーから1で設定したexecmultiを実行する
    • マクロによるループ処理が始まります
  • 結果を眺める
    • 失敗したら画面上のどこかを連打タップしてください、そのうちマクロが1周して止まります(ぉぃ
    • 失敗する理由はだいたい↓のどれかだと思います
      • 途中で処理を失敗した(50%)
      • 登録できない単語があった(30%)
      • 全単語を登録し終わった(20%)
  • 根気よく結果を眺める
    • 12秒/単語、1分に5単語程度なので気長に待ちます
  • まだまだ結果を眺める
    • 途中で失敗したら、次の単語のA列を選択して再度execmultiを実行してください
  • 運が良ければ翌朝には単語登録が終わってるので、一度ソフトリセットします
    • 事前にマナーモードにしとくと安眠の妨げになりませんw
    • ATOKの不具合だと思うのですが、辞書ユーティリティで辞書の内容を修正してそのまま作業を続けてると、削除した単語が復活するなど辞書の挙動が怪しくなることがあります
    • 作業後は極力速やかにリセットしたほうが幸せになれます

解説

きっかけ

ずばりes発売1ヶ月記念です、嘘。

ATOKの一括登録ツールなら誰かが作るだろうと思ってたら、意外と誰も作らなかったんで、今のうちなら神様気分を味わえるかなぁと思いましてw でも、この遅さと面倒臭さじゃ神は神でも貧乏神あたりが関の山orz

動作原理

esのATOKはCtrl+7を押すと単語登録画面が開きます。それを利用してexecmultiとKeyInputEmulatorで登録作業を再現するマクロを繰り返してるわけです。手順を簡略化(=高速化)するために先にExcelで順番どおり連続してコピーしておきます。ここで、

  • コピーした文字列が履歴の最上位にくる
  • 貼り付けた文字列が最上位に繰り上がる

と履歴の順番が厳密に決まるCQが活躍します。ただし履歴に同じものがある文字列をコピーすると、履歴の順番が変わるだけで履歴数が増えないので、読みと単語が一致する場合に不都合が起こります。そのため読みの末尾に*をつけて絶対に一致しない状況を作っています(読みに半角文字は入力できない)

単語、読みはコピペとカーソル操作だけで行えるのですが、品詞の指定は単純なコピペ作業だけでは実現できません。そこでExcelで品詞番号だけDownを繰り返す関数を書いて、それを引数にしてKeyInputEmulatorを実行してやります。ただ、execmulti内では動的に引数を指定することができないので、別途nOpenを利用しています。
最後にループ処理ですが、execmulti、KeyInputEmulator、nOpenを時間差で実行することで実現しました。

  • execmulti(A)が単語登録処理後、nOpen(B)を実行する
  • execmulti(A)がKeyInputEmulator(C)を実行した後、終了する
  • KeyInputEmulator(C)が「nOpen(B)でexecmulti(A')を起動するよう」動いて終了する
  • nOpen(B)がexecmulti(A')が実行した後、終了する
  • execmulti(A')が単語登録を始める

これにより(A)、(B)、(C)のどれかを止めればループを中断することができます(で、タップ連打で(C)の動きを変えるのが一番楽なわけです)

処理の高速化

実現方法「待ち時間の短縮」と「手順の簡略化」が挙げられます。
前者は、各処理の間に指定している待ち時間を最適化して短くします。ただ処理時間はアプリの実行状況や空きメモリなど様々な要因で変わることが多く、最適値を求めるのが難しいのです。1回目に失敗しやすいのもここらへんが原因と思われます。
ということで後者をより深く考えます。処理の中で時間の大半を占めるのが「コピー」と「貼り付け」です。マクロ内でコピーしている文字列は「読み」「単語」「KeyInputEmulatorパス」「execmultiのパス」「プリセット」「品詞選択」ですが、この中で可変要素は「読み」「単語」「品詞選択」だけです。残りを定型文にして貼り付ければ、コピー処理とそのためのカーソル移動処理を外せます。これをやっていないのは準備作業を簡略化したかったからなんですが・・・ここはトレードオフってことで(必要な方がいれば高速版も用意できます、はい)
もう一点、nOpenを起動してアプリを実行してますが、これをポップアップなしで行えれば、さらに大幅な簡略化が可能となります。

  • 引数に実行するアプリの名前(iniに事前に定義しておく)orパスを指定する
  • ↑で指定したアプリを、現在のクリップボードの内容を引数にして実行する

なアプリってどこかにないですかね?簡単そうなんで誰か作ってくれたりしませんかね?(ぉぃ




うっわぁ、超長文になってもうた・・・手順ももう少し簡略化できそうな気がするんでまたしばらく悩んでみます。
「この処理で失敗した!」とか「この単語が登録できない!」とか情報いただけると修正しやすいので是非ご協力お願いします。