red hat mobile application platform ホスト型 3 サーバーサイド … · 2.2.1. firebase...

111
Red Hat Customer Content Services Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド Red Hat Mobile Application Platform ホスト型 3 向け

Upload: others

Post on 31-Dec-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

Red Hat Customer ContentServices

Red Hat Mobile Application Platformホスト型 3サーバーサイド開発者ガイド

Red Hat Mobile Application Platform ホスト型 3 向け

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

Red Hat Mobile Application Platform ホスト型 3 向け

法律上の通知法律上の通知

Copyright copy 2017 Red Hat Inc

The text of and illustrations in this document are licensed by Red Hat under a Creative CommonsAttributionndashShare Alike 30 Unported license (CC-BY-SA) An explanation of CC-BY-SA isavailable athttpcreativecommonsorglicensesby-sa30 In accordance with CC-BY-SA if you distribute this document or an adaptation of it you mustprovide the URL for the original version

Red Hat as the licensor of this document waives the right to enforce and agrees not to assertSection 4d of CC-BY-SA to the fullest extent permitted by applicable law

Red Hat Red Hat Enterprise Linux the Shadowman logo JBoss OpenShift Fedora the Infinitylogo and RHCE are trademarks of Red Hat Inc registered in the United States and othercountries

Linux reg is the registered trademark of Linus Torvalds in the United States and other countries

Java reg is a registered trademark of Oracle andor its affiliates

XFS reg is a trademark of Silicon Graphics International Corp or its subsidiaries in the United Statesandor other countries

MySQL reg is a registered trademark of MySQL AB in the United States the European Union andother countries

Nodejs reg is an official trademark of Joyent Red Hat Software Collections is not formally related toor endorsed by the official Joyent Nodejs open source or commercial project

The OpenStack reg Word Mark and OpenStack logo are either registered trademarksservice marksor trademarksservice marks of the OpenStack Foundation in the United States and other countriesand are used with the OpenStack Foundations permission We are not affiliated with endorsed orsponsored by the OpenStack Foundation or the OpenStack community

All other trademarks are the property of their respective owners

概要概要

本書はRed Hat Mobile Application Platform ホスト型 3 でクラウドアプリおよびサービスを開発するためのガイドです

目次目次

第1章 クラウドアプリの開発11 クラウド開発

111 概要112 クラウドアプリ構造

1121 applicationjs1122 packagejson

113 サンプル12 環境

121 環境とは122 環境とビジネスオブジェクトの対話123 環境がない mdashthinsp 機能が制限される

1231 チームメンバーシップの更新1232 管理者環境のセットアップ

124 他のリソース13 クラウドアプリでの NODEJS の使用

131 概要132 Nodejs モジュールの使用133 環境変数

14 NPM を使用した NODEJS 依存関係の管理141 概要142 npm とアプリのステージ143 npm のベストプラクティス

1431 npm-shrinkwrap ファイルの使用144 node_modules のアップロード

15 NODEJS バージョンの設定151 fhc の使用152 Studio の使用

第2章 クラウドアプリでの RHMAP 機能の使用21 API MAPPER を使用した JSON API 応答の変換

211 概要212 セットアップ213 使用例

2131 要求の作成2132 マッピングの追加2133 マップされた API の使用

214 カスタムの変換2141 カスタムの変換の作成2142 サンプル

22 プッシュ通知を使用したアプリケーションの開発221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード222 Push Notification Hello World テンプレートからのプロジェクトの作成223 クライアントアプリのパッケージ名の定義224 プッシュサポートのセットアップ225 クライアントアプリへの google-servicesjson ファイルの統合226 configxml ファイルの設定227 クライアントアプリバイナリーのビルド228 アプリのテスト

23 MBAAS サービスからフォームフィールドに動的にデータを入力する231 概要232 データソースのサービスの作成233 データソースの定義

777777889999

101010101012121213131313141414

151515151616171818181819

191920212122222223232324

目次

1

233 データソースの定義234 フォームフィールドでのデータソースの使用

24 アプリへの統計の追加241 概要242 カウンターとタイマーの作成243 統計の表示

第3章 RHMAP データ同期フレームワークの使用31 データ同期フレームワーク

311 ハイレベルアーキテクチャー312 API313 スタートガイド

3131 不必要な同期ループの回避314 同期フレームワークの高度な機能の使用315 さらに詳しく知るために

3151 データセット3152 競合

32 同期に関する用語321 同期プロトコル322 同期サーバー323 同期クライアント324 同期サーバーループ325 同期クライアントループ326 同期周期327 データセット328 データセットバックエンド329 データセットハンドラー3210 データセットクライアント3211 データセットレコード3212 ハッシュ

33 同期サーバーのアーキテクチャー331 アーキテクチャー

3311 HTTP ハンドラー33111 同期 HTTP ハンドラー33112 同期レコード HTTP ハンドラー

3312 キュー3313 プロセッサー3314 同期スケジューラー

34 データ同期設定ガイド341 同期周期の設定342 ワーカーの設定

3421 間隔の目的3422 ワーカーバックオフ

35 同期サーバーアップグレードに関する注記351 概要352 前提条件353 データハンドラー関数署名の変更354 動作の変更355 ロガーの変更

36 同期サーバーのパフォーマンスとスケーリング361 概要362 パフォーマンスの検査363 パフォーマンスの理解

3631 CPU 使用率

242526262627

2828282929313132323233333434343434343535353535363636363636373737373939394040404042424343434444

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

2

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 2: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

Red Hat Mobile Application Platform ホスト型 3 向け

法律上の通知法律上の通知

Copyright copy 2017 Red Hat Inc

The text of and illustrations in this document are licensed by Red Hat under a Creative CommonsAttributionndashShare Alike 30 Unported license (CC-BY-SA) An explanation of CC-BY-SA isavailable athttpcreativecommonsorglicensesby-sa30 In accordance with CC-BY-SA if you distribute this document or an adaptation of it you mustprovide the URL for the original version

Red Hat as the licensor of this document waives the right to enforce and agrees not to assertSection 4d of CC-BY-SA to the fullest extent permitted by applicable law

Red Hat Red Hat Enterprise Linux the Shadowman logo JBoss OpenShift Fedora the Infinitylogo and RHCE are trademarks of Red Hat Inc registered in the United States and othercountries

Linux reg is the registered trademark of Linus Torvalds in the United States and other countries

Java reg is a registered trademark of Oracle andor its affiliates

XFS reg is a trademark of Silicon Graphics International Corp or its subsidiaries in the United Statesandor other countries

MySQL reg is a registered trademark of MySQL AB in the United States the European Union andother countries

Nodejs reg is an official trademark of Joyent Red Hat Software Collections is not formally related toor endorsed by the official Joyent Nodejs open source or commercial project

The OpenStack reg Word Mark and OpenStack logo are either registered trademarksservice marksor trademarksservice marks of the OpenStack Foundation in the United States and other countriesand are used with the OpenStack Foundations permission We are not affiliated with endorsed orsponsored by the OpenStack Foundation or the OpenStack community

All other trademarks are the property of their respective owners

概要概要

本書はRed Hat Mobile Application Platform ホスト型 3 でクラウドアプリおよびサービスを開発するためのガイドです

目次目次

第1章 クラウドアプリの開発11 クラウド開発

111 概要112 クラウドアプリ構造

1121 applicationjs1122 packagejson

113 サンプル12 環境

121 環境とは122 環境とビジネスオブジェクトの対話123 環境がない mdashthinsp 機能が制限される

1231 チームメンバーシップの更新1232 管理者環境のセットアップ

124 他のリソース13 クラウドアプリでの NODEJS の使用

131 概要132 Nodejs モジュールの使用133 環境変数

14 NPM を使用した NODEJS 依存関係の管理141 概要142 npm とアプリのステージ143 npm のベストプラクティス

1431 npm-shrinkwrap ファイルの使用144 node_modules のアップロード

15 NODEJS バージョンの設定151 fhc の使用152 Studio の使用

第2章 クラウドアプリでの RHMAP 機能の使用21 API MAPPER を使用した JSON API 応答の変換

211 概要212 セットアップ213 使用例

2131 要求の作成2132 マッピングの追加2133 マップされた API の使用

214 カスタムの変換2141 カスタムの変換の作成2142 サンプル

22 プッシュ通知を使用したアプリケーションの開発221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード222 Push Notification Hello World テンプレートからのプロジェクトの作成223 クライアントアプリのパッケージ名の定義224 プッシュサポートのセットアップ225 クライアントアプリへの google-servicesjson ファイルの統合226 configxml ファイルの設定227 クライアントアプリバイナリーのビルド228 アプリのテスト

23 MBAAS サービスからフォームフィールドに動的にデータを入力する231 概要232 データソースのサービスの作成233 データソースの定義

777777889999

101010101012121213131313141414

151515151616171818181819

191920212122222223232324

目次

1

233 データソースの定義234 フォームフィールドでのデータソースの使用

24 アプリへの統計の追加241 概要242 カウンターとタイマーの作成243 統計の表示

第3章 RHMAP データ同期フレームワークの使用31 データ同期フレームワーク

311 ハイレベルアーキテクチャー312 API313 スタートガイド

3131 不必要な同期ループの回避314 同期フレームワークの高度な機能の使用315 さらに詳しく知るために

3151 データセット3152 競合

32 同期に関する用語321 同期プロトコル322 同期サーバー323 同期クライアント324 同期サーバーループ325 同期クライアントループ326 同期周期327 データセット328 データセットバックエンド329 データセットハンドラー3210 データセットクライアント3211 データセットレコード3212 ハッシュ

33 同期サーバーのアーキテクチャー331 アーキテクチャー

3311 HTTP ハンドラー33111 同期 HTTP ハンドラー33112 同期レコード HTTP ハンドラー

3312 キュー3313 プロセッサー3314 同期スケジューラー

34 データ同期設定ガイド341 同期周期の設定342 ワーカーの設定

3421 間隔の目的3422 ワーカーバックオフ

35 同期サーバーアップグレードに関する注記351 概要352 前提条件353 データハンドラー関数署名の変更354 動作の変更355 ロガーの変更

36 同期サーバーのパフォーマンスとスケーリング361 概要362 パフォーマンスの検査363 パフォーマンスの理解

3631 CPU 使用率

242526262627

2828282929313132323233333434343434343535353535363636363636373737373939394040404042424343434444

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

2

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 3: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

法律上の通知法律上の通知

Copyright copy 2017 Red Hat Inc

The text of and illustrations in this document are licensed by Red Hat under a Creative CommonsAttributionndashShare Alike 30 Unported license (CC-BY-SA) An explanation of CC-BY-SA isavailable athttpcreativecommonsorglicensesby-sa30 In accordance with CC-BY-SA if you distribute this document or an adaptation of it you mustprovide the URL for the original version

Red Hat as the licensor of this document waives the right to enforce and agrees not to assertSection 4d of CC-BY-SA to the fullest extent permitted by applicable law

Red Hat Red Hat Enterprise Linux the Shadowman logo JBoss OpenShift Fedora the Infinitylogo and RHCE are trademarks of Red Hat Inc registered in the United States and othercountries

Linux reg is the registered trademark of Linus Torvalds in the United States and other countries

Java reg is a registered trademark of Oracle andor its affiliates

XFS reg is a trademark of Silicon Graphics International Corp or its subsidiaries in the United Statesandor other countries

MySQL reg is a registered trademark of MySQL AB in the United States the European Union andother countries

Nodejs reg is an official trademark of Joyent Red Hat Software Collections is not formally related toor endorsed by the official Joyent Nodejs open source or commercial project

The OpenStack reg Word Mark and OpenStack logo are either registered trademarksservice marksor trademarksservice marks of the OpenStack Foundation in the United States and other countriesand are used with the OpenStack Foundations permission We are not affiliated with endorsed orsponsored by the OpenStack Foundation or the OpenStack community

All other trademarks are the property of their respective owners

概要概要

本書はRed Hat Mobile Application Platform ホスト型 3 でクラウドアプリおよびサービスを開発するためのガイドです

目次目次

第1章 クラウドアプリの開発11 クラウド開発

111 概要112 クラウドアプリ構造

1121 applicationjs1122 packagejson

113 サンプル12 環境

121 環境とは122 環境とビジネスオブジェクトの対話123 環境がない mdashthinsp 機能が制限される

1231 チームメンバーシップの更新1232 管理者環境のセットアップ

124 他のリソース13 クラウドアプリでの NODEJS の使用

131 概要132 Nodejs モジュールの使用133 環境変数

14 NPM を使用した NODEJS 依存関係の管理141 概要142 npm とアプリのステージ143 npm のベストプラクティス

1431 npm-shrinkwrap ファイルの使用144 node_modules のアップロード

15 NODEJS バージョンの設定151 fhc の使用152 Studio の使用

第2章 クラウドアプリでの RHMAP 機能の使用21 API MAPPER を使用した JSON API 応答の変換

211 概要212 セットアップ213 使用例

2131 要求の作成2132 マッピングの追加2133 マップされた API の使用

214 カスタムの変換2141 カスタムの変換の作成2142 サンプル

22 プッシュ通知を使用したアプリケーションの開発221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード222 Push Notification Hello World テンプレートからのプロジェクトの作成223 クライアントアプリのパッケージ名の定義224 プッシュサポートのセットアップ225 クライアントアプリへの google-servicesjson ファイルの統合226 configxml ファイルの設定227 クライアントアプリバイナリーのビルド228 アプリのテスト

23 MBAAS サービスからフォームフィールドに動的にデータを入力する231 概要232 データソースのサービスの作成233 データソースの定義

777777889999

101010101012121213131313141414

151515151616171818181819

191920212122222223232324

目次

1

233 データソースの定義234 フォームフィールドでのデータソースの使用

24 アプリへの統計の追加241 概要242 カウンターとタイマーの作成243 統計の表示

第3章 RHMAP データ同期フレームワークの使用31 データ同期フレームワーク

311 ハイレベルアーキテクチャー312 API313 スタートガイド

3131 不必要な同期ループの回避314 同期フレームワークの高度な機能の使用315 さらに詳しく知るために

3151 データセット3152 競合

32 同期に関する用語321 同期プロトコル322 同期サーバー323 同期クライアント324 同期サーバーループ325 同期クライアントループ326 同期周期327 データセット328 データセットバックエンド329 データセットハンドラー3210 データセットクライアント3211 データセットレコード3212 ハッシュ

33 同期サーバーのアーキテクチャー331 アーキテクチャー

3311 HTTP ハンドラー33111 同期 HTTP ハンドラー33112 同期レコード HTTP ハンドラー

3312 キュー3313 プロセッサー3314 同期スケジューラー

34 データ同期設定ガイド341 同期周期の設定342 ワーカーの設定

3421 間隔の目的3422 ワーカーバックオフ

35 同期サーバーアップグレードに関する注記351 概要352 前提条件353 データハンドラー関数署名の変更354 動作の変更355 ロガーの変更

36 同期サーバーのパフォーマンスとスケーリング361 概要362 パフォーマンスの検査363 パフォーマンスの理解

3631 CPU 使用率

242526262627

2828282929313132323233333434343434343535353535363636363636373737373939394040404042424343434444

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

2

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 4: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

目次目次

第1章 クラウドアプリの開発11 クラウド開発

111 概要112 クラウドアプリ構造

1121 applicationjs1122 packagejson

113 サンプル12 環境

121 環境とは122 環境とビジネスオブジェクトの対話123 環境がない mdashthinsp 機能が制限される

1231 チームメンバーシップの更新1232 管理者環境のセットアップ

124 他のリソース13 クラウドアプリでの NODEJS の使用

131 概要132 Nodejs モジュールの使用133 環境変数

14 NPM を使用した NODEJS 依存関係の管理141 概要142 npm とアプリのステージ143 npm のベストプラクティス

1431 npm-shrinkwrap ファイルの使用144 node_modules のアップロード

15 NODEJS バージョンの設定151 fhc の使用152 Studio の使用

第2章 クラウドアプリでの RHMAP 機能の使用21 API MAPPER を使用した JSON API 応答の変換

211 概要212 セットアップ213 使用例

2131 要求の作成2132 マッピングの追加2133 マップされた API の使用

214 カスタムの変換2141 カスタムの変換の作成2142 サンプル

22 プッシュ通知を使用したアプリケーションの開発221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード222 Push Notification Hello World テンプレートからのプロジェクトの作成223 クライアントアプリのパッケージ名の定義224 プッシュサポートのセットアップ225 クライアントアプリへの google-servicesjson ファイルの統合226 configxml ファイルの設定227 クライアントアプリバイナリーのビルド228 アプリのテスト

23 MBAAS サービスからフォームフィールドに動的にデータを入力する231 概要232 データソースのサービスの作成233 データソースの定義

777777889999

101010101012121213131313141414

151515151616171818181819

191920212122222223232324

目次

1

233 データソースの定義234 フォームフィールドでのデータソースの使用

24 アプリへの統計の追加241 概要242 カウンターとタイマーの作成243 統計の表示

第3章 RHMAP データ同期フレームワークの使用31 データ同期フレームワーク

311 ハイレベルアーキテクチャー312 API313 スタートガイド

3131 不必要な同期ループの回避314 同期フレームワークの高度な機能の使用315 さらに詳しく知るために

3151 データセット3152 競合

32 同期に関する用語321 同期プロトコル322 同期サーバー323 同期クライアント324 同期サーバーループ325 同期クライアントループ326 同期周期327 データセット328 データセットバックエンド329 データセットハンドラー3210 データセットクライアント3211 データセットレコード3212 ハッシュ

33 同期サーバーのアーキテクチャー331 アーキテクチャー

3311 HTTP ハンドラー33111 同期 HTTP ハンドラー33112 同期レコード HTTP ハンドラー

3312 キュー3313 プロセッサー3314 同期スケジューラー

34 データ同期設定ガイド341 同期周期の設定342 ワーカーの設定

3421 間隔の目的3422 ワーカーバックオフ

35 同期サーバーアップグレードに関する注記351 概要352 前提条件353 データハンドラー関数署名の変更354 動作の変更355 ロガーの変更

36 同期サーバーのパフォーマンスとスケーリング361 概要362 パフォーマンスの検査363 パフォーマンスの理解

3631 CPU 使用率

242526262627

2828282929313132323233333434343434343535353535363636363636373737373939394040404042424343434444

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

2

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 5: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

233 データソースの定義234 フォームフィールドでのデータソースの使用

24 アプリへの統計の追加241 概要242 カウンターとタイマーの作成243 統計の表示

第3章 RHMAP データ同期フレームワークの使用31 データ同期フレームワーク

311 ハイレベルアーキテクチャー312 API313 スタートガイド

3131 不必要な同期ループの回避314 同期フレームワークの高度な機能の使用315 さらに詳しく知るために

3151 データセット3152 競合

32 同期に関する用語321 同期プロトコル322 同期サーバー323 同期クライアント324 同期サーバーループ325 同期クライアントループ326 同期周期327 データセット328 データセットバックエンド329 データセットハンドラー3210 データセットクライアント3211 データセットレコード3212 ハッシュ

33 同期サーバーのアーキテクチャー331 アーキテクチャー

3311 HTTP ハンドラー33111 同期 HTTP ハンドラー33112 同期レコード HTTP ハンドラー

3312 キュー3313 プロセッサー3314 同期スケジューラー

34 データ同期設定ガイド341 同期周期の設定342 ワーカーの設定

3421 間隔の目的3422 ワーカーバックオフ

35 同期サーバーアップグレードに関する注記351 概要352 前提条件353 データハンドラー関数署名の変更354 動作の変更355 ロガーの変更

36 同期サーバーのパフォーマンスとスケーリング361 概要362 パフォーマンスの検査363 パフォーマンスの理解

3631 CPU 使用率

242526262627

2828282929313132323233333434343434343535353535363636363636373737373939394040404042424343434444

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

2

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 6: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

3632 キュー内の残りのジョブ3633 API 応答時間3634 MongoDB 操作時間

364 同期サーバーのスケーリング3641 ホストされた MBaaS でのスケーリング

36411 Nodejs クラスターモジュールの使用36412 より多くのアプリのデプロイ

3642 自己管理された MBaaS でのスケーリング37 同期サーバーにより作成された MONGODB コレクション

371 概要372 同期サーバーコレクション

3721 fhsync_pending_queue3722 fhsync_ltdatasetIdgt_updates3723 fhsync_ack_queue3724 fhsync_datasetClients3725 fhsync_ltdatasetIdgt_records3726 fhsync_queue3727 fhsync_locks

373 キューコレクションのプルーニング38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない382 データセットバックエンドに適用された変更は他のクライアントに伝播されない383 デバッグログの有効化

第4章 RHMAP と他のサービスとの統合41 MBAAS サービスの概要42 認証に対する SAML の使用

421 概要422 SAML の概要423 テンプレートのセットアップ

4231 SAML サービスの作成4232 プロジェクトのセットアップ

424 仕組み43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

431 OpenShift Online とは4311 OpenShift Online と RHMAP との統合4312 RHMAP による利用可能な OpenShift Online ギアへの影響4313 制限

432 スタートガイド4321 初回ログインおよびセットアップ4322 サンプルアプリケーションの作成4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

433 どのように連携するか4331 ギア4332 環境4333 ロギングおよびデバッグ4334 OpenShift Online にデプロイされたアプリの削除4335 SSH キー4336 ドメイン

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ441 Google OAuth アプリ442 承認

4444444545454545464646464647474747474848484950

5252525253535354555858585959595961616366666768697071717172

目次

3

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 7: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

4421 ユーザーがプラットフォームに存在することを確認4422 ユーザーが認証されているかどうかを確認

443 認証ポリシーに対するユーザーの追加削除

第5章 データの格納51 データブラウザー

511 概要512 データブラウザーの使用

5121 コレクションの表示追加5122 コレクション内のデータ表示

51221 データの並び替え51222 データのフィルタリング

5123 データの編集51231 インラインエディターを使用した編集51232 高度なエディターを使用した編集

512321 動的エディターを使用した編集512322 Raw JSON エディターを使用した編集

513 データのエクスポートとインポート5131 データのエクスポート5132 データのインポート

51321 インポート形式51322 JSON のインポート51323 CSV のインポート51324 BSON または MongoDump 出力のインポート

514 データベースのアップグレード52 アプリケーションデータのエクスポート

521 エクスポートデータ形式522 アプリケーションデータのエクスポート

5221 新しいエクスポートジョブの開始5222 エクスポートジョブのステータスの問い合わせ5223 エクスポートデータのダウンロード

53 アプリケーションデータのインポート531 アプリケーションデータのインポート

5311 新しいインポートジョブの開始5312 インポートジョブのステータスの問い合わせ

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート61 空のプロジェクトの作成62 クライアントアプリのインポート63 クラウドアプリのインポート64 クライアントアプリの要件

641 Cordova Light アプリ642 Cordova アプリ643 Web App644 ネイティブ Android645 ネイティブ iOS646 ネイティブ Windows Phone 8647 Xamarin

65 クラウドアプリの要件

第7章 古いバージョンの RHMAP からの移行71 V2 から V3 への移行の概要

711 アプリとプロジェクト712 移行する理由

727273

74747474747575757676777778787979798080808181828282838383848484

85858586878787888888898989

90909090

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

4

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 8: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

713 Studio での自動移行714 fhc を使用した自動移行

72 V2 から V3 への移行ガイド721 v2 アプリとは722 v3 アプリとは723 プロジェクトとは724 新規プロジェクト725 クラウドの新しい v3 アプリ

7251 クラウドアプリ7252 cloud フォルダーの移行7253 shared フォルダーの移行7254 (オプション) Nodejs SDK の変更

726 クライアント用の新しい v3 アプリ7261 Cordova Light アプリ7262 client フォルダーの移行7263 shared フォルダーの移行7264 Javascript SDK インジェクション7265 fhconfigjson7266 (オプション) レガシー FeedHenry API7267 (オプション) v2 アプリクライアントパッケージの移行7268 (オプション) v2 アプリの embedmobile 移行

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行731 packagejson の変更732 $fh を fh に置き換えるためにクラウドコードを変更733 applicationjs の変更734 Grunt の使用

