動作の仕組み

In 導入

Riiiverの仕組みを理解し、実際にPieceを作ってみましょう!
下の図の様な例を考えます。

Riiiverの例現在の気温を針で示す

このiiideaは、「時計のボタンを押す→現在の気温をWeb上のサービスから取得→結果を時計の針で示す」というものです。この実行例では以下の要素が登場します。

Riiiver登場人物

  • iiidea – ユーザーがRiiiver App(iOS/Android)で作成可能な機能のこと。3つのPieceを組み合わせることで作られる。
  • Piece – Riiiverの最小単位の機能。Trigger Piece, Service Piece, Action Pieceの3つのPieceが存在する。現在の気温を時計で示す例で具体的にいうと、Trigger Piece : 時計のボタンを押す、Service Piece : 現在の気温をweb上のサービスから取得、Action Piece : 結果を時計の針で示す となる。iiideaは、Trigger ⇒ Service ⇒ Actionの順番で動作していく為、各Pieceは、前後のPieceとの接続情報等を含んでいる。
    • Piece JSON – Pieceの仕様書
    • Piece Core – Pieceのロジックを司る実態。スマホ内にネイティブコードで実装する。
  • Riiiver SDK – iiideaに含まれる3つのPieceを順番に処理するiiideaの実行機能を持つ。各種Riiiverを利用する上で必要なライブラリも含むフレームワーク。
  • Lambda (AWS) – RiiiverでREST APIのクライアントとして自由に利用してもらうために用意した環境。開発者は、Piece実行時に自由に利用することができる。(皆さまがLambda環境を契約して準備する必要はありません)
    スマホ側のアプリ開発をしなくて済む様に準備した仕組みであり、利用は任意。(皆さまのアプリにSDKを入れ込んでPiece開発をする場合はLambdaは使いません。無視してください。)

Piece JSON

Pieceを作るには、はじめにPieceについて定義する必要があります。皆さまが作るPieceが前のPieceから何を受け取り、次のPieceに何を出力するのか?などの定義です。これをPieceJSONと呼びます。

PieceJSON1

PieceJSONには、ユーザーがRiiiver Appでiiideaを作るときに表示される内容を定義しています。

  • Pieceの名前 – 上図の「降水確率」の部分。
  • Pieceの説明
  • Pieceのカテゴリ – Weather & Nature, Communication, Sports & EntertainmentなどのカテゴリごとにApp内に表示されます。

また、Pieceの動作まわりの定義も記述されています。

  • 入力データ – このPieceが前のPieceから受け付けることができるデータの型。
  • 出力データ – このPieceが次のPieceに渡すデータ型
  • 設定可能項目 – このPieceを含むiiideaをユーザーが利用するとき、設定することができる項目の定義。
  • 誰がロジックか – このPieceの順番になったら呼ぶべき実体は誰か?

実際に例で示した、現在の気温を外部天気APIサービスから取ってくるPieceのPieceJSONはこんな感じです。

{
  "title": {
    "en": "Current Temperature (celsius)",
    "ja": "現在の気温 (摂氏)"
  },
  "version": "1.0.0",
  "sdkVersion": "1.0.0",
  "deviceId": "none",
  "vendorId": "none",
  "description": {
    "en": "Current temperature in the setting area",
    "ja": "指定した地域の現在の気温を取得します。うまく取得できなかった場合は値が -1 となります。"
  },
  "blockType": "service",
  "executor": "RBCCommonWebServiceExecutor",
  "serviceProxy" : {
    "service": "citizenSample_OpenWeatherMap"
  },
  "preferences": {
    "type": "object",
    "properties": {
      "cityName": {
        "type": "string",
        "x-description": {
          "en": "set the area from which to get the temperature.",
          "ja": "気温を取得する地域を指定します。"
        },
        "enum": [
          "Sapporo-shi",
          "Tokyo",
          "Osaka",
          "Fukuoka-ken",
          "Okinawa-ken"
        ],
        "x-input-type": "drumroll",
        "default": "Tokyo",
        "x-title": {
          "ja": "地域",
          "en": "Area setting"
        },
        "x-enum-titles": {
          "Sapporo-shi": {
            "ja": "札幌市",
            "en": "Sapporo"
          },
          "Tokyo": {
            "ja": "東京都",
            "en": "Tokyo"
          },
          "Osaka": {
            "ja": "大阪府",
            "en": "Osaka"
          },
          "Fukuoka-ken": {
            "ja": "福岡県",
            "en": "Fukuoka"
          },
          "Okinawa-ken": {
            "ja": "沖縄県",
            "en": "Okinawa"
          }
        }
      }
    }
  },
  "output": {
    "type": "object",
    "properties": {
      "celsiusTemperature": {
        "type": "number"
      }
    }
  },
  "osType":"none",
  "categoryIds": ["cat_0007"]
}

