普通は誰もやらない！？ iOSのオススメショートカット

Ateam Lifestyle Advent Calendar 2020の22日目は
株式会社エイチームライフスタイルの @yutaroud が担当します。

## はじめに

皆さんこんにちは！ ちょっとでも人生を楽にしたい、そんな人が僕です。
皆さんはiOS12から使えるようになった、ショートカットというアプリをご存知ですか？
ご存知でない方は、iPhoneの中に下の画像のアプリがないかを探してみてください!  

<img width="200" alt="ショートカットアプリのアイコン" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/bad3f167-3680-c003-d429-75f574b1a01d.png">

見つかりましたか？

このショートカットアプリ、一言で言えば
「自分で好きな動作を予め組んでおくことで、繰り返しを楽にする」アプリです。

このショートカットアプリを使って、普通の人は以下のようなことをします。

* 電車乗り換え案内をワンタップで検索できるようにする。
* デフォルトのカメラを盛れるカメラに変える。
* LINEで帰るよ〜の連絡をワンタップで。
* ちょっと変わった使い方だと、充電をトリガーに、充電音を変えている方も...(某ゲームのレベルアップ音など)

などなど。

今回は上記のことは、この記事では説明しませんので、
気になる人は、文末に用意した参考文献リストの中身を読んで作成してみてください。

ということで、
今回はこのショートカットアプリの中でも、普通誰もやらない、けれど便利なショートカットを
お伝えします！

## ショートカット化する条件
本題に入る前にもう一つだけお付き合いください。
皆さん、ショートカットがなんとなく便利そうなのは、わかっていただけたかと思います。
早く本題に入ってくれ！と思うかも知れませんが、
私のショートカットへのこだわりを一つだけお伝えさせてください。

闇雲にショートカットを沢山作っても、ショートカットの中から目当てのものを探すのに今度は時間がかかってしまいます。
ですので、一つ私はルールを設けています。

以下がショートカット作成のルールです。

1. 週に1回以上定期的に行うもの
2. トータル10秒以上かかるもの
3. ショートカット前後の時間短縮が5秒以上あるもの

要は、たまにしかやらないタスクが軽いものをショートカット化してもしょうがない。ということです。
また、ショートカットをせっかく作成しても、時間短縮が全然できていなかったら無駄になってしまいます。

面白いからとどんどんショートカットを追加していると、ショートカットを探すのに労力を使うようになります。
最初は陥りがちな罠なので気をつけましょう。

## 実現すること
では、いよいよ本題です。

今回はiPhoneでSSH接続をし、そのSSH接続先で叩いたスクリプトの結果を
iPhoneのアプリ上で有効活用します。

iPhoneでSSH接続できるの？と思った方　できます。
もしかしたら、知っていたエンジニアの方も多いかもしれませんね。

でも、実際にSSH接続のショートカット機能を普段から利用しているエンジニアの人は
あまり見たことが無い気がします。

今回は日常で使えそうなSSH接続のショートカット機能レシピを紹介します！
以下のレシピを紹介したいと思います。

1. 予め決めた条件で、近くのご飯屋さんを探す
2. NFCタグで置くだけ簡単時間管理

