Preferences使用例
preferencesとは?
Preferenceは皆さまが作成したPieceがiiideaの一部として実行される前に、エンドユーザーにセットしてほしい設定項目を定義します。ユーザーは各自のiPhone/Android端末にダウンロードしたiiideaの詳細画面から、設定情報を入力することになります。
ここでは各UIについての定義方法を説明します。
位置情報を利用する
Pieceを作るときにユーザーの位置を使用したい場合があります。この機能ではユーザーが位置情報またはmapで指定した座標を取得する事ができます。
preferences画面の例
ユーザーはPreference内のcheckboxで現在の位置情報を利用するか、mapで座標を指定するか選ぶ事ができます。
位置情報利用時

map利用時

Piece JSONへの記載
位置情報を利用するために、PieceJSONに"permissionList"と、"serviceProxy"に"parameters"と"x-location-default"を追加します。追加すると上記のUIが表示されるため"preferences"への記載はいりません。
"permissionList":{
"ios":["location"],
"android":["location"]
},
"serviceProxy":{
"service":"citizenSample",
"parameters":["location_accurate"],
"x-location-default": [ /// マップ利用時のデフォルト座標を設定します。
35.681247,
139.767019
]
},
・・・
"preferences": {
"type": "object",
"properties": {
/// ここで位置情報に関する記載はしません。
/// 他にpreferenceのkeyが必要ない場合は"preferences"の定義ごと必要ありません。
}
},permissionList
"permissionList"はどのOSタイプの位置情報利用の許可が必要かを記載します。"permissionList"には"ios"、"android"のJSON KeyをPiece JSON内の"osType"に応じて記入してください。JSON Keyの値は、いずれも["location"]です。
| "osType" | "ios" | "android" |
|---|---|---|
| "none" | ○ | ○ |
| "iOS" | ○ | × |
| "Android" | × | ○ |
○:必須、×:不要
parameters
"parameters"は位置情報の精度を記載します。parametersには表のいずれかの項目を記入してください。より良い精度の位置情報を使用すると、位置情報の取得時間が長くなります。
| parameters | 精度(計測誤差) |
|---|---|
| "location_rough" | 10 km 程度 |
| "location_normal" | 100 m 程度 |
| "location_accurate" または "location" | 一番良い精度 |
x-location-default
"x-location-default"はmapを利用する場合のデフォルト値を指定します。
設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-location-default | array | △ | × | (任意指定)緯度、経度の順にarray(例:[35.71, 139.81])で指定してください。緯度、経度は数値です。指定しない場合には、[35.73048861613938, 139.53233242034912](シチズン本社)となります。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
ProxyCoreで現在位置を取得
PieceJSONにparametersを追加するとProxyCore(.jsファイル内)で以下のように位置情報(緯度・経度)を取得できます。
※いずれの精度を指定していても以下のコードで取得できます。
exports.handler = async event => {
const latitude = event.properties.parameters.location.latitude;
const longitude = event.properties.parameters.location.longitude;
// 位置情報を使った処理を実行
}drumroll
いくつか決められた項目から1つを選択できるUIを表示します。
有効なtypeはstringとnumberです。UIの性質上、選択肢が多すぎると入力が煩雑になってしまうので、多くても100個前後までにとどめることを推奨します。
drumroll(string)
preferences画面の例
drumroll close時

