[[📒Productivityを上げるために大切な100のこと]] No50. 🥇 --- これを読んでいる方ならショートカットキーが[[プロダクティビティ]]向上に有効であることは言うまでもないだろう。キーボードに関するネタは本シリーズでもいくつか紹介している。 - [[📗頻繁に使う遠いキーの位置を近づける]] - [[📗良いキーボードを使う]] そして恐らく.. 優秀な貴方は場面場面に適したツールを使いこなしているだろう。そうなると新たな問題が発生しているはずだ。 ## [[コンテキストスイッチ]]の切り替えコスト ショートカットキーの割り当てはツールによって当然変わる。そして、沢山ツールを使っている人ほど『今、何のツールを使っているから、〇〇の機能を実行するためには△△のキーを押さなくては』という[[コンテキストスイッチ]]の切り替えコストが増加しているだろう。 これは[[📗できる限りステートレスな操作を採用する]]方針にも反するため、無視できない問題なのである。 ## キーバインドを共通化 どうすればいいか? 簡単だ。==すべてのツールで同じキーバインド==を実現してしまえばいい。 もちろんツールによって機能は異なるが、ある程度抽象化すれば同じ括りにできるはずだ。以前に紹介した[[📗抽象的な操作を指先で覚える]]のツールを横断したバージョンだと思えばいい。 以下は私が共通キーバインドをまとめているシートだ。最近更新していないため若干古い情報もある[^1]が雰囲気を伝えるには十分だろう。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://ssl.gstatic.com/docs/spreadsheets/spreadsheets_2023q4.ico" /> <span class="link-card-v2-site-name">Google Docs</span> </div> <div class="link-card-v2-title"> 共通キーバインド </div> <img class="link-card-v2-image" src="https://lh7-us.googleusercontent.com/docs/AHkbwyLynW4aCYdZJX2oxb4vZTVL0WVUoxFxN9EVm9z2Kacsrz-ViUfK6zh06tynByqHpGusTt5D7aTSfS6E6CGi7GqHOZoyhpu11-hobzukOCXef5p2NL0=w1200-h630-p" /> <a href="https://docs.google.com/spreadsheets/d/11KZFwz_KJWeN-zRGRV74pCubN0_k3yDaDDr7tErHPrY"></a> </div> 戦略にもいくつか設計がある。以下が一例だ。 | 連続実行するか | よく使うか | キーの戦略 | | -------------- | ---------- | ------------------------------------------ | | する | する | `Ctrl`など押しやすい[[修飾キー]]と同時押し[^2] | | しない | する | [[Leaderキー]]のような2キーバインド | | する | しない | `Ctrl + Alt`のような2[[修飾キー]]同時押し | 突き詰めると、**どの操作がどの操作と一緒に使われることが多いか**なども考慮して設計することもある。この辺は別の機会があれば詳しく紹介したい。 ## ツールごとにキーバインドを切り替える 戦略が決まれば、あとはそれをどう実現するかだ。ほとんどのツールにはショートカットキーを設定する機能があるのでそれを使えばいい。キー設定は[[JSON]]や[[XML]]などのファイルとして保存されていることが多いので、[[GitHub]]でバージョン管理などしておくといいだろう。 **他の人のPCが使えなくなる**ことを懸念に思う人もいるかもしれない。でも考えてみて欲しい。自分のPCを使っている時間とそうではない時間の比を。ほとんど自分のPCを使っている人なら大してデメリットにはならないはずだ。 ではショートカットキーを設定できないツールの場合、もしくは[[Leaderキー]]のような一部キー設定ができない場合はどうすればいいだろうか。[[Windows]]を使っている私の場合は[[AutoHotkey]]でそれを実現している[^3]。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://www.autohotkey.com/favicon.ico" /> <span class="link-card-v2-site-name">www.autohotkey.com</span> </div> <div class="link-card-v2-title"> AutoHotkey </div> <div class="link-card-v2-content"> Free keyboard macro program. Supports hotkeys for keyboard, mouse, and joystick. Can expand abbreviations as you ... </div> <a href="https://www.autohotkey.com/"></a> </div> [[AutoHotkey]]には実行中のプロセス名や起動中のウィンドウ情報を取得し、条件に応じて異なるキーマップを設定する機能がある。以下は一例だ。 ```autohotkey:Obsidianでは<C-j>fを<C-S-p>に割り当て ;[NORMAL ]: fキー(コンビネーションの場合は$)(ObsidianでCtrl+jのあとならファイルを開く) ;[EDIT ]: 一番上に移動 ;[RANGE ]: 選択範囲を一番上に移動 ;[MOUSE ]: 右下のエリアにフォーカスを移してNORMALモードに ;[SPECIAL]: 縦にフルスクリーン ;[DEBUG ]: ステップオーバー (F10) $f:: if (mode(_MODE.NORMAL)) { if (isActiveProcess("Obsidian") && isSecondKeyAfterCtrlJ()) { send ^+p return } if (isSecondKey()) { send {$} } else { send f } } else if (mode(_MODE.EDIT)) { send ^{Home} } else if (mode(_MODE.RANGE)) { send +^{Home} } else if (mode(_MODE.MOUSE)) { ActivateWindow("RightDown") setMode(_Mode.NORMAL) FlashWindow() } else if (mode(_MODE.SPECIAL)) { send #+{UP} } else if (mode(_MODE.DEBUG)) { send {F10} } return ``` [[Obsidian]]では[[Leaderキー]]のような2キーバインドが設定できない。そのため、[[AutoHotkey]]を使って実現している。詳しくは[[📗VimやIDEのような2キーバインド(leaderキー)設定をしたい]] を参照。 **ツールが対応していないなら、==送信するキーイベントをハックしてやればいい==のだ**。 ## まとめ [[📗できる限りステートレスな操作を採用する]]ようにして[[コンテキストスイッチ]]の切り替えコストを減らすことは、[[プロダクティビティ]]を考える上で非常に大事だ。実現まで時間と手間を要するかもしれない。ただ、[[思考の速度でパソコンを使う技術]]を習得するのであれば、[[共通キーバインド戦略]]を採用することは避けられないだろう。 最後に私が[[AutoHotkey]]で実行しているスクリプト、[[🦉Spinal reflex bindings template]]のリポジトリを紹介させてもらい、幕引きとさせてもらおう。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" /> <span class="link-card-v2-site-name">GitHub</span> </div> <div class="link-card-v2-title"> GitHub - tadashi-aikawa/spinal-reflex-bindings-template: This repository is the Autohotkey KeyCustomized Project which is applicable to only mine. </div> <div class="link-card-v2-content"> This repository is the Autohotkey KeyCustomized Project which is applicable to only mine. - tadashi-aikawa/spin ... </div> <img class="link-card-v2-image" src="https://opengraph.githubassets.com/14a20bf1141ec5459a1bf11c9c794729ba4677ec9deb61dd0383587bd4bf4cc6/tadashi-aikawa/spinal-reflex-bindings-template" /> <a href="https://github.com/tadashi-aikawa/spinal-reflex-bindings-template"></a> </div> > Don't Think! Feel. [^1]: たとえば[[Obsidian]]が存在しない [^2]: 私の場合、[[AutoHotkey]]を使って[[Vim]]のようなモードを実現しているのでそれを使うことも多い [^3]: 正しくは[[AutoHotkey]]を使うために[[Windows]]を使っているとなるが..