Pieceの接続に関する規則

目次

version: 2020.2.27

Riiiver App(Android/iOS)を使って新たなiiideaを作る際、皆さまはPieceを3つ選んでiiideaを作ります。Riiiver App で最初に選んだPieceInput/Outputの型で、次に皆さまが選ぶことのできるPieceの選択肢が決まります。
例えばS Pieceを最初に選んだ場合、そのS PieceInputOutputの定義により、次に選ぶことのできるT PieceA Pieceが決まります。

WiringRule1

上の図のS Pieceのような、入力がNone(なし)、出力がNumberと定義されているS Pieceを、皆さまがiiideaの最初に選んだとすると、T PieceA Pieceの接続には下の図のような制約がかかります。

WiringRule2

皆さまのRiiiver App上では、S Pieceを選んだ時点で、上図のCase 2のパターンのような接続できないA Pieceは全て表示されなくなります。PiecePieceを接続するためのInputOutputの型が合っていないからです。このようにPieceを接続するための規則があります。ここではPiece接続の規則を説明します。


Input/Outputの規則

input/outputの有無

Pieceを接続するとき、それぞれのPieceInput/Outputがあるかどうかで、接続できる/できないが決まります。

  1. InputがないPieceは、どのPieceでもinput側に接続することができます。
    ※ただし、このPieceに入力されたデータは全て捨てられます。

    WiringRuleInOut1

  2. OutputがないPieceは、次のPieceinputの定義がある場合には接続できません。

    WiringRuleInOut2

  3. Outputを持つPieceInputを持つPieceを接続する場合には、OutputInputの型を同じ型にする必要があります。更に、型ごとに詳細な追加の接続規則を設けています。次の項を参照してください。

OutputがあるPieceInputがあるPieceの接続規則

PieceInputOutputを持たせるには、どのようなデータを扱うのかを指定するために Type () を定義します。Riiiverで使用できるType () は次の5つです。

Type追加接続規則の有無
booleanなし
stringあり
numberあり
objectあり
arrayあり

Outputを持つPieceInputを持つ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. OutputFormatInputFormatが一致する場合は接続できます。
2. OutputFormatInputFormatが異なる場合は接続できません。
3. OutputFormatが何らかに設定されていて、InputFormattextに設定されている場合は接続できます。

Format一覧表

TypeFormat備考
stringtext-フォーマットを限定しない場合に指定
email-RFC 5322, section 3.4.1
date-time2019-06-13T20:20:39+09:00YYYY-MM-DDThh:mm:ssTZD
date1997-07-16YYY-MM-DD
time20:21:10hh: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には、minimummaximumの設定が必要です。minimummaximum-1,000,000~1,000,000の範囲内をとるように指定してください。

  1. OutputminimumInputminimum以上の場合に接続できます。
  2. OutputmaximumInputmaximum以下の場合に接続できます。

TypeNumberRule

InputNumberが取りうる値の範囲内に、OutputNumberの範囲が含まれていれば接続できます。

JSONの記載例
"output" : {
    "type" : "object",
    "properties" : {
        "result" : {
            "type" : "number",
            "x-title" : {
                "en" : "Age.",
                "ja" : "年齢を出力"
            },
            "minimum" : 0,
            "maximum" : 120 
        }
    }
},
入出力されるデータの例
{ 
   "result": 30
}


object

追加接続規則
  1. OutputObjectの個数(下の図では3)と、IntputObjectの個数が一致する場合に接続できます。

    TypeObjectRule1

  2. OutputObjectの名前(下の図ではdistancestoreNameopenHour)Intputの名前が一致する場合に接続できます。

    TypeObjectRule2

  3. OutputInput両方のproperties内のTypeやその他の設定項目が一致する場合に接続できます。空白の有無や値の順序も一致する必要があります。

  4. propertiesに上記boolean, string, numberTypeが含まれる場合、それぞれの要件・接続規則を満たす場合に接続できます。ただし、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

追加接続規則
  1. 前段のOutputItems IntputItemsに含まれるTypeの要件・接続規則(それぞれの接続規則: booleanstringnumberobject)を満たす場合は接続できます。ただし、Itemsarrayを含むことはできません。ItemsTypeは単一となります。

    TypeArrayRule1
    ArrayではItemsの最小数と最大数であるminItemsmaxItemsの指定が必要です。minItemsmaxItems0~2,147,483,647の範囲内を取るように指定してください。それぞれ以下の接続規則に従います。

  2. OutputminItemsInputminItems以上の場合に接続できます。

  3. OutputmaxItemsInputmaxItems以下の場合に接続できます。

    TypeArrayRule2

JSONの記載例(ItemTypeStringの場合)
"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"
            }
        }
    }
},
入出力されるデータの例(ItemTypeStringの場合)
"result" : ["10:01:01", "10:05:01", "09:01:01"]
JSONの記載例(ItemTypeObjectの場合)
"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"
                    }
                }
            }
        }
    }   
},
入出力されるデータの例(itemtypeobjectの場合)
"result" : [
    { "direction": 350, "distance": 1200, "storeName": "Starbucks", "openHour": true},
    { "direction": 10, "distance": 2500, "storeName": "Cafe", "openHour": false}
  ]