iOSのショートカットの自動化レシピ

# はじめに

iOS12からiOSのショートカットが導入されました。iOSのショートカットが導入された当初は1週間ほどいじって遊んでいたのですが、それ以降全然触っていませんでした。


iOS13.1では、オートメーション機能が導入され、NFCタグをトリガーとしたショートカットを作成できるなど便利になっています。私が持っているiPhone XS端末はNFCタグに未対応かと思って、オートメーション機能を使うのを断念していたのですが、実は対応していることを知り、今年の12月頃から活用方法がないかあれこれ触り始め始めました。

ここでは、あれこれ触る中で学んだiOSのショートカットの活用方法をレシピとして紹介したいなと思います。

## 前提

まずは、iOSのショートカットを使うには、iOSのショートカットに対応したiOS12以上が必要になります。また、オートメーション機能を使用するにはiOS13.1以上である必要があります。

その他、NFCタグのオートメーション機能を使うには、以下のいずれかのiPhone端末が必要です。

* iPhone 11
* iPhone XS
* iPhone XR

本記事では、iPhone XSのiOS13.3で検証を行なっています。

# レシピ集

ここでは、実際に作成して試したものや思いついたものについて、レシピという形式で紹介していきたいと思います。

## ショートカットでメニューを表示する

### 概要

メニューでショートカットを選択して実行できるようにします。
これで何が良いかというと、ウィジェットからメニューに表示されたショートカットを選択することで、アプリを起動するのが簡単になります。

### 準備

* ショートカットアプリ
* メニュー表示のショートカット作成

### 手順

新規ショートカット作成画面を開き、スクリプティングの```メニューから選択```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/e8fb69db-a9f2-41de-c8dd-c496915c047a.png">

上記で表示されたプロンプトにメニューに表示する項目（例えばアプリ名など）を追加します。ここでは、認証アプリ(Google Autheticator、Microsoft Authenticator、1password)を追加します。

※ 既に作成済みのショートカットで解説しているため、画像には、```認証```とショートカット名が表示されています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/ba7e86f1-14a2-c54a-9c76-5acb7f27a2a2.png">

メニューの項目を選択したときに実行する動作を追加します。ここでは、スクリプティングの```アプリを開く```を追加し、アプリ名を実行するアプリに変更します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/9553dc8a-4db9-fd16-ae7a-1097cf5e3c07.png">


ナビゲーションバーの```次へ```を押下し、ショートカット名を入力することで完了です。

### 動作

ウィジェットから、認証のショートカットを選択することで、３つのアプリがメニューに表示され、アプリを素早く起動することができます。
利用シーンとしては、Githubなどの２段階認証のコードが必要なページで、認証コードをアプリからコピペしたい時や、1passwordなどに対応していないアプリでパスワードをコピペしたい時などに役に立つのではないでしょうか。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/c18ac97a-2b88-b50e-d69a-fc8ec6f4e5bc.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/5a206021-d4d1-a1a8-944e-a66ece03b447.png">

### 応用

メニュー表示のショートカットは、他にもいろいろ活用できるかと思います。
例えば、漫画アプリをまとめるとか、今流行りの乱立したxPayあたりのアプリをまとめておくと、レジとかで素早く起動できて便利な気もします。

## 二段階認証のQRコードをバックアップする

### 概要

二段階認証のQRコードをバックアップしたい時ってありませんか？

認証コードをアプリに保存したはいいけれども、モバイル端末を機種変更した時にバックアップを取ってなくて、再度二段階認証の解除と再設定を行なったことがありました。そのときに激しくめんどくさかったので、二段階認証コードの発行時にQRコードをカメラで撮影して、それをEvernoteのクラウド上にバックアップするという手順で運用するようになりました。

ただ、カメラで撮影すると、上手く撮影されていなく、いざというときに利用できないことも考えられるので、これを上手いこと自動化したいというのが、今回のレシピになります。

### 準備

* ショートカットアプリ
* メニュー表示のショートカット作成
* Evernoteアプリ

