Riiiverの仕組み

目次

Riiiverの仕組みについて詳しくご紹介します。下の図は「時計のボタンを押すと、現在の気温が時計に表示される」iiideaの仕組みを表したものです。

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

iiidea – ユーザーがRiiiver App(iOS/Android)で作成することができる機能のこと。3つのPieceを組み合わせることで作られます。

Piece – iiideaを構成する最小単位の機能パーツ。「Trigger Piece」「Service Piece」「Action Piece」の3種類のPieceがあります。現在の気温を時計で示す仕組みでいうと

  • Trigger Piece : 時計のボタンを押す
  • Service Piece : 現在の気温をweb上のサービスから取得する
  • Action Piece : 気温を時計の針で示す

にそれぞれ分類されます。またiiideaは、Trigger Service Actionの順番で動作していくため、各Pieceは、前後のPieceとの接続情報等を含みます。

PieceJSON – Pieceの仕様書

PieceCore – Pieceの処理を行う動作部。スマートフォン内にネイティブコードで実装します。

Riiiver SDK – Riiiverを利用する上で必要なライブラリも含むフレームワーク。iiideaに含まれる3つのPieceを順番に処理する実行機能を持ちます(皆さまのiOS/Androidアプリ上でiiideaを実行させる場合に利用します)。

Lambda(AWS) REST APIのクライアントとしてAWSLambdaを採用しており、開発者は、Piece実行時にRiiiverが用意したLambda環境を利用することができます(この環境を利用することで、開発者はWeb上のサービスに接続するためのサーバーを各自で準備する必要がなくなります) スマートフォンのアプリ開発をしなくてもPieceが開発できるように準備した仕組みであり、利用は任意です(アプリにSDKを組み込んでPiece開発を行う場合は、Lambdaは使用しません)


PieceJSON

Pieceを作る際には、「前のPieceから何を受け取り、次のPieceに何を出力するのか?」などの定義を行う必要があります。これら定義を定めたPieceの仕様書をPieceJSONと呼びます。

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

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

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

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

「現在の気温を外部天気APIサービスから取得する」PiecePieceJSONは以下のようなものになります。

{
  "title": {
    "en": "Current Temperature (celsius)",
    "ja": "現在の気温 (摂氏)"
  },
  "version": "1.0.0",
  "sdkVersion": "1.0.0",
  "deviceId": "none",
  "vendorId": "none",
  "description": {
    "en": "~~What is this Piece?~~\nGet the current temperature in degrees Celsius (°C).\n\n~~How do I use it?~~\nInclude this Piece in an iiidea to output a simple number representing the current temperature in °C.\nYou can choose in the iiidea settings for where to get information.\n\n~~Notes~~\nThe output value will be -50 if this Piece cannot get information due to network or a separate error.\n\nAbout Trademarks ( https://riiiver.com/en/trademark/ )",
    "ja": "【どんなPiece?】\n現在の気温を摂氏で次のPieceに渡します。\n\n【どうやって使うの?】\n「地域」のドラムロールから、気温を知りたい場所を選択してください。\n\n【ご注意!】\n気温をうまく取得できなかった場合は値が -50 となります。\n\n商標について ( https://riiiver.com/trademark/ )"
  },
  "blockType": "service",
  "executor": "RBCCommonWebServiceExecutor",
  "serviceProxy" : {
    "service": "pieceCore_sample"
  },
  "pieceCapability": "notUse",
  "preferences": {
    "type": "object",
    "properties": {
      "cityName": {
        "type": "string",
        "enum": [
          "Sapporo-shi",
          "Tokyo",
          "Osaka",
          "Fukuoka-ken",
          "Okinawa-ken"
        ],
        "default": "Tokyo",
        "x-input-type": "drumroll",
        "x-title": {
          "ja": "地域",
          "en": "Area setting"
        },
        "x-description": {
          "en": "set the area from which to get the temperature.",
          "ja": "気温を取得する地域を指定します。"
        },
        "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",
        "minimum": -50,
        "maximum":  50
      }
    }
  },
  "osType":"none",
  "categoryIds": ["cat_0007"]
}

