作成:2020-08-02

Tips&FAQ

本章では、ショートカットAppのレシピを作成するうえで、知っておくと便利な小技と、よくある質問を紹介します。

ブール値型変数を作る

ショートカットAppでは、ブール値型変数を直接作ることはできません。
ただし変数の型変換を利用すると、ブール値型の値を得ることはできます。
例えば、数字型変数に0, 1、テキスト型変数にTrue, Falseを入れて型変換すると、ブール値型のはいいいえという値を得ることができます。

日付型変数の値を、UNIX時間に変換する

アクション「数字」の、プロパティ「入力」に変換したい日時が入った日付型変数を指定すると、アクションの出力がUNIX時間になります。
なお、秒は小数点以下6桁(マイクロ秒)まで出力されます。

UNIX時間を、日付型変数の値に変換する

ショートカットAppでは、UNIX時間を日付型変数の値にすることはできません。
ただ、UNIX時間は1970年1月1日 0時0分0秒(協定世界時)からの経過秒数なので、この定義を利用することにより、日付型変数に変換することができます。

アクション「日付を調整」で、プロパティ「日付」を1970-01-01T00:00:00Zに、プロパティ「値」を変換したいUNIX Timeを、プロパティ「単位」をに、プロパティ「処理」を加算に設定します。
するとアクションの出力が、日時に変換されます。

JSONを辞書型変数にする

JSON形式のテキストから辞書型変数を作成するには、アクション「入力から辞書を取得」を使います。
なお辞書型変数を作るまでもない場合は、アクション「辞書の値を取得」を使っても構いません。
逆に辞書型変数をJSON形式のテキストにする場合は、アクション「テキスト」に変換したい辞書型変数を入力します。

〈参考〉
 → 「ショートカット」で「辞書の値を取得」アクションを使用して辞書を処理する - Appleサポート

取得したウェブサイトの文字化けを直す

アクション「URLの内容を取得」でウェブサイトを取得すると、まれに文字化けしてしまうことがあります。
これはHTML上の文字エンコードの指定と、実際の文字エンコードが異なることが原因です。
ウェブサイトの文字エンコードの指定を、正しいものに直してもらう必要があります。
ただ、これを利用者側で解決するのであれば、「URLの内容を取得」の代わりに、「Webページの内容を取得」を使用してください。
URLの内容を取得」ではウェブサイトの取得・整形にSafariが使われるため、HTML上の文字エンコードの指定を無視し、Safariが実際の文字エンコードを自動判別してくれます。
この仕組みを利用することで、文字化けを解消することができます。

正規表現で制御文字を使用する

ショートカットAppの正規表現では、メタ文字(制御文字)を直接使用することができません。
ただし、正規表現の中でショートカットAppのテキスト型変数を使用することができます。
これを利用し、メタ文字を入れたテキスト型変数を事前に用意し、この変数をメタ文字の代用にすることにより、実質的に正規表現の中でメタ文字を使用することができます。
なおメタ文字は、ウェブサイトや他のアプリからコピー&ペーストしたり、アクション「Base64エンコード」・「URLエンコード」を利用して調達します。

重複行を削除する

アクション「辞書の値を設定」を使ったり、JSONファイルを自力で作成し、辞書型変数のキーが重複した場合は値が上書きされる仕組みを利用すると楽です。
ただしファイルサイズが大きいテキストを処理する場合は、メモリ容量の制限でショートカットAppが強制終了してしまうことがあります。

無限ループを作りたい

ショートカットAppでは、無限ループを作ることはできません。
無限ループの代替としては、以下の方法があります。

〈参考〉
 → 「ショートカット」で「繰り返す」アクションを使用する - Appleサポート

アクション「繰り返す」の増分を指定したい

増分は+1で固定されており、任意の値を指定することはできません。
手動変数と「計算」を使って対応してください。
またループ変数を強引に変更してループを離脱する手法の代わりに、ループ中で「if文」を使ってループを空回しするなどの方法で対応してください。

