命名って難しい

変数、関数、クラスなどなど実装より命名に毎回悩むタイプの人間による技術についてのメモ。

【雑記】AutoHotKeyを使った話とRPAを使うまでもなく業務改善できるんじゃないか?って話

普段の家計管理はMoneryForwardを使っていますが、データの変更作業にAutoHotKeyを使ったのでメモがてら雑記です。

AutoHotKeyって何?

基本的にキーボードレイアウトを変えたり、特定のホットキーを作ったりすることを目的としているんですが、色々機能があってスクリプトを書けばかゆいところに手が届くソフトウェアです。

ahkスクリプトという独自言語を記述してソフトで開くことで様々なことができます。

昔脱マウスを目指してキーボードでマウスを動かすスクリプトとかも作った記憶があります。

公式ページ

www.autohotkey.com

Wikipedia

ja.wikipedia.org

何に使ったのか

マネーフォワードの入力の一部自動化です。

毎日行う作業であればSeleniumで開発してもよいのですが、単発なのでjavascriptで試し、想定する動きができなかったのでユーザーの操作を模する目的でAHKを利用しました。

動作として以下のものがあります。

  • ドロップダウンメニューから特定の項目を選ぶ
  • 項目を選ぶと項目に合わせたメッセージがロードされる
  • 確定ボタンをクリック

これを100回以上する必要があるのですが、ここでAHKを活かしています。

この動作をキーボードのみで実現しようとすると以下の動作になります。

  • ドロップダウンメニューから特定の項目を選ぶ
    • タブキーでドロップダウンメニューにフォーカス当てる
    • エンターキーでドロップダウンメニューを開く
    • 下キーを複数回押し、エンターキーで確定
  • 項目を選ぶと項目に合わせたメッセージがロードされる
    • (少し待つ)
  • 確定ボタンをクリック
    • タブキーで確定ボタンにフォーカス
    • エンターキーでボタンを押す

この流れをAHKスクリプトで表現して、特定のキーにバインドし、人力での選択→スクリプト実行を繰り返していきます。

以下のスクリプトはDキーにその動作を割り当てていることになります。

D::
  Send {Tab 2}
  Send {Enter}
  Sleep 200
  Send {DOWN 12}
  Send {Enter}
  Sleep 1000
  Send {Tab 3}
  Send {Enter}
Return

業務改善にもつながるのでは?

今までプログラマの補助ツール的な感覚で使っていましたが、非ITの現場レベルでも使えるツールなんじゃないかなと思います。 ものにもよりますが総じてRPAはライセンスが高いです。高いライセンスを払うまでしなくてもできる範囲の作業をサポートできると思います。

例1:ホームページ巡回作業

ホームページを巡回して何か情報を得てくる作業もあると思います。 その中でもファイルをダウンロード(クリックなどしてDLできるもの)をしたりする時にはAHKが利用できます。

前述の活用例のようにキーボード操作のみでやっていけば実現できます。 テーブルの項目をループしてクリックなどはできませんが、そういう作業を人力で行い、決まりきった動作をスクリプトに任せる方法で目的は実現できるはずです。

例2:使いづらいソフトの繰り返し作業

自社ソフトもウェブサイトと同様、キーボードのみで操作できるのであればAHKが一助になります。 AHKクリップボードを参照する機能もあるため、CSVの内容をコピーしてからそれをパーズして入力させるなんてこともできるでしょう。また、ウインドウをアクティブにしたり、アプリを起動したりするAPIも持っているので、データCSVをテキストで開く→全体選択でコピー→入力先のソフトをアクティブにして入力、なんてことも実現可能です。 ただし実装の難易度は上がります。

例3:文字入力作業

メールやチャットなど文字入力はほとんどの従業員が行いますが、定型文や決まりきった表現を入力するショートカットキーを作ることもできます。

以下のスクリプトではPCの環境変数 UserName を取得して自身の名前込みで定型文を作っています。 ユーザー名を正しく設定していれば、その名前が入力されます。 各社員にメールのテンプレートを作らせるより、このスクリプト1つを全社で利用すればいいわけです。

A::
  EnvGet, v, UserName
  Send お世話になっております。
  Send {ENTER 2}
  Send ナントカ株式会社の %v% です。
Return

AHK vs RPA?

物が違うので勝敗はつけられませんが、RPAが持つ機能をある程度カバーしているAHKは、業務改善対象の作業によっては低コスト・高メンテナンス性で運用できるのではないかと思います。

実際RPAを使ってみて、対象領域の作業フロー全体をRPA化した後の改修が困難なことが課題になっていたので、小分けに実装・メンテナンスできるAHKの強みを感じます。

そもそもで言えばメンテナンスしやすくRPA化できるように、作業フロー自体が整理せよという話なのですが、それができない場合に改善するのであれば部分的にAHKを活かすのもいいかもしれません。

以上!