上記のJSONに含まれるキーについてご説明します(JSONの各キーの意味については PieceJSON Keys ページをご参照ください)。

title

Pieceのタイトル(名称)を記入します。上記の例では英語、日本語を記入しています。ユーザーがRiiiverアプリを利用してPieceを探す際に、最初に目にする部分が、ここで定義するタイトルですので、分かりやすい名称にしていただくことを推奨しています。

version

Pieceのバージョンをつけます(最初は1.0.0など)。Versionは皆さまが各自で管理をし、Pieceを更新した場合は、バージョンを必ずインクリメントしたうえで公開してください。

sdkVersion

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

description

Pieceの説明を書きます。タイトルと同じく、ユーザーがiiideaを作成する場合に目にする説明文です。「このPieceでどんなことができるのか?」「どんな値を入力して出力するのか?」「利用する際に制約事項はないか?(特定の時間帯は動作しないAPIを利用しているなど)」といった、iiideaを作る際にユーザーに説明するべき内容を記載してください。記載に関して、いくつかルールを設けていますのでこちらも併せてご確認ください。

blockType

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

executor

実際にPieceを動作させるPieceCoreのクラス(モジュール)名を指定します。(Webサービスに接続するServicePieceの場合、Lambdaを使うためのクラスRBCCommonWebServiceExecutorを指定してください。)

serviceProxy

Webサービスに接続するServicePieceの場合、Riiiverが用意したLambdaを利用する際に呼び出す関数名を指定してください。

preferences

ユーザーがこのPieceを含むiiideaを利用時する際に設定できる項目を定義します。上記の例では、「どの地域の現在気温を知りたいか?」ユーザーに地域を指定してもらうためにドラムロールを表示するように定義しています。どのようなUIを設定項目ユーザーに表示できるのかはPreference使用例をご参照ください。

output

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

osType

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

categoryIds

このPieceが属するカテゴリを指定します。ユーザーがRiiiverアプリでiiideaを作成する場合、Pieceのカテゴリを選択したうえで、Service Pieceを選択します。その際に、ここで指定されたカテゴリ内にPieceが表示されます。


実行時の動作とPieceCore

Pieceを実際に実行するのは、エンドユーザーのスマートフォン内で動作しているRiiiverアプリ内のRiiiver SDKです。ユーザーがiiideaをセットし、Trigger Pieceを作動させたときは、以下の図のような処理が走ります。

この図はiiideaを実行中、ちょうどService Pieceの順番になったときに処理を開始したタイミングのものです。

SDKService Pieceを実行するときPieceJSON"exceutor"キーで定義するクラス(インスタンス)を呼び出すことになっています。このクラス内にコードを実装すれば、必要なタイミングでPieceJSONで定義した型の入力データ、ユーザーが設定画面で指定した設定値とともに実行してくれます。

Pieceで行いたい処理が終了したら、クラスから出力データに沿った値を返せば、その値がそのまま次のPieceへと伝えられる仕組みです。この皆さまが記述するコード部分(クラス)PieceCoreと呼びます。


PieceCoreの実装方法

PieceCoreはスマートフォン内にあります。PieceCoreの実装はAndroidの場合はJavaKotriniOSの場合はSwiftなどのネイティブ環境でのコーディングが必要です。ただし、ほとんどのPieceでは、スマートフォン上の処理だけでは完結せず、コンテキストを取りにWeb上で動作するものが多数になるはずです。RiiiverではPieceを作成する方法を大きく以下の2種類ご用意しております。

  1. (準備中)Riiiver SDKを利用して、スマートフォンのネイティブ開発環境でPieceCoreを作成し、Pieceを完成させる。

  2. PieceCoreの開発はせずに、RiiiverAWS Lambda環境上にコーディングし、Pieceを完成させる。 (Riiiver SDKに標準搭載されているPieceCoreを利用する。)

またPieceを作る際には、開発者登録が必要です。こちらに開発者登録の方法を記載していますのでご覧ください。


この記事は役に立ちましたか?