JSONの各キーの意味については PieceJSON Keys ページを参照してください。ここでは、↑に示すJSONに含まれるキーについて説明します。

title

Pieceのタイトルを記入します。例では英語、日本語を記入しています。ユーザーがRiiiver Appを利用して最初に目にする部分がここで定義するタイトルになります。わかりやすいタイトルにしましょう。

version

Pieceのバージョンをつけます。最初は1.0.0としてみましょう。Versionは皆さんが管理してください。Pieceを更新した場合は必ずインクリメントしなければなりません。

sdkVersion

Pieceの実行に必要なSDKのバージョンを指定します。まだ、SDKによって実行できるできないといった制約はありませんので、1.0.0としておいてください。

description

Pieceの説明を書きます。ここもタイトルと同じく、ユーザーがiiideaをRiiiver Appを利用して作成する場合に目にする説明文です。このPieceがどんなことができるのか?どんな値を入力して出力するのか?利用する際に制約事項はないか?(特定の時間帯は動作しないAPIを利用しているなど。)iiideaを作る際に、作成者が制約事項=ユーザーに説明しなければならない内容を書いておくと親切です。

blockType

このPieceがTrigger Pieceなのか、Service Pieceなのか、Action Pieceなのかを指定します。

executor

このPieceのロジック部分(実体)は誰なのかを定義します。次の章で詳しく説明します。

serviceProxy

Riiiverが用意したLambdaを利用する場合には、呼び出す関数名を指定します。後ほど詳しく説明します。

preferences

ユーザーがこのPieceを含むiiideaの利用時に設定できる項目を定義します。↑の例では、どの地域の現在気温を知りたいか?ユーザーに指定してもらうためにドラムロールを表示する様に定義しています。どの様な設定項目をユーザーに表示して設定してもらえるのかはココをご覧ください。

output

Pieceが出力するデータの型を定義します。この例では温度を数字として出力します。
他にどの様な型が使えるのかはココを参照してください。

osType

PieceがスマートフォンのOSに依存する場合、ここで指定できます。iOS/Androidに関わらず動作できる、Pieceの場合は「none」と指定します。

categoryIds

このPieceが属するカテゴリーを指定します。ユーザーがRiiiver Appでiiideaを作成する場合に、Servie Pieceを選択するときにはカテゴリーごとの表示になります。その際に、この設定で指定されたカテゴリ内にこのPieceが表示されます。

実行時の動作とPieceCore

Pieceを実際に実行するのはエンドユーザーのスマートフォン内で動作しているRiiiver SDKです。ユーザーがiiideaをセットし、Triggerを引いたときは↓の様な処理が走ります。

PieceJSON1

↑の図はiiideaを実行中で、ちょうどService Pieceの順番になったときに処理を開始したタイミングのものです。
SDKはService Pieceを実行するときPieceJSONの"exceutor"キーで定義するクラス(インスタンス)を呼び出すことになっています。このクラス内に皆さんがコードを実装すれば、必要なタイミングでPieceJSONで定義した型の入力データ、ユーザーが設定画面で指定した設定値とともに実行してくれます。Pieceで行いたい処理が終了したら、クラスから出力データに沿った値を返してあげれば、その値がそのまま次のPieceへと伝播される仕組みです。(動作の詳細はSDKを利用した開発方法にて説明します。)この皆さんが記述するコード部分(クラス)をPiece Coreと呼ぶことにします。

Piece Coreの実装方法

Piece Coreはスマホ内にあります。ですのでPiece Coreの実装はAndroidの場合はJavaかKotrin、iOSの場合はSwiftなどのネイティブ環境でのコーディングが必要です。ただ、ほとんどのPieceでは、スマホ上の処理だけでは完結せず、コンテキストを取りにWeb上で動作する様なものの方が利用方法として多いかもしれません。
RiiiverではPieceを作る方法を大きく2種類提供します。

  1. スマホのネイティブ開発環境でRiiiver SDKを利用してPiece Coreを作り、Pieceを完成させる。 ←準備中です。
  2. Piece Coreの開発はせずにRiiiverが用意したAWS Lambda上にコーディングし、Pieceを完成させる。
    (Riiiverで準備したSDKにビルトインされているPiece Coreを利用)

↑のリンクからお好きな方をご覧ください。

Pieceを作る際には、開発者登録が必要です。こちらのページに開発者登録の方法を記載していますのでご覧ください。また、Riiiver SDKを用いた開発を行う場合には、開発者登録後に用意される開発者用マイページから、ベンダー登録も行う必要があります。Lambda環境を用いてPieceを作成する場合にはベンダー登録は不要です。