74 組み込みアプリから基本的な WEB アプリへの移行741 概要742 移行

7421 移行されたハイブリッドアプリのクローン7422 新しい基本的な Web アプリの作成7423 新しい基本的な Web アプリへの組み込みアプリのコピー

75 ロールからチームへの移行751 パーミッションの追加752 アナリティクス (analytics)753 フォームエディター (formseditor)754 フォーム管理者 (formsadmin)755 提出ビューワ (submissionsviewer)756 提出エディター (submissionseditor)757 開発管理者 (devadmin)758 開発者 (dev)759 サービス管理者 (serviceadmin)7510 ドメイン管理者 (portaladmin)7511 顧客管理者 (customeradmin)7512 リセラー管理者 (reselleradmin)7513 管理者 (admin)

90949494959696969697979797979797979898999999

100100100100101101101101101102102102103103103104104105105106106107107107

目次

5

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 9: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

6

第1章 クラウドアプリの開発

11 クラウド開発

111 概要

Red Hat Mobile Application Platform ホスト型 (RHMAP) の中心的なコンセプトの 1 つはクラウドアクラウドアプリプリですクラウドアプリはモバイルデバイスにデプロイされたクライアントアプリとビジネスロジックおよびデータが含まれるバックエンドシステム間の通信を処理するサーバーサイドアプリケーションです

クラウドアプリは Nodejs を使用して開発されますthinspNodejs は高速でスケーラブルなネットは高速でスケーラブルなネットワークアプリケーションを簡単に構築できるようにするワークアプリケーションを簡単に構築できるようにするChrome のの JavaScript ランタイムに基ランタイムに基づいて構築されたプラットフォームですづいて構築されたプラットフォームですNodejs は軽量さと効率性を実現するイベント駆動の非は軽量さと効率性を実現するイベント駆動の非ブロッキングブロッキング IO モデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプモデルを使用し分散されたデバイスで実行するデータ集約型リアルタイムアプリケーションに最適ですリケーションに最適です

Nodejs 開発に精通していない場合はNode Beginner Website を参照することをお勧めします

112 クラウドアプリ構造

クラウドアプリが RHMAP で作成された場合その新しく作成されたクラウドアプリは実質的には事前設定された Nodejs アプリケーションです事前設定された対応するクライアントアプリも生成された場合クラウドアプリにはすべての基本的な設定 (ルート) が含まれるためクライアントアプリとクラウドアプリは同期されますまたクラウドアプリをホストするインフラストラクチャーもインプレース状態 (MBaaS) にあり簡単にアクセスできます

設定とインフラストラクチャーがすべてインプレース状態にあるためクラウドアプリは MBaaSにデプロイできますまた追加コードを必要とせずにクライアントアプリの要求をルーティングできます上級 Nodejs 開発者がサーバーを再設計したり独自のサーバーを実装したりする場合これはapplicationjs ファイル内のコードを操作することによって可能になります

注記注記

アプリのメインエントリーポイントを表すファイルには必ず applicationjs という名前を付ける必要があります

クラウドアプリでは次のファイルがデフォルトで提供されます

1121 applicationjs

このファイルはアプリケーションが MBaaS (クラウド実行環境) にデプロイされたときに呼び出されますほとんどの場合はこのファイルを変更する必要はありませんこのファイルはクライアントからの fhcloud() 要求を処理し適切にルーティングするよう設定されます

1122 packagejson

クラウドアプリの設定ファイルは主に依存関係の管理に使用されますサードパーティーのNode モジュールを使用している場合それらのモジュールはこのファイルで指定されます

関連項目

第1章 クラウドアプリの開発

7

クラウドアプリでの Nodejs モジュールの使用

npm を使用した Nodejs 依存関係の管理

packagejson の公式ドキュメンテーション

113 サンプル

クラウドアプリは非常に簡単に準備できますStudio で新しいプロジェクトを作成するときにHello World Project テンプレートを試したりGitHub (feedhenry-templateshelloworld-cloud) でテンプレートのソースコードを探したりすることにより単純なサンプルを使用できます以下にテンプレートの簡単な概要を示します

最初の手順は applicationjs でカスタムルートを設定することです

参照される hellojs ファイルでは特定のルートのロジックを定義します

$fhcloud を使用したこのエンドポイントへのクライアントサイド呼び出しは以下のようになります

12 環境

appuse(hello require(libhellojs)())

var express = require(express)var bodyParser = require(body-parser)var cors = require(cors)

function helloRoute() var hello = new expressRouter() hellouse(cors()) enables cross-origin access from all domains hellouse(bodyParser()) parses POST request data into a JS object

hellopost( function(req res) resjson(msg Hello + reqbodyhello) ) return hellomoduleexports = helloRoute

$fhcloud( path hello data hello World function (res) response handler function (code errorprops params) error handler )

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

8

121 環境とは

環境はプロジェクトサービスフォームおよびアプリの開発サイクルを個別のステージに論理的に分離する方法です環境はライフサイクル管理の重要な要素です

たとえばプロジェクトには DevUATおよび Production の 3 つのステージが含まれることがあります各ステージは環境により表されます環境の数と種類はプラットフォームで設定可能でありドメインごとに変更できます

122 環境とビジネスオブジェクトの対話

App Studio で環境が使用される領域は以下のとおりです

Projects (Apps を含む)

Services

Forms

Admin gt Auth Policies

環境にアクセスせずにこれらの領域にアクセスすると以下のような警告が表示されます

123 環境がない mdashthinsp 機能が制限される

App Studio でプロジェクトサービスフォームおよびアプリに関連するほとんどのアクションを実行するには1 つまたは複数の環境にアクセスできる必要があります

現在環境にアクセスできない場合は以下の理由が考えられます

現在のチームメンバーシップにより環境の使用が許可されない

管理者がまだ環境をセットアップしていない

1231 チームメンバーシップの更新

環境にアクセスするにはユーザー (またはドメインの管理者) が以下の操作を実行する必要があります

Admin gt Teams 領域に移動する

メンバーになっているチームを変更しそのチームのメンバーに Admin gt Environment ビ

第1章 クラウドアプリの開発

9

ジネスオブジェクトへのアクセスを与える

チームの管理の詳細についてはここをクリックしてください

1232 管理者環境のセットアップ

チームがセットアップされメンバーシップが適切な場合は管理者に連絡してください環境へのアクセスをチームによって与える前に管理者が環境をセットアップする必要があります

124 他のリソース

チームおよびコラボレーション

ライフサイクル管理

13 クラウドアプリでの NODEJS の使用

131 概要

本書ではNodejs モジュールをクラウドアプリに含め使用する方法について説明しますRedHat Mobile Application Platform (RHMAP) ではクラウドアプリを開発するためにレジストリーで利用可能な Nodejs パッケージのモジュールを使用できますパブリックレジストリー(npmjscom) ではフレームワークコネクターおよびさまざまなツールを含む数千のパッケージを見つけることができます

RHMAP 自体の機能の一部はノードモジュールとして公開されますたとえばプラットフォームで新しいクラウドアプリを作成する場合デフォルトでは packagejson に Mobile Backend As AService (MBaaS) の基盤となる fh-mbaas-api という名前のモードモジュールが含まれます

132 Nodejs モジュールの使用

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

10

アプリにある機能が必要であり一から作成したくない場合はnpmjscom で既存のモジュールを探すことをお勧めします

たとえばMongoose ODM フレームワークを使用する場合はレジストリーの mongoose パッケージの公式ページ (npmjscompackagemongoose) を参照してください

プロジェクトでパッケージの最新バージョンを使用する場合はクラウドアプリのディレクトリーで以下のコマンドを実行してパッケージをローカルにインストールし依存関係としてクラウドアプリの packagejson ファイルに追加します

または以下の例のようにdependencies オブジェクトの最後で依存関係を追加することにより依存関係を packagejson に手動で追加します

この時点でパッケージで提供されるモジュールを使用できます多くの場合npmjscom のパッケージページには使用方法とドキュメンテーションへのリンクが含まれますすべてのモジュールで共通な次の手順ではコードでモジュールを必須必須にして使用できるようにします

npm install --save mongoose

name my-fh-app version 020 dependencies body-parser ~102 cors ~220 express ~400 fh-mbaas-api ~490 mocha ^210 request ~2400 mongoose ~4112 added mongoose dependency

var mongoose = require(mongoose)mongooseconnect(mongodblocalhostmy_database)

第1章 クラウドアプリの開発

11

この例ではデータベース URL はソースでハードコーディングされますただしより一般的なシナリオでは開発ライフサイクルの異なるステージ (開発テスト本番稼働) に応じて異なるデータベースを使用しますこれは環境変数で設定値を定義することにより実現できます

133 環境変数

ホスト名ユーザー名パスワードなどのクラウドアプリの設定の部分がライフサイクルステージで異なる場合は環境変数を使用してこのような設定値を設定できますこれによりコードを変更せずに設定を変更できるようになりますStudio において各クラウドアプリには EnvironmentVariables セクションがあり変数を作成または削除したり値を設定したりアプリの実行中インスタンスに変数をプッシュしたりできます

環境変数は異なる値を異なる環境にプッシュプッシュする機能と組み合わせると特に有用ですたとえばテスト用と本番稼働用に異なるデータベースホストを使用できます他の利点は 機密性がある設定情報をアプリケーションのコードベース外に格納できることです

クラウドアプリでは環境変数は processenv オブジェクトを介してアクセスできます環境変数を使用するよう変更された Mongoose 接続呼び出しの前の例は以下のようになります

14 NPM を使用した NODEJS 依存関係の管理

141 概要

npm (ノードパッケージマネージャーノードパッケージマネージャー) は Nodejs 用の依存関係管理ツールでありNodejs アプリケーションを開発するために必要になります原則としてnpm は MavenCocoapodsNuGetなどの他の依存関係管理システムに似ています

プロジェクトでは標準化されたファイル (Nodejs の場合は packagejson) で依存関係が宣言される

パッケージは 1 か所 (registrynpmjsorg にある npm レジストリー) でホストされる

依存関係バージョンはワイルドカードまたは範囲を使用して明示的に指定できる

推移的な依存関係のバージョンは自動的に決定または修正できる (npm-shrinkwrap ファイルの使用を参照)

インストール後にパッケージがローカルでキャッシュされる (node_modules フォルダー)

mongooseconnect(mongodb + processenvMONGO_HOST + + processenvMONGO_DB)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

12

クラウドアプリでの Nodejs モジュールの使用についてはクラウドアプリでの Nodejs モジュールの使用を参照してください

142 npm とアプリのステージ

クラウドアプリをデプロイする場合はアプリの環境で npm コマンドが実行されアプリの依存関係がダウンロードおよびインストールされます以下のことに注意してください

初めてクラウドアプリがデプロイされる場合は完全な npm install が実行されますこのためアプリの最初のデプロイメントには非常に時間がかかることがあります

以降の各デプロイにおいてpackagejson ファイルが以前のデプロイから変更された場合はnpm update が実行されます

packagejson に変更が加えられない場合npm コマンドは実行されません (update と installも実行されません)

npm を完全に再実行する場合は以下のように削除ステージを実行します

Studio でクラウドアプリの Deploy セクションの Clean Stage チェックボックスをオンにします

fhc を使用している場合は--clean オプション ( つまりfhc app stage ltapp-idgt ltenv-namegt --clean) を使します

143 npm のベストプラクティス

npm を使用した基本的なベストプラクティスはノードモジュールでバージョン管理がどのように機能するかを理解し (The semantic versioner for npm を参照)packagejson の依存関係に対して を使用しないことです

ローカルで開発する場合に役に立つヒントはnpm (npm install request --save など) を使用してモジュールをインストールするときに --save フラグを使用することです--save フラグを使用するとインストールされたバージョンの packagejson の依存関係セクションに新しいモジュールが追加されますまたshrinkwrap ファイルの使用もお勧めします

1431 npm-shrinkwrap ファイルの使用

npm-shrinkwrapjson ファイルはパッケージの推移的な依存関係のバージョンをロックダウンするためパッケージのインストール時に使用する各依存関係の適切なバージョンを制御できます

shrinkwrap ファイルを作成するには以下のコマンドを実行します

npm shrinkwrap

生成された npm-shrinkwrapjson ファイルをクラウドアプリのルートディレクトリーに配置しますRHMAP のアプリで npm install が呼び出されるとshrinkwrap ファイルで定義されたバージョンが使用されます

shrinkwrap の詳細については公式な npm ドキュメンテーション (Lock down dependencyversions) を参照してください

144 node_modules のアップロード

第1章 クラウドアプリの開発

13

RHMAP ではnode_modules ディレクトリーをコミットしクラウドアプリで使用できます (ただしこれは推奨される方法ではありませんではありません)この場合アプリがステージングされても npm はまったく実行されず (clean オプションが指定されている場合であっても)アップロードしたモジュールはアプリを実行するために使用されますただしネイティブのノードモジュールは実行するのと同じアーキテクチャー (RHMAP のインスタンスによって異なる可能性があります) でコンパイルする必要があります

15 NODEJS バージョンの設定

151 fhc の使用

最初にfhc の最新バージョンを用意します

次に fhc ランタイムコマンドを使用して環境で利用可能なランタイムを確認します

このコマンドを実行すると447 などのバージョンが出力されます

左側にはランタイムの名前が示され右側には特定のバージョンが示されます

ステージ中にアプリのランタイムを設定するにはltnode versiongt (447 など) を追加します

これによりノードのアプリのランタイムが v447 に設定されます

別のランタイムに変更するにはランタイムの引数をステージコマンドに再び追加します

152 Studio の使用

Studio のデプロイ画面ではアプリが設定された現在のランタイムを確認できますまたここで新しいランタイムを設定しアプリをデプロイすることもできます

npm install -g fh-fhc

fhc runtimes --env=dev

fhc app stage --app=ltAPP_GUIDgt --runtime=ltnode versiongt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

14

第2章 クラウドアプリでの RHMAP 機能の使用

21 API MAPPER を使用した JSON API 応答の変換

211 概要

サードパーティー API からデータをアクセスするときは多くの場合アプリケーションの受信データの構造または形式を変更する必要がありますたとえば値を異なる形式に変換しデータを事前処理して新しい値を派生させたりアプリケーションのモデルを適合させるためにフィールドの名前変更または削除を行ったりします

RHMAP にはデータ変換ロジックをカプセル化し主要なアプリケーションロジックから抽象化することを可能にする API Mapper という名前の視覚的なツールが含まれますAPI Mapper を使用すると以下のことを行って JSON API の応答を簡単に変換できるようになります

フィールド名を変更する

必要でないフィールドを除外する

組み込みまたはカスタムの変換を使用してフィールド値を変換する

212 セットアップ

API Mapper はクラウドサービステンプレートとして提供されますAPI Mapper の 1 つのインスタンスは複数のクラウドアプリとクラウドサービスで使用でき複数の異なる API を変換するためにも使用できますただし必要な場合は任意の数の API Mapper インスタンスをデプロイできます

API Mapper を使用するには以下の手順に従ってください

1 API Mapper サービスをデプロイします

a Services amp APIs セクションでProvision MBaaS ServiceAPI をクリックします

b リストで API Mapper を見つけChoose をクリックします

c API Mapper などの名前を入力しNext をクリックします

d API Mapper が作成後にデプロイされる環境を選択しNext をクリックします

e Finish をクリックしデプロイメントが完了するまで待機します

2 サービスをパブリックにします

第2章 クラウドアプリでの RHMAP 機能の使用

15

新しく作成された API Mapper サービスの Service Details ページにある Access ControlセクションでMake this Service Public to all Projects and Services チェックボックスをオンにします次に Save Service をクリックします

3 サービスのデータベースをアップグレードします

API Mapper にはアップグレードされたデータベースアップグレードされたデータベースが必要です作業を進める前にAPI Mapper サービスが完全にデプロイされ実行中であることを確認しますデータベースをアップグレードするには以下の手順を実行します

a API Mapper サービスの Data Browser セクションで右上隅にある UpgradeDatabase ボタンをクリックしUpgrade Now をクリックして確定しますアップグレードプロセスが完了するまで待機します

b Deploy セクションの Deploy Cloud App をクリックして API Mapper サービスを再デプロイします

この時点でサービスの Preview セクションから API Mapper の管理インターフェースにアクセスできます

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

213 使用例

この例は要求マッピングおよびカスタム変換を作成する方法を示していますデモのためにこの手順では変換するソース API の例としてパブリックな Github API を使用します

2131 要求の作成

feedhenry-templatesfh-api-mapper リポジトリーに関する情報を取得するためにGithubAPI エンドポイントの要求を作成します

1 API Mapper のホームページからNew Request をクリックします

2 URL フィールドに API 要求の完全な URL を貼り付けます

httpsapigithubcomreposfeedhenry-templatesfh-api-mapper

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

16

3 Github API を使用するために各要求で User-Agent ヘッダーが送信されるようにします以下の値を入力します

Header Key User-Agent

Header Value FHApiMapper

4 次にこの要求の内部マウントパスを選択しますMount Path タブを選択しパスを入力しますこの例ではマウントパスとして thisrepo を使用しますマップされた要求はこのパスで利用できます (パスはこの場合以下の URL になります)

httpltserviceURLgtthisrepo

5 Create Request をクリックしてデータベースに要求を格納します

6 Send Request をクリックして要求を送信し応答を取得します

7 Response セクションでResponse Headers セクションと Response Body セクションが期待したように表示されることを確認しますこの時点で変換の前に元の応答本文を確認できます

2132 マッピングの追加

要求を保存し内部パスに対してマップした後で応答の各フィールドに適用する変換を選択しますこの手順はフィールドの破棄および名前変更を行いフィールド値を変換する方法を示しています

1 Response Mapping セクションでAdd a Mapping をクリックします

マッピングが作成されたら応答で返されたフィールドのリストが左側に表示されます

2 owner フォールドを破棄します

owner フィールドをクリックして Field Mapping パネルで編集するためにそのフィールドを選択しますUse this field のチェックをオフにして owner フィールドとそのすべての子供を破棄します

3 id フィールドの名前を _id に変更します

左側にある id フィールドを選択しますRename Field ボックスで_id と入力します

4 private フィールドの名前を public に変更し値を反転します

前の手順のようにフィールド private の名前を public に変更します次にTransform ドロップダウンリストの invert という名前の変換を選択します

注記注記

Field Mapping セクションで行われたすべての変更は自動的に保存されます

変換をセットアップした後はResponse セクションの Response Body タブで元の応答本文とマップされた応答本文を比較できます元の応答は左側に表示されマップされた応答は右側に表示されます

第2章 クラウドアプリでの RHMAP 機能の使用

17

マップされた応答には値が true の public フィールドと _id フィールド (id ではない) が含まれowner フィールドは含まれません

2133 マップされた API の使用

Response セクションには以下のものを含むさまざまなクラウドからマップ済み要求を呼び出すコード例を含む Sample Code タブが含まれます

$fhservice API

Nodejs request モジュール

cURL

たとえばコマンドラインから要求を呼び出すにはcURL Request コードをコピーしコマンドラインに貼り付けそのコマンドを実行しますマップされた応答はコンソールに表示されます

214 カスタムの変換

組み込みのフィールド変換以外にカスタムの変換関数を作成することもできます

2141 カスタムの変換の作成

カスタムの変換関数を登録するには以下のコード例で示されているようにAPI Mapper の applicationjs ファイルの ルートに対する関数に渡される設定オブジェクトでその変換関数を宣言します

カスタム変換はtransformations オブジェクトのプロパティーとして定義されますプロパティーの名前は変換の名前に対応しますプロパティーの値は transformation definition オブジェクトです

各 transformation definition オブジェクトには以下の 2 つのプロパティーがあります

type 入力値の JavaScript 型を表す文字列可能な値はarraynumberstringboolean です

transform 変換関数この関数は元のフィールドを唯一の引数として取得し変換された値を返します

2142 サンプル

この例は偶数を 0 に奇数を 1 に変更する even という名前の変換を作成する方法を示しています

1 API Mapper サービスの Editor に移動しapplicationjs ファイルを開きます