### 手順

簡単に流れを説明すると、```対象のQRコードをカメラでスキャン``` → ```読み取ったコードからQRコードの画像を生成``` → ```生成した画像を写真アプリに保存``` → ```写真アプリから最新の画像を取得``` → ```Evernoteに取得した画像を任意のノートに追加``` になります。

※ ```生成した画像を写真アプリに保存```は無駄では？と思うと思いますが、なぜかEvernoteに直接画像を追加できなかったため、苦肉の策として写真アプリに生成した画像を保存・取得という無駄なステップを追加しています。

それでは、レシピの詳細になります。

新規ショートカット作成画面を開き、アクションから```QR/バーコードをスキャン```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/0b81b1ee-9855-3e99-6102-cbef2786dbb7.png">

アクションから```QRコードを生成```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/11c913df-da7f-a9c9-12cf-b4341a0d56fd.png">


写真から```写真アルバムに保存```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/7c96adcd-aa4c-0dd2-204f-49eee15733d8.png">

写真から```最新の写真を取得```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/9ff9a3db-d238-b157-96ed-e5893f40038d.png">

アプリの```Evernoteに追加```を追加します。入力は、```最新の写真```を選択します。
テキストは、ここでは先頭に ```二段階認証_```のテキストを追加し、残りのテキストは実行時にテキスト入力するようにしています。最後に、バックアップ対象の任意のノートを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/103874c5-0e3f-8c81-5c7d-3c74c683f0c5.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/7a62e0c5-6e83-1116-599e-dc2e7668a3b9.png">

最後に、スクリプティングから```アプリを開く```を追加し、```Evernote```アプリを開くようにします。こちらのステップは特に必須ではないですが、バックアップが正しくされたかを確認するために、アプリを起動しています。

手順は、以上になりますが、全体のスクリーンショットを載せておきます。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/ddc15a61-6e12-a939-632e-aae2b0379ccc.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/34203e4c-cb73-7021-73b5-6f8025bfd3dc.png">

### 動作

ウィジェットから```二段階認証のバックアップ```のショートカットを選択します。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1332e052-485b-3b4f-998f-8ff1e0632b1a.png">

コードスキャンの画面が起動するので、二段階認証用のQRコードを読み取ります。
ここでは、TwitterのQRコードを使用しています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/0de56bfc-bc7c-e455-b061-6236e2c5d241.png">

Evernoteのダイアログが表示されるので、任意の名称を追加します。
ここでは、```Twitter```を追加しています。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/d2127a00-baba-d5a8-39e3-d0c25f5d3a32.png">

最後に、Evernoteが起動し、```二段階認証_Twitter```の名称でQRコードが保存されていることを確認できます。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/826a9512-8391-4dbd-8585-32af270dd9e5.png">


### 応用

ここでは、二段階認証をテーマに説明しましたが、通常のQRコードにも活用できるかと思います。
また、バックアップの保存先もEvernote以外を選択しても良いですし、自分のメールアドレスに送ることもできるのではないかと思います。

## タイマーを自動開始する

### 概要

NFCタグをトリガーにタイマーを自動起動します。
カップラーメンの３分タイマーや筋トレのタイマーなどに役に立つのではと思います。

### 準備

* ショートカットアプリ
* NFCタグ (対応端末含む)
* オートメーションのショートカット作成

### 手順


ショートカットアプリのオートメーションを開き、オートメーションを新作成します。ここでは、```個人用オートメーションを作成```を選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1bb29659-1a0d-5635-bd3c-a537de54eab2.png">
```新規オートメーション```画面で```NFC```を選択します。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/4a7f2c7d-a1c3-eb11-6ac7-87984ec3ed47.png">
スキャンを選択し、使用したいNFCタグを読み込みます。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/3a3b4537-4e59-b986-1d7f-5da0a42b0047.png">

NFCタグを読み込むと、名称編集用のダイアログが現れるので、任意の名称を追加します。ここでは、3分タイマーとしています。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/674f79b1-0ef9-b1bc-ff68-d0abecb4cb57.png">