レシピの実行後、「完了しました」と言わせたくない

Siriに呼びかける方法でレシピを実行すると、実行後に「わかりました。」・「完了しました。」という、返事がくることがあります。
レシピ実行時に、テキストの読み上げや、文字・画像の表示、音声・動画の再生が行われない場合に、この返事がくるようです。
解決策としては、スペースや改行を読み上げたり、無音を再生することで、これらの返事をさせないようにすることができます。
なお、値が空(Nil)の変数を読み上げさせた場合、返事がきてしまいます。

標準のSiriコマンドを上書きする

例えばSiriに「Hey Siri、今日の天気は?」と尋ねると、通常はSiriが「天気App」を参照して天気を教えてくれます。
しかしショートカットAppで「今日の天気は?」という名前のレシピを作っておくと、「天気App」ではなく、ショートカットAppの同名のレシピを実行します。
これを利用すると、標準のSiriコマンドをレシピで上書きすることができます。

レシピに複数の名前をつけたい

Siriに呼びかける方法でレシピを実行する場合、複数の呼び方に対応させるため、レシピに複数の名前をつけたくなります。
しかしショートカットAppでは、1つのレシピにつけられる名前は1つになっています。
解決策としては、同じレシピを複数作って名前を変えるか、アクション「ショートカットを実行」を使い、元のレシピを呼び出す形にして、代用してください。

VPNを切り替えたい

ショートカットAppには、その機能は存在しません。
他社アプリにその機能があれば、連携することで対応できるかもしれません。

レシピの終了後、自動ロックを作動させたい

ショートカットAppには、その機能は存在しません。
またiOSにも、そのような機能は存在しません。

メールボックスをチェックしたい

ショートカットAppには、その機能は存在しません。
プライバシー保護の観点からも、その機能の実装は難しいと思われます。

アクションのプロパティに、特殊変数を指定することができない

プロパティ名をタップしたり、青色の長円形のトークン(  )を長押しすると、入力することができます。

処理速度が遅い・レシピの組み方が複雑になりすぎる

かなり高度な使い方になりますが、アクション「WebページでJavaScriptを実行」を応用すると、ショートカットAppではできない処理・レシピが複雑になりすぎる処理・時間がかかる処理を、Safari AppのJavaScriptに任せることができます。
また現実的ではありませんが、「SSH経由でスクリプトを実行」でシェルスクリプトを利用する方法もあります。

自動操作をしたい

ショートカットAppは、自動操作をするためのアプリではありません。
AppleScript, PowerShellのようなものなので、何ができるかは連携先のアプリの実装次第です。

レシピをフォルダ分けしたい

ショートカットAppには、そのような機能は存在しません。
他社製ですがLaunch Cutsという、ショートカットApp用のランチャーアプリがあります。
こちらではフォルダ分けをすることができます。

なぜ、あの機能がないのか

使い方によってはセキュリティ・プライバシー侵害が容易になってしまう機能については、開発元のAppleの方針により制限がかけられています。
そのため過去には実装されていたものの、後のバージョンで削除されてしまった機能・アクションもあります。
ただし電話番号・住所・位置情報などのようにプライバシー情報の取り扱わざるをえなかったり、メールの送信のようにスパムメールの作成に使われかねないものなどは、アクションの実行前に手動での確認操作が要求されます。

また他アプリと連携する場合、AppExtensionのIntents App Extension、もしくはAction Extension(カスタムURLスキーム)に対応している必要があります。
対応していない場合は、そのアプリの開発者に対応するようにお願いしてください。

このアクションリファレンスに掲載されていないアクションがある

当アクションリファレンスでは、バージョン3.2の時点での標準のアクションとAppleの無料アプリのアクションのみを紹介しています。
すでに廃止されており、新規作成ができないアクションは、紹介していません。