Open2

Scriptableとショートカットの連携

aromariousaromarious

ショートカットでのScriptable呼び出し

Scriptableのショートカットアクションは次の2つ。

  1. Run Script Scriptable内のスクリプトを実行する
  2. Run Inline Script ショートカットアクション内に書かれたコードを実行する

上記いずれかのアクションを使って実行する。

引数の渡し方(ショートカット→Scriptable、ショートカット側)

ショートカットから渡せるのは次の5種類。

  1. Parameter
  2. Texts
  3. URLs
  4. Images
  5. Files

シングルタップでファイルピッカーが現れるものもあるが、プレス(長押し)すると変数が選べる。

たいていはParameterで用が足りる。渡したいものを辞書アクションで用意し、その辞書を渡すことが多い。

引数受取(ショートカット→Scriptable、Scriptable側)

  1. Parameter欄…args.shortcutParameter:any
  2. Texts欄…args.plainTexts:[string]
  3. URLs欄…args.urls:[string]
  4. Images欄…args.images:[Image]
  5. Files欄…args.fileURLs:[string]

戻り値セット(Scriptable→ショートカット、Scriptable側)

Script.setShortcutOutput(output) でショートカットへ値を返せる。
Script.complete() でスクリプトの実行完了をシステムに通知する。

戻り値受取(Scriptable→ショートカット、ショートカット側)

アクションのマジック変数を使って受け取る。

aromariousaromarious

Scriptable側のコードを書く時の注意点

Script.complete() は必ず呼び出す

Scriptableでスクリプトの実行完了を明示的に通知すること(Script.complete())。これをしないとショートカット側は「Scriptableスクリプト終わらないな」と待った挙句にタイムアウトで実行失敗扱いしてしまう。

インポートしたモジュール内でScript.complete()しても無効

importModule()を使う場合、モジュール内でScript.complete()を実行しても認識されない。トップレベルスクリプト(ショートカットから直接呼び出されたスクリプト)でScript.complete()を実行すること。

Run Scriptは起動が遅いことがある→Run Inline Scriptを使う

Scriptable はスクリプトを iCloud Drive で管理しているため、Run Scriptでスクリプトを呼び出すと「まず同期を済ませてからですね」と待たされることがある。

アクション内にインラインでスクリプトを書ける Run Inline ScriptアクションはiCloud同期をパスできるようで、起動が素早い。

ちょっとした処理を素早く済ませたい場合は積極的にRun Inline Scriptアクションを使うとよい。