次に、アクション選択画面が表れるので、まずは ```App```から時計アプリを選択し、```タイマーを開始```を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/15350ea1-1540-3c77-073d-c19d667ffce7.png">

ここでは、タイマーを３分に設定します。
<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1a7d2662-d185-1c6c-c0fe-c497feabd21a.png">


次に、タイマーがNFCタグが読み込まれたことをわかりやすくするために、アクションから```デバイスを振動させる```を追加します。これは、必須ではありませんが入れておきます。


<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/2d514a90-9259-e541-fbb4-702d28c530a8.png">

次に、これも必須ではないですが、時計アプリを起動するアクションを追加します。スクリプティングから```アプリを開く```を追加し、時計アプリを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/7628d624-e7cb-93b3-90ec-3161b077ef13.png">

最後に、ナビゲーションバーの次へボタンを選択し、```実行の前に尋ねる```をオフにした上で、完了ボタンを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1d6beaed-184f-968f-ffc7-669529adbdb3.png">

これで、NFCタグのオートメーションを使ったタイマーが完成です。



### 動作

実際にNFCタグを読み取った動作のgifになります。時計アプリの起動後はタイマータブに自動的に切り替わらないないため、ここだけは手動で切り替えています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/87e3069b-60fb-eb87-6413-655d5e92a795.gif">


### 応用

タイマーの時間をあらかじめ調整したり、タイマーの時間を実行時に指定することでいろいろなケースにタイマーを活用できるかと思います。

## 特定のアイテムに関連したアプリを起動する

### 概要

アイテムにNFCタグを貼っておくことで、アイテムに関連したアプリを素早く起動します。
例えば、体組成計で体重を計測する際に、```体組成計アプリを立ち上げる``` →　```体組成計に乗って計測をはじめる```といった動作をよく行います。ここで問題になるのが、体組成計アプリを探して起動することに時間がかかってしまうことがあることです。この問題を解決するために、体組成計アプリ自体にNFCタグを貼り付けておいて、NFCタグを読み込むことで体組成計アプリを起動するようにします。

### 準備

* ショートカットアプリ
* 体組成計
* 体組成計アプリ
* NFCタグ (対応端末含む)
* オートメーションのショートカット作成

### 手順

まずは、体組成計にNFCタグを貼り付けておきます。

次に、```タイマーを自動開始する```で解説した時と同じように、新規オートメーションを作成し、 NFCタグをスキャンします。

その後、スクリプティングの```アクション```を開き、```体組成計アプリ```を起動するように設定します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/5e592e38-f23c-0488-f6e5-9c1fc5a7e318.png">


今回のレシピは、アプリを起動するだけであるため、手順は単純ですね。

### 応用

NFCタグを読み取って、体組成計アプリを起動するというレシピは一例で、他にいろんなアイテムにNFCタグを貼り付けて、関連するアプリを起動するというのは応用が効くのではないかと思います。

例えば、

* 銀行カードにNFCタグを貼り付けて、関連する銀行アプリを起動するようにする。
* 低温調理器具(例えばAnova)にNFCタグを貼り付けて、Anovaアプリを起動する
* 社員証に組み込まれているNFCタグを読み取って、入退室管理アプリを起動する。

などなど、アイテムやコンテキストをトリガーとしたショートカットを作成するのは、おもしろいかもしれませんね。


## スマートロックの解錠・施錠

### 概要

スマートロックを導入したドアをSiriショートカットを使って、解錠・施錠できるようにします。
Siriショートカットは、Siriの音声コマンドでショートカットを実行できるのですが、ウィジェット経由で呼び出したり、NFCタグをトリガーに呼び出すこともできます。

このレシピでは、スマートロックのSesameを使った例について解説します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1b4b72bf-5a68-64d0-e36a-67b95a6544e2.jpeg">

### 準備

