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}
]