drumroll open時

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"string"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | ○ | × | arrayの要素は、"type"と同じ型(string)にしてください。 |
| object | △ | ○ | (任意指定)"enum"に指定した候補値に対し、言語毎に説明を加えたい場合に指定してください。指定しない場合は、Preferenceの設定画面に"enum"の値が表示されます。 | |
| default | string | △ | × | (任意指定)"enum"の中のいずれかの値を指定してください。指定しない場合は、"enum"の先頭に指定した値になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"prefecture": {
"type": "string",
"x-description": {
"ja": "好きな地域を入力してください。",
"en": "Enter your favorite prefecture"
},
"enum": [
"Saitama",
"Chiba",
"Tokyo",
"Kanagawa"
],
"x-input-type": "drumroll",
"default": "Tokyo",
"x-title": {
"ja": "地域",
"en": "Light setting"
},
"x-enum-titles": {
"Saitama": {
"ja": "埼玉県",
"en": "Saitama"
},
"Chiba": {
"ja": "千葉県",
"en": "Chiba"
},
"Tokyo": {
"ja": "東京都",
"en": "Tokyo"
},
"Kanagawa": {
"ja": "神奈川県",
"en": "Kanagawa"
}
}
},ProxyCoreの例
// drumrollで入力された値が入る("Saitama" or "Chiba" or "Tokyo" or "Kanagawa")
let prefecture = event.properties.preferences.prefecture;drumroll(number)
numberの場合はdrumroll(string)のようにenumで設定する方法と、最小(minimum)・最大(maximum)・数値の間隔(multipleOf)を設定する方法の2つがあります。要素数が少ない場合や、値に規則性がない場合はenum、要素数が多い場合は最小・最大・数値の間隔を設定する方法がおすすめです。 2つの設定項目を示したあと、最小・最大・数値の間隔を指定する方法の例を示します。
preferences画面の例
drumroll close時

drumroll open時