## 使用技術・ツール
iPhone iOS12以上 (必須!!)
SSH接続可能なサーバー (必須!!)
python3 
[ぐるなびAPI](https://api.gnavi.co.jp/api/tools/)
[toggleAPI](https://github.com/toggl/toggl_api_docs/blob/master/chapters/workspaces.md)

おまけ pythonista (¥1,220のiOS 有料アプリ)

今回はご飯屋さんの検索に[ぐるなびAPI](https://api.gnavi.co.jp/api/tools/)を使いますので、事前にAPIのアクセスキーを発行してください。
複雑な手順ではないので、ここではAPIのアカウント取得方法については割愛いたします。

[toggleAPI](https://github.com/toggl/toggl_api_docs/blob/master/chapters/workspaces.md)
についても、ProfileにあるAPITokenを使用しますので、事前にアカウント登録が必要です。

toggleは時間計測用のツールですので、馴染みのない方は参考文献に
紹介記事があるので、そちらを参照ください。

### ショートカットアプリでのSSH接続設定

まずショートカットアプリを開きます。
右上の+ボタンを押すと新規ショートカットが作成できます。
アクションを追加→スクリプティンを選択
スクリプティンを選択すると下記画面がでてきます。
この中からSSH経由でスクリプトを実行を選びましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/a74088f7-5861-3d4e-5d7f-27ec4dc19c2a.png" width="300" alt="ショートカットアプリのssh手順１">
選択すると、下記のような形でホストやユーザー等の指定が出てくるので、全てを入力し、
次へを押せば完了です。
入力の項目は一旦空白で問題ないです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/56b7b240-ab57-bf37-c871-090b864435f6.png" width="300" alt="ショートカットアプリのssh手順2">

その後、名前入力をし、完了を押すと
以下のように、ショートカットができているはずです。
作成したショートカットをタップし、実行してみましょう。  
エラーが特にでなければ接続成功です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/9cc87a5b-196c-0447-46b2-3040f5e9bf3d.png" width="300" alt="ショートカットアプリのssh手順3">


#### 予め決めた条件で、近くのご飯屋さんを探す

今回はpythonを使います。 ssh接続先のサーバーでpythonを実行できるようにしてください！(割愛します)

[コードはこちら](https://github.com/yutaroud/automatic_shortcut)

もともとこれを作ろうと思った背景は、ランチ行こうと思ったときに
毎回食べログなどで条件絞って検索するのがめんどくさいなと思ったことがきっかけ。

もう何食べたいか入れたら、自分の予め決めた条件で出てきたら楽だなあと思い、作成します。

```python
def get_shop_list(address, freeword):
  params = urllib.parse.urlencode({
    'keyid': key,
    'address': address,
    'freeword': freeword,
    'parking': 1,
    'lunch': 1,
  })
  response = urllib.request.urlopen(url + '?' + params)
  return response.read()
```

ぐるなびAPIでは、パラメータを渡すことで条件を絞ることができます。
get_shop_listで渡しているパラメータで、予め条件を指定しておきます。
今回は駐車場があるところ、ランチ営業しているところを選択。 住所とフリーワードは後からssh接続する際に入力します。

特にコード内に難しいところは特にないので、コードの説明は割愛します。
ショートカットの設定を続いて紹介します。

現在地を取得したときに取れるのが下記フォーマットで返ってきます。

```
郵便番号  
住所(市区まで)
町村番地
日本
```

このままのフォーマットでは使用できないため、必要な住所のみを抜き出しているのが
下記ショートカットの設定です。

郵便番号を削除、日本を削除、改行とスペースを削除しています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/404a2662-2b98-15d5-00a0-9dbfdd1e6967.png" width="300" alt="近くのご飯屋さんを探す手順1">

続いて、スクリプティングのテキストを要求で、食べたいものを入力するようにしています。
Siriを使うこともできるので、Siriから入力することも出来ます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/c7bbc5ea-0cca-b73e-f64a-28185e2e6517.png" width="300" alt="近くのご飯屋さんを探す手順2">

sshの中身は下記のようになっています。
ファイルをコマンド叩いて実行しているというだけです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/1de097f3-47dd-755e-551b-afaaecac0ec9.png" width="300" alt="sshの中身">

そして最後は返ってきた結果をマップで表示しているだけ！

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/693a9859-23a5-27ee-df79-1ab8b7e7d801.png" width="300" alt="近くのご飯屋さんを探す手順3">

##### 試してみる

実際試してみると....

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/753cc0fa-a14e-4d75-1448-1eb345fbcd26.png" width="300" alt="ラーメン">

ラーメンは出てきたけど、どこだここー！！！
まだまだブラッシュアップが必要みたいです...




#### NFCタグで置くだけ時間管理

皆さんNFCタグ知ってますか？

一言で言えば 「近距離で読み込めて、動作を関連付けできるタグ」です。
通信範囲は 0〜10cm ほどで、iPhone をタグに近づけると、情報の読み取りや、設定の変更などができます。

このNFCタグと時間計測ツールのToggleを使って簡単、時間管理を実現しちゃいます。

これを作ろうと思ったきっかけは、毎回Toggleで
「クリック、キーボードで何の時間か入力」
というこの動作がとても煩わしく感じ、物理的に何か置くだけ & 声で言えば勝手に登録されるようになれば
かなり楽だなと思ったからです。


こちらは凄くシンプルです。
Siriで音声入力→SSHでコードを叩くだけ。
コードは[github](https://github.com/yutaroud/automatic_shortcut/tree/main/toggle)で公開しております。

コード解説は同じく特筆すべき点ないので、割愛しますが、
実行されているタスクがあるかを確認し、あれば停止する。なければ起動する。というだけのシンプル構成です。

``` python
def main(description):
  work_space_id = get_workspace_id
  project_id = get_projects(work_space_id)
  running_id = get_running_time_entry()
  if running_id == None:
    start(description, project_id)
  else:
    stop(running_id)
```

ショートカットの全体図はこんな感じです↓

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/2921ff4b-802e-0ecf-df50-b0c3bfb3b95b.png" width="300" alt="トグルの設定">


##### 試してみる
さて、先程のマップはあまりうまく行きませんでしたが、次はどうか。

Siriで音声に入力を試すと↓下記のように出ます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/000033d5-5439-c85c-93b8-249fd005ebb8.png" width="300" alt="音声入力の図">

NFCタグにタッチ！
ハローと入力して、その後またショートカットを起動し止めてみました。
果たして記録されているのか...?

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224825/f8c5d925-7fb0-4c69-69ba-2ee1085d3304.png" width="300" alt="トグルに登録されているの図">

↑おおー記録されています👏
これで楽に時間管理ができそうです。

今回は計測のスタート, ストップしかやらなかったが
他にも1日の終わりにログをどこかに記録するようにしたり
色々やれることはまだまだあるはずなので、アップデートかけていきたいと思います。


##### おまけ

sshで色々値を受け渡してゴニョゴニョとやったのですが、こんなめんどくさいことをさらに楽にしてくれるものがありました。

pythonistaを普段から使っている方いらっしゃいますか？
私は名前は聞いたことあったのですが、今回初めて使用しました。

ショートカットアプリからpythonistaのコードを実行するだけで良いので、
諸々の準備や手間が省けます。

今後も拡張していきたい人、より便利に楽にしたい方にはおすすめです。

## まとめ

以上、普通は誰もやらない！？iOSのおすすめショートカットでした。

改めて、お伝えしておきたいことは

* ショートカットは自分なりのルールを決めて作ると◯
* iPhoneでもSSH接続ができる。SSH接続できれば、その先で何でもできる。
* アイディアは無限大！

以上です！

皆さん是非、面白いショートカットや便利なショートカットがあれば、コメント欄で共有してくださいね！

## 終わりに
明日は @hase0716q さんが記事を書きます！ 
とてもユニークな方なので、どんな記事か楽しみです！

それでは皆さんよいお年を〜👍

### 今回のコード
ご自由にお使いください。

[コードはこちら](https://github.com/yutaroud/automatic_shortcut)

### 参考文献
ショートカットアプリを使ったことない人はまず↓を読んでみてください。

* [iPhone『ショートカット』アプリが便利！使いこなし方やおすすめの設定法を紹介します](https://time-space.kddi.com/mobile/20191120/2783)

toggleについて

* [Toggl（トグル）を使って効率的に仕事の時間管理！](https://utilly.jp/2019/08/17/about-toggl/)

ウィジェットの変更方法

* [iPhone や iPod touch でウィジェットを使う](https://support.apple.com/ja-jp/HT207122)


ぐるなびAPIについて

* [Python でぐるなび API 使ってみた (解説編)] (https://tetomu.hatenablog.com/entry/2018/12/09/192434)

pythonistaの事例

* [Pythonista3でホーム画面から1タップで乗換情報や家までのルートを開く](https://jun-systems.info/articles/train-info-with-pythonista3/)

pythonの関数実行

* [[python] シェルからpythonファイルの関数を実行する](https://qiita.com/kenichi-hamaguchi/items/dda5532f3b218142e7c9)

NFCタグとは

* [我が家が NFC タグだらけの理由](https://phoneappli.net/recruit/blog/2020/06/-nfc.html)

python toggle参考

* [PythonでTogglのAPIをたたく](https://qiita.com/stu345/items/abebeb2da6d97382a7b1)