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

Today I Learned

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

A collection of powerful productivity tools all within an extendable launcher.

この記事では、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」タブの一覧に表示される インポートしたスクリプトが表示されている