最近AirPods Proを購入したので、iPhoneには触らずにSiriだけでいろんな操作ができないか試していました。
その過程で見つけた「散歩メモ」が高機能で驚きでした。
機能自体はiOSの「ショートカット」で作られているのですが、APIを使って逆ジオコーディングを行ったり、Goolge MapsのURLを自動的に生成したりと、いままでならばプログラムが必要な機能をノンコーディングで実現しています。
俄然ショートカットに興味が湧いたので、お正月休みの時間でちょこちょこ触っていたのですが、とても楽しい!
簡単な部品を組み合わせていていくだけで便利なものが作れますし、APIを叩いてJSONを解析するような複雑なものも作れてしまいます。
そこで、ショートカットを使って「10年日記」アプリと同じことができないかをやってみました。
「10年日記」はとても気に入って「いた」アプリで、過去の同じ日付の日記が一覧で見れるため、自分の成長や成長してなさが分かってとても楽しいです。今でもサービスが続いているのですが、ある時から肝である「クラウド同期」の機能が、10年日記の独自サーバでしかできなくなり、そのサーバの詳細(暗号化の有無など)が不明なので使用をやめました。(以前はDropBoxやGoogle Drive経由で同期ができたのですが)
求める機能として
・クラウド同期(いろんな端末から記入や閲覧をしたい)
・10年日記みたいに過去の同一日付の日記を見たい
を考えると、「10年日記」一択だったのでとても残念です。Google Drive経由のバックアップが復活すればまた使いたいくらいなのですが。
代替案として、OneNoteやEvernoteなどのクラウドメモを試したのですが、手動でタグを作るのが面倒だったり、スマホ用のクライアントアプリが重くてあまり好きじゃなかったりとしっくりきていませんでした。
そこで、ショートカットを使って日付タグの自動生成をしつつ日記を作れるメモアプリを探していたところ、ショートカットの連携対象アプリとして「Bear」が出てきたので使ってみました。そうしたらとても使い勝手がいい!
良い点は沢山あるのですが、特に秀逸なのが、タグを文中のどこにでも何個でも書けて、しかも自動的に階層構造になるところ。
「#レシピ/和食」というタグを打てば、レシピ>和食 のようなタグの階層構造ができます。それに加えて「#ToDo/買い物」というタグをつけておけば同じ記事が買い物リストにもなります。
もう1つが、iOSの共有機能からの連動がすごくやりやすいこと。Twitterで気になったツイートや、見つけたURLなどを、同じ記事に追加できます。例えば「レシピ」「PC購入検討」などのノートを作り、見つけた記事やツイートを共有機能で追加していく使い方です。
BearはPro版を購入すれば、iPhone/iPad/MacOS間でiCloudを使ったクラウド同期ができるので、どの端末からも記入・閲覧できますし、タグの階層構造を使って「月/日」というタグを用意すれば10年日記と同様に過去の同一日付の日記をまとめて閲覧できます。
そこで、ショートカットを使ってBearの日記記事を自動的に作る仕組みを考えました。
実は「10年日記」にはもう1つ優れた機能があって、iOSのカレンダーに入っている予定を自動的に日記の本文に入れてくれます。僕はSwarmのチェックインの履歴をIFTTTでGoogle Calendarに連動しているので、日記を書くときに、この日は「何をした」「ここに行った」というのが自動で入るわけです。これがとても書きやすい。
それを実現するためにショートカットを作成しました(まだショートカット歴3日くらいなので、もっといい書き方があるかもです)
※実行するには後述の「特定日のカレンダー取得」が必要です。不要な場合は手順を削除してください。
中身はiOSの「ショートカット」アプリで見てもらえれば分かりますが、ポイントになる点をメモ
・変数にリテラルをくっつけたいときには「テキスト」アクションを使う(使わなくてもできるのかも??)
日付を「MM/dd」にフォーマットした後、先頭に「日記/」をつけてBearのタグとしています。
・特定日のカレンダーを取得するには「yyyy/MM/dd 00:00:00」〜「yyyy/MM/dd 23:59:59」で期間指定すると上手くいくみたい
前述と同じく「テキスト」モジュールを使って、フォーマットした日付に「00:00:00」「23:59:59」のリテラルをつけています。
・カレンダーの検索結果の配列の処理
「繰り返す」モジュール内で、カレンダーオブジェクトの配列として帰ってきたものを1つづつ処理して、タイトルだけをテキストの配列に再格納しています。
開始時間なども必要でしたらカスタマイズしてみてください。
・返却する値をテキストにする
他のショートカットから内部的に使用されるショートカットは、戻り値を明確に指定しておいた方が良さそうです(変数がいくつかあると、どれも戻そうとして予期せぬ結果になりました)。テキストの戻り値を明確に指定する場合は、最後に「テキスト」モジュールに変数を入れておきます。
それにしてもショートカット楽しいですね!電車でつり革につかまりながらでもプログラミングできるので、とてもいい暇つぶしにもなります。
また、Pythonistaと連動できるようなので、Pythonで書いちゃえば事実上なんでもできるのかも!?