Pieceの接続に関する規則
version: 2020.2.27
Riiiver App(Android/iOS)を使って新たなiiideaを作る際、皆さまはPieceを3つ選んでiiideaを作ります。Riiiver App で最初に選んだPieceのInput/Outputの型で、次に皆さまが選ぶことのできるPieceの選択肢が決まります。
例えばS Pieceを最初に選んだ場合、そのS PieceのInputとOutputの定義により、次に選ぶことのできるT PieceとA Pieceが決まります。
上の図のS Pieceのような、入力がNone
(なし)、出力がNumber
と定義されているS Pieceを、皆さまがiiideaの最初に選んだとすると、T PieceとA Pieceの接続には下の図のような制約がかかります。
皆さまのRiiiver App上では、S Pieceを選んだ時点で、上図のCase 2のパターンのような接続できないA Pieceは全て表示されなくなります。PieceとPieceを接続するためのInputとOutputの型が合っていないからです。このようにPieceを接続するための規則があります。ここではPiece接続の規則を説明します。
Input/Outputの規則
input/outputの有無
Pieceを接続するとき、それぞれのPieceにInput/Outputがあるかどうかで、接続できる/できないが決まります。
InputがないPieceは、どのPieceでもinput側に接続することができます。
※ただし、このPieceに入力されたデータは全て捨てられます。OutputがないPieceは、次のPieceにinputの定義がある場合には接続できません。
Outputを持つPieceとInputを持つPieceを接続する場合には、OutputとInputの型を同じ型にする必要があります。更に、型ごとに詳細な追加の接続規則を設けています。次の項を参照してください。
OutputがあるPieceとInputがあるPieceの接続規則
PieceにInputやOutputを持たせるには、どのようなデータを扱うのかを指定するために Type (型) を定義します。Riiiverで使用できるType (型) は次の5つです。
Type | 追加接続規則の有無 |
---|---|
boolean | なし |
string | あり |
number | あり |
object | あり |
array | あり |
Outputを持つPieceとInputを持つPieceを接続できる最初の規則は同じTypeであることです。更に、そのTypeにより接続できるかどうかの詳細な接続規則が存在します。規則に合わない場合は同じType同士でも接続することはできません。
次の節より、Type別に追加の接続規則を説明します。
boolean
追加接続規則
なし。
PieceJSONの例
"output" : { "type" : "object", "properties" : { "result" : { "type" : "boolean", "x-title" : { "en" : "Output whether it succeeds.", "ja" : "正常に終了したかどうか出力" } } } },
入出力されるデータの例
{ "result": true }
string
追加接続規則
Stringにはformat
が必要です。format
の値は下記の、Format一覧表を参照してください。
1. OutputのFormatとInputのFormatが一致する場合は接続できます。
2. OutputのFormatとInputのFormatが異なる場合は接続できません。
3. OutputのFormatが何らかに設定されていて、InputのFormatがtext
に設定されている場合は接続できます。
Format一覧表
Type | Format | 例 | 備考 |
---|---|---|---|
string | text | - | フォーマットを限定しない場合に指定 |
- | RFC 5322, section 3.4.1 | ||
date-time | 2019-06-13T20:20:39+09:00 | YYYY-MM-DDThh:mm:ssTZD | |
date | 1997-07-16 | YYY-MM-DD | |
time | 20:21:10 | hh:mm:ss |
JSONの記載例(date-time)
"output" : { "type" : "object", "properties" : { "result" : { "type" : "string", "format" : "date-time", "x-title" : { "en" : "Current time(YYYY-MM-DDThh:mm:ssTSD)", "ja" : "現在日時(YYYY-MM-DDThh:mm:ssTSD)で出力" } } } },
入出力されるデータの例(date-time)
{ "result": "2019-06-13T20:20:39+09:00" }
number
追加接続規則
Numberには、minimum
とmaximum
の設定が必要です。minimum
とmaximum
は-1,000,000~1,000,000の範囲内をとるように指定してください。
- Outputの
minimum
がInputのminimum
以上の場合に接続できます。 - Outputの
maximum
がInputのmaximum
以下の場合に接続できます。
InputのNumberが取りうる値の範囲内に、OutputのNumberの範囲が含まれていれば接続できます。
JSONの記載例
"output" : { "type" : "object", "properties" : { "result" : { "type" : "number", "x-title" : { "en" : "Age.", "ja" : "年齢を出力" }, "minimum" : 0, "maximum" : 120 } } },
入出力されるデータの例
{ "result": 30 }
object
追加接続規則
OutputのObjectの個数(下の図では3つ)と、IntputのObjectの個数が一致する場合に接続できます。
OutputのObjectの名前(下の図では
distance
、storeName
、openHour
)とIntputの名前が一致する場合に接続できます。OutputとInput両方の
properties
内のTypeやその他の設定項目が一致する場合に接続できます。空白の有無や値の順序も一致する必要があります。properties
に上記boolean
,string
,number
のTypeが含まれる場合、それぞれの要件・接続規則を満たす場合に接続できます。ただし、object
,array
を含むことはできません。
JSONの記載例
"output" : { "type" : "object", "properties" : { "result" : { "type" : "object", "properties" : { "direction" : { "type" : "number", "x-unit" : "degrees", "x-title" : { "en" : "Direction where the store.", "ja" : "お店の方向" }, "minimum" : 0, "maximum" : 359 }, "distance" : { "type" : "number", "x-unit" : "m", "x-title" : { "en" : "Distance of the store to here.", "ja" : "お店までの距離" }, "minimum" : 0, "maximum" : 5000 }, "storeName" : { "type" : "string", "format" : "text", "x-title" : { "en" : "Store name.", "ja" : "店名" } }, "openHour" : { "type" : "boolean", "x-title" : { "en" : "Output whether the store open.", "ja" : "開店しているかどうか" } } } } } },
入出力されるデータの例
"result": { "direction": 350, "distance": 1200, "storeName": "Starbucks", "openHour": true }
array
追加接続規則
前段のOutputのItems とIntputのItemsに含まれるTypeの要件・接続規則(それぞれの接続規則: boolean、string、number、object)を満たす場合は接続できます。ただし、Itemsに
array
を含むことはできません。ItemsのTypeは単一となります。
ArrayではItemsの最小数と最大数であるminItems
とmaxItems
の指定が必要です。minItems
とmaxItems
は0~2,147,483,647の範囲内を取るように指定してください。それぞれ以下の接続規則に従います。Outputの
minItems
がInputのminItems
以上の場合に接続できます。Outputの
maxItems
がInputのmaxItems
以下の場合に接続できます。
JSONの記載例(ItemのTypeがStringの場合)
"output" : { "type" : "object", "properties" : { "result" : { "type" : "array", "x-title" : { "en" : "Output times of 1 to 3 regions.", "ja" : "1~3つの地域の時刻を出力" }, "maxItems":3, "minItems":1, "items":{ "type": "string", "format": "time" } } } },
入出力されるデータの例(ItemのTypeがStringの場合)
"result" : ["10:01:01", "10:05:01", "09:01:01"]
JSONの記載例(ItemのTypeがObjectの場合)
"output" : { "type" : "object", "properties" : { "result" : { "type" : "array", "x-title" : { "en" : "Output required store info.", "ja" : "お店の方向、距離、店名、開店しているかどうかの中から必要な項目を出力" }, "maxItems":3, "minItems":1, "items":{ "type" : "object", "properties" : { "direction" : { "type" : "number", "x-unit" : "degrees", "minimum" : 0, "maximum" : 359 }, "distance" : { "type" : "number", "x-unit" : "m", "minimum" : 0, "maximum" : 5000 }, "storeName" : { "type" : "string", "format" : "text" }, "openHour" : { "type" : "boolean" } } } } } },
入出力されるデータの例(itemのtypeがobjectの場合)
"result" : [ { "direction": 350, "distance": 1200, "storeName": "Starbucks", "openHour": true}, { "direction": 10, "distance": 2500, "storeName": "Cafe", "openHour": false} ]