元ネタ:Javaで湯婆婆を実装してみる
天邪鬼なので簡単に流行りに乗るのもいかがなものかと思ったのですが、これなら他人と差別化もできてるし……というわけで書きました。果たしてショートカットは技術記事なのか疑問ですが、まあ大丈夫でしょう。
ショートカットについて
AppleがWorkflowというアプリを買収して改良?1したものです。iOS 12からApp Storeで提供され、iOS 13からプリインストールされています。__簡単なツールを作る__のにはもってこいだと思います。自分用のCLIコマンドみたいイメージです。(もちろんShortcutsGallery.comなんかで広く共有されているものもあります。)iOS 14ではアプリのアイコンが変えられる!なんて巷では話題になってましたが、ここでは本来の使い方をしてあげましょう。
完成形
ショートカット湯婆婆 pic.twitter.com/DiCYvQu4FM
— まさし (@MasasaM_shi) November 9, 2020
リンクはこちらです。他人の作ったショートカットを追加するには設定->ショートカット->信頼されていないショートカットを許可する(Allow untrusted shortcuts)
をオンにする必要があります。
作り方
簡単なんでどこまで書くべきかわからず、無駄に詳細まで書いてしまいました。
開く
何はともあれ開かないと始まりません。iOS端末を持ってない人は買い、iOS 12未満の人はOSアップデート、iOS 12の人はApp Storeからインストール。ただ今回使うアクションがいつからあるものかは調べてません。下手したらiOS 14以降でしか使えないかも。
名前を聞く
アクションを追加(Add Action)
ボタンを押して、入力を要求(Ask for input)
を追加します。スクリプティング(Scripting)
の中にありますが、数が多いので検索したほうが早いです。設定と画面サイズによってはスクリプティ
までしか表示されないクソ仕様付き。僕はこれが嫌で端末の設定を英語にしてます。
追加したアクションのプロンプト(Prompt)
に「契約書だよ。そこに名前を書きな。」と書きます。
デバッグするのは簡単です。右下の▶️ボタンを押すだけ。実行している箇所もわかるので普通にインタプリタ言語感覚で使えます。
文字列埋め込み
次に湯婆婆に喋らせたいので、アラートを表示(Show Alert)
を追加します。内容は「フン。<名前>というのかい。贅沢な名前だねえ。」ですから先ほど取得した名前を表示させるため、文字列を埋め込む必要があります。と言ってもキーボードの上に常に表示されてるので迷う人はいないでしょう。指定入力
を選択し、そのまま後半を入力すればOKです。
ついでに表示を増やす(Show more)
から"キャンセル"ボタンを表示
をオフにしておきました。
1文字抜き出す
残念ながらショートカットのテキストはコレクションではないのでSwiftみたいにtext.randomElement()
みたいな便利な方法はありません。とはいえ2アクションで実装できます。
テキストを分割
をアクションに追加して、テキストに指定入力
と入力します。改行ごと
は1文字ごと
に変更しましょう。リストから項目を取得
で分割したテキスト(テキストを分割
)からランダム項目
を取得します。
完成
最後に「今からお前の名前はリストからの項目
だ。いいかい、リストからの項目
だよ。分かったら返事をするんだ、リストからの項目
!!」とアラートを表示するだけです。
あとは右上の三点ドットから(一番上までスクロールしてないと表示されないおまけ付き!)ショートカットの名前とアイコンを変えれば完成です。
Siri
ショートカットで作ったものはそのままSiriから呼び出せます。
Siri湯婆婆 pic.twitter.com/HxyMjs6pUw
— まさし (@MasasaM_shi) November 9, 2020
これで冷たいプロンプトと湯婆婆ごっこする必要はありません。Siriと湯婆婆ごっこを楽しみましょう!
おまけ
簡単なTipsとか。
変数名
指定入力
とかリストからの項目
とか変数名にしたくないというそこのあなた、朗報です。ショートカットには変数名を設定する方法が複数存在します。1つ目、変数を設定
というアクションを使うとその変数にアクセスしやすくなります(うまく言語化できない……。下の写真の通りです)。
そしてもう1つは名前だけ変える方法。今回のようにアクション数が少ない場合に有効な手です。変数をタップすると何やら色々設定が出てきますが、その中の名称変更
から自由に名前を変更できます。元の名前でわかりやすかった「どこからきた値なのか」はアクションを表示
から簡単に確認できるので、困ることはありません。
ネスト
ショートカットは処理を関数に切り出せません。__ネストが自然と深くなってしまう__ので、if
2つがネストする場合にうまく1つにするなどする必要があります。実はもう1つ方法があって、_他のショートカットに切り出せばいい_のですが、これをすると人に共有しづらくなるためなるべく避けたほうがいいです。
ただショートカットを関数として扱えるということは再起関数も書けるということです。再起が書けるからって使うか?って話ではあるんですが、どうせならTipsらしくということで書いときました。下の動画はフィボナッチを作った時のやつです(昔作ったんですが動画がなかったのでさっき撮りました)。
フィボナッチ pic.twitter.com/gnlePbtMR2
— まさし (@MasasaM_shi) November 9, 2020
ドキュメント
まあなにせ簡単なので適当にいじるだけで十分だと思いますが、ショートカット ユーザガイドに割と色々載ってるので、見てみるのもいいかもしれません。