ショートカットでは自分自身を「ショートカットを実行」で呼び出すことでレシピをループさせることができます.
では固定時間内でループさせることはできるのでしょうか?
※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.
レビュー時のiOSバージョン : iOS16.6.1
スポンサーリンク
一定間隔で処理させる
有名なC言語やマイコンでは、内臓のタイマーや水晶といった外部クロックを使って一定の時間を計り、その中で処理をさせる仕組みがあります.
(なのでそれに間に合うよう処理する工夫が必要だったりします)
ショートカットにそのような仕組みは存在せず、またアクションひとつひとつの処理時間もその度に少しずつ異なります.
オートメーションでは時刻を指定してアクションを処理させることができますがその最短間隔は1分なのでそれより小さい間隔でループさせることはできません.
そもそも時刻でのオートメーションであっても必要な分だけ作るのは非現実的です.
ショートカットアクションにおける処理の誤差
ショートカット以外のプログラムでも実際にはひとつひとつの処理は固定でなくその度に異なります.
しかし言語によってはその誤差は数μSec(=0.000001Sec)もないため、全体でよほどの処理の差でもない限り体感での誤差はわかりません.
ではショートカットの場合はどの程度違うのでしょう.
例えば「何もしない」アクションを日付アクションで挟んだものを繰り返し、二つの日付間の時間を取り出してみます.
しかしアクションの仕組み上、そうして計算した結果は画像の赤で示したように一つ目の日付アクションが処理されてから「何もしない」が終わるまでの時間になります.
また「計算式」で使っている日付のマジック変数は画像のようにフォーマットを「カスタム」にして項目を"ss.SSS"とすることで秒とコンマ秒を取り出しています.
ちなみにコンマ秒を示す大文字のSはいくら書いてもいいですがどれだけ書いても最大3桁しか取り出せません.
このレシピを実行した結果が上の画像です.
「日付」から「何もしない」までの処理時間は1mSecだったり2mSecだったりと一定していませんね.
試しに「何もしない」を取り除いて実行してもやはり結果は一定ではありません.
どのアクション(関数)も必ず同じ処理時間ではないことがわかります.
さらに変形して、今度は「何もしない」アクションだけを入れたレシピにかかる時間を見てみます.
すると今回は一度目が100mSec台と大幅にモタつきました.
二度目も一度目ほどではないですが遅いですね.
三度目以降も10~12mSecと、直接同じレシピに「何もしない」を入れたときより桁がひとつ大きくなる遅さになりました.
「ショートカットを実行」はそれだけ処理がかかるということがうかがえます.
試しに何度も試行しましたが一度目のもタつきは避けられないようです.
〆
このように、ショートカットは他の言語のようなタイマー機能はなく、ひとつひとつのアクションが非常に遅いために誤差も1mSec単位と非常に大きいです.
たったひとつのアクションですらこの大きさですから、まともなレシピになると一周するだけで0.1秒単位での誤差が発生し、数周で誤差が1秒を超えることもありえます.
上級向けとはいえ、せめて内部クロックが使えると面白いんですけどね.
処理速度が致命的なのでまずそこが解決しないと採用は遥か先でしょうが.