目次
●キーリマップ用スクリプトエンジン「AutoHotKey」
筆者の仕事用アプリの紹介、その3。
今回はキーリマップソフトの「AutoHotKey」と「DovraqJ」について。
キーリマップソフトとは、普通は固定されている「キーボードのどのキーを押したときに、どの文字が入力されるか」という組み合わせを、自分の好きなように変えることができるソフトウェアのこと。
Chris Mallett、Steve Gray両氏の作成したAutoHotKeyはその代表的なもので、単なるキーリマップにとどまらない機能を持っている。
blechmusikさん作の「DovraqJ」は、AutoHotKeyをベースに、日本語をはじめとする様々な言語に対応するキーリマップソフトである。
AutoHotKeyについての解説は「AutoHotkeyを流行らせるページ」や「AutoHotkeyJp」、「AutoHotkey Wiki」等がくわしい。
AutoHotKeyは、C++で書かれた「スクリプトエンジン」であり、テキストエディタで処理内容を記述したスクリプトを拡張子を「.ahk」として保存し、常駐させておくことで、特定のキーが押されたときに任意の動作を行わせることができる。
たとえばキーリマップソフトとして、「A」キーを押したとき、BとかCといった別の文字を入力させることもできるし、ControlキーやShiftキーと同時に文字キーを入力させることも、各種アプリや自分で作ったマクロを起動することも、1つのキーを押すだけで自分の名前や住所を入力する、といったこともできる。
あるキーを押した際、アプリに関わりなく常に同じ動作をさせることもできるし、ブラウザやエディタなど、特定のアプリごとにキーの動作を指定することもできる。
キーボードだけでなく、マウスの動作も自由に決められる。
AutoHotKeyは「AutoHotKey Automation Hotkeys Scripting」でダウンロードすることができる。
ダウンロードしたファイルをインストールすると、C:\Program Files\AutoHotkey に実行用ファイル「AutoHotkey.ahk」が作成される。
筆者の場合、一般的なキーはDovraqJを使って他のキーの動作に入れ替えているが、F1、F2といったファンクションキーのいくつかについてはAutoHotKeyを使い、複数のキーを同時押しするような動作を指定している。
指定の仕方は、C:\Program Files\AutoHotkey にあるファイル「AutoHotkey.ahk」をテキストエディタで開いて――エディタがなければ「メモ帳」で大丈夫――スクリプトを書き、それを上書き保存する。そしてExplorerで「AutoHotkey.ahk」のショートカットを作って、それをWindowsのスタートアップフォルダ(C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)に貼り付ける。
その状態でPCを再起動すれば、指定したキーの動作が変化している。
●筆者の場合のAutoHotKeyの設定
AutoHotKey用のスクリプトは誰でも書けるぐらい簡単だ。
筆者の場合、「AutoHotkey.ahk」のスクリプトは以下のようになっている。
——————–
;すべてのアプリで機能
F9::#+down ;最小化 Windows+↓
F12::!F4 ;終了 Alt+F4
;Chromeのウィンドウ上のみ機能
#IfWinActive ahk_class Chrome_WidgetWin_1
F2::Send,^+t ;閉じたタブをその順序で開く Ctrl+Shift+T
F4::!home ;ホームページに戻る Alt+home
F7::!left ;タブの閲覧履歴戻り Alt+←
F8::!right ;タブの閲覧履歴進み Alt+→
F10::Send,^w ;タブを閉じる Ctrl+W
;ウィンドウの限定を解除
#IfWinActive
;Edgeのウィンドウ上のみ機能
#IfWinActive ahk_class ApplicationFrameWindow
F2::Send,^+t ;閉じたタブをその順序で開く Ctrl+Shift+T
F4::!home ;ホームページに戻る Alt+home
F7::!left ;タブの閲覧履歴戻り Alt+←
F8::!right ;タブの閲覧履歴進み Alt+→
F10::Send,^w ;タブを閉じる Ctrl+W
;ウィンドウの限定を解除
#IfWinActive
———————-
●AutoHotKeyスクリプトの読み方、書き方
上のスクリプトで、F~ はファンクションキー、+はShiftキー、^ はCtrlキー、!はAltキーを、それぞれ意味している。
:: は「ホットキーとして、以後に記述するのキーの組み合わせを割り当てる」という指示で、; は、「以後その行の記述はコメントとする」という指示のこと。
また「#IfWinActive」 は、特定のアプリのウィンドウがアクティブのときのみ、コマンドを機能させる指令だ。
どのアプリにコマンドを割り当てるかは、「#IfWinActive」の後の「ahk_class」で特定する。
各アプリのahk_classを確認するには、タスクトレイの中のAutoHotKeyのアイコン――大きく「H」と書いてあるもの――を右クリックし、出てきたメニューの中の「Windows Spy」をクリックした上で、ahk_classを知りたいアプリをアクティブにする(クリックする)と、表示される。
↓
↓
Chromeなら、「Chrome_WidgetWin_1」が、それ。
この指令を使った後は、もう一回「#IfWinActive」と指令してやり、ウィンドウの限定を解除しておく。
これらの情報は上で紹介した「AutoHotkeyを流行らせるページ」の「Hotkeys」等に載っている。
筆者の場合は上のスクリプトで、F9でウィンドウを最小化し、F12でアプリを終了(この2つはすべてのアプリで機能し、Windowsも終了できる)するよう設定している。
ブラウザについては、F2で閉じたタブをまた開き、F4でホームに戻り、F7でタブの閲覧履歴を戻り、F8でタブの閲覧履歴を進ませ、F10でタブを閉じる、という動作を指示している。
ちなみにChromeの場合、もともとのショートカットの設定でF1がヘルプ、F3が検索、F5が再読み込み、F6がフォーカス移動、F11が全画面表示(と、それを元に戻す)となっている。
またもともとの設定ではF10は「Chrome ツールバーの右端の項目にフォーカスを移動する」、F12は「デベロッパー ツールを開く」となっているが、筆者は使わないのでAutoHotKeyで上書きしてしまった。
この2つはAutoHotKeyで動作を上書きできたのだが、F6などは上書きできなかった。AutoHotKeyで動作を指定しても、もともとChromeのデフォルトの設定が優先されてしまうのだ。なぜあるキーの動作は上書き設定できて、別のキーはできないのか、理由はよくわからない。
ともあれ結果、ChromeとEdgeでは、
F1 = ヘルプ
F2 = 閉じたタブをまた開く
F3 = 検索
F4 = ホームに戻る
F5 = 再読み込み
F6 = フォーカス移動
F7 = 閲覧履歴を戻る
F8 = 閲覧履歴を進む
F9 = 最小化
F10 = タブを閉じる
F11 = 全画面表示(と、それを元に戻す)
F12 = 終了
という設定になった。
おかげでマウスを使う頻度が減って、ブラウザが(筆者的に)大変使いやすくなった。
●Windowsのキーリマップソフトの定番「DovraqJ」
AutoHotKeyのスクリプトを利用して、一般的なWindows用キーボード(英語104や日本語109など)のキー配列(キーマップという)を簡単に自分好みに変えられるようにしたキーリマップソフトが「DovraqJ」である。こちらのサイトからダウンロードできる。
使い方だが、まずはダウンロードしたファイルを適当なフォルダに解凍して、Explorerで「DovraqJ.exe」のショートカットを作って、それをWindowsのスタートアップフォルダに貼り付け、PCを再起動する。すると画面下のタスクトレイに、DovraqJのアイコンが出てくるはずだ。なお「AutoHotKeyをベースにしている」といっても、DovraqJは単独で動作するので、別にAutoHotKeyをインストールする必要はない。
上で作った「DovraqJ」のフォルダには、「\data\lang」という下層フォルダがあり、日本語であればその下に、「jpn」フォルダがあり、それが「順に打鍵する配列」「同時に打鍵する配列」といったフォルダに分かれ、その下にさらに「QWERTY 配列系」「NICOLA 配列系」といったフォルダがあり、その中にキー配列を指定するスクリプトのテキストファイルが格納されている。
自分好みの日本語用キー配列を選ぶには、タスクトレイの中のDovraqJのアイコンをクリックすると出てくるメニュー画面で「日本語入力」をクリック。
↓
↓
そして「設定ファイル」の横の「選択」をクリック、出てきた「参照」をクリック。すると「DovraqJ」のフォルダが表示されるので、たくさんあるフォルダの階層を辿って、使いたい配列のテキストファイルを表示させ、クリック。その後に「DovraqJ」メニューの右上にある「-」をクリックして最小化する(「×」をクリックして終了すると、機能しなくなるので注意)。
●DovraqJのスクリプト
さて、DovraqJの設定用のスクリプトは、たとえば下のようになっている。
[
1|2|3|4|5|6|7|8 |9 |0 |ー|^|¥|
q|w|e|r|t|y|u|i |o |p |@|「|
a|s|d|f|g|h|j|k |l |;|:|」|
z|x|c|v|b|n|m|、|。|・|¥|
]
これは一般的なローマ字入力用(QWERTY配列)の例だ。
この場合はキーマップも1つだけなのだが、これがかな入力で使う親指シフトのNICOLA配列になると、たとえば以下のようになる。
[
| | | | | | | | | | | | |
。|か|た|こ|さ|ら|ち|く|つ|,|、| |
う|し|て|け|せ|は|と|き|い|ん| | |
.|ひ|す|ふ|へ|め|そ|ね|ほ|・| |
]
ここでは1つしか挙げていないが、親指シフトの場合、キー配列のスクリプトは、「キー単独で入力」「スペースキー(左親指)と同時入力」「変換キー(右親指)と同時入力」の、最低3つは必要になってくる。
ちなみに筆者の場合の日本語入力用スクリプトは、以下のようになっている。
/* つきく配列 日本語かな入力 親指シフト for Dell */
/* 同時打鍵配列 */
/* CLR配列 英語直接入力 for Dell と組み合わせて使う */
/* 無変換キー→左移動キー、かなキー→右移動キー */
/* Tabキー→かなキー、Capsキー→Tabキー */
/* Shiftキー同時打鍵で数字を出力 */
/* 文字キーを単独で入力 */
[
一|二|三|四|五|六|七|八|九|〇|十|~|{.}|
つ|き|く|こ|け|っ|す|さ|せ|そ|{BackSpace}|{↑}|
て|し|う|か|は|ょ|ん|い|と|た|{Enter}|{↓}|
ち|ほ|ひ|ふ|へ|あ|え|お|。|、|{Delete}|
]
/* [Space] + 文字キー */
-Space[
|||||||||||||
ね|め|み|も|む|ぅ|ず|ざ|ぜ|ぞ|゛|↑|
な|の|に|り|ぱ|ゅ|を|ぃ|ど|だ|←|→|
ぬ|ぽ|ぴ|ぷ|ぺ|ぁ|ぇ|ぉ|?|!|↓|
{Space}|
]
/* [変換] + 文字キー */
-henkan[
|||||||||||||
づ|ぎ|ぐ|ご|げ|ヴ|ろ|や|よ|ゆ|『||
で|じ|ま|が|ば|ゃ|わ|ら|れ|る|』||
ぢ|ぼ|び|ぶ|べ|「|」|ー|・|(|)|
{変換}|
]
/* [Shift] + 文字キー */
-Shift[
Ⅰ|Ⅱ|Ⅲ|Ⅳ|Ⅴ|Ⅵ|Ⅶ|Ⅷ|Ⅸ|Ⅹ|{×}|{÷}|{,}|
{%}|{&}|{@}|{$}|{¥}|{*}|7|8|9|{=}|{^}|{PgUp}|
{<}|{>}|{;}|{:}|{#}|{-}|4|5|6|0|{Home}|{End}|
{[}|{]}|{{}|{}}|{_}|{+}|1|2|3|{/}|{PgDn}|
]
これはNICOLA配列をベースに、筆者が勝手に改造した配列だ。
文字キーの単独入力が上段2列目左から「つきく」となっているので、「つき配列」とか「つきく配列」と呼んでいる。
さらに英語用の直接入力のキー配列も、独自配列を使っている。
こちらのスクリプトは下のようになっていて、「CLR(クリア)配列」と呼んでいる。
/* CLR配列 英語直接入力用 for DELLキーボード */
/* 子音と母音を順に打鍵する配列 */
/* つき配列 for DELL と組み合わせて使用 */
/* ShiftキーまたはSpaceキー同時打鍵でキー内下左の数字または記号を出力 */
/* 変換キー同時打鍵でキー内下右の英字大文字または記号を出力 */
/* 文字キーを単独で入力 */
[
1|2|3|4|5|6|7|8|9|0|,000|,|.|
c|l|r|m|p|z|x|k|q|y|{BackSpace}|{↑}|
s|n|h|t|d|u|e|a|o|i|{Enter}|{↓}|
b|w|v|g|f|?|’|,|.|j|{Delete}|
]
/* [変換] + 文字キー */
-henkan[
|||||||||||||
C|L|R|M|P|Z|X|K|Q|Y|`||
S|N|H|T|D|U|E|A|O|I|@@@||
B|W|V|G|F|{!}|”|(|)|J|~|
]
/* [Shift] + 文字キー */
-Shift[
Ⅰ|Ⅱ|Ⅲ|Ⅳ|Ⅴ|Ⅵ|Ⅶ|Ⅷ|Ⅸ|Ⅹ|{×}|{÷}|{・}|
%|&|@|$|\|*|7|8|9|=|^|{PgUp}|
<|>|;|:|{#}|-|4|5|6|0|{Home}|{End}|
[|]|{{}|{}}|_|{+}|1|2|3|/|{PgDn}|
]
/* [Space] + 文字キー */
-Space[
|||||||||||||
%|&|@|$|\|*|7|8|9|=|^|{PgUp}|
<|>|;|:|{#}|-|4|5|6|0|{Home}|{End}|
[|]|{{}|{}}|_|{+}|1|2|3|/|{PgDn}|
{Space}|
]
単に文字の配列を変えただけでなく、普通はShiftキーと同時打ちで大文字が入力されるところを、変換キーとの同時打ちで大文字が入力されるように設定している。
そして直接入力でも日本語入力でも、Shiftキーとの同時打ちでは、数字や記号が入力されるようにしている。これは数字を入力するのにいちいち打ちにくい最上段やテンキーを使うのが面倒だったので、左Shiftキーとの同時打ちで、タッチタイピングで入力できるようにしたもの。便利である。
またスペースキーとの同時打ちでも、Shiftキーとの同時打ちと同じものが入力されるようにしている。これは左Shiftキーとの同時打ちがやりにくい左手側に配置した記号を入力するため。右Shiftキーはホームポジションから遠くて使いにくいので、基本使っていないのだ。
なお直接入力用のキー配列は、\data\lang\engフォルダ以下に格納されていて、メニューの「直接入力」で選択する。
結果として筆者のキー配列は、以下のようになっている。
これは先の記事「親指シフトとキーボード」でも紹介した。
もしこの配列を使ってみたかったら、上のスクリプトをコピーして、空のテキストファイルに貼り付け、そのファイルに適当な名前をつけて\data\lang以下のフォルダに置き、DovraqJのメニューから選択すればよい。日本語用と直接入力用は別のファイルにする。
ただし上のスクリプトで配列を決められるのは文字キーだけで、「変換」「かな」「Insert」「CapsLock」といった機能キーの役割を変えるには、DovraqJの設定画面で別に行う。
筆者の場合には入れ替えたキーに、さらにGoogle日本語入力のキー編集で好みの機能を割り当てて使っている。たとえば上の配列図では「CapsLock」キーが「かな」になっているが、実際にはそこにGoogle日本語入力で「直接入力と日本語入力の切り替え」や「予測変換候補の選択」などの機能を割り当てている。
●初心者からマニアまで使える
DovraqJでは、機能キーの動作も入れ替えることができるし、マウスのキーも好きに設定できる。ただ、「Shift」と「Control」といったモディファイアキー(修飾キー)は変えられない。
親指シフトなど同時打ちを使う場合、「どれくらい打つタイミングがずれても『同時』とみなすか」という問題がある。完全に同じというのは、人間には不可能なので、多少のズレは許容して同時打ちとみなさなくてはならない。かといって、あまり長い時間まで許容してしまうと、別の文字を打ったつもりなのに同時打ちと判定されて、思ったのと違う文字が入力されてしまうという問題が起きる。DovraqJではこの待機時間を0~500ミリ秒の範囲で調節できる。
筆者の場合は直接入力で50ミリ秒、日本語入力で100ミリ秒にしているが、打鍵速度が速い人だと100ミリ秒では長すぎるかもしれない。
DovraqJで残念なのは、コマンドプロンプトでは機能しないことだ。Windows上でLinuxを使うためのmsys2の画面などでは機能してくれるのだが、コマンドプロンプトでアルファベットを入力してコマンドを実行させようとすると、もとのQWERTY配列に戻されてしまう。
おかげで筆者などはコマンドプロンプトを使うたびに、「えっと、このキーはどこにあったっけ」と手元を見なくてはならない。
自分のものではないPCを使うときにも同じことになるので、直接入力の英語キー配列をいじるのは、初心者にはあまりお勧めはしない。
また親指シフトを使うには、これも「親指シフトとキーボード」で書いたように、それに適したキーボードを選ばないとうまくできないという問題がある。
筆者の場合は既に生産終了している親指シフト向きのキーボードに、この「DovraqJ」で作った独自配列の親指シフトを割り当てて使っており、加えてこれまで説明してきたように「秀丸」「Google日本語入力」「AutoHotKey」でも散々カスタマイズして自分好みの入力環境を構築しているので、もはや今使っているデスクトップでないと、まともに仕事できない状態になってしまった。
それでも普通にローマ字入力をしている人がDovraqJを使って、もとの配列のままではうちにくい「ー」や「!」の位置を、ローマ字入力ではほぼ使わない「Q」や「X」に割り当てたり、打鍵ミスしやすい「Insert」キーの機能を消してしまったり、「CapsLock」に別の機能を割り当てたりすることで、キーボードが格段に使いやすくなることが実感できるはずだ。