mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

iOSのショートカットアプリ


10 December 2019追記
追加で記事を書いた
mecobalamin.hatenablog.com
追記ここまで

iOSのどのバージョンからかわからないけれど
ショートカットアプリがインストールされている

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料
apps.apple.com

"iOS" + "ショートカット"でググると色々出てくる
www.google.com

使っている人多そう
全部確認してないけど検索で引っかかってくる言葉もポジティブなのが多い

試しに睡眠時間を記録するショートカットを作ったのでその過程を残す
このショートカットでできることは、寝る直前、起きた直後に実行すると
その日時をDropboxにあるテキストファイルと
iPhoneのヘルスケアアプリに記録する

コマンドの流れを書くと

  1. 現在の日時を取得する
  2. 今入力したいのが寝ようとしている時間なのか、起きた時間なのかを選択する
  3. もし寝た時間なら日時を一時ファイルに保存する
  4. もし起きた時間なら寝た時間を読み込んで、現在時刻とともにヘルスケアの睡眠分析に出力する
  5. 寝た時間/起きた時間をそれぞれテキストファイルとしても保存する

とこんな感じになる


メインではないけれど一緒に気圧も取得して記録する

iPhoneにもiPadにもショートカットアプリはあるんだけど
ヘルスケアはiPadには入っていないのでiPhoneで作成する
ショートカットのアイコンをタップするとこの画面になる

[ショートカットを作成]をタップすると新規にショートカットを作れる

これが作ったショートカットのキャプチャ
睡眠時間がショートカットの名前で右側の[・・・]をタップすると変更できる
アイコンや色も変えられる
ウィジェトに表示する場合もここから登録する

アクションを一つづつ登録するわけだが
どのアクションがどのような動作をするかはやってみないとわからなかったりする
説明もあるんだけど試してみるのが早かった

アクションを探すのもめんどいけれど
検索ウィンドウにそれっぽい言葉を入れて探した
探して、試すってのをとりあえず繰り返した
覚えてしまえばそれまでなんだけど
初めてのときはやっぱり調べることが中心になる

まず日時と天気を取得するアクションを加える

次に選択肢のリストを作成
アクション"リスト"を使って寝た時間・起きた時間をリストに加える
次にアクション"リストから選択"を加える

リストから項目を選んで条件分岐させる
まずは寝た時間の場合

アクション"if文"を使う
"if"で検索をかけると良い

"もし"のあとに"選択した項目"と入っているけどとりあえず選んで消去する
ここが入力になる
実際消去すると"入力"と出る
"入力"をタップするといくつか選択肢が現れるので
ここでは"マジック変数を選択"を選ぶ
すると入力に使える値が今までセットしたアクションの下に現れるので
"リストから選択"の下に現れた"選択した項目"をタップする

次に"条件"で"次と等しい"を選び、テキストに"寝た時間"を入力する
テキストはリストと同じであれば良い

そして"寝た時間"で行うアクションを作る
まず"日時"を一番最初にセットしたアクションから
取得し一旦テキストに保存する
そしてこのテキストをファイルに保存する
日時の扱いで少し引っかかった
デフォルトの日時表示だと午前1時と午後1時の区別がうまくいかなかったようで
ショートカットを実行させるとエラーが出てた
開始と終了の時間が前後してしまってた

しばらく悩んだが、日時の入力では
次のように日時表示のフォーマットを変えるとうまくいった

yyyy/MM/dd HH:mm:ss

変え方はアクションに出ている"日時"をタップして日付フォーマットをカスタムに変更して
カスタムフォーマットに上記のフォーマットを入力した


アクションは"ファイルを保存"で"テキスト"に変更s売る
ファイルの保存先にDropboxを使った
サービスのデフォルトはiCloudだった
パスはDropboxの一番上のディレクトリを除いたパスを記入する
ルートディレクトリ以下に以下のような
ディレクトリと一時ファイルがあったとして
このパスをそのまま"保存先のパス"に入力する

scripts/shortcut/tmp_gotobeddate.txt

"保存先を尋ねる"はoffで"ファイルが存在する場合は上書き"はonにする
if文には"その他の場合"と"次の場合に終了"のアクションがセットで現れる
"その他の場合"はelse文と同じようだけど今回は使っていない
なんとなく見通しが悪い気がしたので消しちゃった
"次の場合に終了"までが1つの文になる

一時ファイルを使ったのは日時をメモリに保存し続ける方法を知らないのと
後で出てくるテキストファルから必要な情報を取り出すのも面倒な感じだったので
とりあえずこれが楽な方法かと思ってやっている

次に"起きた時間"の条件分岐を作成する
作り方はほぼ同じ
起きた時間の条件分岐の"次の場合に終了"の次からif文を続ける

if文に"選択した項目"、"次と等しい"、"起きた時間"を入力する
アクション"ファイルを取得"を使って一時ファイルを読み込む
サービスはDropbox、書類ピッカーをoff、見つからない場合はエラーをonにする
ファイルパスは保存先のパスを使う

scripts/shortcut/tmp_gotobeddate.txt

ファイルを取得すると内容を読み込んでくれる
これをヘルスケアに記録する
アクション"ヘルスケアサンプルを記録"を使う

種類は"睡眠分析"、開始日は読み込んだ"ファイル"、終了日は"日時"を使う
ここでも日時のフォーマットを変えた

yyyy/MM/dd HH:mm:ss

"値”は3つあるけど意味をちゃんと理解していない
状態のようで、スマートウォッチやスマートバンドを使うと
寝ているのか起きているのかを区別して
ヘルスケアに登録してくれるらしい
今回は自分で決めるのだがとりあえず"就寝"にする
横になっているけど寝てはないってことっぽい


最後に日時と寝た時間なのか起きた時間なのか、
どの選択肢を選んだのかをテキストファイルに記録する
ついでに天気の情報から気圧も保存する

"現在の日付"から"日時”、
”現在地の現在の天気を取得"から"pressure"、
"リストから選択"から"選択した項目"を
それぞれ選択しアクション"テキスト"に記入する

そしてアクション"ファイルを追加"を使う
サービスはDropbox
新しい行を作成はonにする
ファイルパスは

scripts/shortcut/GetPressureAndTime.txt

とした

"ファイル"部分は入力されている文字を削除して
"マジック変数を選択"を使って"テキスト"を選ぶのが良いと思うのだが、
この場合はワンドみたいなアイコンしかないので
アイコンを見つけるのに戸惑うかもしれない


ここまででショートカットは完成
右上の完了をタップして保存してくれて最初の画面に戻る

睡眠時間のアイコンが今作ったショートカットになる
アイコンの右上にある(・・・)をタップすると
ショートカットの再編集ができる
そこに触れないようにアイコンをタップすると
ショートカットの実行ができる
幅の判定が微妙なのか意図した
動作をしてくれないことが多い。。。。
どうにかならないかな


まあとりあえず動いているのでしばらく使ってみよう