設定項目
enumで設定する方法
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"number"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | ○ | × | arrayの要素は、"type"と同じ型(number)にしてください。 |
| object | △ | ○ | (任意指定)"enum"に指定した候補値に対し、言語毎に説明を加えたい場合に指定してください。指定しない場合は、Preferenceの設定画面に"enum"の値が表示されます。 | |
| default | number | △ | × | (任意指定)"enum"の中のいずれかの数値を指定してください。指定しない場合は、"enum"の先頭に指定した値になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
最小・最大・数値の間隔を設定する方法
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"number"にしてください。 |
| maximum | number | ○ | × | "minimum" ~ 1,000,000の範囲で、値の上限を設定してください。 |
| minimum | number | ○ | × | -1,000,000 ~ "maximum"の範囲で、値の下限を設定してください。 |
| multipleOf | number | ○ | × | 1 ~ 1,000,000の範囲で値の間隔を設定してください。 |
| enum | array | × | - | - |
| object | × | - | - | |
| default | number | △ | × | (任意指定)"minimum"から"maximum"の範囲の数値を指定してください。指定しない場合には、"minimum"の値になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
下記は、10(minimum)から200(maximum)の範囲を1の間隔(multipleOf)で入力できるdrumrollの定義例です。
"height":{
"type":"number",
"x-description":{
"ja":"あなたの身長を入力してください。",
"en":"Please enter your height."
},
"maximum":200,
"minimum":10,
"multipleOf":1,
"x-input-type":"drumroll",
"default":150,
"x-title":{
"ja":"身長",
"en":"height"
}
},ProxyCoreの例
// drumrollで入力された値が入る(10~200) let height = event.properties.preferences.height;
text
1行の文字列を入力できるUIを表示します。
有効なtypeはstringです。ユーザーに柔軟に入力を求めることが可能です。
maximumを設定することで、入力を制限することができます。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"string"にしてください。 |
| maximum | number | △ | × | (任意指定)入力文字数を制限することができます。指定しない場合は、300文字となります。 |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | string | △ | × | (任意指定)"maximum"以下の長さの文字列を指定してください。指定しない場合には、値は""となります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"name":{
"type":"string",
"x-description":{
"ja":"名前を入力してください。",
"en":"Please enter your name."
},
"x-input-type":"text",
"default":"テスト",
"x-title":{
"ja":"名前",
"en":"name"
}
},
ProxyCoreの例
//textで入力された値が入る(文字列) let name = event.properties.preferences.name;
textarea
複数行の文字列を入力できるUIを表示します。
有効なtypeはstringです。ユーザーに柔軟に入力を求めることが可能です。
maximumを設定することで、入力を制限することができます。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"string"にしてください。 |
| maximum | number | △ | × | (任意指定)入力文字数を制限することができます。指定しない場合は、1,000文字となります。 |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | string | △ | × | (任意指定)"maximum"以下の長さの文字列を指定してください。指定しない場合には、値は""となります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"message":{
"type":"string",
"x-description":{
"ja":"メッセージを入力してください。",
"en":"Please enter your message"
},
"x-input-type":"textarea",
"default":"test",
"x-title":{
"ja":"メッセージ",
"en":"message"
}
},ProxyCoreの例
//textareaで入力された値が入る(文字列) let message = event.properties.preferences.message;
slider
指定した範囲の数値を入力できるUIを表示します。
有効なtypeはnumberです。指定した値が全体の範囲のどの位置にあるのか、視覚的にわかりやすくなります。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"number"にしてください。 |
| maximum | number | ○ | × | "minimum" ~ 1,000,000の範囲で、値の上限を設定してください。 |
| minimum | number | ○ | × | -1,000,000 ~ "maximum"の範囲で、値の下限を設定してください。 |
| multipleOf | number | ○ | × | 1 ~ 1,000,000の範囲で値の間隔を設定してください。 |
| enum | array | × | - | - |
| object | × | - | - | |
| default | number | △ | × | (任意指定)"minimum"から"maximum"の範囲の数値を指定してください。指定しない場合には、"minimum"の値になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
下記は、0(minimum)から100(maximum)の範囲を10の間隔(multipleOf)で入力できるsliderの定義例です。
"brightness":{
"type":"number",
"x-description":{
"ja":"ライトの明るさを指定してください。",
"en":"Brightness setting"
},
"maximum":100,
"minmum":0,
"multiplierOf":10,
"x-input-type":"slider",
"default":30,
"x-title":{
"ja":"明るさ",
"en":"brightness"
}
},ProxyCoreの例
//sliderで入力された値が入る(0~100) let brightness = event.properties.preferences.brightness;
calendar
カレンダーから年月日を入力できるUIを表示します。
有効なtypeはstringです。年月日の範囲で入力してほしい場合に使用します。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"string"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | string | △ | × | (任意指定)yyyy-mm-ddのフォーマットで指定してください。(例:"2020-05-05")指定しない場合には、Preferenceの設定画面を最初に開いた時の日付となります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"reservation":{
"type":"string",
"x-description":{
"ja":"予約日を指定してください。",
"en":"Please enter a reservation date."
},
"format":"date",
"default":"2019-05-13",
"x-input-type":"calendar",
"x-title":{
"ja":"予約日",
"en":"reservation"
}
},ProxyCoreの例
//calendarで入力された値が入る(yyyy-mm-dd) let reservation = event.properties.preferences.reservation;
radio
いくつか決められた項目から一つを選択できるUIを表示します。
有効なtypeはstringです。drumrollとは違い、選択項目がすべて画面上に表示されるため、2~5項目前後の選択肢であれば、こちらを使用することを推奨します。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"string"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | ○ | × | arrayの要素は、"type"と同じ型(string)にしてください。 |
| object | △ | ○ | (任意指定)"enum"に指定した候補値に対し、言語毎に説明を加えたい場合に指定してください。指定しない場合は、Preferenceの設定画面に"enum"の値が表示されます。 | |
| default | string | △ | × | (任意指定)"enum"の中のいずれかの値を指定してください。指定しない場合は、"enum"の先頭に指定した値になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"age":{
"type":"string",
"x-description":{
"ja":"年齢を選んでください。",
"en":"Please enter your age."
},
"enum":["age18","age29","age39","age49","age50"],
"default":"age29",
"x-input-type":"radio",
"x-title":{
"ja":"年齢",
"en":"age"
},
"x-enum-titles":{
"age18":{
"ja":"18歳未満",
"en":"~18"
},
"age29":{
"ja":"18~29歳",
"en":"18~29"
},
"age39":{
"ja":"30~39歳",
"en":"30~39"
},
"age49":{
"ja":"40~49歳",
"en":"40~49"
},
"age50":{
"ja":"50歳以上",
"en":"50~"
}
}
},ProxyCoreの例
// radioで入力された値が入る("age18"or"age29"or"age39"or"age49"or"age50")
let age = event.properties.preferences.age;map
地図上から位置を選択できるUIとなります。
有効なtypeはarrayです。場所を指定してほしい場合に使用します。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"array"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | array | △ | × | (任意指定)緯度、経度の順にarray(例:[35.71, 139.81])で指定してください。緯度、経度は数値です。指定しない場合には、[35.73048861613938, 139.53233242034912](シチズン本社)となります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"destination":{
"type":"array",
"x-description":{
"ja":"行き先を指定してください。",
"en":"Please enter your destination."
},
"default":[
35.681247,139.767019
],
"x-input-type":"map",
"x-title":{
"ja":"行き先",
"en":"destination"
}
},ProxyCoreの例
//mapで入力された値が入る([latitude,longitude]) let destination = event.properties.preferences.destination; let latitude = destination[0]; let longitude = destination[1];
switch
2択用のUIを表示します。
有効なtypeはbooleanです。シンプルに2択で表現できる情報であればこちらを使用することを推奨します。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"boolean"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | boolean | △ | × | (任意指定)値をtrueかfalseで指定してください。指定しない場合には、falseになります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"function":{
"type":"boolean",
"x-description":{
"ja":"機能を有効にします。",
"en":"Enable the function."
},
"x-input-type":"switch",
"default":true,
"x-title":{
"ja":"機能を有効",
"en":"Function enabled."
}
},
ProxyCoreの例
//switchで入力された値が入る(true or false) let func = event.properties.preferences.function;
time
時刻入力用のUIを表示します。
有効なtypeはarrayです。時刻の範囲で入力してほしい場合に使用します。
preferences画面の例

