作成:2020-08-02

変数

本章では、ショートカットAppにおける「変数」について説明します。
なお変数のデータ型の一覧については、「変数一覧」のページを参照してください。

変数

ショートカットAppでいう「変数」は、一般的なプログラミング言語でいわれている「変数」とは意味合いがやや異なります。
正確に説明するならば、オブジェクト指向プログラミングにおける「クラス」のことです。
(※ C++, C#, Objective-Cでは「クラス」、Swiftでは「構造体」と呼ばれています。)
ショートカットAppでは、クラスやクラスの構造についての説明を避け、平易な言葉で「変数」と呼んでいます。
使いこなすためには、オブジェクト指向プログラミングやクラスの概念について理解する必要がありますが、本章では説明は行いません。
なお当アクションリファレンスでは、ショートカットユーザガイドの表記に従って「変数」と表記することとし、オブジェクト指向プログラミングの理論で説明する必要がある場合は「クラス」と表記します。
余談ですが「マジック変数」を除くすべての変数は、メソッド(メンバ関数)を持つクラスです。

〈参考〉
 → 「ショートカット」の変数について - Appleサポート

変数は、青色で角丸の四角いトークンで、「計算数字」のように表示されます。
余談ですが、バージョン2.2までは手動変数だけが青色で、特殊変数は緑色でした。
(※手動変数とは、アクション「変数を設定」・「変数に追加」で作成した変数。)
また特定のプロパティの値を指定した場合は灰色になり、変数名の後ろに指定したプロパティ名が表示されていました。
残念ながら現在は青色に統一されているため、見た目では変数の種類の区別がつきづらくなっています。

未定義の変数をアクションで使用した場合、値は空(Nil)になります。
ただしアクションによっては空に対応しておらずエラーが出たり、いいえ(ブール値のFalse)に変換されてしまうことがあります。

特殊変数

特殊変数は、特別な機能を持った変数です。
クリップボード」・「現在の日付」・「毎回尋ねる」・「ショートカットの入力」・「繰り返し項目」・「繰り返しインデックス」・「マジック変数」・「○○の結果」の、7種類が存在します。
オンスクリーンキーボードの上にある変数トレイ、もしくはピッカーを使って入力します。
通常の変数とは違い、アクション「変数を設定」・「変数に追加」で値を変更・追加することはできません。
使い方については、「変数一覧」のページの「特殊変数」の項を参照してください。

画像の上部が、変数トレイ
画像の上部が、変数トレイ

ショートカットの入力

他のアプリやレシピから渡された値を読み込むための、特殊変数です。
そもそもiOSの共有機能で受け渡しされる値はクラスという形で管理されており、ショートカットAppではこの形を「変数」と呼んでいます。
なおレシピの「共有シートタイプ」のタイプは、iOSのクラスの種類になっています。
そのため「共有シートタイプ」でタイプを指定すると、不要なクラスの型(変数のデータ型)を受けとらないようにすることができます。

マジック変数

マジック変数」は特殊変数の一種で、アクションの戻り値(出力)を格納する特別な変数です。
1つのアクションにつき、1つ自動作成されます。
そのため通常の変数と違い、事前に変数を宣言する必要はありません。
データ型は、アクションの出力に応じて自動で決定されます。
ただし、戻り値が存在するはずがないアクションでは、原則としてマジック変数は作成されません。

○○の結果

○○の結果」は特殊なマジック変数で、アクション「if文」・「メニューから選択」・「繰り返す」・「各項目を繰り返す」のマジック変数です。
そのアクションの中のブロックで、最後のアクションの値を格納する変数です。
アクションの処理内容によって、データ型・値を変えたいときに使われます。

変数名

変数には、名前をつけることができます。
使えない文字・予約語などの制限はありません。
なお変数名が重複してしまったとしても、マジック変数・特殊変数については、それぞれ独立した別の変数として扱われます。
アクション「変数を設定」・「変数に追加」で作った手動変数については、同じ変数名の変数は同一の変数になります。

変数のデータ型

普通のプログラミング言語では、変数に入れる値の種類によって、適切なデータ型(変数型)の変数を使用する必要があります。
ただしショートカットAppではクラスとして実装されており、またコンテンツ・グラフ・エンジンによって自動型変換が行われるため、データ型が違っていてもあまり問題になることはありません。
なおデータ型の一覧は、変数一覧のページを参照してください。

余談ですが、ショートカットAppで使うことができるデータ型は、以下のように分類されます。

コンテンツ・グラフ・エンジンとは

「コンテンツ・グラフ・エンジン」とは、Appleは「データをその場でインテリジェントに変換」する機能だと説明しています。
これを分かりやすく言い換えるならば、「コンテンツ・グラフ・エンジン」とは高度な自動型変換(キャスト)機能と、画像のフォーマット変換機能のことです。

例えば、電話番号型変数しか入力できないアクションがあるとします。
このアクションに連絡先型変数を入力した場合、普通のプログラミング言語では型の不整合でエラーになります。
しかしショートカットAppでは、型が不整合であるときはコンテンツ・グラフ・エンジンが作動し、連絡先型変数の中からプロパティ「電話番号」の値(電話番号型変数)を取り出し、アクションにその電話番号型変数を渡します。

なおデータ型の性質上、型変換を行うことができない場合は、エラーになります。
(※例えば、「URL型変数」を「電話番号型変数」に型変換することは、物理的に不可能です。)
このほかにも、コンテンツ・グラフ・エンジンでは数字型変数をテキスト型変数に変換するなどの、単純な型変換も行うことができます。
ただし、リスト形式の変数のプロパティの値が空(Nil)の場合、そこだけブール値型変数の値「いいえ」に変換されてしまうことがあります。

ショートカットAppには、このコンテンツ・グラフ・エンジンという仕組みがあるため、型変換のみを目的としたアクションは存在しません。
任意の型に型変換する方法については、後述します。
なおコンテンツ・グラフ・エンジンの動作は、iOSの標準機能とショートカットApp独自のContentKitフレームワークで実現されています。

変数のプロパティ

変数には値だけではなく、別の変数も入れることができます。
別の変数を入れることができる機能は、オブジェクト指向プログラミングでは「継承」と呼ばれ、継承した変数は「サブクラス」(子クラス)になります。
変数の構造は、アクション「コンテンツグラフを表示」で確認することができます。
なおショートカットAppの内部では、一部のサブクラスはスーパークラス(親クラス)のプロパティの一部として扱われていることがあります。

例えば、「Podcast型変数」は以下のようなプロパティを持っています。

※参考までに、ショートカットAppの内部では、プロパティ「作成日」・「最終変更日」の値はNSDateクラス、プロパティ「名前」の値はNSStringクラスになっているようです。

型変換

出力値のデータ型を変換する方法

変数自体のデータ型を変えることはできませんが、変数の出力値のデータ型は変更することができます。
変更方法は次の通りです。

  1. 使いたい場所に変数を置き、その変数をタップ。
  2. 画面下部に変数エディタのコントロールが表示されるので、「○○として >」をタップ。
  3. データ型を指定する「種類」が表示されるので、そこで目的のデータ型を指定。
  4. 完了」をタップ。

なお物理的に型変換を行うことができるはずがない場合は、実行時にエラーになります。

プロパティを選択するピッカー
写真メディア型変数「最新の写真」のプロパティを選択するピッカー
データ型を選択するピッカー
データ型を選択するピッカー

またアクション「入力から○○を取得」を使うことで、型変換を行うこともできます。
アクション「次の種類のファイルを取得」でも、使い方によっては型変換を行うことができます。
ただし、iOSの内部実装について理解する必要がある特殊なアクションであるため、当アクションリファレンスでは詳述はしません。

特定のプロパティの値を取得する方法

目的によっては、変数の中の特定のプロパティの値だけを使用したい場合があります。
その際には、プロパティ名を指定する必要があります。
なお日付型変数・間隔型変数の表記形式の指定も、同様の方法で指定します。
表記形式については、「日時の形式」のページを参照してください。
指定方法は次の通りです。

  1. 使いたい場所に変数を置き、その変数をタップ。
  2. 画面下部に変数エディタのコントロールが表示されるので、目的のプロパティ名を指定。
  3. 完了」をタップ。
プロパティを選択するピッカー
写真メディア型変数「最新の写真」のプロパティを選択するピッカー