RaycastのScript Commandでスニペットスクリプトを実行する
プライベートと会社でmacを使っているため、ランチャーツールにはRaycastを採用している。
以前までAlfreadを使用していたが、Raycastは見た目が好みなことと、ReactとTypeScriptで拡張機能を作れることが気に入ったので、1年くらい前に乗り換えた。
この記事では、Raycastの機能のScript Commandについて、自分でスクリプトを追加する方法と、Raycastが提供しているスクリプト集をインポートする方法を説明する。
Script Command とは
Script Commandは、よく使うスニペットスクリプトを登録して呼び出しできる機能である。
「文字列を加工して表示する」や「特定のルールのURLをWebブラウザーで開く」など、拡張機能を作るほどではない処理は、Script Commandで実現できる。
自分の場合は「文字列を渡してパーセントエンコーディング/デコーディングする」スクリプトを登録して使っている。
Script Command のスクリプトを作成する
スクリプトファイルの作成
- Raycastの設定画面を表示する
- [Extentions]タブを選択する
- [+]をクリックして、[Create Script Command]を選択する
- 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:コマンドに引数を渡す場合に選択する
- Template:スクリプトの言語
- [Create Script]をクリックするか、Command + Enterを押す
- 任意のファイル名とディレクトリを指定して、ファイルを保存する
スクリプトの定義
スクリプトファイルを作成したら、テキストエディタでファイルを開いてスクリプトの内容を定義する。
ファイルを保存したディレクトリはFinderから直接開くか、Raycastの設定画面からスクリプトを右クリックして[Show in Finder]を選択して開く。
以下は、「Template」に「Ruby」を選択したときのスクリプトファイルの例である。
スクリプトファイルは、次の情報で構成されている。
- shebang:Rubyを選択したのでRubyの実行ファイルのパスが指定される
- 作成時に入力したScript Commandの基本情報
- コメント行以降:スクリプトの内容
#!/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したリポジトリのスクリプトファイルがあるディレクトリを追加するのみで良い。
- raycast/script-commandリポジトリを任意のディレクトリにCloneする
- Raycastの設定画面を表示する
- [Extentions]タブを選択する
- [Scripts]タブを選択する
- [Add Directory]をクリックする
- Cloneしたリポジトリのディレクトリの「commands」ディレクトリ以下から、インポートしたいスクリプトファイルがあるディレクトリを選択して[Open]をクリックする
指定するディレクトリは、スクリプトファイルが直下に置かれているディレクトリを指定する
スクリプトファイルが読み込まれると、「Scripts」タブの一覧に表示される