* ショートカットアプリ
* [Sesameのスマートロック](https://jp.candyhouse.co/)
* [SesamiのWifiモジュール](https://jp.candyhouse.co/)
* [Sesamiアプリ](https://apps.apple.com/jp/app/sesame-%E3%82%BB%E3%82%B5%E3%83%9F/id1038881712)
* ショートカットの作成

### 手順

SesameのスマートロックとWifiモジュールをセットアップ済みの前提で解説します。

Sesameを使ったショートカットアプリはあらかじめSiriショートカットが定義されているため、比較的に簡単なのですが、Siriショートカットをどこで追加するのか比較的悩みました。

Siriショートカットを追加するには、ショートカットアプリのギャラリータブを選択し、お使いAppからショートカットの```全て表示```を選択し、お使いAppからショートカット画面にセサミのSiriショートカットが配置されています。
※ ただし、たまに表示されないため、このあたりのロジックがどうなっているかが正直わかりません。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/0af402cf-6d63-b1bf-ef89-21bd286884e4.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/919da891-9e51-15b2-677a-f28985b8824f.png">

ここで、```「home」を解錠```と```「home」を施錠```を選択し、Siriに追加することで、Siriショートカットとして呼び出すことができるようになります。


### 動作

ウィジェットから解錠用のSiriショートカットを動作させた時は、次のようになります。

![RPReplay_Final1576945820 2 3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/35f98e95-43c4-347d-9d29-cb3844de6b99.gif)

ウィジェットから施錠用のSiriショートカットを動作させた時は、次のようになります。

![RPReplay_Final1576945856.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/12078935-86d5-41aa-b3c5-47467f08d904.gif)


### 応用

NFCタグのオートメーション経由でSesameのSiriショートカットを呼び出すことで、NFCタグを読み取るだけで解錠・施錠できるようになります。
※ NFCタグのオートメーション自体は、設定した端末でのみ有効なため、他人がNFCタグを勝手に読み込んで解錠・施錠されるような心配はありません。

例えば、ドアの前部分にNFCタグを貼り付けておいて、すぐに解錠ができるようにしています。
ただし、Wifiモジュールとの通信ラグが結構発生し、5秒から10秒くらい待たされるので、急いでいる時はSesameのアプリから操作した方が、解錠・施錠ともに速いかもしれません。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1f19261c-5c7a-a53a-8859-930dc9b70e51.jpeg">

## Google Assistant経由で機器を操作する

### 概要

Google AssistantをSiriショートカットから呼び出し、Google Assistant経由でGoogle Homeを操作します。例えば、Google HomeでSpotifyの音楽を流したり、Nature Remoに対してエアコンをONにする操作ができたりします。

### 準備

* ショートカットアプリ
* Google Assistantアプリ
* Google Home
* ショートカットの作成

### 手順

Google Assistantアプリは、Siriショートカットに対応していため、このSiriショートカットをウィジェットから呼び出すようにします。

このGoogle AssitantアプリのSiriショートカットですが、Sasame同様にSiriショートカットをどこから追加すれば良いか分からず結構悩みました。

Siriショートカットを追加するには、どうやらGoogle Assistant上で一度検索を行う必要があるようで、検索を行なった後に、ショートカットアプリを見てみると、追加するアプリやギャラリー上に、Google AssistantのSiriショートカットが表示されるようになりました。

ここでは、Google Assistant経由でGoogle HomeでSpotifyを再生する手順を解説します。
ただし、Google HomeとSpotifyが既に連携済みであることと、Google AssistantとGoogle Homeの連携ができていることを前提とします。

まずは、Google Assistantアプリを起動し、アプリに対して ```Google HomeでSpotifyを再生して```のように音声で指示を行います。この動作で、Google HomeからSpotifyの音楽が再生できれば、OKです。

<img width="40%" alt="IMG-2018.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/2d60b9b2-9512-23da-7bbd-ed84fa17a083.png">

次に、ショートカットアプリを起動し、アクション追加画面で```App```を選択し、```Assistant```を探します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/8bcc5882-905e-9818-6d2c-4bdd93d2fce1.png">

Assistantを選択し、先ほど音声で指示を出した```Google HomeでSpotifyを再生して```のショートカットがあることを確認し選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/62a04f7d-1b67-ad22-af30-3db1eadf8f1d.png">

次の画面で、実行に表示をOFFにし、次ヘボタンを選択します。
ショートカット名には任意の名称を追加します。ここでは、```Google HomeでSpotifyを再生```としました。最後に、完了ボタンを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/cf320f38-ff1d-01f9-9d10-a626d810c7ec.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/968156e6-5bd8-5b9e-1fc4-faea341a8f6b.png">

これで、マイショートカットに作成したショートカットが表示されるので、ウィジェットからもショートカットを呼び出せるようになります。

### 動作

マイショートカット画面から```Google HomeでSpotifyを再生```のショートカットを起動したgif画像です。

![RPReplay-Final1576949647.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/c4f78b7d-b5ec-0cc4-b362-1f6edba12555.gif)


### 応用

ウィジェット経由でGoogle AssitantのSiriショートカットを呼び出すことで音声を出さずとも指示を出すことができて便利です。これも、NFCタグのオートメーションと組み合わせるといろいろと活用できるのではないでしょうか。

## SwitchBotでエントランスを解錠

### 概要

SwitchBotを活用して、エントランスの自動解錠を行います。
インターフォンを押した後に、IFTTT経由でSwitchBotに指示を出し、SwitchBotにインターフォンの応答と解錠を代行してもらいます。

※ ちなみに、このレシピはタイミングが大事で、ネットワークの遅延などでタイミングが合わずによく失敗するため、十分に活用できていません。普通に鍵を使った方が速いかもしれません。まあ、やってみたかっただけです。

### 準備

* ショートカットアプリ
* SwitchBot x 2台
* SwitchBot Hub
* IFTTT
* IFTTTのアクションの作成
* ショートカットの作成

### 手順

まずは、SwitchBotを準備し、```インターフォンのボタンを押す```用のSwitchBotと```解錠ボタンを押す```用のSwitchBotを用意します。


<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/0f5747cf-6e69-5505-6672-080e1239eea6.png">


SwitchBotとIFTTTの中継用にSwitchBot Hubを準備します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/f39942ec-f565-2b0b-b5df-cdb9cf09d47c.png">

SwitchBotとSwitchBot HubをSwitBotアプリ経由で接続する必要がありますが、ここでは省略します。
SwitchBotの公式サイトを参照してください。

次にIFTTTのアクション設定を行います。
まずは、プロフィールボタンから```Create```を選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/e579b242-7ce4-e3c0-380d-76e48975a31c.png">

次に　```This```を選択し、```Choose a service```画面でWebHooksのサービスを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/2e6a0f33-a1dc-c41f-3240-47834ac7fa89.png">

```Choose trigger```画面で、```Recieve a web request```を選択します。その後、
```Complete trigger field```で```Event Name```を設定します。ここでは、```インターフォンのボタンを押す```用の```interphone```を指定しました。設定後、```Create trigger```ボタンを押下します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/eaa01321-e314-18c6-127a-26be2d8a386f.png">

次に ```That```を選択します。```That```では、SwitchBotとの接続設定を行います。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/820f7bf3-ba88-107c-ea28-bb966549b605.png">

```Choose action service```画面で ```SwitchBot```のアクションを選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/a7f629c7-bd3d-11b2-bad6-9b9e78c6bfa3.png">

```Choose a action```画面でたくさんのアクションが表示されますが、```Bot press```を選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/c831224a-6443-f3bb-8f44-282c23b76178.png">


次に、```Complete action field```画面では、接続するSwitchBotのデバイスを選択します。
画像では２つのデバイスが選択されていますが、```インターフォンのボタンを押す```用のSwitchBotを指定します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/fad1b934-c2ac-e4b0-ed8c-bb516b3db57c.png">

これで、```インターフォンのボタンを押す```用のSwitchBotの設定は完了ですが、同様に ```解錠ボタンを押す```用のSwitchBotの設定を行います。ここでは、手順が同じため詳細は省略します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/429421f5-94cd-442d-880f-91ac2e4681d9.png">

上記で作成したIFTTTのWebHookは以下のURLに対してリクエストを投げることで実行されます。

```
$ curl -X POST https://maker.ifttt.com/trigger/{event}/with/key/{自分のAPIキー}
```

ここからは、ショートカットを作成します。

新規ショートカット作成画面を開き、```URLの内容を取得```のアクションを選択します。
このURLに```インターフォンのボタンを押す```用のWebHookのURLを指定します。
ここでは、```https://maker.ifttt.com/trigger/interphone/with/key/{自分のAPIキー}```を指定します。

この後、特に必須ではないですが、```デバイスを振動させる```アクションを追加しています。
※ 実際に処理が進んでいるか確認するためのデバッグ用途です。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/76863ea5-10e4-4385-7f43-1a1f5140e899.png">


次に、もうひとつ、```URLの内容を取得```のアクションを選択します。
このURLに```解錠ボタン```を押す用のWebHookのURLを指定します。
ここでは、```https://maker.ifttt.com/trigger/unlock/with/key/{自分のAPIキー}```を指定します。

ここでも同様に、```デバイスを振動させる```アクションを追加しています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/f3e47a35-bab0-9fe9-48d2-44b7c394ce2b.png">


２つ目のAPIのWebhookを叩いた後に、スクリプティングから ```待機```アクションを追加して、10秒待機します。
※ この待機アクションを追加しているのは、次の理由のためです。
IFTTT経由でSwitchBotと連携する際に、```インターフォンのボタンを押す```と```解錠ボタンを押す```の２つのWebHookのイベントを作成したのですが、これらのイベントのAPIに対して連続でAPIを叩くと、順番が前後したりする可能性があったため、注意が必要です。
例えば、```インターフォンのボタンを押す```→```解錠ボタンを押す```→```インターフォンのボタンを押す```のAPIを順番に叩くと、```インターフォンのボタンを押す```→```インターフォンのボタンを押す```→```解錠ボタンを押す```のように処理が前後する可能性があります。このバグ？にハマって時間を無駄に使ってしまいました。
一時的な解決策として今回は、```インターフォンのボタンを押す```→```解錠ボタンを押す```の後に、数秒遅延させて```インターフォンのボタンを押す```を最後に実行するようにしました。

最後に、```URLの内容を取得```のアクションを追加し、```インターフォンのボタンを押す```用のWebHookのURLを指定します。これは、インターフォンの終話を目的としています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/c04b7e0c-141c-6436-cee4-7fae388142f7.png">

※ ```インターフォーンのボタンを押す```箇所のボタン部分はなかなかSwitchBotと相性が悪く、SwitchBotが完全にボタンを押し込めない状態になることがありました。対策として、クッションを間に挟むことで押し込む動作を補強するようにしました。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/aef74991-9f54-4476-62f9-7bc3ad0b7d12.jpeg">


### 動作

随分わかりにくいですが、SwitchBot Hubにリクエストがいくと、SwithBot Hubが点滅し、SwitchBotが動作します。一瞬、赤いランプが光る箇所は、解錠ボタンが押された時になります。

※このgif画像では、３番目のAPIリクエストの動作部分がなぜか切れて写っておりません。

![IMG_0002 3 2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/a61eae20-72e8-fe49-c12e-8fd16075cc8c.gif)


### 応用

今回のレシピでは、エントランスの自動解錠にSwitchBotを活用しましたが、インターネット経由（あるいは、ローカルネットワーク）で物理スイッチを押したいケースにいろいろと活用できるのではないかと思います。


## SSH接続でサーバに処理をさせる

### 概要

ショートカット経由で、SSH接続しサーバーに対して任意のコマンドを実行します。
ここでは、サーバ上で単純にdateコマンドを実行し、サーバー日時を表示します。

### 準備

* ショートカットアプリ
* SSH接続用のサーバー

### 手順

新規ショートカット作成画面を開き、スクリプティングから```SSH経由でスクリプトを実行```を選択します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/3df72b8c-9a59-3c51-d4b9-087898bef047.png">

接続先の情報を設定します。ここで注目したいのは、iOS12では SSH接続でパスワード認証する必要があったのですが、iOS13.1から公開鍵認証ができるようになっています。
ここでは、公開鍵認証を使用し、認証項目で```SSHキー```を選択します。
公開鍵をサーバー上に追加するには、```SSHキー```項目を選択すると、画面が開くので、この画面で新しいキーを生成するとともに、```公開鍵を共有```から任意の場所に公開鍵を配布することができるようになります。公開鍵をサーバーに追加する方法については省略します。


<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/4f78defa-337d-c028-8266-0eb1d97dbb4f.png">

次にサーバの実行結果を表示するようにします。実行結果を表示するには、```クイックルック```や```通知を表示```などいろいろ方法がありますが、ここでは```通知を表示```アクションを追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/b8f9719c-a6e1-6f52-3b5e-53dcd7d0232b.png">



これで、今回のレシピは完了になります。

### 動作

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/cafd6672-89ca-ff3f-95ab-f3aa64d9c0eb.gif">


### 応用

SSH接続して任意のコマンドを実行できるので、いろんなことができそうですね。
私が試してみたのは、サーバ上にヘッドレスChromeのpuppeteerをインストールして、自分が住んでいる地域の天気をWebページのDOMをスクリーンショットに保存して画像を表示させたり、同様にGithubの草画像のスクリーンショットを保存して画像を表示するようなことをしました。

その他、外出先から簡単にサーバーの起動・再起動・停止をショートカットのメニュー選択経由で実行してみるのも利便性が高い様な気もします。

今後、ラズベリーパイにSSH接続して任意の機器を操作するようなことも試してみたいと思っています。


## 情報共有に活用する。

### 概要

ショートカットは情報共有の際にも活用しています。
気になった記事をTwitterやSlackに投稿したいこともありますよね？
私はTwitterを投稿すると同時に、Slackのチャンネルも同時に共有したいなーと思った時にこのレシピのショートカットを使用しています。

ここでは、記事の共有シートからTwitterとSlackに投稿する方法について紹介します。

### 準備

* ショートカットアプリ
* Twitterアプリ
* Slackアプリ
* SlackのチームIDと投稿先のチャンネルID
* ショートカットの作成

### 手順

まずは、記事から共有するための記事のタイトルとリンクを取得します。

作成するショートカットでは、共有する記事のリンクを受け入れる必要があるため、ショートカットアプリのそのための準備として、ギャラリータブにある共有のためのショートカットを選択し、```Twitterでリンクを検索```をショートカットに追加します。


<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/2ef4340f-3d2e-880a-c8f6-70789ffeb067.png"><img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/dc1388cb-c293-72a3-db50-8ebf131fd658.png">


このショートカットをベースに変更を加えていきます。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/6ebaa5c4-264c-401e-e7db-99296d10fc3d.png">

また、ショートカットの名称を任意に変更します。ここでは、twislakに変更します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/21220a8c-743e-23e2-ab8f-422d0962d2f8.png">

まずは、受け入れるの項目を```URL```だけ選択し、それ以外の項目は一旦全て削除します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/80384a7c-e801-726e-15bf-ae8a0516945e.png">

次に```変数を設定```のアクションを追加し、変数をURLにします。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/7a7f3265-e06b-dea0-2d0e-1ce75db498f3.png">

URLのタイトルを取得するために、```名前を取得```アクションを追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/a633f985-176a-dde5-a011-dcca02c757bb.png">

次に、```テキスト```アクションを追加し、取得したタイトルをもとに、共有するテキストを作成します。
ここでは、```"タイトル" URL```の形式でテキストを作成しています。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/087e44b6-694a-0b30-cd6a-1d75c5862f31.png">

※ 実際に上記の共有するテキストが作成できているかを確認するために、一度、```クイックルック```アクションを追加して、動作確認してみると良いかと思います。

これで、共有するテキストの準備が整ったので、まずはTwitterの投稿のアクションを追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/d8d9ccba-7f0b-4421-b290-ca63c14e02e3.png">

これで、Twitterの投稿の設定は完了になります。
次は、Slackの投稿の設定を行なっていきます。

Slackの投稿を行うには、いくつか方法があるかと思います。

* Slackのショーカットを使用する。（これは使用したことがないのでテキストの共有ができるかはわかりません。というよりも、さっきこのショートカットがギャラリーにあることを知りました。）
* SlackのAPIを使用する。
* SlackのURLスキームで指定のチャンネルを開き、手動で投稿する。

理想では、SlackのショートカットやSlackのAPIで投稿することでTwitterとの同時投稿が実現できるように思えますが、ここでは```SlackのURLスキームで指定のチャンネルを開き、手動で投稿する```を実現したいと思います。

ここで検討する必要があるのは、Slackの任意のチャンネルを開くURLスキームの仕様が何であるかです。
これは、まあSlackの公式ページの[Deep linking into Slack clients](https://api.slack.com/docs/deep-linking#open_a_channel)に記載されているのですが、
```slack://channel?team={TEAM_ID}&id={CHANNEL_ID}```の形式になっています。
つまり、```TEAM_ID```と```CHANNEL_ID```を調べて、構築したURLスキームのURLをショートカットアプリで開けば、Slackのアプリが起動し、指定のチャンネルへの自動遷移ができるということです。

ただし、自分のワークスペースのSlackの```TEAM_ID```と```CHANNEL_ID```はすぐに分かる気がしますが、外部のワークスペースの```TEAM_ID```と```CHANNEL_ID```を調べる方法はあるのでしょうか？？

もしかするとすぐに分かる方法があるかもしれませんが、私は[‎Charles Proxy](https://apps.apple.com/jp/app/charles-proxy/id1134218562)のiOSアプリでパケットキャプチャすることで調べることができました。詳細については、割愛しますが、Slackアプリを開いて、指定のチャンネルを開いた時のリクエストURLなどを参照することで特定できるかと思います。

Slackの投稿設定でずいぶんと長くなりましたが、ようやくSlackの投稿ができるようになりました。

その前に、Slackで手動投稿するためのテキストをクリップボードにコピーしておきます。
そこで、```クリップボードにコピー```アクションを追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/1040d7ae-fc69-e7a5-4a75-1e8d4ebdf35a.png">

ここから、Slackアプリの指定のチャンネルに移動する設定になります。

URLスキーム設定用の```URL```アクションを追加し、```slack://channel?team={TEAM_ID}&id={CHANNEL_ID}```の形式の文字列を追加します。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/14fb3a82-80e8-4e68-1d0e-953426872c78.png">

最後に、```URLを開く```アクションを追加して完了になります。

<img width="40%" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/dc504577-a9c4-6c36-d95f-566bc41173b1.png">

### 動作

作成した```twislak```のショートカットを使用して、気になる記事のTwitter投稿とSlack投稿を行なったgif画像になります。最後に手動でペーストするのは若干手間ですが、他の方法も模索していきたいと思います。

![RPReplay-Final1576950909.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110575/180dc573-cd9a-c7b1-f394-48fa1bdaf1c1.gif)

### 応用

今回のレシピでは、URLスキームの起動を活用しました。他のアプリにあるURLスキームやSiriショートカットを調べることで、便利なショートカットが実現できるかもしれません。

# さいごに

ここで紹介したレシピはほんの一部でまだまだ活用方法はたくさんあると思います。

* Pythonの実行環境のPythonistaアプリと連携する
* 任意のAPIを叩く
* 任意のWebページでJavaScriptを実行する
* SSH接続で外部サーバーと連携する

など、いろんなことができるかと思います。これからも、活用方法を見つけていたきたいと思います。
それでは、自分なりのショートカットでいろいろ自動化して楽しみましょう！enjoy!!