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" } } } },