Raycast の Script Command でスニペットスクリプトを実行する

Today I Learned

プライベートと会社で mac を使っているため、ランチャーツールには Raycast を採用している。
以前まで Alfread を使用していたが、Raycast は見た目が好みなことと、React と TypeScript で拡張機能を作れることが気に入ったので、1 年くらい前に乗り換えた。

Raycast lets you control your tools with a few keystrokes. It's designed to keep you focused.

この記事では、Raycast の機能の Script Command について、自分でスクリプトを追加する方法と、Raycast が提供しているスクリプト集をインポートする方法を説明する。

Script Command とは

Script Command は、よく使うスニペットスクリプトを登録して呼び出しできる機能である。
「文字列を加工して表示する」や「特定のルールの URL を Web ブラウザーで開く」など、拡張機能を作るほどではない処理は、Script Command で実現できる。
自分の場合は「文字列を渡してパーセントエンコーディング/デコーディングする」スクリプトを登録して使っている。

Script Command のスクリプトを作成する

スクリプトファイルの作成

  1. Raycast の設定画面を表示する
  2. [Extentions] タブを選択する
  3. [+] をクリックして、[Create Script Command] を選択する
    [Create Script Command]が枠線で囲まれている
  4. Script Command の基本情報を入力する
    • Template:スクリプトの言語
      • Bash
      • AppleScript
      • Swift
      • Python
      • Ruby
      • Node.js
    • Mode:スクリプトの出力結果の表示方法(参照:Raycast Document: Output modes
      • fullOutput:出力結果のすべてを別のウィンドウに表示する
      • compact:標準出力の最終行をトーストに表示する
      • silent:Raycast のウィンドウを閉じて、標準出力の最終行をトーストに表示する
      • inline:Raycast のウィンドウに標準出力の最終行を表示する
    • Title:スクリプトのタイトル、Raycast のウィンドウに表示される
    • Description:スクリプトの説明
    • Package Name:スクリプトのグループ名で、サブタイトルとして表示される
    • Need Confirmation:スクリプトを実行する前に確認するか
    • With Arguments:コマンドに引数を渡す場合に選択する
  5. [Create Script] をクリックするか、Command + Enter を押す
  6. 任意のファイル名とディレクトリを指定して、ファイルを保存する

スクリプトの定義

スクリプトファイルを作成したら、テキストエディタでファイルを開いてスクリプトの内容を定義する。
ファイルを保存したディレクトリは Finder から直接開くか、Raycast の設定画面からスクリプトを右クリックして[Show in Finder]を選択して開く。

以下は、「Template」に「Ruby」を選択したときのスクリプトファイルの例である。
スクリプトファイルは、次の情報で構成されている。

  • shebang:Ruby を選択したので Ruby の実行ファイルのパスが指定される
  • 作成時に入力した Script Command の基本情報
  • コメント行以降:スクリプトの内容
url-decode.rb
#!/usr/bin/env ruby

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title URL Decode
# @raycast.mode compact

# Optional parameters:
# @raycast.icon 🤖
# @raycast.argument1 { "type": "text", "placeholder": "Placeholder" }

# Documentation:
# @raycast.author chick-p
# @raycast.authorURL https://raycast.com/chick-p

puts "Hello World! Argument1 value: " + ARGV[0]

Script Command として実行したい内容は、コメント行以降、すなわち puts "Hello World! Argument1 value: " + ARGV[0] を差し替えて記述する。
Script Command の基本情報の変更も、このファイルを編集すると反映される。

たとえば URL パーセントエンコーディングを行うスクリプトは、次のようになる。

#!/usr/bin/env ruby

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Decode
# @raycast.mode compact

# Optional parameters:
# @raycast.icon 🤖
- # @raycast.argument1 { "type": "text", "placeholder": "Placeholder" }
+ # @raycast.argument1 { "type": "text", "placeholder": "Decode string", "percentEncoded": false }

# Documentation:
# @raycast.author chick-p
# @raycast.authorURL https://raycast.com/chick-p

- puts "Hello World! Argument1 value: " + ARGV[0]
+ str = ARGV[0]
+ str = str.chomp("")
+ str = str.gsub(" ", "")
+ puts URI.decode(str.chomp(""))

このスクリプトのポイントは次の 2 つ。

  • 引数は @raycast.argument1 で定義し、ARGV[0] で参照する
    Placeholder や引数をパーセントエンコーディングするかなどを設定できる。
    引数の設定の詳細は、Raycast Document: Arguments を参照のこと。
  • Raycast の画面への出力は標準出力なので、Ruby の場合は puts を使う

スクリプトを実行する

Raycast の普段の使い方と同じで、「Title」に指定したスクリプト名を入力し、一覧に表示されたスクリプトを選択する。
作成したスクリプトが一覧に表示されている

引数ありのコマンドの場合は、Tab キーで移動して引数を入力する。
引数を入力している

Enter で確定すると、スクリプトが実行されて実行結果が表示される。
実行結果が表示されている

Raycast が提供している Script Command のスクリプト集を利用する

Raycast は Script Command のサンプルとして、便利なスクリプト集を GitHub に公開している。
raycast/script-command

例えばパスワードを生成するスクリプトや GitHub の Pull Request の番号を指定して表示するスクリプトなどたくさんのスクリプトファイルが集約されている。
これらは Script Command を実装するときの参考になる。

公開されているスクリプトを利用するには、次の方法がある。

  • 方法 1:GitHub からスクリプトの内容をコピーして、自分で Script Command のファイルを作成する
  • 方法 2:リポジトリをローカルに Clone し、Clone 先のディレクトリを指定して、スクリプトをインポートする

方法 1 は、前述の Script Command を作成する と同義なので、ここでは方法 2 のスクリプトのインポート方法を説明する。
といっても、Raycast の設定で Clone したリポジトリのスクリプトファイルがあるディレクトリを追加するのみで良い。

  1. raycast/script-command リポジトリを任意のディレクトリに Clone する
  2. Raycast の設定画面を表示する
  3. [Extentions] タブを選択する
  4. [Scripts] タブを選択する
  5. [Add Directory] をクリックする
    [Add Directyory]が枠線で囲まれている
  6. Clone したリポジトリのディレクトリの「commands」ディレクトリ以下から、インポートしたいスクリプトファイルがあるディレクトリを選択して [Open] をクリックする
    指定するディレクトリは、スクリプトファイルが直下に置かれているディレクトリを指定する
    スクリプトファイルがあるディレクトリを選択している スクリプトファイルが読み込まれると、「Scripts」タブの一覧に表示される インポートしたスクリプトが表示されている