appuse( require(libapi)( transformations lttransformation namegt type ltarray | number | string | booleangt transform ltunary functiongt ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

18

2 mixedArrayTransform という名前の既存の 1 つのカスタム変換を含む transformations オブジェクトの宣言を探します

3 transformations プロパティーの値を以下のオブジェクトに置き換えます

4 以下の内容で新しい transformationsevenjs ファイルを作成します

even という名前の新しい変換が数値型用の API Mapper UI で利用可能になります

22 プッシュ通知を使用したアプリケーションの開発

概要

このチュートリアルではプラットフォームの組み込みのプッシュ通知サーバーから送信されたプッシュ通知を受け取るサンプルアプリケーションを構築するプロセスについて説明しますこの例で作成するアプリケーションは Cordova に基づきAndroid と関連する Firebase CloudMessaging (旧名は Google Cloud Messaging) プラットフォームを対象にしていますただし他のすべてのサポート対象プラットフォームに対する手順は類似しています

Red Hat Mobile Application Platform ホスト型でのプッシュ通知サポートの詳細についてはPushNotifications を参照してください

221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjsonファイルのダウンロード

組み込みの UnifiedPush Server (UPS) から Google のプッシュ通知ネットワークにアクセスできるようにするには最初にサーバーキーを取得しFirebase コンソールでプロジェクトを確立する必要がありますクレデンシャルを取得する詳細な手順についてはObtaining Firebase CloudMessaging Credentials を参照してくださいこれらの手順はネイティブ Android アプリ向けでありすべてのプロセスを完了する必要はありませんセットアップを正常に完了するには以下の3 つのアイテムを取得する必要があります

サーバーキー (旧名は API キー)

送信者 ID (旧名はプロジェクト番号)

Firebase コンソールから生成された google-servicesjson ファイル

他のプッシュネットワークについてはObtaining Credentials for Push Networks を参照してください

222 Push Notification Hello World テンプレートからのプロジェクトの作成

even require(transformationsevenjs)

First tell the mapper it operates on numbersexportstype = number then implement the functionexportstransform = function(n) return n2

第2章 クラウドアプリでの RHMAP 機能の使用

19

1 RHMAP Studio で Projects に移動しNew Project をクリックします

2 Push Notification Hello World テンプレートを探し右側にある Choose をクリックします

3 プロジェクトの名前を Name your Project フィールドに入力します

4 App Templates セクションで Simple Cordova Push App を探しますこのアプリが選択されていることを確認しプロジェクトテンプレート内で選択解除できる他のすべてのアプリを選択解除しますチェックボックスは各アプリテンプレートの右上隅にあります

5 プロジェクトテンプレートの右上にある Create をクリックしますプロジェクトの作成が完了するまで待機します次に画面の下部にある Finish をクリックします

223 クライアントアプリのパッケージ名の定義

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Config をクリックします

3 Config メニューの Android オプションを選択します

4 Android Package Name 下にあるクライアントアプリのパッケージ名を定義します

この名前はFirebase コンソールでのアプリの登録時に必要ですパッケージの名前を定義するときはJava パッケージの命名規則に従います

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

20

224 プッシュサポートのセットアップ

プッシュサポートは各クライアントアプリに対して明示的に有効にする必要がありますまた最初の手順 (Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード) で取得したプッシュネットワーククレデンシャルを提供する必要もあります

1 プロジェクトの Apps Cloud Apps amp Services セクションで Simple Cordova Push Appをクリックします

2 画面の左側にある Push をクリックします

3 Enable Push をクリックします

4 Android オプションを選択し最初の手順で取得した Server key と Sender ID を入力しますEnable Push をクリックします

225 クライアントアプリへの google-servicesjson ファイルの統合

1 画面の左側にある Editor をクリックします

2 Editor で www フォルダーを選択しツールバーの + 記号をクリックして新しいファイルを作成して google-servicesjson という名前を付けます

第2章 クラウドアプリでの RHMAP 機能の使用

21

3 Firebase コンソールから以前にダウンロードした google-servicesjson ファイルを開きEditor でその内容を google-servicesjson にコピーします

4 File をクリックし次に Editor ツールバーの Save をクリックして変更内容を保存します

226 configxml ファイルの設定

Firebase コンソールで定義されたパッケージ名に合わせて configxml ファイルの widget id 設定を変更します

227 クライアントアプリバイナリーのビルド

特別なセットアップなしで簡単にビルドできる Debug タイプの Android バイナリーをビルドします

1 画面の左側にある Build をクリックします

2 Client Binary 画面でAndroid を選択します

3 画面の下部にある Build をクリックしアプリがビルドされるまで待機しますArtifactHistory 画面の下部にある進捗状況を監視できます

4 ビルドが完了したらダウンロードリンクと QR コードがあるダイアログが表示されますまたはArtifact History テーブルの最初の行にある Download をクリックします

5 モバイルデバイスで表示された QR コードをスキャンしアプリをインストールします

228 アプリのテスト

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

22

1 モバイルデバイスで新しくインストールされた Simple Cordova Push App を開きます

2 RHMAP でプロジェクトを開きApps Clouds amp Services で Simple Cordova PushApp を開きます

3 画面の左側にある Push をクリックします

4 画面の上部にある Send Notification to this app をクリックします

5 Message に必要な情報を入力し他のすべてのフィールドは変更せずにSend PushNotification をクリックします

6 すぐにモバイルデバイスが提供されたメッセージとともにプッシュ通知を受け取ります

23 MBAAS サービスからフォームフィールドに動的にデータを入力する

231 概要

フォームビルダーでフォームフィールドのデータソースとして MBaaS サービスのエンドポイントを使用できます本書ではMBaaS サービスの作成データソースの定義およびデータソースを使用したフォームフィールドへのデータの入力を実行する方法について説明します

フォームのデータソースの詳細についてはUsing Data Sources を参照してください

232 データソースのサービスの作成

データソースを定義するにはデータソースの有効な JSON 応答を提供する MBaaS サービスエンドポイントを提供する必要がありますこの例ではJSON ファイルから静的なデータを提供する新しい MBaaS サービスを作成します

1 Studio でServices amp APIs に移動しますProvision MBaaS ServiceAPI をクリックします

第2章 クラウドアプリでの RHMAP 機能の使用

23

2 左側にある Data Sources カテゴリーを選択します

3 テンプレート (たとえばStatic Data Source) を選択します

4 サービスの名前を選択しそのサービスを環境にデプロイします

233 データソースの定義

データを提供する MBaaS サービスを作成したらデータソースで使用できます

1 Studio で Drag amp Drop Apps gt Data Sources に移動しますNew Data Source をクリックします

2 名前と説明を設定します両方とも必須です

3 以前に作成された MBaaS サービスとデータソースとして使用するエンドポイントを選択します

この例で使用する Static Data Source テンプレートはエンドポイント static_dsmonths でデータを提供します

Validate ボタンを使用してサービスがデータソースとして使用できるデータを返すかどうかを確認できます確認の前に右上隅にある環境セレクターを使用して適切な環境が選択されるようにします

データが有効な場合はSuccess Data Source Is Valid というメッセージが表示されますデータが有効でない場合またはサービスに到達できない場合は問題を示すエラーメッセージが表示されます

有効な場合はView ボタンを使用して返されたデータを表示できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

24

4 更新頻度 (新しいデータを取得するために設定された MBaaS サービスエンドポイントを呼び出す頻度) を選択します更新頻度は 1 分から 7 日間までの範囲の値です

5 監査ログに保持する MBaaS サービスエンドポイントの呼び出しからの応答の数を選択します

6 Create Data Source をクリックしますData Source Created Successfully というメッセージが表示されます

この時点でフォームフィールドにデータを入力するためにフォームビルダーでデータソースを使用できます

234 フォームフィールドでのデータソースの使用

データソースの定義後にフォームビルダーでそのデータソースを使用できるようになります

1 Studio でDrag amp Drop Apps gt Forms Builder に移動します

2 既存のフォームを開くか新しいフォームを作成しますEdit Form に移動します

3 サポートされるいずれかのタイプ (たとえばDropdown フィールド) をフォームにドラッグします作成されたフィールドを選択します

4 Options セクションで Use a Data Source to populate field options をチェックします

5 前の手順で作成されたデータソースを選択します

第2章 クラウドアプリでの RHMAP 機能の使用

25

選択されたデータソースから以前に一度でもデータがロードされた場合 (作成中に検証する場合など) はプレビューとしてデータの利用可能な最新バージョンがフィールドオプションに表示されます

右上隅にある環境セレクターを使用して同じ環境が選択されるようにします (データソースの MBaaS サービスがデプロイされます)

6 フォームを保存しデプロイします

Dashboard に移動するとプレビューの右側にあるデータソースからデータが入力されたフィールドを確認できます

24 アプリへの統計の追加

241 概要

プラットフォームにはユーザーがアクセスできるカウンターとタイマーが保持されます一部はプラットフォームにより提供され一部はアプリケーションの開発者が指定できます

カウンターは特定の機能の使用を追跡するために使用でき増分または減分できますプラットフォームでは現在アクティブなサーバーサイドアクションを示すカウンター (つまり現在実行中のモバイルアプリケーションにより呼び出されたサーバーサイド機能の数) が提供されます

タイマーは指定されたアクションを実行するのにかかった時間を追跡するために使用できますプラットフォームではサーバーサイドアクションの実行時間を追跡するタイマーが提供されます定期的 (プラットフォームで設定された間隔) に現在のカウンターとタイマーが履歴にプッシュされゼロに設定されます

プラットフォームから統計を要求するときはデータを返す最近の間隔の数と破棄の間隔の長さ(ミリ秒単位) がデータとともに返されます

タイマーデータは間隔で発生したタイミングイベントの数 (上限値とか下限値を含む) として返されますまた90 パーセンタイルの上限値と平均値もあります

242 カウンターとタイマーの作成

アプリ開発者は以下のコードを使用して独自のカウンターとタイマーを作成できます

クラウドアプリの統計 API の詳細については以下のドキュメントを参照してください

$fhstats API Reference

$fhstatsinc(COUNTERNAME) Increments a counter$fhstatsdec(COUNTERNAME) Decrements a counter$fhstatstiming(TIMERNAME timeInMillis) Store a timer value

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

26

apprdquo の統計タイプを指定することにより開発者のカウンターとタイマーはプラットフォームから要求できます

カウンターのキー名はフォーム DOMAIN_APPID_app_COUNTERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありCOUNTERNAME はカウンターに開発者が付けた名前です

タイマーのキー名はフォーム DOMAIN_APPID_app_TIMERNAME に基づきますここでDOMAIN_APPID はドメインの名前でありAPPID はアプリの ID でありTIMERNAME はタイマーに開発者が付けた名前です

243 統計の表示

ユーザーはStudio から統計データにアクセスしたりコマンドラインクライアントである FHCから生データ自体にアクセスしたりできます

第2章 クラウドアプリでの RHMAP 機能の使用

27

第3章 RHMAP データ同期フレームワークの使用

31 データ同期フレームワーク

RHMAP モバイルデータ同期フレームワークには以下の機能が含まれます

モバイルアプリがオフラインでデータを使用および更新できる (ローカルキャッシュ)

クラウドアプリ経由で複数のクライアントアプリから双方向のデータ同期を管理しバックエンドデータストアに戻すメカニズムを提供する

データアップデート (つまりデルタ) をクラウドアプリから接続済みクライアントに分散できる

クラウドにある複数のアップデートからデータ競合管理を有効にする

ネットワーク接続が失われたときに RHMAP アプリはシームレスで稼働し続けることができネットワーク接続が回復したときに復帰できます

311 ハイレベルアーキテクチャー

同期フレームワークはクライアントアプリと Nodejs クラウドアプリ API のセットで構成されます

クライアントアプリはバックエンドデータに直接アクセスしません代わりに同期クライアント API を使用してデバイスに格納されたデータの読み取りと一覧表示を行い変更 (作成更新および削除) をクラウドアプリに送信しますデータにローカルで行われた変更はクラウドアプリに送信される前にローカルの同期データキャッシュに格納されますクライアントアプリは同期クライアント API からリモートデータセットへの変更の通知を受け取ります

クライアントアプリはクライアント同期サービスを使用してリモートデータセットに行われた変更 (デルタ) をクラウドアプリから受け取り同期データキャッシュに格納しますまたクライアントアプリはクライアント同期サービスを使用してローカルで行われた更新をクラウドアプリに送信しますクライアントアプリがオフラインのときはキャッシュされた更新がデバイス上のローカルストレージにフラッシュされネットワーク接続が再確立される前にクライアントアプリ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

28

が閉じられる場合に変更を永続化できます変更はクライアントアプリが次回オフラインになったときにクラウドアプリにプッシュされます

クラウドアプリはバックエンドデータに直接アクセスせず同期クラウド API を介してのみアクセスしますクラウドアプリはクライアント同期サービスを使用してクライアントアプリからアップデートを受け取るために同期クラウド API を使用しますこれらのアップデートはクラウドアプリ同期データキャッシュに格納されますクラウドアプリは標準的な CRUDL (create readupdate delete and list) および collisionHandler 関数を使用してホストされたストレージでバックエンドデータを管理するために同期クラウド API を使用します

標準的なデータハンドラー関数以外にクラウドアプリにはユーザー定義データアクセス関数も使用できます

312 API

同期用のクライアントおよび Nodejs API 呼び出しは以下のガイドで文書化されています

JavaScript SDK API の項「Sync」

Nodejs API の項「Sync」

iOS SDK ドキュメント

Android SDK Docs

313 スタートガイド

アプリで同期フレームワークを使用するには以下の手順を実行します

1 クライアントサイドで $fhsync を初期化します

See [JavaScript SDK API](apiapp_apihtmlapp_api-_fh_sync) for the details of the APIs used here

var datasetId = myShoppingList

provide sync init options $fhsyncinit( sync_frequency 10 do_console_log true storage_strategy dom )

provide listeners for notifications $fhsyncnotify(function(notification) var code = notificationcode if(sync_complete === code) a sync loop completed successfully list the update data $fhsyncdoList(datasetId function (res) consolelog(Successful result from list JSONstringify(res)) function (err) consolelog(Error result from list JSONstringify(err))

第3章 RHMAP データ同期フレームワークの使用

29

通知について

同期フレームワークは同期ライフサイクル中にさまざまな種類の通知を提供します使用しているアプリの要件に応じてアプリがリッスンする通知の種類を選択しコールバックを追加できますただしこれは必須ではありません通知リスナーがなくても同期フレームワークにより同期が実行されます

適切な通知リスナーを追加するとアプリのユーザーエクスペリエンスが向上します

同期フレームワークエラーが発生した状況で重大なエラーメッセージをユーザーに表示します (client_storage_failed など)

デバッグを支援するためにエラーと障害をコンソールに表示します(remote_update_failed や sync_failed など)

デルタを受け取った場合は同期データに関連する UI を更新しますたとえばデータに変更がある場合はdelta_received と record_delta_received を使用できます

競合を監視します

$fhsync API を使用してクライアントで CRUDL 操作を実行します

2 クラウドサイドで $fhsync を初期化する

この手順はオプションでありデータセットバックエンドとの同期ループ周期を変更するなどサーバーでデータセットオプションを上書きする場合のみ必要ですデフォルトの同期周期を変更する場合は以下の項「留意事項」を参照してください

) else choose other notifications the app is interested in and provide callbacks )

manage the data set repeat this if the app needs to manage multiple datasets var query_params = or something like this eq field1 value var meta_data = $fhsyncmanage(datasetId query_params meta_data function()

)

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

30

この時点でアプリで同期フレームワークを使用するかサンプルアプリを使用して基本的な使用方法を学ぶことができます (クライアントアプリとクラウドアプリ)

デフォルトのデータアクセス実装が要件を満たさない場合はオーバーライド関数を提供できます

3131 不必要な同期ループの回避

クライアントとサーバーの同期頻度は別々に設定されるためサーバーサイドの同期頻度がクライアントサイドの同期頻度と異なる場合は 1 つの同期ごとに 2 つの同期ループが実行されることがありますクライアントで長い周期を設定してもサーバーの同期周囲は変更されません2 つの同期ループを回避するにはサーバーのデータセットの syncFrequency 値をクライアントの対応するデータセットの sync_frequency 値に設定します

サーバーサイドデータセットの syncFrequency は 120 秒に設定されます

クライアントサイドデータセットの sync_frequency は 120 秒に設定されます

ただしクライアントとサーバーで異なる周期が必要な場合は異なる値を設定できます

314 同期フレームワークの高度な機能の使用

同期フレームワークはアプリ開発者がデータセットのソースデータを定義することを可能にするフックを提供します通常ソースデータは外部のデータベース (MySqlOracleMongoDB など) ですがこれは要件ではありませんデータセットのソースデータはどんな種類でもかまいません (csv ファイルFTP メタデータ複数のデータベーステーブルから取得されたデータなど)同期フレームワークの唯一の要件はソースデータの各レコードが一意の ID を持ちデータが同期フレームワークに JSON オブジェクトとして提供されることです

バックエンドデータソースと同期するためにアプリ開発者は同期のコードを実装できます

たとえばデータベースからデータをロードする代わりにバックエンドからデータをリストするときにハードコーディングされたデータを返すことができます

1 クライアントサイドで $fhsync を初期化します

これは Getting Started の手順 1 と同じです

2 クラウドサイドで $fhsync を初期化しオーバーライドを提供します

else consolelog(sync inited) )

var fhapi = require(fh-mbaas-api)var datasetId = myShoppingList

var options = syncFrequency 10

provide hard coded data listvar datalistHandler = function(dataset_id query_params cb

第3章 RHMAP データ同期フレームワークの使用

31

他のオーバーライドの提供方法についてはNodejs API の項「Sync」を参照してください

315 さらに詳しく知るために

興味がある場合は同期フレームワークを理解するのに役に立つ以下の情報をお読みください

3151 データセット

データセットはアプリクライアントとアプリクラウド間で同期するデータを表す JSON オブジェクトですデータセットの構造は以下のとおりです

データセットの各レコードは一意の ID (UID) を持つ必要がありますこの UID はデータセットのレコードに対してキーとして使用されます

同期フレームワークは複数のデータセットを管理できます (各データセットは個別に設定できます)

各データセットは同期 API と通信するときに (アプリクライアントとアプリクラウドの両方で)使用する必要がある一意の名前を持ちます

3152 競合

meta_data) var data = 00001 item item1 00002 item item2 00003 item item3 return cb(null data)

fhapisyncinit(datasetId options function(err) if (err) consoleerror(err) else $fhsynchandleList(datasetId datalistHandler) )

record_uid_1 ltJSON Object of datagt record_uid_2 ltJSON Object of datagt record_uid_3 ltJSON Object of datagt

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

32

競合はクライアントがアップデートをレコードに送信しようとしたときにレコードのクライアントのバージョンが古い場合に発生します通常競合はクライアントがオフラインでありレコードのローカルバージョンに対してアップデートを実行したときに発生します

競合を処理するには以下のハンドラーを使用します

handleCollision() - 競合が発生したときに同期フレームワークによって呼び出されますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションにデータレコードが保存されます

listCollision() - データ競合のリストを返しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからすべての競合レコードがリストされます

removeCollision() - 競合のリストから競合レコードを削除しますデフォルトの実装によりltdataset_idgt_collision という名前のコレクションからハッシュ値に基づいた競合レコードが削除されます

データ競合を処理するハンドラー関数オーバーライドを提供できますオプションは以下のとおりです

データ管理者があとで手動で解決するために競合レコードを格納します

競合を引き起こしたアップデートを破棄しますこれを行うためにhandleCollision() 関数は渡された競合レコードに何も処理を行いません

競合を引き起こしたアップデートを適用しますこれを行うにはhandleCollision() 関数がデータセットに対して定義された handleCreate() 関数を呼び出す必要があります

ネイティブ同期クライアントは類似したインターフェースを使用しますAPI とサンプルコードはiOS Github repo と Android Github repo で確認できます

32 同期に関する用語

321 同期プロトコル

同期クライアントと同期サーバー間の通信用プロトコル詳細については同期プロトコルを参照してください

警告警告

これにより競合を引き起こしたアップデートがクラウドアプリにより破棄されるためデータが失われる可能性があります

警告警告

この結果競合を引き起こしたアップデートはデータの古いバージョンに基づき一部のフィールドは古い値に戻されることがあるためデータが失われる可能性があります

第3章 RHMAP データ同期フレームワークの使用

33

322 同期サーバー

同期サーバーは同期プロトコルのサーバー部分でありfh-mbaas-api モジュールに含まれます以下のことを行います

データセットバックエンドと統合するために同期サーバー API を公開する

同期サーバーループを実行してデータセットバックエンドのアップデートが検出されたときにデータセットを更新する

323 同期クライアント

同期クライアントは同期プロトコルのクライアント部分です3 つの同期クライアント実装があります

Javascript (FeedHenry Javascript SDK)

Objective C (FeedHenry iOS SDK)

Java (FeedHenry Android SDK)

同期クライアント

データセットに対する CRUDL アクションのために同期クライアント API をフロントエンドに公開する

同期クライアントループを実行して特定のデータセットに対して指定された同期周期で同期サーバーを呼び出す

324 同期サーバーループ

同期サーバーループは同期サーバーで継続的に実行される機能です (各実行の間に 500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットをデータセットバックエンドから同期する必要があるかどうかを確認できます

325 同期クライアントループ

同期クライアントループは同期クライアントで継続的に実行される機能です (各実行の間に500ms の待機が発生)各実行中はすべてのデータセットクライアントに対して反復処理が行われデータセットを同期サーバーと同期する必要があるかどうかを確認できます

326 同期周期

同期クライアントではこれは特定のデータセット用の同期サーバーからのアップデートをチェックする間隔です同期サーバーではこれは特定のデータセット用データセットバックエンドからのアップデートをチェックする間隔です

詳細については同期周期の設定を参照してください

327 データセット

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

34

データセットは1 つ以上の同期クライアント同期サーバーおよび データセットバックエンド間で同期されるレコードのコレクションです

328 データセットバックエンド

同期クライアントと同期サーバー間で同期されたデータ用レコードのシステムAPI を提供する任意のシステムであり同期サーバーから mysql データベースや SOAP サービスなどと統合できます同期サーバーはデータセットバックエンドと統合するためにデータセットハンドラーを使用して同期サーバー API を公開します

329 データセットハンドラー

データセットハンドラーは同期サーバーをデータセットバックエンドに統合する機能ですデータセットに対して CRUDL アクションを実行したりデータセットレコード間で競合を管理したりする多くのハンドラーがありますこれらのハンドラーのデフォルトの実装では fhdb (RHMAP MBaaS で支援される MongoDB) を使用しますこれらの各ハンドラーはオーバーライドできます詳細についてはSync Server API を参照してください

重要重要 ハンドラーをオーバーライドする場合Red Hat はデフォルトの実装を使用している一部のハンドラーとオーバーライドされた実装を使用している他のハンドラーでの異常な動作を回避するためにすべてすべてのハンドラーをオーバーライドすることをお勧めします

3210 データセットクライアント

データセットクライアントはクライアントとサーバー間で積極的に同期されている各データセットに対する同期クライアントと同期サーバーに格納された設定です以下のようなデータが含まれます

データセットの同期周期

データセットバックエンドを呼び出すときに含めるクエリーパラメーター

データセットレコードの最新のハッシュ

データセットバックエンドとの同期が現在実行中であるかどうかに関するデータ

3211 データセットレコード

データセットレコードはデータセット内の個別レコードです以下のものが含まれます

このレコードが表すローデータ (MySQL テーブルの行値など)

ローデータのハッシュ

3212 ハッシュ

同期プロトコルで使用されるハッシュには 2 つの種類があります

個別レコードを比較してそれらが異なるかどうかを確認するために使用される個別データセットレコードのハッシュ

第3章 RHMAP データ同期フレームワークの使用

35

すべてのレコードに対して反復処理を行わずにクライアントのレコードセットとサーバーのレコードセットを比較するために使用される特定のデータセットクライアントに対するすべてのデータセットレコードのハッシュ

33 同期サーバーのアーキテクチャー

同期フレームワークの一般的な概要については同期に関する概要と同期に関する用語を参照してください

331 アーキテクチャー

同期サーバーアーキテクチャーに含まれるもの HTTP ハンドラー キューおよびプロセッサー 同期スケジューラー

これらの各コンポーネントによりデータは MongoDB で永続化されます˙

3311 HTTP ハンドラー

これらのハンドラーは同期クライアントからの同期要求を処理します

33111 同期同期 HTTP ハンドラーハンドラー

データセットクライアントを作成または更新し保留中のレコードと確認を処理のために適切なキューにプッシュします

33112 同期レコード同期レコード HTTP ハンドラーハンドラー

最新のデータをクライアントの状態と比較しますデルタの取得後に処理されているがまだ同期されていないアップデートがチェックされますこのハンドラーはデルタ内のすべてのレコードを反復処理しますレコードが保留中のキューにある場合や適用された場合レコードはこのハンドラーによってデルタから削除され更新されたデルタはクライアントに返されます

3312 キュー

同期フレームワークでは以下のキューが使用されます

fhsync_queue - 同期が必要なデータセット向けのジョブ

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

36

fhsync_ack_queue - 確認が必要な保留中の変更向けのジョブ

fhsync_pending_queue - 処理が必要な保留中の変更向けのジョブ

メッセージはこれらのキューに格納されプロセッサーによって消費されます

3313 プロセッサー

各キューには対応するプロセッサーがあります

同期プロセッサー - fhsync_queue からジョブを取得しこれらのジョブを処理します

確認プロセッサー - fhsync_ack_queueから確認を取得しMongoDB からこれらの確認を削除します

保留中プロセッサー - fhsync_pending_queue から保留中のアイテムを取得し変更をデータセットバックエンドに適用します

同期サーバーの各ワーカーはタスクを分散することを可能にするこれらの各プロセッサーの 1 つのインスタンスを持ちます

3314 同期スケジューラー

水平的にスケールされた場合各同期ワーカーは固定された間隔で同期スケジューラーになろうとします各ワーカーは MongoDB にあるロックを取得しようとします同期スケジューラーのロックがあるワーカーはデータセットの最後の同期のタイムスタンプと同期周期を確認して同期する必要があるデータセットを決定しますデータセットを同期する必要がある場合ジョブは fhsync_queue に追加されます

34 データ同期設定ガイド

データ同期設定はクライアントサイドとクラウド (サーバーサイド) に適用できます

クライアントサイドの同期周期はsync_frequency 変数を使用して設定されますsync_frequency の設定の例についてはドキュメンテーションのこの項を参照してください

クラウドの同期周期はsyncFrequency 変数を使用して設定されますsyncFrequency の設定の例についてはドキュメンテーションのこの項を参照してください

341 同期周期の設定

同期周期はシステムが 2 つの同期プロセスの間に待機する期間です

重要重要 クライアントとサーバーで別々に周期を設定できますただしRed Hat は以下のシナリオを回避するために同じ設定を使用することをお勧めします

サーバーがデータセットバックエンドからのアップデートをチェックするよりも高い頻度でクライアントが呼び出しを行うためクライアントから不必要なトラフィックが発生します

サーバーがデータセットバックエンドからのアップデートをチェックするよりも低い頻度でクライアントが呼び出しを行うためアクティビティーがないことが原因でサーバーがキャッシュからデータセットを破棄します

第3章 RHMAP データ同期フレームワークの使用

37

サーバーの同期周期の値により同期プロセッサーが実行される頻度が決定されます同期プロセッサーが実行されるたびにデータセットバックエンドに対してリスト操作が実行されデータとローカルコピーが同期されます使用しているアプリケーション向けの同期周期の最適な値を決定するために以下のセクションをお読みください

使用しているクライアントが他のクライアントの変更をどれぐらい早く認識するか

クライアントが変更を送信するとそれらの変更はデータセットバックエンドに直接適用されますパフォーマンスを向上させるために他のクライアントはローカルコピーからデータを取得しますしたがって他のクライアントは次の同期プロセッサーの実行後まで新しい変更を取得できません他のクライアントができるだけ早く変更を取得する必要がある場合は同期周期に低い値を設定することを検討してください

同期プロセッサーの実行にどれぐらいかかるか

同期周期の値によりシステムが同期プロセッサーの実行の間に待機する時間が決定されますつまり同期周期は 1 つの実行が完了してから次の実行が開始されるまでの時間ですしたがって2 つの同期プロセッサーが同時に実行される状況は発生しません計算式は以下のとおりです

実際の同期周期 = 同期プロセッサーの実行時間 + 同期周期

これによりシステムがデータセットバックエンドに行う要求の数を簡単に計算できるようになります

同期プロセッサーの各実行にかかる時間を調べるには同期統計エンドポイントを問い合わせて sync_worker が完了するのにかかる平均 Job Process Time (ジョブプロセス時間) を確認します

データセットバックエンドサービスはどれぐらいの負荷を処理できるか

同期プロセッサーが実行されるたびにデータセットバックエンドに対するリスト操作が実行されます同期周期を設定する場合はバックエンドで生成される要求の数を予測しバックエンドがその負荷を処理できるようにする必要があります

たとえばデータセットの同期周期を 100ms に設定し各同期プロセッサーの実行に 100msかかる場合はサーバーによって約 5 要求秒がバックエンドに生成されますただし同じバックエンドを使用する同期周期が 100ms の別のデータセットがある場合バックエンドに対する負荷は 10 要求秒になりますバックエンドに対して負荷テストを行うことによりバックエンドがその負荷を処理できるかどうかを調べることができます

ただしアプリをスケールするときこの値は大きくなりませんたとえばサーバーに複数のワーカーが存在する場合同期プロセッサーの実行はワーカーで繰り返されず分散されますこの設計によりアプリの負荷が大きいときにバックエンドが保護されます

サーバーの負荷がどれぐらい増えるか

データがバックエンドから返されるとサーバーはデータをローカルストレージに保存する必要があります (MongoDB)システムは変更がある場合のみアップデートを実行しますただしローカルストレージの現在のデータを取得するには読み取り操作を最初に実行する必要があります同期プロセッサーの実行がたくさんあるときはサーバー自体の負荷が増えることがあります場合によってはこのことを考慮する必要があります (特にデータセットが大きい場合)

サーバーのパフォーマンスを理解するために同期統計エンドポイントを使用して CPU 使用率と MongoDB 処理時間を確認できます

同期周期値を使用してサーバーがバックエンドに生成する要求の数を制御できますこの値はバックエンドが負荷を処理できサーバー自体が過負荷の状態でない限り0ms に設定できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

38

342 ワーカーの設定

同期アーキテクチャーで説明されているように同期データを格納するために使用するさまざまなキューがありますデータを処理するために各キューに対応するワーカーが作成されますこの唯一のタスクはキューからジョブを一度に 1 つずつ取得し処理することですただしあるジョブを完了してから利用可能な次のジョブを取得するまでの時間を表す間隔値がありますこの値はワーカーのパフォーマンスを最大化するために設定できます

3421 間隔の目的

キューからジョブを取得する要求は非ブロック操作ですキューにジョブが残っていないと要求が返されワーカーはジョブを再び取得しようとします

この場合またはジョブが非常に早く完了する場合はワーカーによって主要なイベントループが過負荷の状態になり他のコード実行が遅くなることがありますこのシナリオを回避するために各ワーカーには以下の間隔値設定項目があります

pendingWorkerInterval

ackWorkerInterval

syncWorkerInterval

デフォルトの間隔値は非常に低い (1ms) ですが設定可能ですこのデフォルト値ではジョブを実行するのに時間がかかり主要なイベントループで他の操作を完了することを可能にするいくつかの非ブロックIO 操作 (リモート HTTP 呼び出しや DB 呼び出しなど) があることを前提としますこの低いデフォルトの間隔によってジョブをできるだけ速く処理できるようになりCPUをより効率的に使用できるようになりますジョブがない場合はワーカーによってリソースが不必要に過負荷の状態にならないようにバックオフメカニズムが呼び出されます

デフォルト値によってデータセットバックエンドに対して発生する要求が多すぎる場合またはデフォルトの間隔値を変更する必要がある場合は1 つ以上のワーカーの設定オプションを上書きできます

3422 ワーカーバックオフ

キューにジョブが残っていない場合各ワーカーはバックオフストラテジーを持ちますこれによりワーカーが不必要な CPU サイクルを使用したりキューに対する不必要な呼び出しを行ったりすることが防がれます新しいジョブがキューに格納されている場合ワーカーは次にキューを確認するときに間隔をリセットします

各ワーカーの動作は以下の設定オプションで上書きできます

pendingWorkerBackoff

ackWorkerBackoff

syncWorkerBackoff

デフォルトではすべてのワーカーは最大遅延値で指数ストラテジーを使用します最小間隔が1ms に設定されている場合ワーカーはジョブを処理してから別のジョブをキューから取得するまで 1ms 待機しますこのパターンはキューにアイテムが存在する限り続行しますキューが空になると間隔は最大間隔 (たとえば60 秒) に到達するまで指数的 (2ms4ms8ms16mshellip ~16s~32s) に増えます次にワーカーはジョブがあるかどうかを調べるためにキューを 60秒ごとに確認します将来キューでジョブが見つかったらワーカーは再び 1ms ごとにキューを確認します

第3章 RHMAP データ同期フレームワークの使用

39

詳細についてはSync API Doc を参照してください

35 同期サーバーアップグレードに関する注記

351 概要

本項では以下のことを行う開発者を対象とします

アプリケーションで同期サーバーを使用する

fh-mbaas-api のバージョンを lt700 から gt=700 にアップグレードする

fh-mbaas-apigt=700 をすでに使用している場合は本項のどの手順も実行しないでください

注記注記

このアップグレードでは同期クライアントに変更は加えられません

352 前提条件

700 より前は同期サーバーが fhdb API を使用して同期操作データを MongoDB に格納していましたfhdb は中間 http API (fh-ditch) を介することがある MongoDB のラッパーですこの結果同期操作データに対して実行できるアクションは制限されますまたMongoDB に直接接続されるモジュールの使用も制限されますfh-mbaas-api700 では同期サーバーでMongoDB への直接接続が必要です

条件は以下のとおりです

ホストされた MBaaS の場合はアプリデータベースを「アップグレード」する必要があります

自己管理された MBaaS の場合はデフォルトですべてのアプリが MongoDB の独自のデータベースを取得するため何も行う必要はありません

353 データハンドラー関数署名の変更

同期データハンドラー向けのメソッド署名は新しい同期フレームワークでは異なりますデータハンドラーを実装した場合はパラメーターの順序を変更する必要がありますこれらの変更はjavascript のパラメーター順序規則 (つまりコールバックが最後のパラメーター) に準拠します

重要重要 パラメーターとして各ハンドラーに渡されたコールバック関数が各呼び出しに対して実行されるようにしますこれによりハンドラーの完了後もワーカーを維持できます

700 よりも前のバージョンとそのバージョンのデータハンドラーおよび署名は以下のとおりです

lt700synchandleList(dataset_id function(dataset_id params callback meta_data) )syncglobalHandleList(function(dataset_id params callback meta_data) ) gt=700

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

40

synchandleList(dataset_id function(dataset_id params meta_data callback) )syncglobalHandleList(function(dataset_id params meta_data callback) )

lt700synchandleCreate(dataset_id function(dataset_id data callback meta_data) )syncglobalHandleCreate(function(dataset_id data callback meta_data) ) gt=700synchandleCreate(dataset_id function(dataset_id data meta_data callback) )syncglobalHandleCreate(function(dataset_id data meta_data callback) )

lt700synchandleRead(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleRead(function(dataset_id uid callback meta_data) ) gt=700synchandleRead(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleRead(function(dataset_id uid meta_data callback) )

lt700synchandleUpdate(dataset_id function(dataset_id uid data callback meta_data) )syncglobalHandleUpdate(function(dataset_id uid data callback meta_data) ) gt=700synchandleUpdate(dataset_id function(dataset_id uid data meta_data callback) )syncglobalHandleUpdate(function(dataset_id uid data meta_data callback) )

lt700synchandleDelete(dataset_id function(dataset_id uid callback meta_data) )syncglobalHandleDelete(function(dataset_id uid callback meta_data) ) gt=700synchandleDelete(dataset_id function(dataset_id uid meta_data callback) )syncglobalHandleDelete(function(dataset_id uid meta_data callback) )

lt700synclistCollisions(dataset_id function(dataset_id callback meta_data) )syncglobalListCollisions(function(dataset_id callback meta_data) )

第3章 RHMAP データ同期フレームワークの使用

41

354 動作の変更

同期サーバーが MongoDB に直接接続するようになったため起動時にセットアップ時間が必要ですsyncinit() を現在使用している場合はこれらの呼び出しを syncready イベントハンドラーでラップしますたとえば以下のコードを使用する場合は

イベントハンドラーに配置するよう変更します

または同期 API からイベントエミッターを使用できます

355 ロガーの変更

fhsyncinit() に渡された logLevel オプションは利用できなくなりましたデフォルトでは新しい同期サーバーは何もログに記録しませんすべてのロギングでは [debug](httpswwwnpmjscompackagedebug) モジュールが使用されます同期サーバーからの出力をログに記録する場合は以下のように DEBUG 環境変数を設定できます

SDK 全体からすべてのログを参照する場合は以下のように設定します

debug モジュールの他のすべての環境変数と動作機能が利用可能です

gt=700synclistCollisions(dataset_id function(dataset_id meta_data callback) )syncglobalListCollisions(function(dataset_id meta_data callback) )

lt700syncremoveCollision(dataset_id function(dataset_id collision_hash callback meta_data) )syncglobalRemoveCollision(function(dataset_id collision_hash callback meta_data) ) gt=700syncremoveCollision(dataset_id function(dataset_id collision_hash meta_data callback) )syncglobalRemoveCollision(function(dataset_id collision_hash meta_data callback) )

fhsyncinit(mydataset options callback)

fheventson(syncready function syncReady() syncinit(mydataset options callback))

fhsyncgetEventEmitter()on(syncready function syncReady() syncinit(mydataset options callback))[sourcejson]

DEBUG=fh-mbaas-apisync

DEBUG=fh-mbaas-api

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

42

36 同期サーバーのパフォーマンスとスケーリング

361 概要

同期サーバーはスケーラブルとして設計されています

本項では同期サーバーのパフォーマンスとスケーリングのオプションについて説明します

362 パフォーマンスの検査

同期サーバーのパフォーマンスを検査するには 2 つのオプションがあります

1 mbaassyncstats エンドポイントを問い合わせます

デフォルトでは同期フレームワークによって (実行中の場合) メトリクスデータは Redisに保存されますまたHTTP GET 要求を mbaassyncstats エンドポイントに送信してこれらのメトリクスデータの概要を表示できます

このエンドポイントからは以下の情報が利用可能です

すべてのワーカーの CPU とメモリーの使用状況

さまざまなジョブを処理するのかかる時間

さまざまなジョブキュー内の残りのジョブ数

さまざまな API 呼び出しにかかる時間

さままな MongoDB 操作にかかる時間

これらの各メトリクスに対してサンプル値現在値最大値最小値および平均値の合計数を確認できます

デフォルトでは各メトリクスに対して最後の 1000 サンプルが収集されますがその値は statsRecordsToKeep 設定オプションを使用して制御できます

このエンドポイントは使いやすく同期サーバーの現在のパフォーマンスを理解するのに十分な情報を提供します

2 InfluxDB と Grafana を使用してメトリクスデータを視覚化します

現在および過去のメトリクスデータを視覚化する場合はメトリクスデータを InfluxDB に送信するよう同期サーバーに指示しGrafana でグラフを表示できます

InfluxDB と Grafana をセットアップするのに役に立つ多くのオンラインチュートリアルがあります以下に例を示します

How to setup InfluxDB and Grafana on OpenShift

InfluxDB が実行されたら以下の設定を更新して同期サーバーがメトリクスデータを送信するよう指示します

metricsInfluxdbHost

metricsInfluxdbPort

第3章 RHMAP データ同期フレームワークの使用

43

注記注記

metricsInfluxdbPort が UDP ポートであることを確認します

Grafana でメトリクスデータグラフを表示するにはグラフ付きの新しいダッシュボードを作成する必要がありますこれを行う最も簡単な方法はこの Grafana ダッシュボードファイルをインポートすることですアプリが実行されたらメトリクスデータを Grafana ダッシュボードに表示できます

Grafana グラフの設定方法の詳細についてはGrafana ドキュメンテーションを参照してください

363 パフォーマンスの理解

同期サーバーのパフォーマンスを理解するために確認する必要がある主要なメトリクスは以下のとおりです

3631 CPU 使用率

これは最も重要なメトリクスですCPU が過負荷である場合は同期サーバーがクライアント要求に応答できませんができるだけ CPU 使用率を上げたいことがあります

この問題を解決するにはしきい値を確立して同期サーバーをスケールするタイミングを決定します推奨値は 80 です

CPU 使用率がこの値未満である場合は同期サーバーをスケールする必要はなくワーカー間隔設定値を少し小さくして CPU 使用率を上げることができますただしCPU 使用率がこのしきい値を超える場合は同期サーバーのスケーリングを検討してください

3632 キュー内の残りのジョブ

同期サーバーはさまざまなジョブをキューに保存して後で処理します

キュー内のジョブの数が増加し続けCPU 使用率が比較的低い場合はジョブをより速く処理するためにワーカー間隔設定値を小さくします

同期サーバーの負荷がすでに大きい場合は新しいワーカーを作成してジョブを処理できるよう同期サーバーをスケーリングすることを検討してください

3633 API 応答時間

さまざまな同期 API の応答時間の増加が確認されCPU 使用率が上昇している場合は同期サーバーに負荷がある状態を意味します同期サーバーのスケーリングを検討してください

ただしCPU 使用率がそれほど変わらない場合は何かほかのことによってその問題が引き起こされていることを意味するためその問題を調査する必要があります

3634 MongoDB 操作時間

本番稼働環境ではさまざまな MongoDB 操作の時間は比較的短く一定ですこれらの操作の時間が増え始めた場合は同期サーバーにより MongoDB に対して生成される操作の数が多すぎる状態でありMongoDB の制限に到達しようとしていることを意味します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

44

この場合はボトルネックが MongoDB に存在するため同期サーバーをスケーリングしても問題は解決されません以下の選択肢を検討します

useCache フラグを true に設定してキャッシュを有効にしますこれによりデータセットレコードを読み取るデータベース要求の数が減少します

さまざまなワーカー間隔と同期周期を増加します

可能な場合はMongoDB をスケーリングします

364 同期サーバーのスケーリング

同期サーバーをスケールする場合は以下のことを検討します

3641 ホストされた MBaaS でのスケーリング

RHAMP SaaS プラットフォームで同期サーバーをスケールするには以下の 2 つの選択肢があります

36411 Nodejs クラスターモジュールの使用クラスターモジュールの使用

単一のアプリ内部でスケールするにはNodejs Clustering を使用してさらにワーカーを作成します

36412 より多くのアプリのデプロイより多くのアプリのデプロイ

別の選択肢はより多くのアプリをデプロイし同じ MongoDB に対して既存のアプリとして指定することですこれにより同期サーバーをさらにスケールすることが可能になります

より多くのアプリをデプロイする手順は以下のとおりです

同じコードのより多くのアプリを既存のアプリとしてデプロイします

既存のアプリの MongoDB 接続文字列を見つけます

これはApp Studio の Environment Varaible (環境変数環境変数) 画面にリストされていますFH_MONGODB_CONN_URL という名前のシステム環境変数を探してください

値をコピーし新しく作成されたアプリで SYNC_MONGODB_URL という名前の新しい環境変数を作成して値として MongoDB url を貼り付けます

アプリを再デプロイします

この方法ではHTTP 要求処理と同期データ処理を完全に分離できます

たとえばこのように設定された 2 つのアプリApp 1 と App 2 が存在しApp 1 が HTTP 要求を受け取るクラウドアプリとしますこの場合は以下のことを行えます

ワーカーの同時実行数を 0 に設定して App 1 のすべての同期ワーカーを無効にしますこの結果App 1 は HTTP 要求の処理のみを行うことになります

App 2 の同期ワーカーの同時実行数を増加し同期間隔値を減少します

ワーカーの同時実行数の設定方法については$fhsyncsetConfig を参照してください

3642 自己管理された MBaaS でのスケーリング

第3章 RHMAP データ同期フレームワークの使用

45

自動スケーリング機能を使用して OpenShift でアプリケーションをスケールします

メトリクスが OpenShift クラスターで有効であることを確認しoc autoscale コマンドを使用してアプリケーションのスケール方法を設定します

たとえばOpenShift 32 の場合はクラスターメトリクスを有効にする方法とアプリケーションをスケールする方法を参照してください

37 同期サーバーにより作成された MONGODB コレクション

371 概要

同期サーバーは実行中にさまざまなコレクションを MongoDB に保持します

本書では同期サーバーが作成するコレクションとその目的について説明します

注記注記

データ損失が起こる可能性があるためこれらのコレクションは変更しないでください

372 同期サーバーコレクション

同期サーバーにより作成されたすべてのコレクションには接頭辞 fhsync が付けられます

3721 fhsync_pending_queue

このコレクションはすべてのデータセットに対してすべてのクライアントから送信された変更を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 値が 0 よりも大きい場合は変更が同期サーバーによってすでに処理されたことを意味します

payloadhash 保留中の変更の一意の ID

payloadcuid クライアントの一意の ID

payloadaction 変更の種類 (create や update など)

payloadpre 変更が行われる前のデータ

payloadpost 変更が行われたあとのデータ

payloadtimestamp 変更がクライアントで行われた日時

3722 fhsync_ltdatasetIdgt_updates

fhsync_pending_queue コレクションからの保留中の変更が処理された場合結果はこのコレクションに保存されますクライアントは次の同期のときに結果を取得し該当するクライアント通知をトリガーします

デバッグに役に立つフィールドは以下のとおりです

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

46

hash 上記コレクションからの保留中の変更の一意な ID

type 変更が正常に適用された場合可能な値は appliedfailedまたは collision です

3723 fhsync_ack_queue

クライアントは送信された変更の結果を取得したあとに (fhsync_ltdatasetIdgt_updates コレクションに保存)サーバーと受信を確認してサーバーがその受信確認を削除できるようにしますこのコレクションはクライアントにより送信された確認を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

payloadhash fhsync_pending_queue コレクションからの保留中の変更の一意な ID

3724 fhsync_datasetClients

このコレクションは同期サーバーによって管理されたすべてのデータセットクライアントを永続化するために使用されます

デバッグに役に立つフィールドは以下のとおりです

globalHash データセットクライアントの現在のハッシュ値

queryParam データセットクライアントに関連付けられたクエリーパラメーター

metaData データセットクライアントに関連付けられたメタデータ

recordUids データセットクライアントに属するすべてのレコードの一意な ID

syncLoopEnd データセットクライアントに対する最後の同期ループが完了した日時

3725 fhsync_ltdatasetIdgt_records

このコレクション内のこのデータはデータセットバックエンドからのデータのローカルコピーですこれによりクライアントからの同期要求が速く処理されデータセットバックエンドに対する要求の数も減少します

デバッグに役に立つフィールドは以下のとおりです

data データセットバックエンドから返されたレコードの実際のデータ

uid レコードの一意な ID

refs このレコードを含むすべてのデータセットクライアントの ID

3726 fhsync_queue

このコレクションはfhsync_ltdatasetIdgt_records をデータセットバックエンドと同期する要求を保存するために使用されます

デバッグに役に立つフィールドは以下のとおりです

tries 0 よりも大きい場合は要求が同期サーバーによってすでに処理されたことを意味します

3727 fhsync_locks

第3章 RHMAP データ同期フレームワークの使用

47

データセットバックエンドと同期できるのは一度に 1 つのワーカーだけですこのためにロックが使用されますこのコレクションはロックを永続化するために使用されますロックメカニズムを使用して問題をデバッグしない限りこのコレクションを使用する必要性はほとんどありません

373 キューコレクションのプルーニング

各キューコレクションに対してドキュメントは処理後すぐに削除されません代わりにドキュメントは deleted と示されますこれにより開発者はドキュメントを監査ログとして使用しデバッグに役立てたりすることができるようになります

これらのキューが容量を使用しすぎないようにするためにこれらのメッセージには TTL (time tolive) を設定できますTTL 値に到達するとこれらのメッセージはデータベースから削除されます

詳細については$fhsyncsetConfig の「queueMessagesTTL」オプションを参照してください

38 同期サーバーデバッグガイド

381 クライアントの変更は適用されない

この問題のデバッグを容易に行うために以下の質問に回答してください

クライアントはサーバーに変更を送信しましたかクライアントはサーバーに変更を送信しましたか

クライアントが変更を行った後に同期要求の要求本文を確認して変更が送信されたかどうかを調べます変更は pending アレイにある必要があります以下に例を示します

fnsync dataset_idmyShoppingList pending[ inFlighttrue actionupdate post nameModified Name created1495123790928 postHash2e90b858164184b9ff31e0937cef8ddf4a959ac5 timestamp1495799747404 uid591dc768a95300322eee1d1f pre nameOriginal Name created1495123790928 preHash421932b23f05f8aef528d73fff3cbf5aa00786a4 hashf98f595974f7e7e1f07aed6220fab04446f459c9 inFlightDate1495799747850 ]

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

48

変更が保留中のアレイにない場合はデバイスがオンラインであることを検証しますクライアントアプリにエラーがないか確認し該当する同期アクションを呼び出していることを検証します(たとえば更新の場合は syncdoUpdate())クライアントアプリで変更を行うコードの周辺でデバッグしたりロギングを追加したりすると役に立ちます

この変更のレコードがこの変更のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合はサーバーが変更を受け取っていないか受け取るときにエラーが発生しました

アプリが変更を正常に送信したことを検証します送信しなかった場合はアプリをデバッグして問題を理解してくださいアプリにエラーがあるかサーバーからの応答にエラーがあることが考えられます

アプリから変更を受け取ったときにサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードが fhsync_pending_queue コレクションに存在したがレコードに対するキューのTime To Live (TTL) 期間が経過したためレコードが削除された可能性がありますこれに該当する場合はTTL を増やすとデバッグが有効になります

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合はそのアイテムがまだ処理されていません

通常は保留中のワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムが処理のためにキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

この更新のレコードがこの更新のレコードが fhsync_pending_queue コレクションにありますかコレクションにありますか

「いいえ」の場合は更新の処理中にエラーが発生した可能性があります

サーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

レコードのレコードの type フィールドがフィールドが failed またはまたは collision に設定されていますかに設定されていますか

「はい」の場合は更新をデータセットバックエンドに適用できない可能性があります

「競合」により競合ハンドラーが呼び出されたことが考えられます競合を解決する必要があります

更新の「失敗」により障害の理由とともに通知がクライアントに送られたことが考えられます理由はレコードの msg フィールドに記載されます

「いいえ」でありタイプが applied の場合は作成または更新ハンドラーをデバッグしてなぜそのハンドラーで変更がデータセットバックエンドに適用されたと見なされたのかを確認する必要があります

type フィールドはcollisionfailedまたは applied のいずれかである必要があります

382 データセットバックエンドに適用された変更は他のクライアントに伝播されない

第3章 RHMAP データ同期フレームワークの使用

49

変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しました変更がデータセットバックエンドからクライアントに同期されるまでに十分な時間が経過しましたかか

変更がデータセットバックエンドに適用され他のクライアントがその変更を取得する前に以下の 2 つのことが起こる必要があります

サーバー上の同期ループはレコードキャッシュの更新を完了する必要がありますつまりそのデータセットに対してリストハンドラーが呼び出されます

クライアント上の同期ループはサーバーレコードキャッシュからのクライアントローカルレコードキャッシュの更新を完了する必要があります

十分な時間が経過したらデータセットバックエンドとの同期中のエラーをサーバーログで確認してください

データセット向けのデータセット向けの fhsync_queue コレクションに最近のレコードがありますかコレクションに最近のレコードがありますか

「いいえ」の場合はレコードの TTL 値が経過しレコードが削除された可能性がありますこの場合はTTL 値を増やしてさらにデバッグすることができます

別の可能性としては同期スケジューラーでそのデータセットの同期がスケジュールされなかったことが挙げられますこの理由としてはそのデータセットに対して現在アクティブなクライアントがなくそのデータセットに対してクライアントが最後にアクティブであったときから clientSyncTimeout が経過したことが考えられます

レコードのレコードの deleted フィールドにタイムスタンプがありますかフィールドにタイムスタンプがありますか

「いいえ」の場合は同期がまだ処理されていないことを意味します

通常は同期ワーカーがそのアイテムよりも先にキュー内の他のアイテムを処理していますそのアイテムがキューの最上位に到達するまで待機してください

しばらく時間がたってもアイテムが処理されない場合やキューにこのアイテムしかない場合はサーバーログでエラーを確認しますエラーがない場合はデバッグログの有効化を参照してください

fhsync_ltdatasetidgt_records キャッシュ内のレコードは最新ですかキャッシュ内のレコードは最新ですか

リストハンドラーが呼び出され結果がレコードキャッシュに追加されている必要がありますレコードキャッシュが更新されたことを検証するには更新されたレコードの fhsync_ltdatasetidgt_records コレクションを確認しますこのレコード内のデータはデータセットバックエンドのデータに一致する必要があります一致しない場合はサーバーログでリストハンドラーのエラーと動作を確認しますリストハンドラーにロギングを追加すると役に立つことがあります

クライアント同期呼び出しが正常に実行されましたかクライアント同期呼び出しが正常に実行されましたか

クライアントが同期呼び出しを行う場合にサーバーからの有効な応答があることを確認します呼び出しが正常に行われた場合はクライアントが更新済みレコードを取得していることを検証しますサーバーキャッシュに更新済みレコードが含まれるのにクライアントが更新済みレコードを受け取らない場合はクエリーパラメーターとサーバーに送信されたメタデータが正しいことを確認しますデバッグログを有効にすると正しくないデータがどのようにクライアントに送信されたのかを簡単に調べることができる場合があります

383 デバッグログの有効化

デバッグのために同期ログを有効にするにはサーバーで以下の環境変数を設定します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

50

この処理により大量のログが生成されます各ログエントリーにはそのログメッセージのコンテキストでアクションを実行する特定のデータセット ID がタグ付けされます (可能な場合)これらのログは理解しにくいことがありますがクライアントからの更新とそれらの更新のさまざまな段階を追跡できます成功したシナリオのログと不成功のシナリオのログを比較し障害が発生した段階を特定すると役に立つことがあります

この問題の原因は(特にエッジケースに関連する) カスタムハンドラー実装にあることが考えられますカスタムハンドラーにログを追加すると役に立つことがあります

データセットバックエンド接続の問題 (特に断続的な問題) はデバッグおよび特定が困難なことがありますデータセットバックエンドを外部的に監視または確認すると役に立つことがあります

DEBUG=fh-mbaas-apisync

第3章 RHMAP データ同期フレームワークの使用

51

第4章 RHMAP と他のサービスとの統合

41 MBAAS サービスの概要

MBaaS サービスは複数のプロジェクト内の複数のクラウドアプリケーションが使用できる共有機能を提供するクラウドWeb アプリケーションです通常のユースケースは以下のとおりです

サードパーティー製のサービスにアクセスするために API を提供しますたとえば複数のプロジェクトに SMS メッセージを送信する要件が含まれるとしますこの場合はSMS メッセージを送信する API を提供するためにサービスを作成し複数のプロジェクトでそのサービスにアクセスすることができます

レガシーカスタマーバックエンドシステムに API を提供しますたとえばユーザー認証を実行するレガシーシステムがあるとしますこの場合はプロジェクトで使用する一貫性のある新しい API セットを提供するサービスを作成しレガシーシステムへのアクセス方法に関するすべての詳細を隠すことができます

注記注記

MBaaS サービスはクライアントアプリで直接使用するよう設計されていませんたとえばiOS アプリは MBaaS サービスを直接呼び出しませんクライアントアプリは関連するクラウドアプリを呼び出しクラウドアプリは要求を 1 つ以上の MBaaS サービスに送信します

MBaaS サービスを使用する利点は以下のとおりです

コードの再利用性が向上しますこれは外部サービスへのアクセスが複雑な場合に特に重要です

機密情報を保護します場合によっては外部サービスにアクセスするためにユーザークレデンシャルが必要ですサービスを使用することにより複数のプロジェクト開発者がクレデンシャルを共有する必要がなくなります

42 認証に対する SAML の使用

421 概要

このチュートリアルではモバイルアプリケーションで SAML 認証を使用する例を示しますSAML は現在 Red Hat Mobile Application Platform ホスト型 (RHMAP) では認証ポリシーとして利用できませんがユーザーの独自のソリューションの土台として使用できるテンプレートが提供されます

SAML 認証の同じソリューションはサーバーサイドロジックとクライアントアプリの両方で構成されます

SAML サービスthinspmdashSAML 20 認証を実行するためにサービスプロバイダーサービスプロバイダーとして機能しpassport-saml とともに Passportjs を使用するクラウドサービス

SAML Cloud App thinspmdashthinspクライアントアプリから SAML サービスへの要求を代理するクライアントアプリ

以下の各プラットフォーム向けのクライアントアプリが提供されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

52

Cordova

Android

iOS

Windows Phone

422 SAML の概要

提供されたテンプレートの構造について説明するために最初に SAML のコンセプトを簡単に説明しますSAML 認証シナリオには以下の 3 つの要素があります

プリンシパルプリンシパルthinspmdashthinspサービスプロバイダーにより提供された保護済みリソースにアクセスしようとするユーザー

サービスプロバイダーサービスプロバイダー (SP)thinspmdashプリンシパルにサービスを提供する Web アプリケーション

ID プロバイダープロバイダー (IdP)thinspmdashthinspプリンシパルの ID を検証しサービスプロバイダーに ID アサーションを提供することが唯一の目的の Web サービス

これらの要素は複数の前提に基づいて認証の処理で対話します

プリンシパルはサービスプロバイダーとパスワードまたは他のシークレットを共有しません

ID プロバイダーはプリンシパルとサービスプロバイダーの両方により信頼されています

ID プロバイダーはID アサーションを多くのサービスプロバイダーに提供して Single Sign-On (SSO) を有効にできます

423 テンプレートのセットアップ

最初に提供されたテンプレートから SAML Service クラウドサービスを作成しますこのサービスはソリューションの中心的なコンポーネントでありサービスプロバイダーとして機能しますこの例で提供される実際のサービスではエンドポイント sessionvalid でユーザーの詳細が表示されていますSAML 認証プロセスをサポートするエンドポイントは他に複数あります

loginthinspmdashthinspIdP のログイン画面にリダイレクトします

sessionlogin_hostthinspmdashthinspIdP のログイン画面の URL を返します

logincallbackthinspmdashthinspIdP が ID アサーションをこのエンドポイントにポストします (ログインの成功または失敗が示されます)

loginokthinspmdashthinspログイン成功を示すためにクライアントアプリがこの URL にリダイレクトされます

サービスは IdP として Active Directory Federation Services 20 (ADFS) を使用するよう設定されていますが少しだけ調整して他の任意の SAML 20 準拠 IdP を使用するよう設定できます

4231 SAML サービスの作成

1 Studio でServices amp APIs に移動しProvision MBaaS ServiceAPI をクリックします

2 SAML Service テンプレートを見つけChoose をクリックし任意の名前 (たとえばSAML Service) を入力して Create をクリックします

第4章 RHMAP と他のサービスとの統合

53

3 以下のように設定の詳細を入力します

SAML_ISSUERthinspmdashthinsp現時点では空白のままにします

SAML_CALLBACK_URLthinspmdash現時点では空白のままにします

SAML_ENTRY_POINTthinspmdashthinspADFS エンドポイントに URL を入力します

SAML_AUTHN_CONTEXTthinspmdash値 urnfederationauthenticationwindows を入力します

SAML_CERTthinspmdashthinspこのデモの場合は空白のままにできます

4 Next をクリックしサービスが作成されるまで待機します次にFinish をクリックします

サービスが作成およびデプロイされたらSAML_ISSUER と SAML_CALLBACK_URL を設定する必要があります

1 Service Details ページで Current Host フィールドを確認しその値をメモしますこの値はこの例では ltmbaas-hostgt と示されますまたService ID の値もメモします

2 左側のメニューで Environment Variables をクリックします

3 App Environment Variables セクションでSAML_ISSUER と SAML_CALLBACK_URLthinsp の両方の変数に以下の値を設定します (ltmbaas-hostgt は手順 1 で見つけた値に置き換えます)

ltmbaas-hostgtlogincallback

4232 プロジェクトのセットアップ

最初にプロジェクトを作成します

1 Studio でProjects に移動しNew Project をクリックします

2 SAML Example Project を選択しChoose をクリックして任意の名前 (たとえばSAML Example) を入力して Create をクリックします

3 プロジェクトが作成されたらFinish をクリックします

次に以前に作成した SAML サービスをプロジェクトに関連付ける必要があります

1 SAML Example プロジェクトの MBaas Services 列で+ をクリックして新しいサービスを追加します

2 以前に作成した SAML サービスサービスを探しクリックして画面下部で Associate Servicesをクリックします

クラウドアプリには SAML サービスへの参照が必要ですSAML サービスを参照する環境変数を作成します

1 SAML Cloud クラウドアプリに移動し左側の Environment Variables セクションにアクセスします

2 App Environment Variables セクションで Add Variable をクリックし以下の値を入力

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

54

してCreate をクリックします

名前 SAML_SERVICE

値 以前にメモした SAML サービスのサービスサービス ID

3 Push Environment Variables をクリックして環境変数をランタイム環境に伝播します

アプリをビルドデプロイおよびテストすることができます

424 仕組み

認証プロセス中に起こったことを見ていきます

Sign In ボタンをクリックするとクライアントアプリが ssosessionlogin_host エンドポイントを呼び出し IdP のログイン画面の URL を取得しますこの URL はアプリ内ブラウザーで開きIdP と認証できます

JavaScript

Android

iOS

$(sign-in-button)on(click function(e) $fhcloud( path ssosessionlogin_host method POST data token $fh_getDeviceId() function(res) consolelog(sso host + ressso) var browser = cordovaInAppBrowseropen(ressso _blank location=yes)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionlogin_host POST null params)requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (login_host) - success) String ssoStringURL = resgetJson()getString(sso) Logd(TAG SSO URL = + ssoStringURL) SAMLActivitythisdisplayWebView(ssoStringURL)

第4章 RHMAP と他のサービスとの統合

55

Windows

IdP で必要なクレデンシャルを入力しログインフォームを送信したらIdP は ID アサーションをSAML サービスの logincallback エンドポイントにポストし直します

SAML サービスは以下のことを行います

受け取った SAML アサーションをユーザーのトークンに関連付けます (HTTP セッションで渡されます)

SAML アサーションからのデータを保持します

ユーザーを loginok にリダイレクトします (認証の成功がクライアントアプリに通知されます)

ユーザーが正常にログインしたらアプリ内ブラウザーが閉じられクライアントアプリはサービスプロバイダーにより提供されたサービスを使用できます (ssosessionvalid を呼び出しユーザーの詳細を取得します)

JavaScript

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionlogin_host WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSLog(EXEC SUCCESS = success) NSDictionary_ response = [success parsedResponse] NSString urlString = response[sso] NSURL loginUrl = [[NSURL alloc] initWithStringurlString] Display WebView FHSAMLViewController controller = [[FHSAMLViewController alloc] initWithURLloginUrl] [[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewControllercontroller animatedYES completionnil]

private async void Button_Click(object sender RoutedEventArgs e) var response = await FHClientGetCloudRequest(ssosessionlogin_host POST null GetRequestParams())ExecAsync()

var resData = responseGetResponseAsJObject() var sso = (string)resData[sso] if (stringIsNullOrEmpty(sso)) webViewVisibility = VisibilityVisible webViewNavigate(new Uri(sso))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

56

Android

iOS

$fhcloud( path ssosessionvalid method POST data token $fh_getDeviceId() function(details) $(first_name)text(detailsfirst_name) $(last_name)text(detailslast_name) $(email)text(detailsemail) $(expires)text(detailsexpires)

JSONObject params = new JSONObject()paramsput(TOKEN DevicegetDeviceId(getApplicationContext()))

FHCloudRequest request = FHbuildCloudRequest( ssosessionvalid POST null params) requestexecuteAsync(new FHActCallback() Override public void success(FHResponse res) Logd(TAG FHCloudRequest (valid) - success) User user = new User() usersetFirstName(resgetJson()getString(first_name)) usersetLastName(resgetJson()getString(last_name)) usersetEmail(resgetJson()getString(email)) usersetExpires(resgetJson()getString(expires))

Logd(TAG usertoString())

SAMLActivitythisdisplayUserData(user)

NSString deviceID = [[FHConfig getSharedInstance] uuid]NSMutableDictionary __params = [NSMutableDictionary dictionary]params[token] = deviceIDFHCloudRequest __cloudReq = [FH buildCloudRequestssosessionvalid WithMethodPOST AndHeadersnil AndArgs params]

Initiate the SSO call to the cloud[cloudReq execWithSuccess^(FHResponse _success) NSDictionary_ response = [success parsedResponse] Manage next UI view controller [ self performSegueWithIdentifier showLoggedIn sender response] AndFailure^(FHResponse failed) NSLog(Request name failure = failed)]

第4章 RHMAP と他のサービスとの統合

57

Windows

43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング

概要

このガイドの目的は Red Hat Mobile Application Platform ホスト型 (RHMAP) で OpenShift Onlineを MBaaS ターゲットとして使用しアプリケーションをデプロイする手順を提供することです

431 OpenShift Online とは

OpenShift Online はアプリケーションのプロビジョニング管理およびスケーリングを自動化するRed Hat のパブリッククラウドアプリケーションの開発およびホスティングプラットフォームです

4311 OpenShift Online と RHMAP との統合

OpenShift Online ユーザーは OpenShift Online クレデンシャルを使用して RHMAP にログインしクラウドアプリとサービスの MBaaS ターゲットとして利用可能な OpenShift Online ギアを使用できますMBaaS ターゲットターゲットはクラウドアプリとその関連するサービスをデプロイできるコンテナ化されたインフラストラクチャーですまた1 つまたは複数の MBaaS ターゲットを環環境境に収集することもできますユーザーは複数の環境を作成して (各環境に 1 つまたは複数のMBaaS ターゲットが含まれる状態で)開発の異なるステージ (たとえばDevUATおよびProduction 環境) とプロジェクトライフサイクル管理プロジェクトライフサイクル管理を有効にできます

またMBaaS サービスに関連するプロビジョニングロギングエンドポイントセキュリティーなどのすべての操作は OpenShift Online MBaaS にも適用されますこれらの操作の詳細についてはMBaaS Services Product Features page を参照してください

var response = await FHClientGetCloudRequest(ssosessionvalid POST null GetRequestParams())ExecAsync()if (responseError == null) var data = responseGetResponseAsDictionary() nameText = stringFormat(0 1 data[first_name] data[last_name]) emailText = (string) data[email] expiresText = ((DateTime) data[expires])ToString()else await new MessageDialog(responseErrorToString())ShowAsync()

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

58

4312 RHMAP による利用可能な OpenShift Online ギアへの影響

RHMAP アプリケーションはOpenShift Online にデプロイする他のすべてのアプリケーションと同じように扱われます利用可能なギアの一部またはすべてを使用して RHMAP クラウドと Webアプリケーションをデプロイできますが利用可能なギアの数によって制限されますOpenShiftOnline で実行されているすべてのアプリケーションと同様に利用可能なギアと機能の数は現在のプランによって異なりますRHMAP で OpenShift Online ギアを使用する方法の詳細については項「ギア」を参照してください

4313 制限

RHMAP で OpenShift Online を MBaaS ターゲットとして使用することは現時点では開発者プレビューとして可能であり本番稼働環境には推奨されません

432 スタートガイド

最初に必要なものは OpenShift Online アカウントです既存のアカウントを使用するか新しいアカウントを作成することができます

注記注記

これは OpenShift Online アカウントを使用して RHMAP にログインする場合のみ可能ですこの機能は既存の RHMAP アカウントでは利用できません

4321 初回ログインおよびセットアップ

OpenShift Online アカウントを取得したらこれらのクレデンシャルを使用して RHMAP にログインできますOpenShift Online アカウントを使用して初めてログインする場合はRHMAP によってセットアッププロセスが示されますそれ以降のログインではセットアッププロセスなしでRHMAP にアクセスできます

第4章 RHMAP と他のサービスとの統合

59

注記注記

要求に対応するためにアクセスは招待状によってのみ提供していますログインページに提供されたリンクを使用して興味があることを登録するとスペースが利用可能になり次第招待状メールが送信されます招待状メールにはアクセスを提供する適切なログインリンク (アクセストークンを含む) が含まれますログインするためにログインページに初めてアクセスする場合はこのリンクを使用する必要があります

セットアッププロセスを開始するには以下の手順に従ってください

1 RHMAP OpenShift Online ログインページに移動しRequest an Invite をクリックします

2 サインアップフォームに適切な詳細情報 (利用可能な場合は プロモーションコードプロモーションコードを含む)を入力しSign Up をクリックします

3 招待状メールを受け取ったら招待状メールに提供されたリンクから RHMAP に移動しOpenShift Online クレデンシャルを使用してログインします

4 正常にログインしたらRHMAP によってドメイン名を作成するよう求められます希望するドメイン名を入力しCreate をクリックします

5 RHMAP によってドメインが作成され必要なセットアッププロセスが自動的に開始され

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

60

ます基本的に RHMAP により承認トークンとパブリックキーが作成されRHMAP がOpenShift Online ギアと通信しアプリケーションをユーザーの代わりにデプロイできるようになります

自動セットアッププロセスが完了したらRHMAP が OpenShift Online アカウントに接続されますこの時点で OpenShift Online はクラウドアプリケーションをデプロイしたときに MBaaSターゲットとして現れます

OpenShift Online を MBaaS ターゲットとして使用する方法を示すためにテンプレートから新しいサンプルアプリケーションを作成しクラウド部分を OpenShift Online にデプロイする手順について詳細に説明します

4322 サンプルアプリケーションの作成

新しいアプリケーションを作成するには以下の手順に従ってください

1 画面の左上にある Projects をクリックします

2 画面の左側にある New Project ボタンをクリックします

3 少なくとも 1 つのクラウドコンポーネントを含むプロジェクト (たとえばHello WorldProject) を選択します

4 プロジェクトの名前を入力し画面の右側にある Create ボタンをクリックします

5 プロジェクトが作成されたら画面の下部にある Finish ボタンをクリックします

6 プロジェクトの詳細ページが表示されます

4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ

クラウドアプリを OpenShift Online にデプロイするには以下の手順に従ってください

1 クラウドアプリの主要な詳細セクションが表示されていない場合はそのセクションに移動します

2 OpenShift Online にデプロイするクラウドまたは Web アプリ (クラウドアプリなど) を選択します

3 アプリの詳細ページで OpenShift が MBaaS Deploy Targets の隣にリストされていることを確認します

第4章 RHMAP と他のサービスとの統合

61

4 画面の左側にある Deploy をクリックします

5 画面の下部にある Deploy Cloud App ボタンをクリックします

6 これによりデプロイメントが開始されステータスが示されます

注記注記

初めてのデプロイメントの場合OpenShift Online へのデプロイにはしばらく(数分) 時間がかかることがありますそれ以降の同じアプリのデプロイメントでは時間が大幅に短縮されますデプロイメントが開始されステータスに従わない場合はページから離れることができアプリが引き続き環境にデプロイされます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

62

注記注記

ギアの不足に関連する警告を受け取ることがありますこれはOpenShiftOnline アカウントに利用可能なギアが残っていない場合に起こりますOpenShift Online アカウントから他のアプリケーションを削除してギアを解放する必要があることがあります

7 デプロイメントが正常に完了したら画面の左側にある Details をクリックしてアプリの詳細ページに戻ります

8 アプリがデプロイされたことを確認するにはCurrent Host の隣りにあるリンクをクリックします

9 またOpenShift Online アカウントにログインしてアプリがそこにデプロイされていることを確認することもできます

4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ

第4章 RHMAP と他のサービスとの統合

63

注記注記

本項ではfhc コマンドラインツールを使用しますfhc のインストールおよび使用に関する詳細についてはLocal Development ドキュメンテーションを参照してください

fhc を使用してクラウドアプリを OpenShift Online にデプロイするには以下の手順を実行する必要があります

1 ターゲットを設定しログインします

2 OpenShift Online MBaaS ターゲットを確認します

3 デプロイする環境の ID を取得します

4 デプロイするアプリの ID を取得します

5 stage 操作を使用してアプリをデプロイします

ターゲットを設定しログインするには以下の手順に従ってください

$ fhc target httpsYOUR-DOMAINopenshiftfeedhenrycom

$ fhc login

OpenShift Online MBaaS ターゲットを検証するには以下のコマンドを実行して現在設定されている MBaaS サービスをリストします

$ fhc admin mbaas list

この結果以下のような情報が表示されます

ID URL サービスキー ユーザー名 パスワード 変更時間

openshift-jsmith-email-com-enJo

httpsopenshiftredhatcom

undefined jsmithemailcom

undefined 数秒前

デプロイ先の環境の ID を取得するには以下のコマンドを実行して利用可能な環境をリストします

$ fhc admin environments list

この結果以下のような情報が表示されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

64

ID ラベル 作成時のデプロイ

更新時のデプロイ

MBaaS ターゲット

変更時間

production-openshift-jsmith-email-com-enjo

Production undefined undefined openshift-jsmith-email-com-enJo

7 日前

development-openshift-jsmith-email-com-enjo

Development undefined undefined openshift-jsmith-email-com-enJo

7 日前

デプロイするアプリの ID を取得するにはアプリが含まれるプロジェクトの ID を最初に取得する必要があります現在のプロジェクトは以下のコマンドを実行してリストできます

$ fhc projects

この結果以下のような情報が表示されます

ID タイトル アプリの数 最終更新日時

wp3nlgt2jr5lvymx62tayp5z

project1 2 2 時間前

piilhyeyqpad4nlgyveo6a43

project2 2 1 日前

この時点でプロジェクトの ID を使用して apps コマンドでアプリの ID を取得できます

fhc apps ltprojIDgt

たとえばアプリが project1 に含まれる場合は以下のコマンドを実行します

$ fhc apps wp3nlgt2jr5lvymx62tayp5z

この結果以下のような情報が表示されます

ID タイトル 説明 タイプ Git ブランチ

wp3nlgrxlyzbgvwfjnmulnat

クラウドアプリ

cloud_nodejs gitexample

feedhenrynetopenshiftproject1-Cloud-Appgit

master

第4章 RHMAP と他のサービスとの統合

65

wp3nlgudwgejhnzbuj5twsus

Cordova アプリ

client_hybrid gitexample

feedhenrynetopenshiftgit

ID タイトル 説明 タイプ Git ブランチ

最後にアプリと環境の ID を使用して stage コマンドでアプリを OpenShift Online にデプロイできます

fhc app stage --app=APP-ID --env=ENV-ID

たとえばクラウドアプリクラウドアプリ を project1 から Development にデプロイする場合は以下のコマンドを実行します

fhc app stage --app=wp3nlgrxlyzbgvwfjnmulnat --env=development-openshift-jsmith-example-com-enjo

実行後に以下のような情報が出力されます

433 どのように連携するか

RHMAP はOpenShift Online ギアを MBaaS ターゲットとして扱うために最初に OpenShiftOnline への接続を確立する必要がありますこの接続は OpenShift Online クレデンシャルを使用して RHMAP に初めてログインする場合にセットアップされますRHMAP はユーザーのクレデンシャルを使用してユーザーの代わりに OpenShift Online にログインし承認トークンを交換してRHMAP と OpenShift Online 間の今後の通信を可能にする SSH キーをセットアップします次にRHMAP は自動的に OpenShift Online を MBaaS ターゲットとして設定しプロジェクトで利用できるようにします

初期設定が完了しRHMAP プロジェクトで OpenShift MBaaS ターゲットを使用できるようになったらRHMAP クラウドアプリを OpenShift Online にデプロイできますこれらのアプリは他の OpenShift Online アプリケーションと同様に扱われ特別な利点として RHMAP に統合されますたとえばデプロイメントアプリケーションロギングおよび他の操作は引き続き RHMAPから実行できますがOpenShift Online で実行されているアプリケーションに SSH 経由で直接接続することもできますまたアプリケーションが OpenShift Online コンソールから直接デプロイされた場合はそのアプリケーションの詳細を表示することもできます

4331 ギア

OpenShift Online にデプロイされた RHMAP クラウドアプリは OpenShift Online にデプロイされた他のアプリケーションと同様に扱われるため利用可能なギアの数に制限されますギアの数はプランによって異なることがありますRHMAP からクラウドアプリをデプロイしようとし利用可能なギアが不足している場合は以下のメッセージが表示されます

action cacheKey CloudAppdevelnat-openshiftdeploy error log [] status complete

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

66

この問題を解決するにはアカウントのアップグレードまたは OpenShift Online で実行されている別のアプリケーションの削除を検討してください

4332 環境

OpenShift Online クレデンシャルを使用して RHMAP にログインするとDevelopment とProduction の 2 つの環境が設定されていますこれらの環境はクラウドアプリケーションの詳細を表示するときに画面の右上にあるメニューを使用して切り替えることができます

すべての環境でのすべてのクラウドアプリ開発の概要については画面の上部のプロジェクトのLifecycle Management セクションをクリックしてください

第4章 RHMAP と他のサービスとの統合

67

各各環境の各各アプリケーションは独自のギアを受け取ることに注意してくださいたとえばプロジェクトに App1 と App2 の 2 つのクラウドアプリがあり各アプリケーションに 1 つのギアが必要な場合はDevelopment と Production で App1 と App2 を実行するために 4 つのギアが必要になります

注記注記

この時点でOpenShift Online で RHMAP を使用する場合は提供された Developmentと Production 以外の他の環境を設定することはできません

4333 ロギングおよびデバッグ

OpenShift Online にデプロイされたクラウドアプリのログ参照とトラブルシューティングはRHMAP または OpenShift Online ツールから実行できます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

68

OpenShift ツール

OpenShift ではSSH 経由でログインしてアプリケーションをトラブルシューティングする機能が提供されますクラウドアプリの SSH URL を調べるには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Details をクリックします

4 SSH URL は SSH URL フィールドの隣にあります

注記注記

SSH URL フィールドはOpenShift Online にデプロイされたクラウドアプリでのみ利用可能ですSSH を使用した OpenShift への接続の詳細についてはOpenShift SSH ヘルプページを参照してください

SSH と他の OpenShift Online ツールの詳細については公式ドキュメンテーションを参照してください

RHMAP ツール

RHMAP からクラウドアプリのログを参照するには以下の手順に従ってください

1 プロジェクトに移動します

2 希望するクラウドアプリをクリックします

3 画面の左側にある Logs をクリックします

RHMAP でのアプリケーションのデバッグの詳細についてはデバッグガイドを参照してください

4334 OpenShift Online にデプロイされたアプリの削除

クラウドアプリは RHMAP 側から削除する必要がありますRHMAP ではOpenShift Online からのクラウドアプリの削除が自動的に実行されます

RHMAP からクラウドアプリを削除するには以下の手順に従ってください

1 希望するプロジェクトに移動します

2 削除するクラウドアプリを選択します

3 Details セクションで画面下部にある Delete App をクリックします

第4章 RHMAP と他のサービスとの統合

69

注記注記

アプリケーションを RHMAP で削除せずに OpenShift Online で削除しOpenShiftOnline に再デプロイしようとするとerror Error deploying App to OpenShift Errordisabling auto deploy Application XXXXXXXXXXXXXXXXXXXXXXXX not found(404) というメッセージが表示されることがあります

4335 SSH キー

OpenShift Online クレデンシャルを使用して初めて RHMAP にログインするとRHMAP によりOpenShift Online との認証および承認のやり取りが実行されOpenShift Online アカウントにパブリックキーが追加されます次にパブリックキーを使用して SSH 経由で OpenShift Online にクラウドアプリがデプロイされますOpenShift Online アカウントに関連付けられたすべてのキーはアカウントの設定ページで参照できます

RHMAP により生成されたパブリックキーが失効したりOpenShift Online アカウントから削除されたりした場合は以下のメッセージが表示されることがあります

この問題を解決するにはRHMAP からログアウトし再びログインしますRHMAP により新しいパブリックキーが作成されデプロイメントに使用されます

またデプロイメントの実行前にアクセストークンを再生成するよう要求されることもあります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

70

OpenShift Online クレデンシャルを入力しRe-Generate Access Tokens をクリックします

4336 ドメイン

ドメインは OpenShift Online アプリケーション URL の一部 (たとえばmyApplication-domainexamplecom) であり多くのアプリケーションは単一のドメインにデプロイできますユーザーが定義できるドメインの数は現在のプランによって異なりますドメインの詳細と管理方法についてはOpenShift Online ドキュメンテーションを参照してください

44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ

441 Google OAuth アプリ

アプリのユーザーの認証を Google の OAuth サービスに対して実行するには最初に複数の手順を実行する必要があります

最初にGoogle API コンソールを使用して Google でアプリをセットアップする必要がありますアプリの作成時に Web アプリケーションを選択します詳細は後で更新されることがあるためそれほど重要ではありませんアプリが作成されたらGoogle により提供されたクライアント ID とクライアントシークレットをメモしてください

クライアント ID は 00000000000appsgoogleusercontentcom のようになります

シークレットは数字および数値のハッシュです

以下の図ではGoogle のコンソールでこれらの項目が赤で示されています

第4章 RHMAP と他のサービスとの統合

71

ドメイン管理者権限を持つチームのユーザーとして Studio にログインしAuth Policies タブをクリックします次に Create ボタンをクリックして新しいポリシーを作成しますOAuth2 のタイプを選択しGoogle によって提供された詳細を入力します

注記注記

Studio で Auth Policies タブにアクセスするにはユーザーは Authorization Policyに対して View amp Edit が設定されたチームのメンバーである必要があります

Auth Policy 作成ページで提供されたコールバック URL をアプリコンソールの Redirect URI 下の Google アプリに追加します

442 承認

承認パネルには 2 つのオプションがあります

ユーザーがプラットフォームに存在することを確認します

ユーザーが認証されているかどうかを確認します

これらいずれかのオプションを選択しない場合は適切な Google アカウントを持つすべてのユーザーがアプリにアクセスすることを許可すると見なされます

4421 ユーザーがプラットフォームに存在することを確認

このオプションではユーザーが適切な Google アカウントを持ちユーザーが Google によって返された ID (例 someusergmailcom) でプラットフォームで登録された場合ユーザーはアプリケーションにアクセスすることが許可されます

4422 ユーザーが認証されているかどうかを確認

このオプションではユーザーが適切な Google アカウントを持ちGoogle によって返されたユーザー ID がこの認証ポリシーに関連付けられている場合ユーザーはこの認証ポリシーに関連

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

72

付けられたアプリケーションを使用することが許可されます

443 認証ポリシーに対するユーザーの追加削除

既存のユーザーを認証ポリシーに追加するにはcheck if user is approved for Auth オプションをクリックしますスワップ選択が利用可能なユーザーが入力された状態で表示されますこれらいずれかのユーザーをポリシーに追加するにはユーザーを選択し承認済み列の方向を向いた矢印を押しますユーザーを削除するには承認済み列でユーザーを選択し利用可能な列の方向を向いた矢印をクリックします

認証ポリシーの設定が完了したらUpdate Policy ボタンをクリックします

第4章 RHMAP と他のサービスとの統合

73

第5章 データの格納

51 データブラウザー

511 概要

App Studio の Data Browser セクションでは開発者は以下のことを行えます

アプリに関連するデータを視覚的かつ対話的に表示する

コレクションを表示作成および削除する

コレクション内のデータを修正する

512 データブラウザーの使用

5121 コレクションの表示追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択するとアプリに関連付けられているコレクションが表示されます

この図ではコレクションリストの最上部に 2 つのコントロールが示されています

これらのボタンを使用して以下のことができます

コレクションを追加します

コレクションのリストを更新します

コレクション追加のボタンをクリックするとコレクション名の入力を求められます作成ボタンをクリックしてコレクションを作成します

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

74

5122 コレクション内のデータ表示

コレクションに格納されたデータを表示するにはデータブラウザーにリストされたコレクションのいずれかをクリックしますこのビューはコレクションに関連付けられたデータを示しています

画面の最上部には主要なリスト機能が示されます

これらのボタンを使用すると以下のことが行えます

コレクションを切り替えますこのオプションを選択するとアプリ用のコレクションのリストが表示されますコレクションをクリックしてそのコレクションのデータをリストします

コレクションにエントリーを追加します

データをインポートおよびエクスポートします (後述)

51221 データの並び替えデータの並び替え

特定のフィールドでデータを並び替えるには一覧上部のフィールド名をクリックします並び替えは昇順と降順で切り替わります

51222 データのフィルタリングデータのフィルタリング

第5章 データの格納

75

表示されたデータをフィルタリングするにはデータブラウザー画面上部にある「フィルター」ボタンをクリックしますこのボタンをクリックするとフィルタリングオプションが表示されますこれらのオプションを使用すると1 つ以上のフィールドで表示されたデータをフィルタリングできますフィルタリングでは以下の JSON データ型がサポートされます

String - テキストベースのフィールドをフィルタリングできます

Number - 数値をフィルタリングします

Boolean - true 値と false 値を受け取ります

注記注記

文字を使用して入れ子オブジェクト内部でフィルタリングできますたとえばauthorname をフィルターキーとして使用すると以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます

5123 データの編集

データブラウザーではインラインまたは高度なエディターを使用してデータを編集できます

インラインエディターはコレクション内の簡単なデータの編集に使用します (例 単一フィールド内でのテキスト変更)

複雑なデータ型の編集には高度なエディターが使用されますこれは対話型の動的エディターや Raw JSON エディターを使用して行われます

51231 インラインエディターを使用した編集インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するにはデータエントリー右側の Edit オプションを選択してから Edit Inline を選択します以下の図で示されているようにオプションが緑色のチェックマークと黒矢印のアイコンに変わります

title author nameJohn

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

76

フィールドが複雑すぎてインラインエディターで編集できない場合はAdvanced Editor Only というテキストが表示されますこのフィールドは高度なエディターでのみ編集可能です

エントリーの更新が終わったら緑色のチェックを選択して変更をデータにコミットするか黒矢印を選択して変更をキャンセルします

51232 高度なエディターを使用した編集高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例 フィールドが複数の入れ子フィールドで構成されている場合)

高度なエディターを開くにはデータエントリー右側の Edit オプションを選択しAdvancedEditor を選びます

高度なエディターには以下の 2 つのモードがあります

フィールドを対話型で追加編集する動的エディター

JSON 形式でデータを直接編集する Raw JSON エディター

512321 動的エディターを使用した編集動的エディターを使用した編集

動的エディターはJSON データ用の対話型エディターです各フィールドの構造化ビューが提供され複雑なデータ型を追加または編集できます

アクションメニューはエントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します

第5章 データの格納

77

ここで利用可能なオプションは以下のとおりです

Type このオプションではフィールドのデータ型をアレイJSON オブジェクトまたは文字列に変更しますまたフィールドを自動に設定することも可能でその場合データ型は入力されたデータから自動的に選択されます

Sort このオプションは複雑なタイプのサブフィールドを昇順または降順で並び替えます

Append このオプションは選択したオブジェクトの後にフィールドを追加します

Insert このオプションは選択したオブジェクトの前にフィールドを追加します

Duplicate このオプションを使用すると選択したオブジェクトがコピーされ選択したオブジェクトの最後にそのオブジェクトが追加されます

Remove エントリーからフィールドを削除します

512322 Raw JSON エディターを使用した編集エディターを使用した編集

Raw Editor を使用するとJSON 構文のデータを編集できます入力されるデータが有効な JSONフォーマットであることを確認してくださいJSON データはフォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます

513 データのエクスポートとインポート

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

78

5131 データのエクスポート

注記注記

データブラウザーインターフェースに組み込まれたエクスポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをエクスポートするにはFHC を使用します

データはExport ドロップダウンメニューを使用してエクスポートされます以下の 3 つの形式が利用可能です

JSON

CSV

BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたらzip ファイルがダウンロードされますこの内容はユーザーのデータです

アプリ内に含まれるすべてのコレクションをエクスポートするにはコレクションリスト画面のツールバーの Export を使用します個々のコレクションのデータをエクスポートするにはコレクションのデータリスト内から Export ドロップダウンを使用します

インポート用の形式もデータをエクスポートする場合と似ています各形式のこのスキーマの詳細を以下に記載します

5132 データのインポート

注記注記

データブラウザーインターフェースに組み込まれたインポート機能はテストとレビューのみを目的としていますクラウドアプリまたはサービスからデータコレクションをインポートするにはFHC を使用します

コレクションリスト画面の Import ボタンをクリックすることによりデータをデータブラウザーにインポートできますサポートされる形式は以下のとおりです

JSON

CSV

BSON (Mongo Dump)

上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応しますファイルの名前はデータがインポートされるコレクションの名前に対応しますコレクションが存在しない場合はコレクションを作成しますコレクションが存在する場合はインポートされるドキュメントが既存の内容に追加されます

51321 インポート形式インポート形式

以下ではさまざまな種類のインポートの既定の形式について説明します各ケースでフルーツ

第5章 データの格納

79

の架空のデータセットをインポートしますインポートされたコレクションの名前は fruit になります各例には文字列数値ブール値などのインポートでサポートされる各データ型が含まれます複雑なオブジェクト型はサポートされないことに注意してください

51322 JSON のインポートのインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです

fruitjson

51323 CSV のインポートのインポート

CSV をインポートするにはプラットフォームで使用されるセパレーター区切り記号および改行の設定に注意してください

以下にサンプルファイルを示します

fruitcsv

51324 BSON またはまたは MongoDump 出力のインポート出力のインポート

mongodump ツールを実行すると既存の MongoDB データベースのデータを簡単にエクスポートできますこのツールによりdump という名前のディレクトリーが作成されデータベースが含まれる一連のフォルダーとサブフォルダーさらにコレクション名が出力されますこれらのコレクションを RHMAP データベースにインポートするには出力された bson ファイルを取得し直接インポートしますディレクトリー構造または出力されたメタデータ jsonファイルは必要ありませんBSON はバイナリー形式であるためここでは例を示しません代わりにファイルをダウンロードすることができます

また任意の mongodb のインストールで提供された bsondump ツールを使用してbson ファイル内部のデータを表示することもできます (bsondump fruitbson)

[ nameplums price299 quantity45 onSaletrue _id53767254db8fc14837000002 namepears price25 quantity20 onSaletrue _id53767254db8fc14837000003 ]

namepricequantityonSale_idplums29945true53767254db8fc14837000002pears2520true53767254db8fc14837000003

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

80

514 データベースのアップグレード

$fhdb API で提供されるもの以外のデータベース操作を実行する必要がある場合はMongoDBドライバーを直接使用してデータベースにアクセスできますデータベースへの直接アクセスを有効にするには最初にデータベースをアップグレードアップグレードし専用インスタンスに移行する必要があります

アプリのデータベースをアップグレードするにはデータブラウザー画面の右上隅にあるUpgrade Database ボタンをクリックします

アップグレード中にプラットフォームにより以下の手順が実行されます

アプリが停止されます

アプリ用に特別に新規データベースが作成されます

アプリに環境変数 FH_MONGODB_CONNURL が設定されますこの環境変数にはMongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます

データベースにすでにデータが含まれる場合は以下の手順が実行されます

データが古いデータベースから新しいデータベースに移行されます

すべての処理が正常に実行されるとデータは古いデータベースから削除されます

データが新しいデータベースで検証されます

注記 applicationjs ファイルと packagejson ファイルの内容を更新する必要がある場合もありますこの場合は移行画面で通知されます

すべてのデータ移行手順が完了したらアプリを再デプロイする必要があります

データベースのアップグレードが完了したらプレフィックス fhsync_ の付いた新たなコレクションが作成され同期機能が有効になりますRed Hat では同期機能を使う予定がない場合でもこれらのコレクションを保持しておくことを推奨しています

52 アプリケーションデータのエクスポート

概要

多くの場合バックアップを作成したり既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要ですfhc を使用するとクラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます

name plums price 299 quantity 45 onSale true _id ObjectId( 53767254db8fc14837000002 ) name pears price 25 quantity 20 onSale true _id ObjectId( 53767254db8fc14837000003 ) 2 objects found

第5章 データの格納

81

完全なリファレンスについてはfhc help appdata export を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata export ltcommandgt を実行してください

要件要件

RHMAP バージョン 3110 以降

fhc バージョン 290 以降

521 エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは単一の tar アーカイブにエクスポートされ圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます各 BSON ファイルの名前は元のコレクションの名前と一致します

exporttar |__ ltCOLLECTION_1_NAMEgtbsongz |__ ltCOLLECTION_2_NAMEgtbsongz

BSON ファイルは標準的な MongoDB バックアップおよび復元ツールと互換性があります 詳細についてはBack Up and Restore with MongoDB Tools を参照してください

522 アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは主に以下の 3 つの手順から構成されます

1 新しいエクスポートジョブを開始する

2 エクスポートジョブのステータスを問い合わせる

3 エクスポートされたデータをダウンロードする

5221 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには以下のコマンドを入力します

fhc appdata export start --appId=ltAPP_IDgt --envId=ltENV_IDgt [--stopApp=[yngt]]

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

実行後にデータエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます

n を選択するとエクスポートジョブの処理中にクラウドアプリが実行されたままになりますエクスポート中に新しいデータがコレクションのいずれかに追加された場合データは現在のエクスポートジョブに含まれません

y を選択するとエクスポートジョブが開始したときにクラウドアプリが停止しますエクスポートジョブが完了したらアプリを手動で再起動する必要があります

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

82

コマンド実行後 (たとえばfhc をスクリプト化する場合) にプロンプトを省略する場合は実行前にコマンドでオプションの --stopApp フラグを提供します

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5222 エクスポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata export status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

エクスポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

5223 エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために以下のように downloadコマンドを実行します

fhc appdata export download --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt --file=ltFILENAMEgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル

FILENAME - エクスポートされたデータを格納するファイルのパス

指定された場所にファイルがすでに存在する場合はアクションを実行せずに download コマンドが終了します

53 アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたらfhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます

完全なリファレンスについてはfhc help appdata import を実行して利用可能なコマンドのリストを参照してください特定のコマンドのリファレンスについてはfhc help appdata import ltcommandgt を実行してください

要件要件

第5章 データの格納

83

RHMAP バージョン 3120 以降

fhc バージョン 2100 以降

ターゲットアプリケーションにはアップグレードされたデータベースが必要です詳細についてはデータベースのアップグレードを参照してください

インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります詳細についてはエクスポートデータ形式を参照してください

531 アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは主に以下の 2 つの手順から構成されます

1 新しいインポートジョブを開始する

2 インポートジョブのステータスを問い合わせる

5311 新しいインポートジョブの開始

新しいインポートジョブを開始するには以下のコマンドを入力します

fhc appdata import start --appId=ltAPP_IDgt --envId=ltENV_IDgt --path=ltFILE_PATHgt

APP_ID - クラウドアプリまたはサービスの ID

ENV_ID - アプリが実行されているデプロイ環境の ID

FILE_PATH - インポートするファイルのパス

実行後に提供されたファイルのアップロードが開始されアップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになりますアップロードが完了したらコマンドが終了しインポートジョブが開始されます

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合はアクションを実行せずに start コマンドが終了します

5312 インポートジョブのステータスの問い合わせ

ジョブが開始されたらコマンドラインツールによって該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます

fhc appdata import status --appId=ltAPP_IDgt --envId=ltENV_IDgt --jobId=ltJOB_IDgt [--interval=ltMILLISECONDSgt]

インポートジョブのステータスを問い合わせるにはこのコマンドをシェルにコピーアンドペーストします

コマンドを実行したままにし定期的にジョブステータスを報告するにはオプションの --interval フラグを含めジョブのステータスを問い合わせる間隔を指定します

ジョブが完了したらstatus コマンドによってジョブステータスが complete と返されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

84

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

概要

既存のクライアントアプリとクラウドアプリをプロジェクトにインポートできますインポートされる各アプリに対して RHMAP で git リポジトリーが作成されます

インポートされるアプリは本書で概説された以下の要件を満たす必要があります

クライアントアプリの要件

クラウドアプリの要件

要件要件

RHMAP でホストされた Git リポジトリーからクローンプッシュまたはプルするにはプラットフォームで SSH キーを設定する必要がありますSSH キーをまだ追加していない場合はSSH Key Setup を参照してください

61 空のプロジェクトの作成

本書では現在 Studio にプロジェクトがないことを前提としますベアプロジェクトを作成するには以下の手順に従ってください

1 Studio にログインします

2 Projects に移動します

3 + New Project をクリックします

4 Empty Project (空のプロジェクト空のプロジェクト) テンプレートを選択し新しいプロジェクトに名前を付けます

5 Create ボタンをクリックします

6 プロジェクトが作成されたらFinish をクリックします

62 クライアントアプリのインポート

クライアントアプリを作成する前にプロジェクトで少なくとも 1 つのクライアントアプリがすでに作成されていることを確認します既存のアプリをインポートする場合はクラウドアプリのインポートを参照してください

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクライアントアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

85

6 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クライアントアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクライアントアプリの内容の単一の ZIP アーカイブを作成します

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

7 Import amp move on to Integration をクリックしますクライアントアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

Zip File または Bare Repo オプションを使用してインポートしたらRHMAP SDK の統合に関する手順が表示されます

8 Finished - Take me to My App をクリックします

63 クラウドアプリのインポート

1 ベアプロジェクトでApps Cloud Apps amp Services に移動します

2 Cloud Code Apps ボックスで + をクリックします

3 Import Existing App をクリックします

4 作成する App Type を選択しますアプリをインポートできるようにするにはクラウドアプリの要件を参照してください

5 Next をクリックしインポートされたアプリに名前を付けます

6 初期デプロイメント環境を選択します

クラウドアプリはインポート後すぐに選択された環境にデプロイされます初期デプロイメントを省略する場合はNone を選択します

7 アプリのインポート方法を選択します

パブリックパブリック Git リポジトリーリポジトリー

クラウドアプリが含まれるパブリック Git リポジトリーの URL とブランチ名を入力しますデフォルト値は master です

Zip ファイルファイル

コンピューターでクラウドアプリの内容の単一の ZIP アーカイブを作成します

zip -r appzip -x git

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

86

Studio でアップロードする ZIP ファイルを選択します

Bare Repo

アプリのコードをプッシュできる空のリポジトリーが作成されます

8 Import amp move on to Integration をクリックしますクラウドアプリがプロジェクトにインポートされます

Bare Repo オプションを使用してインポートしたらAlready have a git repo をクリックし表示された手順を実行します

9 Finished - Take me to My App をクリックします

64 クライアントアプリの要件

クライアントアプリをプロジェクトにインポートする前提条件は作成するクライアントアプリの種類によって異なります

641 Cordova Light アプリ

www ディレクトリーのみが公開された標準的な Cordova 3x アプリ これらのアプリでは標準的な Web テクノロジー (HTML5CSSJavaScript) を使用しますネイティブコードは使用しません

これらはプラットフォームの使用方法を学ぶための最も単純なアプリですが開発者は標準的なCordova プラグインのみを使用するよう制限されますこれはconfigjson ファイルを使用して実現されます (Cordova プラグイン)

要件

ソースファイル (たとえばHTMLCSSおよび JavaScript) はwww ディレクトリーに存在する必要があります

642 Cordova アプリ

標準的な Cordova 3x モバイルアプリケーションこれらのアプリは Web テクノロジーとネイティブコードの組み合わせで構成されます基礎となるネイティブプロジェクトと Cordova ライブラリーは開発者に公開されアプリ (Cordova プラグインとサードパーティー製 SDK を含む) の完全なカスタマイズが可能になります

通常これらのアプリのネイティブコードを記述または変更するのにかかる時間は比較的短く小規模な開発チームのみがネイティブコードを扱う必要があります開発チームはネイティブコードを開発設定および管理し標準的な Cordova プラグインの手法を使用して追加のプラグインまたは SDK を Web 層に公開できる必要があります

開発チームはネイティブコードについてほとんど心配する必要がありません開発チームは引き続き純粋な Web 技術を使用して開発を行えますがネイティブ層から公開された追加の機能も利用できます

要件要件

サポートされる最小 PhoneGap バージョン 30

zip -r appzip -x git

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

87

PhoneGap 3x の標準的な構造に準拠し以下のファイルフォルダーを含む必要があります

wwwindexhtml

wwwconfigxml

platforms

plugins

merges

cordova

643 Web App

Nodejs + Express Web アプリケーションこれらのアプリは高度なモバイル Web サイトとデスクトップブラウザー Web ポータルを提供しますこの場合非常に強力な Nodejs (Jade などのテンプレートエンジンを使用したサーバーサイドテンプレートなどの機能を含む) を使用してWeb アプリ開発を行えますまた標準的な HTML5CSSおよび JavaScript 向けの静的ファイルの提供もサポートされます

要件要件

以下のファイルが にある Nodejs アプリである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

644 ネイティブ Android

ネイティブの Android アプリ

要件要件

Ant または Gradle ベースの有効な Android プロジェクト (Eclipse または IDEA に基づいてAndroid Studio で作成) である必要がありますAnt ベースのプロジェクトでは (プロジェクトルート) に AndroidManifestxml ファイルが含まれる必要があります

最小 Android プラットフォームバージョン 23 (API レベル 9)

すべての依存関係はAndroid SDK または Maven リポジトリーのいずれかで利用可能である必要があります

645 ネイティブ iOS

ネイティブ iOS アプリケーション

要件要件

applisten(processenvFH_PORT)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

88

ローカルで適切にビルドおよびコンパイルされる有効な Xcode プロジェクトである必要があります

最小 iOS OS ターゲットバージョン 70

646 ネイティブ Windows Phone 8

ネイティブ Windows Phone 8 アプリ

要件要件

Visual Studio 2012 Express で作成された有効な Windows Phone 8 プロジェクトである必要があります

Windows Phone SDK バージョンが Windows Phone 8 以上である必要があります

647 Xamarin

Xamarin アプリ

要件

Xamarin Studio または Visual Studio のいずれかで作成された有効な Xamarin ソリューションである必要があります

65 クラウドアプリの要件

以下のファイルが にある Nodejs アプリケーションである必要があります

packagejson

applicationjs - Nodejs アプリがデプロイされたときに開始されるスクリプト

以下のようにアプリが FH_PORT 環境変数を介して指定されたポートをリッスンする必要があります

applisten(processenvFH_PORT)

第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート

89

第7章 古いバージョンの RHMAP からの移行

71 V2 から V3 への移行の概要

711 アプリとプロジェクト

v2 Studio ではアプリはハイブリッドアプリWeb アプリクラウドアプリおよび場合によってはネイティブ iOS または Android アプリすべてを表しますv3 Studio ではアプリはこれらのコンセプトの 1 つを表しますアプリはクラウドアプリまたはネイティブ iOS アプリのいずれかであり両方ではありませんv3 Studio では機能とプラットフォームを分けるためにさまざまなアプリの種類が提供されます (ただしこれらのアプリはプロジェクトでグループ化できます)

712 移行する理由

v2 から v3 の Studio に移行する最大の利点は新しい複数の機能を利用できることですプロジェクトワークフローにより開発ライフサイクル全体でプロジェクト内の複数のアプリを簡単に管理できるようになりますv3 の各アプリはホストされた git リポジトリーによって支持されますこれらのアプリはSSH キーをアップロードするだけで使用できます

v2 Studio は引き続きサポートされますがv2 Studio では新しいプラットフォームの機能は使用できません

713 Studio での自動移行

v2 アプリを個別に v3 プロジェクトに移行するためにv2 Studio では自動移行機能が利用できますこの移行プロセスの詳細を知りたい場合またはアプリを手動で移行する場合は詳細なアプリ移行ガイドを参照してください

Studio アプリ移行機能はドメイン内のすべてのアプリで利用可能ですただしアプリによっては移行が簡単でない場合がありますStudio は検証チェックを実行して自動移行がアプリに適しているかどうかを判断しようとしますこのチェックは非破壊的でありアプリにはまったく変更が加えられませんこの機能を実行して移行しないことを決定することができます

アプリのサイズに応じて検証チェックには数秒から最大 1 分かかります検証チェック後に移

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

90

行を自動的に行えるかどうかを通知する視覚的なレポートが生成されますこのレポートにはアプリで検出されたことと移行で注意する必要がある潜在的な問題 (警告) に関する情報が示されます作業を円滑に進めるために移行前にすべての問題を解決する (または問題の解決を計画する)ことが重要です

検証チェックが何らかの理由で失敗した場合はエラーが表示されます可能な場合は移行のためにアプリを再び検証しようとする前にエラーを修正する必要があります手動による移行が唯一の選択肢となることもあります不確かな移行の問題またはサポートが必要な移行の問題はhttpsaccessredhatcom から報告できます

第7章 古いバージョンの RHMAP からの移行

91

検証チェックが成功した場合はMigrate ボタンが表示されますこのボタンを押すと移行が開始され進捗のフィードバックがリアルタイムで提供されます移行が成功すると小さなレポートが作業途中で検出されたすべての潜在的な問題とともに表示されます 強調表示された問題はv3 Studio を最大に活用するのに重要である場合があるため完全に理解することをお勧めします

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

92

移行中に問題が発生した場合はプラットフォームによりすべての変更がロールバックされアプリが移行前の状態に復元されます繰り返しますがこの移行ステージで発生したすべての問題はhttpsaccessredhatcom で報告できます

第7章 古いバージョンの RHMAP からの移行

93

714 fhc を使用した自動移行

複数のアプリを移行する場合は移行をスクリプト化すると便利ですこれはfhc migrate コマンドを使用して行えます以下に例を示します

migrate コマンドにより最初に検証チェックが実行され問題がない場合に続行するか尋ねられます

ドメイン内のすべてのアプリを自動的に移行する場合は以下のスクリプトを土台として使用できます

この例はgist (packagejson を含む) としても利用できます

72 V2 から V3 への移行ガイド

721 v2 アプリとは

fhc migrate ltappidgt

usrbinenv nodevar fh = require(fh-fhc)var async = require(async)

Init fhcfhfhcload(function (err) if (err) return consoleerror(err) Target my domain and login fhtarget([httpstestingfeedhenrymetestingexamplecompassword] function(err ok) if (err) return consoleerror(err) consolelog(ok ok) List all apps fhapps([] function(err apps) if (err) return consoleerror(err) consolelog(apps apps) Iterate over apps calling migrate for each asyncmapSeries(appslist function(app cb) Passing silent here will bypass prompt after validation check if check is ok fhmigrate([appid silent] function(err data) if (err) return cb(err) consolelog(data data) return cb(null data) ) function(err results) if (err) return consoleerror(err) all done consolelog(results results) ) ) ))

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

94

v2 アプリは v2 Studio でのみ確認できるアプリですWeb アプリとしてホストしデバイスに対してビルドおよびデプロイして実行されているサーバーサイドコンポーネントを Nodejs (または従来の Rhino) 環境にデプロイできます

これらすべての機能は一意の ID である GUID (Globally Unique Identifier) を持つ単一のアプリに割り当てられます単一のコードベースはプラットフォームに格納できます (Studio と API を介してのみアクセスできます)またgit リポジトリー (パブリックまたはプライベート) に格納してStudio からリンクすることもできます上記の各機能を単一のコードベースからサポートすると厳密なディレクトリー構造が強制されますこの構造は以下のとおりです

client には以下のように 1 つまたは複数のフォルダー (パッケージ) が含まれます

default にはWeb アプリまたは Cordova アプリの土台として機能するデフォルトの indexhtml ファイルが含まれます

ltothergt には特定のプラットフォームで優先されるように設定できる他のファイルが含まれます (たとえばiOS Cordova アプリをビルドするときに異なる indexhtml を使用)

cloud には以下のものが含まれます

applicationjs の土台となるファイルを含む Nodejs アプリ

または mainjsの土台となるファイルを含む Rhino アプリ

shared には以下のコードで利用できるファイルが含まれます

実行時のクラウドコード

配信時またはビルド時のクライアントコード

すべての機能は単一のアプリ guid に割り当てられるためこのアプリにより表されるさまざまなWeb アプリまたは Cordova アプリはクラウドコードに密接に結合されますつまりこのアプリの実行中のクラウドコードとのみ対話します

722 v3 アプリとは

v3 アプリは v3 Studio でのみ確認できるアプリですすべての v3 アプリはプロジェクトの一部ですv3 アプリの機能はアプリの種類 (Cordova アプリクラウドアプリネイティブ iOS など) によって異なります一般的に v2 アプリの個別機能は v3 アプリタイプにマップされますたとえばv3 アプリタイプがクラウドアプリクラウドアプリの場合はNodejs コードをクラウド環境にデプロイできますタイプが Cordova Light の場合はWeb コンテンツ (htmlcssjs) を使用してさまざまなプラットフォーム用のネイティブアプリバイナリーをビルドできます各アプリタイプは特定の機能を考慮して設計されているため特にチームで開発を容易に管理できます (懸念事項の切り分けが可能)

注記注記

一般的にv2 アプリは v2 Studio のみで確認できます (v3 Studio の v3 アプリプロジェクトと同様) 自動的に移行された v2 アプリは両方の Studio で確認できますがv3 でのみ変更できます (v2 Studio では migrated アプリとしてフラグ付けされます)

v3 Studio では確認するアプリタイプで利用できる機能のみが表示されますたとえば確認するアプリが Cordova Light アプリタイプである場合はBuild オプションが表示されますがDeploy オプションは表示されません(新しい) ネイティブネイティブ iOS アプリを確認する場合はBuild オ

第7章 古いバージョンの RHMAP からの移行

95

プションが表示されますがConfig オプションと Push オプションは表示されません (これらはCordova と類似したアプリであるため)

各 v3 アプリには独自の git リポジトリー (プラットフォームでホストされる) により支持された独自のコードベースがありますつまり厳密なディレクトリー構造はありませんたとえばククラウドアプリラウドアプリの場合はgit リポジトリーのルートにファイル packagejson と applicationjs があります一般的にルートにコードを配置することが適切な場合プラットフォームはビルド時またはデプロイ時にその場所でコードを探しますこの唯一の例外は Cordova Light アプリですこのアプリではすべての Web コンテンツ (HTMLCSSJS) を www フォルダーに保持するCordova の規則に従いますこれによりビルドスクリプトと他の非本番稼働コンテンツをビルドされるアプリに含めずに保守することが簡単になります

723 プロジェクトとは

v3 Studio ではプロジェクトはアプリの論理的なグループですプロジェクトのクライアントアプリが (接続を介して) 同じプロジェクトのクラウドアプリまたはデプロイ済みアプリに API 呼び出しを行うよう設定できますプラットフォームの一部の機能 (フォーム接続レポートなど)はプロジェクトに関連付けられますまたプロジェクトにはサービスも関連付けられますサービスはサードパーティー製システムとの事前定義された統合ですプロジェクトにはコードベースと独自の特別な機能がないためプロジェクトをビルドまたはデプロイすることはできません

724 新規プロジェクト

v3 Studio ではアプリは独自に存在することはできませんアプリはプロジェクトに属する必要がありますv2 アプリを v3 Studio に移行する場合はベアプロジェクトを選択することをお勧めしますこれによりアプリがない状態で新しいプロジェクトが作成されます

725 クラウドの新しい v3 アプリ

7251 クラウドアプリ

v2 アプリはサーバーサイド Rhino または Nodejs としてデプロイできますこの場合はcloud のコンテンツが取得され環境にデプロイされますv3 でこの機能を取得するには新しいクラウドアプリクラウドアプリを作成しますただしRhino サーバーサイドコードは v3 Studio ではサポートされません自動的に移行される Rhino コードは限定的にサポートされますが新しいRhino アプリは利用できません

警告警告

v3 Studio で新しいプロジェクトを作成して手動で v2 アプリを移行する場合既存のアプリの一意の ID (guid) は v3 で異なります新しいクライアントアプリを該当するアプリストアに公開する必要がありますこれはv2 Studio での自動移行プロセスの場合は該当しません

警告警告

Rhino サーバーサイドコードは v2 アプリから v3 Rhino アプリアプリに自動的に移行できますがサポートは制限されますv3 Studio を最大限活用するにはRhino コードをNodejs に移行することが推奨されます

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

96

7252 cloud フォルダーの移行

クラウドアプリクラウドアプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してルートフォルダーのすべての内容 (隠しファイルを除く) を削除しますcloud の内容はルートフォルダーに直接ドロップできます

7253 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7254 (オプション) Nodejs SDK の変更

ほとんどのレガシー v2 アプリではクラウドコードで fh-nodeapp または fh-webappfh-apinodejs モジュールが使用されますcloud から移行されたコードは引き続きデプロイされ機能しますが新しい fh-mbaas-express ミドルウェアと fh-mbaas-api モジュールを使用することが推奨されますこれらを使用する方法の例はクラウドアプリクラウドアプリテンプレートと v3 Studio で利用可能なさまざまなプロジェクトテンプレートで利用できますfh-nodeapp または fh-webappfh-api から fh-mbaas-express への移行に関するガイドはここで参照できます

726 クライアント用の新しい v3 アプリ

7261 Cordova Light アプリ

v2 アプリはハイブリッドアプリ (Cordova) としてビルドできますこの場合はclientdefault からすべてのコンテンツが取得されCordova www フォルダーに配置され (自動的な html ラッピングと v2 パッケージのための追加の手順を実行)ネイティブアプリバイナリーが生成されますv3 でこの機能を取得するには新しい Cordova Light アプリを作成します

7262 client フォルダーの移行

clientdefault フォルダーを取得しclient 下の他のすべてのフォルダーを無視する場合この部分の移行はそれほど難しくありませんCordova Light アプリでStudio エディターまたは git リポジトリーのローカルクローン (こちらの方が容易) を使用してwww フォルダーのすべての内容 (存在する場合) を削除しますclientdefault の内容はwww フォルダーに直接ドロップできます

7263 shared フォルダーの移行

shared フォルダーが v2 アプリに存在する場合その内容は www に直接ドロップできますこれはv2 アプリの shared フォルダーの動作に似ています

7264 Javascript SDK インジェクション

v2 アプリではindexhtml の内容が html で自動的にラップされRHMAP javascript SDK と初期化 javascript が挿入されますv2 indexhtml ファイルのテンプレートは以下のようになります

ltDOCTYPE htmlgtlthtml lang=en dir=ltrgt ltheadgt

第7章 古いバージョンの RHMAP からの移行

97

v3 アプリではindexhtml の html ラッピングSDKまたはコードインジェクションがありませんつまりCordova Light アプリではindexhtml で任意の doctype を定義したり任意のメタタグを設定したり任意のスタイルシートまたはスクリプトを好きな場所に配置したりすることができますv3 アプリではindexhtml の内容はまったく変更されませんこれはindexhtml ファイルを v2 アプリから v3 アプリに移行するときに一部の変更が必要になることを意味します

最初にindexhtml の内容は必要な html 構文 (doctypehtml タグbody タグなど) を含むよう記述する必要があります次にJavascript SDK を含める必要がありますつまりgithubj から最新バージョンの feedhenryjs を取得しますこのファイルはwww フォルダーに追加された状態で以下のように indexhtml に含めることができます

7265 fhconfigjson

Javascript SDK はアプリの起動時に自動的に初期化されますが初期化呼び出しを行う場所を認識している必要がありますこれは設定ファイル fhconfigjson を読み取ることにより実行されますこの内容はプロジェクトの Connections タブから取得できます特定の接続に対して Configure オプションを使用するとJSON オブジェクトが示されますこれらの内容は wwwfhconfigjson にコピーできます以下に例を示します

このファイルが所定の場所にある場合アプリは起動時に初期化呼び出しを行います初期化呼び出しが成功するとホスト情報が返されアプリはすでにプロジェクトにあるクラウドアプリクラウドアプリに対して $fhcloud 呼び出しを行えるようになります

7266 (オプション) レガシー FeedHenry API

lt-- mobile meta tags go here --gt ltscriptgt var fh_app_props = for example guid host var fh_destination_code = for example ios android mobile embed ltscriptgt ltlink href=legacy-stylescss rel=stylesheetgt ltscript src=legacy-feedhenry-sdkjs type=textjavascriptgtltscriptgt ltscript src=legacy-frameworksjs type=textjavascriptgtltscriptgt

ltheadgt ltbody style=margin0pxpadding0pxgt lt-- indexhtml contents go here --gt ltbodygtlthtmlgt

ltscript src=feedhenryjsgtltscriptgt

appid00000000000000000000000000000000 appkeyaaaaaaaabbbbbbbbccccccccddddddddeeeeeeee connectiontag001 hosthttpsfeedhenryexamplecom projectid11111111111111111111111111111111

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

98

RHMAP SDK は FeedHenry v2 よりも大幅に小型化されています最も大きな違いは $fhacc$fhaudio$fhca などのすべての Cordova ラッパー関数が削除されていることですアプリでこれらの機能が必要な場合は2 つのオプションがあります

これらのレガシー API は隔離され別の js ファイル httpsgithubcomfhengfh-js-api-v2 に移動されましたCordova アプリをビルドする場合はレガシープラグインをhttpsgithubcomfhengfh-cordova-plugins-api から除外できます

これらのレガシー API により提供される機能の各プラグインも利用できます外部ストレージやWebview などの機能は FeedHenry github ページ httpsgithubcomfeedhenryquery=cordova から利用できます

7267 (オプション) v2 アプリクライアントパッケージの移行

v2 アプリではパッケージはディレクトリー継承の形を取りますたとえば特定の css ファイルを iOS ビルド用の別のバージョンで上書きすることが可能になりますこの例では使用するデフォルトの css ファイルは clientdefaultstylecss ですiOS 固有のファイルは clientmyiospackagestylecss ですiOS 用にビルドする場合はclientdefault内のすべてのファイルを clientmyiospackage 内のファイルで上書きするようパッケージ設定を指定できます

v3 アプリではパッケージを使用しなくなりました類似の機能を得るには 2 つの推奨アプローチがあります最初のアプローチは以下の組み合わせです

デバイスの解像度に基づいてスタイルのメディアクエリーを使用(httpsdevelopermozillaorgen-USdocsWebGuideCSSMedia_queries)

期待される機能のサポートを追加開発するためにライブラリーを使用 (たとえばhttpmodernizrcom)

安全な JavaScript を実現するための機能またはユーザーエージェント検出

2 番目のアプローチは Cordova アプリにある merges フォルダー (Cordova Light アプリでは利用不可) を使用することですmerges フォルダーは v2 パッケージに似ていますCordova の公式ドキュメントはhttpcordovaapacheorgdocsen330guidecliindexhtmlusing-merges-to-customize-each-platform と httpsgithubcomapachecordova-clitree330-010merges で参照できます

7268 (オプション) v2 アプリの embedmobile 移行

v2 ではembed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできますmobile 宛先を使用するとプラットフォームでクライアントコードをモバイルWeb アプリとしてホストできますmobile と embed の主な違いは html ラッピングで追加されたメタタグとアプリの分析レポートのタグ付け方法です

v3 Studio ではindexhtml を完全に制御しながら同じ機能を得るために基本的な基本的な Web アプリアプリを作成することが推奨されます 組み込みアプリの移行ガイドについてはここをクリックしてください

73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行

第7章 古いバージョンの RHMAP からの移行

99

fh-nodeapp amp fh-webappfh-api は非推奨になりfh-mbaas-apifh-mbaas-express に置き換えられましたfh-mbaas-api と fh-mbaas-express にはfh-nodeapp および fh-webappfh-api にある既存のすべての機能とデータブラウザーおよびフォームのサポートなどの新しい追加機能が含まれます

以下ではfh-nodeapp または fh-webappfh-api から fh-mbaas-api と fh-mbaas-express に移行する手順について説明しますHello World Cloud テンプレートは最小の fh-mbaas-apifh-mbaas-express アプリケーションの優れた例でありアプリを fh-mbaas-apifh-mbaas-express に移行するときの参考対象として優れています

731 packagejson の変更

packagejson を更新するには以下の手順に従ってください

1 fh-nodeapp または fh-webappfh-api を削除しThe Hello World Packagejs file にある最新バージョンの fh-mbaas-api に置き換えます以下に例を示します

2 Express を明示的に含める必要もあります

3 最後にnpm install を実行します

732 $fh を fh に置き換えるためにクラウドコードを変更

グローバルの $fh は使用されなくなりました必要な場合は作成できますが代わりに fh に置き換えることが推奨されます

1 libmainjs でvar fh = require(fh-mbaas-api) を追加します

2 $fh の箇所を fh に置き換えます

3 $fh を使用するすべてのファイルに対して作業を繰り返します

733 applicationjs の変更

fh-mbaas-apifh-mbaas-express の場合applicationjs ファイルは大幅に異なります既存のapplicationjs を Hello World テンプレートアプリの最新の applicationjs ファイルに置き換えることが推奨されます

734 Grunt の使用

これはオプションですが使用することを強く推奨します新しい FeedHenry テンプレートはローカル開発とテスト向けのベストプラクティスの支援のために Grunt を頻繁に使用します

アプリで Grunt を使用するにはHello World Cloud テンプレートの該当する Grunt 部分をコピーすることをお勧めします

fh-mbaas-api ~450

express ~400body-parser ~102cors ~220

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

100

1 Gruntfile である httpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterGruntfilejs を独自のアプリのルートにコピーします

2 devDependencies をこの packagejson から独自の packagejson であるhttpsgithubcomfeedhenry-templateshelloworld-cloudblobmasterpackagejson にコピーしますコピーが完了したらnpm install を実行します

74 組み込みアプリから基本的な WEB アプリへの移行

741 概要

FeedHenry v2 ではEmbed 宛先を使用してプラットフォームでクライアントコードを Web アプリとしてホストできましたこれは既存のクライアントアプリの単純な HTML ベース Web ポータルを作成する場合に便利でした

RHMAP Studio では組み込みアプリが非推奨になり基本的な Web アプリに置き換えられました基本的な Web アプリはアプリを組み込む以前の FeedHenry v2 オプションと同じ機能を提供しますまたライフサイクル管理のために indexhtml アプリの実行方法と実行場所および個別の Git リポジトリーを完全に制御することもできます

アプリを RHMAP プロジェクトに移行した後で組み込みアプリは引き続き実行されますが既存の組み込みアプリを再デプロイすることはできなくなります本書ではRHMAP プロジェクトで既存の組み込みアプリを新しい基本的な Web アプリに移行する手順について説明します

742 移行

移行を開始するために既存の FeedHenry v2 アプリを RHMAP プロジェクトにすでに移行したことを前提としますまだ移行していない場合はここにあるガイドを参照してください

7421 移行されたハイブリッドアプリのクローン

最初に移行されたハイブリッドアプリの Git リポジトリーをローカルでクローンする必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Cordova Light アプリのリポジトリー URL の隣りにある Copy ボタンを押しますターミナルにおいてお好きなフォルダーで以下のコマンドを入力します

これによりCordova アプリのソースがローカルでクローンされますこのフォルダーを後で使用するので (古い組み込みアプリのソースコードが含まれるため)ターミナルを開いたままにしApp Studio に切り替えます

7422 新しい基本的な Web アプリの作成

次に使用する新しい基本的な Web アプリまたは移行される組み込みアプリを作成する必要がありますこれを行うにはApps Cloud Apps amp Services 画面で Apps 領域の + をクリックしますAdd a new App Client 画面で Create New App を選択しBlank Basic Web App テンプレート (Web アプリの新しい名前を入力) と Create new App を選択しますこれにより空の基本的な Web アプリが作成されます

FeedHenry v2 では組み込みアプリのソースコードはハイブリッドおよびクラウドコードと同じ場所に存在していました (clientdefault のコードがコピーおよびデプロイされていました)組み込みパッケージを使用している場合はソースが client フォルダー下の別のフォルダーに

git clone __Cordova_Light_Git_URL__

第7章 古いバージョンの RHMAP からの移行

101

存在することがありますFeedHenry v2 アプリを移行した場合これらのフォルダーは若干変更されていますwww はソースフォルダーであり以前に存在したすべてのパッケージフォルダーは legacy_packages フォルダーに現れます

7423 新しい基本的な Web アプリへの組み込みアプリのコピー

新しい基本的な Web アプリを作成したらDetails 画面が表示されます新しい基本的なWeb アプリのソースをクローンし以前にクローンした移行済み Cordova Light アプリから既存の組み込みアプリのソースをコピーしますGit SSH Clone URL の隣りにある Copy ボタンを押しこのリポジトリーをローカルでクローンします以下に例を示します

この時点で新しい基本的な Web アプリと移行済み Cordova Light アプリの両方のローカルコピーが存在します古い組み込みアプリのソースを新しい基本的な Web アプリにコピーします

Basic Web App でwwwcss フォルダーと indexhtml ファイルを削除できますfeedhenryjs (JS SDK) と fhconfigjson (JS SDK の設定ファイル) は保持します

Cordova Light App で古い組み込みアプリに使用したパッケージを特定する必要があります通常は古いアプリの内容である clientdefault フォルダーが使用されますがclientyour_embed_package などの組み込みアプリ用の別のパッケージを使用した可能性もあります組み込みアプリのソースコードを含むフォルダーの内容を新しい Basic Web App にコピーします

古い組み込みアプリのファイルがコピーされたら変更をプッシュしますBasic Web Appで以下のようなコマンドを入力します

最後にBasic Web App の Deploy 領域に移動しデプロイします基本的な Web アプリの新しい URL は Details 画面に表示されます

75 ロールからチームへの移行

チームチームはプラットフォームの機能領域へのアクセスを制御する新しい強力なシステムです

本書ではロールロールベースの制限と新しいパーミッションパーミッションベースの制限を比較します各ロールロールは同等の制限を作成するのに必要なパーミッションパーミッションと比較されます

751 パーミッションの追加

ロールベースのパーミッションシステムではロールは以下の 3 つのレベルのユーザーに割り当てられます

このドメインこのドメイン ロールは現在のホスト名のみによって表されるドメインに対してアクティブです

すべてのドメインすべてのドメイン ロールは顧客が所有するすべてのドメインに対してアクティブです

git clone gityourdomainfeedhenrymeyourdomainyour-new-basic-web-appgit

git commit -am Copied embed appgit push origin master

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

102

すべての顧客すべての顧客 ロールは現在のリセラーが管理するすべての顧客が所有するすべてのドメインに対してアクティブです

752 アナリティクス (analytics)

プラットフォームのアナリティクスセクションにアクセスできる

プロジェクトの使用率を監視できる

チームに割り当てられる以下のパーミッションによりアナリィティクスへの同等のアクセスが許可されます

ドメイン

アナリティクス (表示)

プロジェクト (表示)

接続 (アクセスなし)

クラウドリソース (アクセスなし)

753 フォームエディター (formseditor)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

フォームテーマおよび自分のグループに関連付けられているプロジェクトを編集できる

フォームとテーマを該当するグループのプロジェクトに関連付けることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

フォーム

送信 (アクセスなし)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

754 フォーム管理者 (formsadmin)

フォームやテーマを作成できる

フォームプロジェクトを作成できる

グループを作成できる

第7章 古いバージョンの RHMAP からの移行

103

ユーザーをグループに割り当てることができる

特定のドメインで作成されたすべてのフォーム amp テーマを表示アクセス管理できる

ドメイン上の全プロジェクトからの提出を表示できる

ドメイン上のプロジェクトからの提出を編集できる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

ドメイン

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示 amp 編集)

注記注記

グループの概念は Drag amp Drop App から削除されForm ビジネスオブジェクトに置き換えられました

755 提出ビューワ (submissionsviewer)

グループ内のプロジェクトからの提出を見ることができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示)

テーマ (アクセスなし)

756 提出エディター (submissionseditor)

グループ内のプロジェクトからの提出を見ることができる

グループ内のプロジェクトからの提出を編集することができる

チームに割り当てられる以下のパーミッションによりフォームへの同等のアクセスが許可されます

プロジェクト (表示)

クラウドリソース (アクセスなし)

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

104

接続 (アクセスなし)

アナリティクス (アクセスなし)

クライアントアプリ (アクセスなし)

クラウドアプリ (アクセスなし)

Drag amp Drop App (表示 amp 編集)

フォーム (表示)

送信 (表示 amp 編集)

テーマ (アクセスなし)

757 開発管理者 (devadmin)

すべてのタイプのプロジェクトを作成管理できる

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

特定ドメイン上のプロジェクト amp アプリすべてを表示それらにアクセスできる

特定ドメイン上のデプロイメントターゲットすべてを表示編集できる

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

758 開発者 (dev)

すべてのタイプのプロジェクトを作成管理できる

第7章 古いバージョンの RHMAP からの移行

105

利用可能なプラットフォーム用にアプリバイナリーを構築できる

プライベートキーや証明書などの開発リソースをアップロードできる

デプロイメントターゲットの作成編集およびメンテナンスができる

パブリックサービスをプロジェクトに追加できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

サービス (表示)

ソースコード (アクセスなし)

アナリティクス (アクセスなし)

環境変数 (アクセスなし)

データブラウザー (アクセスなし)

クラウドデプロイメント (アクセスなし)

統計 (アクセスなし)

通知 (アクセスなし)

ログ (アクセスなし)

エンドポイント (アクセスなし)

プロジェクト (表示 amp 編集)

Drag amp Drop App (表示)

フォーム (表示)

送信 (アクセスなし)

759 サービス管理者 (serviceadmin)

mBaaS サービスのプロビジョニングができる

mBaaS サービスの管理ができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

サービス (表示 amp 編集)

7510 ドメイン管理者 (portaladmin)

認証ポリシーを作成および編集できる

ドメイン向けのアプリストアの更新ができる

アプリストアのアプリを作成および管理できる

アプリストアのグループを作成および管理できる

アプリストアのデバイスを管理できる

Red Hat Mobile Application Platform ホスト型 3 サーバーサイド開発者ガイド

106

アプリストアのログを表示できる

管理者ページの「モバイルアプリの管理」セクションにアクセスできる

ユーザーの追加と削除ができる

ユーザーにロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

ドメイン

thinsp認証ポリシー (表示 amp 編集)

thinspApp Store (表示 amp 編集)

管理者 (表示 amp 編集)

7511 顧客管理者 (customeradmin)

この顧客に属するドメイン内のユーザーを管理できる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

顧客

管理者 (表示 amp 編集)

7512 リセラー管理者 (reselleradmin)

顧客に属するドメイン内のユーザーを管理できる

ユーザーに顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

7513 管理者 (admin)

プラットフォーム内ですべてのアクションを実行できる

ユーザーにリセラー管理者と顧客管理者のロールを割り当てることができる

チームに割り当てられる以下のパーミッションにより同等のアクセスが許可されます

リセラー

管理者 (表示 amp 編集)

第7章 古いバージョンの RHMAP からの移行

107

  • 目次
  • 第1章 クラウドアプリの開発
    • 11 クラウド開発
      • 111 概要
      • 112 クラウドアプリ構造
        • 1121 applicationjs
        • 1122 packagejson
          • 113 サンプル
            • 12 環境
              • 121 環境とは
              • 122 環境とビジネスオブジェクトの対話
              • 123 環境がない mdashthinsp 機能が制限される
                • 1231 チームメンバーシップの更新
                • 1232 管理者環境のセットアップ
                  • 124 他のリソース
                    • 13 クラウドアプリでの NODEJS の使用
                      • 131 概要
                      • 132 Nodejs モジュールの使用
                      • 133 環境変数
                        • 14 NPM を使用した NODEJS 依存関係の管理
                          • 141 概要
                          • 142 npm とアプリのステージ
                          • 143 npm のベストプラクティス
                            • 1431 npm-shrinkwrap ファイルの使用
                              • 144 node_modules のアップロード
                                • 15 NODEJS バージョンの設定
                                  • 151 fhc の使用
                                  • 152 Studio の使用
                                      • 第2章 クラウドアプリでの RHMAP 機能の使用
                                        • 21 API MAPPER を使用した JSON API 応答の変換
                                          • 211 概要
                                          • 212 セットアップ
                                          • 213 使用例
                                            • 2131 要求の作成
                                            • 2132 マッピングの追加
                                            • 2133 マップされた API の使用
                                              • 214 カスタムの変換
                                                • 2141 カスタムの変換の作成
                                                • 2142 サンプル
                                                    • 22 プッシュ通知を使用したアプリケーションの開発
                                                      • 221 Firebase Cloud Messaging クレデンシャルの取得と google-servicesjson ファイルのダウンロード
                                                      • 222 Push Notification Hello World テンプレートからのプロジェクトの作成
                                                      • 223 クライアントアプリのパッケージ名の定義
                                                      • 224 プッシュサポートのセットアップ
                                                      • 225 クライアントアプリへの google-servicesjson ファイルの統合
                                                      • 226 configxml ファイルの設定
                                                      • 227 クライアントアプリバイナリーのビルド
                                                      • 228 アプリのテスト
                                                        • 23 MBAAS サービスからフォームフィールドに動的にデータを入力する
                                                          • 231 概要
                                                          • 232 データソースのサービスの作成
                                                          • 233 データソースの定義
                                                          • 234 フォームフィールドでのデータソースの使用
                                                            • 24 アプリへの統計の追加
                                                              • 241 概要
                                                              • 242 カウンターとタイマーの作成
                                                              • 243 統計の表示
                                                                  • 第3章 RHMAP データ同期フレームワークの使用
                                                                    • 31 データ同期フレームワーク
                                                                      • 311 ハイレベルアーキテクチャー
                                                                      • 312 API
                                                                      • 313 スタートガイド
                                                                        • 3131 不必要な同期ループの回避
                                                                          • 314 同期フレームワークの高度な機能の使用
                                                                          • 315 さらに詳しく知るために
                                                                            • 3151 データセット
                                                                            • 3152 競合
                                                                                • 32 同期に関する用語
                                                                                  • 321 同期プロトコル
                                                                                  • 322 同期サーバー
                                                                                  • 323 同期クライアント
                                                                                  • 324 同期サーバーループ
                                                                                  • 325 同期クライアントループ
                                                                                  • 326 同期周期
                                                                                  • 327 データセット
                                                                                  • 328 データセットバックエンド
                                                                                  • 329 データセットハンドラー
                                                                                  • 3210 データセットクライアント
                                                                                  • 3211 データセットレコード
                                                                                  • 3212 ハッシュ
                                                                                    • 33 同期サーバーのアーキテクチャー
                                                                                      • 331 アーキテクチャー
                                                                                        • 3311 HTTP ハンドラー
                                                                                        • 3312 キュー
                                                                                        • 3313 プロセッサー
                                                                                        • 3314 同期スケジューラー
                                                                                            • 34 データ同期設定ガイド
                                                                                              • 341 同期周期の設定
                                                                                              • 342 ワーカーの設定
                                                                                                • 3421 間隔の目的
                                                                                                • 3422 ワーカーバックオフ
                                                                                                    • 35 同期サーバーアップグレードに関する注記
                                                                                                      • 351 概要
                                                                                                      • 352 前提条件
                                                                                                      • 353 データハンドラー関数署名の変更
                                                                                                      • 354 動作の変更
                                                                                                      • 355 ロガーの変更
                                                                                                        • 36 同期サーバーのパフォーマンスとスケーリング
                                                                                                          • 361 概要
                                                                                                          • 362 パフォーマンスの検査
                                                                                                          • 363 パフォーマンスの理解
                                                                                                            • 3631 CPU 使用率
                                                                                                            • 3632 キュー内の残りのジョブ
                                                                                                            • 3633 API 応答時間
                                                                                                            • 3634 MongoDB 操作時間
                                                                                                              • 364 同期サーバーのスケーリング
                                                                                                                • 3641 ホストされた MBaaS でのスケーリング
                                                                                                                • 3642 自己管理された MBaaS でのスケーリング
                                                                                                                    • 37 同期サーバーにより作成された MONGODB コレクション
                                                                                                                      • 371 概要
                                                                                                                      • 372 同期サーバーコレクション
                                                                                                                        • 3721 fhsync_pending_queue
                                                                                                                        • 3722 fhsync_ltdatasetIdgt_updates
                                                                                                                        • 3723 fhsync_ack_queue
                                                                                                                        • 3724 fhsync_datasetClients
                                                                                                                        • 3725 fhsync_ltdatasetIdgt_records
                                                                                                                        • 3726 fhsync_queue
                                                                                                                        • 3727 fhsync_locks
                                                                                                                          • 373 キューコレクションのプルーニング
                                                                                                                            • 38 同期サーバーデバッグガイド
                                                                                                                              • 381 クライアントの変更は適用されない
                                                                                                                              • 382 データセットバックエンドに適用された変更は他のクライアントに伝播されない
                                                                                                                              • 383 デバッグログの有効化
                                                                                                                                  • 第4章 RHMAP と他のサービスとの統合
                                                                                                                                    • 41 MBAAS サービスの概要
                                                                                                                                    • 42 認証に対する SAML の使用
                                                                                                                                      • 421 概要
                                                                                                                                      • 422 SAML の概要
                                                                                                                                      • 423 テンプレートのセットアップ
                                                                                                                                        • 4231 SAML サービスの作成
                                                                                                                                        • 4232 プロジェクトのセットアップ
                                                                                                                                          • 424 仕組み
                                                                                                                                            • 43 REDHAT OPENSHIFT ONLINE PAAS へのクラウドアプリのステージング
                                                                                                                                              • 431 OpenShift Online とは
                                                                                                                                                • 4311 OpenShift Online と RHMAP との統合
                                                                                                                                                • 4312 RHMAP による利用可能な OpenShift Online ギアへの影響
                                                                                                                                                • 4313 制限
                                                                                                                                                  • 432 スタートガイド
                                                                                                                                                    • 4321 初回ログインおよびセットアップ
                                                                                                                                                    • 4322 サンプルアプリケーションの作成
                                                                                                                                                    • 4323 RHMAP を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                    • 4324 fhc を使用した OpenShift Online へのクラウドアプリのデプロイ
                                                                                                                                                      • 433 どのように連携するか
                                                                                                                                                        • 4331 ギア
                                                                                                                                                        • 4332 環境
                                                                                                                                                        • 4333 ロギングおよびデバッグ
                                                                                                                                                        • 4334 OpenShift Online にデプロイされたアプリの削除
                                                                                                                                                        • 4335 SSH キー
                                                                                                                                                        • 4336 ドメイン
                                                                                                                                                            • 44 GOOGLE OAUTH を使用した認証ポリシーのセットアップ
                                                                                                                                                              • 441 Google OAuth アプリ
                                                                                                                                                              • 442 承認
                                                                                                                                                                • 4421 ユーザーがプラットフォームに存在することを確認
                                                                                                                                                                • 4422 ユーザーが認証されているかどうかを確認
                                                                                                                                                                  • 443 認証ポリシーに対するユーザーの追加削除
                                                                                                                                                                      • 第5章 データの格納
                                                                                                                                                                        • 51 データブラウザー
                                                                                                                                                                          • 511 概要
                                                                                                                                                                          • 512 データブラウザーの使用
                                                                                                                                                                            • 5121 コレクションの表示追加
                                                                                                                                                                            • 5122 コレクション内のデータ表示
                                                                                                                                                                            • 5123 データの編集
                                                                                                                                                                              • 513 データのエクスポートとインポート
                                                                                                                                                                                • 5131 データのエクスポート
                                                                                                                                                                                • 5132 データのインポート
                                                                                                                                                                                  • 514 データベースのアップグレード
                                                                                                                                                                                    • 52 アプリケーションデータのエクスポート
                                                                                                                                                                                      • 521 エクスポートデータ形式
                                                                                                                                                                                      • 522 アプリケーションデータのエクスポート
                                                                                                                                                                                        • 5221 新しいエクスポートジョブの開始
                                                                                                                                                                                        • 5222 エクスポートジョブのステータスの問い合わせ
                                                                                                                                                                                        • 5223 エクスポートデータのダウンロード
                                                                                                                                                                                            • 53 アプリケーションデータのインポート
                                                                                                                                                                                              • 531 アプリケーションデータのインポート
                                                                                                                                                                                                • 5311 新しいインポートジョブの開始
                                                                                                                                                                                                • 5312 インポートジョブのステータスの問い合わせ
                                                                                                                                                                                                  • 第6章 プロジェクトへのクライアントアプリとクラウドアプリのインポート
                                                                                                                                                                                                    • 61 空のプロジェクトの作成
                                                                                                                                                                                                    • 62 クライアントアプリのインポート
                                                                                                                                                                                                    • 63 クラウドアプリのインポート
                                                                                                                                                                                                    • 64 クライアントアプリの要件
                                                                                                                                                                                                      • 641 Cordova Light アプリ
                                                                                                                                                                                                      • 642 Cordova アプリ
                                                                                                                                                                                                      • 643 Web App
                                                                                                                                                                                                      • 644 ネイティブ Android
                                                                                                                                                                                                      • 645 ネイティブ iOS
                                                                                                                                                                                                      • 646 ネイティブ Windows Phone 8
                                                                                                                                                                                                      • 647 Xamarin
                                                                                                                                                                                                        • 65 クラウドアプリの要件
                                                                                                                                                                                                          • 第7章 古いバージョンの RHMAP からの移行
                                                                                                                                                                                                            • 71 V2 から V3 への移行の概要
                                                                                                                                                                                                              • 711 アプリとプロジェクト
                                                                                                                                                                                                              • 712 移行する理由
                                                                                                                                                                                                              • 713 Studio での自動移行
                                                                                                                                                                                                              • 714 fhc を使用した自動移行
                                                                                                                                                                                                                • 72 V2 から V3 への移行ガイド
                                                                                                                                                                                                                  • 721 v2 アプリとは
                                                                                                                                                                                                                  • 722 v3 アプリとは
                                                                                                                                                                                                                  • 723 プロジェクトとは
                                                                                                                                                                                                                  • 724 新規プロジェクト
                                                                                                                                                                                                                  • 725 クラウドの新しい v3 アプリ
                                                                                                                                                                                                                    • 7251 クラウドアプリ
                                                                                                                                                                                                                    • 7252 cloud フォルダーの移行
                                                                                                                                                                                                                    • 7253 shared フォルダーの移行
                                                                                                                                                                                                                    • 7254 (オプション) Nodejs SDK の変更
                                                                                                                                                                                                                      • 726 クライアント用の新しい v3 アプリ
                                                                                                                                                                                                                        • 7261 Cordova Light アプリ
                                                                                                                                                                                                                        • 7262 client フォルダーの移行
                                                                                                                                                                                                                        • 7263 shared フォルダーの移行
                                                                                                                                                                                                                        • 7264 Javascript SDK インジェクション
                                                                                                                                                                                                                        • 7265 fhconfigjson
                                                                                                                                                                                                                        • 7266 (オプション) レガシー FeedHenry API
                                                                                                                                                                                                                        • 7267 (オプション) v2 アプリクライアントパッケージの移行
                                                                                                                                                                                                                        • 7268 (オプション) v2 アプリの embedmobile 移行
                                                                                                                                                                                                                            • 73 FH-NODEAPP amp FH-WEBAPPFH-API から FH-MBAAS-APIFH-MBAAS-EXPRESS への移行
                                                                                                                                                                                                                              • 731 packagejson の変更
                                                                                                                                                                                                                              • 732 $fh を fh に置き換えるためにクラウドコードを変更
                                                                                                                                                                                                                              • 733 applicationjs の変更
                                                                                                                                                                                                                              • 734 Grunt の使用
                                                                                                                                                                                                                                • 74 組み込みアプリから基本的な WEB アプリへの移行
                                                                                                                                                                                                                                  • 741 概要
                                                                                                                                                                                                                                  • 742 移行
                                                                                                                                                                                                                                    • 7421 移行されたハイブリッドアプリのクローン
                                                                                                                                                                                                                                    • 7422 新しい基本的な Web アプリの作成
                                                                                                                                                                                                                                    • 7423 新しい基本的な Web アプリへの組み込みアプリのコピー
                                                                                                                                                                                                                                        • 75 ロールからチームへの移行
                                                                                                                                                                                                                                          • 751 パーミッションの追加
                                                                                                                                                                                                                                          • 752 アナリティクス (analytics)
                                                                                                                                                                                                                                          • 753 フォームエディター (formseditor)
                                                                                                                                                                                                                                          • 754 フォーム管理者 (formsadmin)
                                                                                                                                                                                                                                          • 755 提出ビューワ (submissionsviewer)
                                                                                                                                                                                                                                          • 756 提出エディター (submissionseditor)
                                                                                                                                                                                                                                          • 757 開発管理者 (devadmin)
                                                                                                                                                                                                                                          • 758 開発者 (dev)
                                                                                                                                                                                                                                          • 759 サービス管理者 (serviceadmin)
                                                                                                                                                                                                                                          • 7510 ドメイン管理者 (portaladmin)
                                                                                                                                                                                                                                          • 7511 顧客管理者 (customeradmin)
                                                                                                                                                                                                                                          • 7512 リセラー管理者 (reselleradmin)
                                                                                                                                                                                                                                          • 7513 管理者 (admin)
Page 10: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 11: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 12: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 13: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 14: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 15: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 16: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 17: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 18: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 19: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 20: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 21: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 22: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 23: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 24: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 25: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 26: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 27: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 28: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 29: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 30: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 31: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 32: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 33: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 34: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 35: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 36: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 37: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 38: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 39: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 40: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 41: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 42: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 43: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 44: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 45: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 46: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 47: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 48: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 49: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 50: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 51: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 52: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 53: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 54: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 55: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 56: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 57: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 58: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 59: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 60: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 61: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 62: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 63: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 64: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 65: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 66: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 67: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 68: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 69: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 70: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 71: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 72: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 73: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 74: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 75: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 76: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 77: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 78: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 79: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 80: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 81: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 82: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 83: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 84: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 85: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 86: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 87: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 88: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 89: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 90: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 91: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 92: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 93: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 94: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 95: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 96: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 97: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 98: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 99: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 100: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 101: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 102: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 103: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 104: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 105: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 106: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 107: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 108: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 109: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード
Page 110: Red Hat Mobile Application Platform ホスト型 3 サーバーサイド … · 2.2.1. Firebase Cloud Messaging クレデンシャルの取得と google-services.json ファイルのダウンロード