設定項目
| JSON Key | 型 | 補足 | ||
|---|---|---|---|---|
| x-title | object | ○ | ○ | titleObject参照 |
| x-description | object | ○ | ○ | descriptionObject参照 |
| type | string | ○ | × | 値を"array"にしてください。 |
| maximum | number | × | - | - |
| minimum | number | × | - | - |
| multipleOf | number | × | - | - |
| enum | array | × | - | - |
| object | × | - | - | |
| default | array | △ | × | (任意指定)時、分の順にarray(例:13時00分 [13, 0])で指定してください。時、分は数値です。指定しない場合には、00時00分 [0, 0]になります。 |
| x-hidden | △ | ○ | (任意指定)Pieceをアップデートしてこの項目を使わなくなたっとき、Preferenceの設定画面上に表示しないようにできます。値をtrueにして指定してください。指定しない場合には、設定画面上に表示されます。 |
指定区分:○・・・必須、△・・・任意、×・・・不要
PieceJSONの例
"wakeUp":{
"type":"array",
"x-descripton":{
"ja":"今日起きた時間を入力してください。",
"en":"Enter the time before you wake up"
},
"x-input-type":"time",
"default":[10,15],
"x-title":{
"ja":"起床時間",
"en":"Wake-up time"
}
},ProxyCoreの例
//timeで入力された値が入る([hour,minute]) let wakeUp = event.properties.preferences.wakeUp; let hour = wakeUp[0]; let minute = wakeUp[1];
Preferencesの表示順
Preferences内のpropertiesの表示順を指定することができます。
表示順を指定しない場合には、記載した順番にならないことがあります。
指定方法
"x-field-order"にpropertiesのKeyを表示の並び順に記載して指定します。下記例では、"travelmode"、"select"、"dest1"、"dest2"のKeyの順に表示されるよう記述しています。
"preferences":{
"type":"object",
"x-field-order":["select","dest1","dest2","travelmode"],
"properties":{
"travelmode":{
"type":"string",
"x-description":{
"ja":"交通手段を選択してください。",
"en":"Select your travel mode"
},
"enum":[
"none",
"drive",
"walk",
"transit",
],
"x-input-type":"drumroll",
"default":"none",
"x-title":{
"ja":"(オプション)交通手段",
"en":"(option) Travel mode"
}
},
"select":{
"type":"string",
"x-description":{
"ja":"どちらの目的地を使用しますか?",
"en":"Please select Map1 or Map2 as Destination"
},
"enum":["map1","map2"],
"default":"map1",
"x-input-type":"radio",
"x-title":{
"ja":"目的地を選択",
"en":"Select to set destination"
},
},
"dest1":{
"type":"array",
"x-description":{
"ja":"目的地を指定してください。",
"en":"Please enter your destination."
},
"x-input-type":"map",
"x-title":{
"ja":"Map1",
"en":"Map1"
}
},
"dest2":{
"type":"array",
"x-description":{
"ja":"目的地を指定してください。",
"en":"Please enter your destination."
},
"x-input-type":"map",
"x-title":{
"ja":"Map2",
"en":"Map2"
}
}
}
},