
iOSショートカットはiPhoneの使い方を大きく変えました。“何かをしたあとそのデータを利用して何かをする”のように流れの決まっている動作を事前にプログラミングすることで、以後その処理を自動化できます。これがすべてiPhone上で完結するのは大変うれしいです。
ただ、難点もあります。却ってここまで出来ると、折角なら恒久的にデータを保管する術も欲しくなります。プログラマの性でしょうか。
iWorkの『Numbers』をインストールすることで、表の中にデータを書き込むことも出来るのですが、ショートカットから操作できる方法も限られており痒いところに手が届かない印象です。
そこでアプリ『Data Jar』が活躍します。
これはiOSショートカットに特化したアプリで、データ保管を担ってくれます。Set Key Path to ValueやGet value for Key Pathといったショートカットアクションが増えます。
データを保存する
Set Key Path to Valueアクションを使います。

Key Pathは保存先の名前です。読み出すときにも同じ名前を使いますので覚えやすい名前が吉です。例えば Coffee とか Weather とか、なんでも良いです。
Valueには保存したいデータをどんな形式でも指定できます。
キーパスはドット“.”を使うことでJSONのように階層構造をもたせることも出来ます。例えば、 Fruit.Grape というキーパスにすると、 Fruit の中に Grape という名前の保管先をつくってくれます(厳密にいうとDictionaryです)。
これの何が便利かといえば、JSONデータをそのまま渡せる点でしょうか。多くのWeb APIは結果をJSONで返してくれるので、これは便利です。Data Jar自体がJSONパーサを土台につくられているとも言えるでしょう(参考: 同作者の別アプリJayson.appはJSONの閲覧編集に特化したアプリでこれもまた使いやすい!)。
なにかを保存したあとでアプリ『Data Jar』を開くと、保存したデータを見ることができます。このように視覚的に見えるのでKey Pathの仕組みもよく分かりますね。もちろんアプリ上でデータを編集することも出来ます。

小さなアイコンでそれぞれのタイプ(数値・ブール・リスト・ファイルなどなど)も見やすく、良いですね。便利だと感じたらぜひTipを!
Add Value at Beginning of list at Key Pathアクションを使う方法もあります。

キーパスの中に自動的に連番が振られ保存されます。データを蓄積していくような用途にぴったりです(厳密にいうとListです)。
またこの方法ならば先頭(Beginning)に追加する、末尾(End)に追加する、特定の番号(Index)に追加することもできます。
Set〜アクションのオプション
Store Value Asはデフォルトで Automatic になっています。強制的に文字列(Text)として保存したい場合は Text へ変更しましょう。わたしは文字列を保管することばかりなので、ここはお呪いのごとく必ず Text へ変更しています。
Overwriteは Not lists and dictionaries がデフォルトです。指定されたキーパスがListやDictionaryで無ければ上書きしてくれるわけですが、わたしは指定先がなんであれどんどん上書きしてもらって構わない派なのでここは Yes へ変更しています。
データを取得する
Get value for Key Pathアクションを使います。

Key Pathは保存で指定したキーパスを指定します。例えば Fruit.Grape なんかです。
キーパスがList形式ならば Fruit.1 のようにドットに続けて数字を指定するとその番号(Index)のデータを読み取ってくれます。この場合、 1 なので先頭のデータを取得しますし、 Fruit.4 にすれば4番目のデータを読んでくれます(先頭は0でなく1です!)。ただ Fruit.-1 のような負数は非対応でした。
もし、キーパスに指定した先にデータがない場合、ショートカットの Error が発生して動作が停止します。より堅牢なつくりにしたい場合はCheck if value exists at Key Pathアクションでデータがそのキーパスに存在するかどうか事前に確認しましょう。

Check〜アクションの結果をIfアクションで振り分け、データが無ければ代替処理を挟みましょう。


