👨‍💻

Windows環境で疑似Raycast体験を実現する

2024/04/05に公開
3

はじめに

久しぶりの投稿となります。
今年の春から研究室に配属され、強制的にWindowsで研究することになりました。普段は自前のMacbookで開発を行っていたので、Windows環境でもなるべく同じ操作性を実現したいと思っていました。
が、、、残念ながら愛用しているRaycastはWindows非対応とのことだったので、今回は代替ツールを駆使して、疑似Raycast体験を実現してみました。
※ 今回の記事はRaycastの機能をすべて実現するものではありません。あくまでWindows環境での疑似体験です。

TL;DR

私が調べた限り、単体のアプリやツールでRaycastと同等の操作感を完全に置換できるツールは観測できませんでした。そのため、PowerToysAutoHotKeyというWindows対応ツールで疑似的にRaycastを実現しました。(凝ったギミックを必要としなければPowerToysで事足ります。)

そもそもRaycastとは

https://www.raycast.com/
MacOS対応のランチャーツールです。
MacOSでは、標準でSpotlightというランチャーツールがプリインストールされていますが、使い勝手が悪い、かつ、機能が充実していないです。インストールしていないMacユーザは是非ともオススメしたいツールです。

PowerToys

そもそも、Raycastの主な機能としては、Alt+Space押下で簡易的なポップアップが表示され、完全なCLI操作でアプリを呼び出せます。Windows環境では、PowerToysというツールが一番理想に近かったです。
https://learn.microsoft.com/ja-jp/windows/powertoys/install
PowerToysにはその他にも様々な機能がありますが、詳細に関しては今回では割愛します。詳しくは、以下の記事を参考にしてください。
https://knowledge.sakura.ad.jp/34042/

AutoHotKey

特にシームレスな操作性を求めなければ前述のPowerToysでもランチャーツールとしての機能は満たしています。
ただ、私は究極の効率厨かつ面倒くさがりなので、Raycastの体験になるべく近づけたい。。。
具体的には、普段のMac環境では、Shiftキー連続2回押下でターミナル(Warp)をいつでも最前面に呼び出せるようにRaycastのホットキーで設定しています。

Windows環境でも同様の操作を実現しようと探しましたが、同じキーを連続押下となると実現できるツールが限られます。
どうしよか。。。と頭を抱えていた時に、友人がAutoHotKeyを教えてくれました。
https://www.autohotkey.com/
https://zenn.dev/eetann/articles/2020-12-24-my-ahk-script
私がこのツールを採用した理由は、スクリプティングで設定ができるところです。
多くのツールはGUIで設定するものが多く、必然的に自由度が低くなります。特に今回のケースのように少しでも複雑なことを実現しようとすると、実現できるものが限られます。

しかし、AutoHotKeyは、AHKという独自のスクリプト言語でホットキーを設定することができるので、比較的自由度が高いです。
「独自のプログラム言語で設定。。。。。。。」と聞くと、余計な学習コストがかかるので、なるべく避けたい人もいるかと思われます。ただ、AHKは予め用意されたコマンドを組み合わせて比較的簡単にスプリクトを組む事が出来ます。
リファレンスはこちらから
https://ahkwiki.net/Reference
今回この記事をご覧いただいている方には特別に私のプログラムを公開したいと思います。
プログラムを編集すればどんなものでも実現可能ですが、今回は、Shiftキー連続2回押下でWSLを呼び出し/最小化が切り替えられるプログラムを紹介します。

wsl_open.ahk
;既にスクリプトが起動している状態で、同じスクリプトを実行した時に、自動で既存のスクリプトを終了する(ダイアログ無効化)
#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%

PressTime := 0

Shift::
    if ((A_TickCount - PressTime) < 300)  ; 2回目の押下が300ミリ秒以内にあったかを確認
    {
        PressTime := 0
        wslWindow := "ahk_exe wsl.exe"  ; WSLウィンドウを識別するための設定
        if WinExist(wslWindow)  ; WSLウィンドウが存在するかチェック
        {
            WinRestore, %wslWindow%  ; 初期化
            WinActivate, %wslWindow%  ; 最前面に表示
            WinMinimize, %wslWindow%  ; 最小化する
        } else {
            Run "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\WSL.lnk"  ; ウィンドウが存在しない場合、WSLを起動する(このパスは自分の環境下でのWSLのパスを指定してください)
        }
    } else {
        PressTime := A_TickCount  ; 最初の押下時間をセット
    }
return

上記のプログラムをAutoHotKeyのフォルダ直下にhogehoge.ahk(プログラム名はなんでも大丈夫です)として配置してください。
そして、このファイルを実行すると、以下のようにShiftキー連続2回押下で WSLを呼び出すことができます。

※ただし、最小化する動作だけはShiftキー連続2回押下×2セットで機能します。(おそらく、システム側でウィンドウを一度アクティブ状態にしないといけないため。)

これで設定は終わりですが、このままだと使用時に毎回このプログラムを実行する必要があるので、PC起動時に自動的にプログラムが立ち上がるようにスタートアップに登録します。

  1. スタート(Windowsマーク)を右クリックする
  2. 「ファイル名を指定して実行」をクリックする
  3. 「ファイル名を指定して実行」ウィンドウが開いたら、「名前 (O)」の入力欄にshell:startupと入力し、OKボタンをクリックする
  4. スタートアップフォルダが表示され、ここに先ほど作成したahkファイルのショートカットを追加する

詳細はこちらから
https://www.mouse-jp.co.jp/mouselabo/entry/2024/01/24/100037#:~:text=てください。-,スタートアップの設定方法,-ユーザーが自身

他にもRaycastは便利な機能を備えていますが、とりあえず私の最低限必要な操作性はこれで実現できそうです。(ターミナルを開くところまで効率化できればあとは良し!)

まとめ

今回は、Windows環境で疑似Raycast体験を実現してみました。Macのシームレスな操作性に普段から慣れていると、他の環境でストレスに感じてしまう身体になってしまっていたので、自分のやりやすいスタイルをどの環境でもいち早く構築できるようにしたいですね。

Discussion

TAISEITAISEI

ちょうどやりたいことがまとまっていて助かりました!

※ただし、最小化する動作だけはShiftキー連続2回押下×2セットで機能します。(おそらく、システム側でウィンドウを一度アクティブ状態にしないといけないため。)

この部分ついて、以下のように修正するとShiftキー連続2回押下の1セットのみで機能するようです
(なぜこの修正で期待通りになるのかはわからないのですが、、)

            } else {
                WinRestore, %wslWindow%
                WinActivate, %wslWindow%
+                WinMinimize, %wslWindow% ; この一行追加する
            }
Hiroki YoshiokaHiroki Yoshioka

ご指摘いただきありがとうございます。
今一度見直してみたところ、

if WinExist(wslWindow)  ; WSLウィンドウが存在するかチェック

の分岐で既にウィンドウがアクティブ状態であるのは自明なので、それ以降の分岐は必要なかったようです。そのため、ウィンドウを最小化するときの処理がスキップしていたのが原因かと思います。
スクリプトの方も修正いたしました。