第5章 データの格納

5.1. データブラウザー

5.1.1. 概要

App Studio の Data Browser セクションでは、開発者は以下のことを行えます。

  • アプリに関連するデータを視覚的かつ対話的に表示する。
  • コレクションを表示、作成、および削除する。
  • コレクション内のデータを修正する。

5.1.2. データブラウザーの使用

5.1.2.1. コレクションの表示/追加

Studio のクラウド管理セクションにあるデータブラウザータブを選択すると、アプリに関連付けられているコレクションが表示されます。

アプリのコレクションをリストする

この図では、コレクションリストの最上部に 2 つのコントロールが示されています。

コレクションのリストのオプション

これらのボタンを使用して以下のことができます。

  • コレクションを追加します。
  • コレクションのリストを更新します。

コレクション追加のボタンをクリックすると、コレクション名の入力を求められます。作成ボタンをクリックしてコレクションを作成します。

新しいコレクションを追加する

5.1.2.2. コレクション内のデータ表示

コレクションに格納されたデータを表示するには、データブラウザーにリストされたコレクションのいずれかをクリックします。このビューは、コレクションに関連付けられたデータを示しています。

コレクション用のデータをリストする

画面の最上部には主要なリスト機能が示されます。

データのリストオプション

これらのボタンを使用すると、以下のことが行えます。

  • コレクションを切り替えます。このオプションを選択すると、アプリ用のコレクションのリストが表示されます。コレクションをクリックしてそのコレクションのデータをリストします。
  • コレクションにエントリーを追加します。
  • データをインポートおよびエクスポートします (後述)。
5.1.2.2.1. データの並び替え

特定のフィールドでデータを並び替えるには、一覧上部のフィールド名をクリックします。並び替えは昇順と降順で切り替わります。

5.1.2.2.2. データのフィルタリング

表示されたデータをフィルタリングするには、データブラウザー画面上部にある「フィルター」ボタンをクリックします。このボタンをクリックすると、フィルタリングオプションが表示されます。これらのオプションを使用すると、1 つ以上のフィールドで表示されたデータをフィルタリングできます。フィルタリングでは、以下の JSON データ型がサポートされます。

  • String - テキストベースのフィールドをフィルタリングできます。
  • Number - 数値をフィルタリングします。
  • Boolean - true 値と false 値を受け取ります。

データのフィルタリング

注記

'.' 文字を使用して入れ子オブジェクト内部でフィルタリングできます。たとえば、author.name をフィルターキーとして使用すると、以下の構造でドキュメントのコレクション内部の author オブジェクトの name プロパティーの値によってフィルターされます。

{
   "title":"",
   "author":{
       "name":"John"
   }
}

5.1.2.3. データの編集

データブラウザーでは、インラインまたは高度なエディターを使用してデータを編集できます。

  • インラインエディターは、コレクション内の簡単なデータの編集に使用します (例: 単一フィールド内でのテキスト変更)。
  • 複雑なデータ型の編集には高度なエディターが使用されます。これは、対話型の動的エディターや Raw JSON エディターを使用して行われます。
5.1.2.3.1. インラインエディターを使用した編集

インラインエディターを使用してエントリーを編集するには、データエントリー右側の Edit オプションを選択してから Edit Inline を選択します。以下の図で示されているように、オプションが緑色のチェックマークと黒矢印のアイコンに変わります。

Edit Inline

フィールドが複雑すぎてインラインエディターで編集できない場合は、"Advanced Editor Only" というテキストが表示されます。このフィールドは高度なエディターでのみ編集可能です。

エントリーの更新が終わったら、緑色のチェックを選択して変更をデータにコミットするか、黒矢印を選択して変更をキャンセルします。

5.1.2.3.2. 高度なエディターを使用した編集

複雑なデータ型の編集には高度なエディターを使用します (例: フィールドが複数の入れ子フィールドで構成されている場合)。

高度なエディターを開くには、データエントリー右側の Edit オプションを選択し、Advanced Editor を選びます。

高度なエディター

高度なエディターには以下の 2 つのモードがあります。

  • フィールドを対話型で追加、編集する動的エディター。
  • JSON 形式でデータを直接編集する Raw JSON エディター。
5.1.2.3.2.1. 動的エディターを使用した編集

動的エディターは、JSON データ用の対話型エディターです。各フィールドの構造化ビューが提供され、複雑なデータ型を追加または編集できます。

動的エディター

アクションメニューは、エントリーの複雑なフィールドを管理するのに必要なすべての機能を提供します。

動的エディター

ここで利用可能なオプションは以下のとおりです。

  • Type: このオプションでは、フィールドのデータ型をアレイ、JSON オブジェクト、または文字列に変更します。またフィールドを自動に設定することも可能で、その場合、データ型は入力されたデータから自動的に選択されます。
  • Sort: このオプションは、複雑なタイプのサブフィールドを昇順または降順で並び替えます。
  • Append: このオプションは、選択したオブジェクトの後にフィールドを追加します。
  • Insert: このオプションは、選択したオブジェクトの前にフィールドを追加します。
  • Duplicate: このオプションを使用すると、選択したオブジェクトがコピーされ、選択したオブジェクトの最後にそのオブジェクトが追加されます。
  • Remove: エントリーからフィールドを削除します。
5.1.2.3.2.2. Raw JSON エディターを使用した編集

Raw Editor を使用すると、JSON 構文のデータを編集できます。入力されるデータが有効な JSON フォーマットであることを確認してください。JSON データは、フォーマット化されたフォームまたはコンパクトなフォームのいずれかで表示できます。

Raw Editor

5.1.3. データのエクスポートとインポート

5.1.3.1. データのエクスポート

注記

データブラウザーインターフェースに組み込まれたエクスポート機能は、テストとレビューのみを目的としています。クラウドアプリまたはサービスからデータコレクションをエクスポートするには、FHC を使用します。

データは、'Export' ドロップダウンメニューを使用してエクスポートされます。以下の 3 つの形式が利用可能です。

  • JSON
  • CSV
  • BSON (Mongo Dump)

選択した形式のエクスポートボタンをクリックしたら、.zip ファイルがダウンロードされます。この内容はユーザーのデータです。

アプリ内に含まれるすべてのコレクションをエクスポートするには、コレクションリスト画面のツールバーの 'Export' を使用します。個々のコレクションのデータをエクスポートするには、コレクションのデータリスト内から 'Export' ドロップダウンを使用します。

インポート用の形式もデータをエクスポートする場合と似ています。各形式のこのスキーマの詳細を以下に記載します。

5.1.3.2. データのインポート

注記

データブラウザーインターフェースに組み込まれたインポート機能は、テストとレビューのみを目的としています。クラウドアプリまたはサービスからデータコレクションをインポートするには、FHC を使用します。

コレクションリスト画面の 'Import' ボタンをクリックすることにより、データをデータブラウザーにインポートできます。サポートされる形式は以下のとおりです。

  • JSON
  • CSV
  • BSON (Mongo Dump)
  • 上記の 3 つのいずれかの形式を含む ZIP アーカイブ

各ファイルはインポートされるコレクションに対応します。ファイルの名前はデータがインポートされるコレクションの名前に対応します。
コレクションが存在しない場合は、コレクションを作成します。コレクションが存在する場合は、インポートされるドキュメントが既存の内容に追加されます。

5.1.3.2.1. インポート形式

以下では、さまざまな種類のインポートの既定の形式について説明します。各ケースで、フルーツの架空のデータセットをインポートします。インポートされたコレクションの名前は fruit になります。
各例には、文字列、数値、ブール値などの、インポートでサポートされる各データ型が含まれます。複雑なオブジェクト型はサポートされないことに注意してください。

5.1.3.2.2. JSON のインポート

JSON 形式のインポートは単にドキュメントの JSON アレイです。

fruit.json:

[
  {
    "name":"plums",
    "price":2.99,
    "quantity":45,
    "onSale":true,
    "_id":"53767254db8fc14837000002"
  },
  {
    "name":"pears",
    "price":2.5,
    "quantity":20,
    "onSale":true,
    "_id":"53767254db8fc14837000003"
  }
]
5.1.3.2.3. CSV のインポート

CSV をインポートするには、プラットフォームで使用されるセパレーター、区切り記号、および改行の設定に注意してください。

以下にサンプルファイルを示します。

fruit.csv :

name,price,quantity,onSale,_id
"plums",2.99,45,true,53767254db8fc14837000002
"pears",2.5,20,true,53767254db8fc14837000003
5.1.3.2.4. BSON または MongoDump 出力のインポート

mongodump ツールを実行すると、既存の MongoDB データベースのデータを簡単にエクスポートできます。このツールにより、dump という名前のディレクトリーが作成され、データベースが含まれる一連のフォルダーとサブフォルダー、さらにコレクション名が出力されます。
これらのコレクションを RHMAP データベースにインポートするには、出力された .bson ファイルを取得し、直接インポートします。ディレクトリー構造または出力されたメタデータ .json ファイルは必要ありません。BSON はバイナリー形式であるため、ここでは例を示しません。代わりにファイルをダウンロードすることができます。

また、任意の mongodb のインストールで提供された bsondump ツールを使用して、.bson ファイル内部のデータを表示することもできます (bsondump fruit.bson)。

{ "name" : "plums", "price" : 2.99, "quantity" : 45, "onSale" : true, "_id" :   ObjectId( "53767254db8fc14837000002" ) }
{ "name" : "pears", "price" : 2.5, "quantity" : 20, "onSale" : true, "_id" :  ObjectId( "53767254db8fc14837000003" ) }
2 objects found

5.1.4. データベースのアップグレード

$fh.db API で提供されるもの以外のデータベース操作を実行する必要がある場合は、MongoDB ドライバーを直接使用してデータベースにアクセスできます。データベースへの直接アクセスを有効にするには、最初にデータベースをアップグレードし、専用インスタンスに移行する必要があります。

アプリのデータベースをアップグレードするには、データブラウザー画面の右上隅にある Upgrade Database ボタンをクリックします。

データベースのアップグレード

アップグレード中にプラットフォームにより以下の手順が実行されます。

  • アプリが停止されます。
  • アプリ用に特別に新規データベースが作成されます。
  • アプリに環境変数 FH_MONGODB_CONNURL が設定されます。この環境変数には、MongoDB ドライバーに渡すことができるデータベース接続文字列が含まれます。

データベースにすでにデータが含まれる場合は、以下の手順が実行されます。

  • データが古いデータベースから新しいデータベースに移行されます。
  • すべての処理が正常に実行されると、データは古いデータベースから削除されます。
  • データが新しいデータベースで検証されます。

注記: application.js ファイルと package.json ファイルの内容を更新する必要がある場合もあります。この場合は、移行画面で通知されます。

すべてのデータ移行手順が完了したら、アプリを再デプロイする必要があります。

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

5.2. アプリケーションデータのエクスポート

概要

多くの場合、バックアップを作成したり、既存のデータを使用して他のホスト済みデータベースをテストまたはセットアップしたりするためにクラウドアプリのデータベースからデータをエクスポートすることが必要です。fhc を使用すると、クラウドアプリまたはサービスに関連付けられたホスト済みデータベースからすべてのデータをエクスポートできます。

完全なリファレンスについては、fhc help appdata export を実行して利用可能なコマンドのリストを参照してください。特定のコマンドのリファレンスについては、fhc help appdata export <command> を実行してください。

要件

  • RHMAP バージョン 3.11.0 以降
  • fhc バージョン 2.9.0 以降

5.2.1. エクスポートデータ形式

クラウドアプリまたはサービスに関連するすべてのコレクションは、単一の tar アーカイブにエクスポートされ、圧縮されたバイナリー JSON (BSON) ファイルとして個別のコレクションから構成されます。各 BSON ファイルの名前は元のコレクションの名前と一致します。

例:

    export.tar
    |__ <COLLECTION_1_NAME>.bson.gz
    |__ <COLLECTION_2_NAME>.bson.gz

BSON ファイルは、標準的な MongoDB バックアップおよび復元ツールと互換性があります。 詳細については、Back Up and Restore with MongoDB Tools を参照してください。

5.2.2. アプリケーションデータのエクスポート

アプリケーションデータのエクスポートプロセスは、主に以下の 3 つの手順から構成されます。

5.2.2.1. 新しいエクスポートジョブの開始

新しいエクスポートジョブを開始するには、以下のコマンドを入力します。

fhc appdata export start --appId=<APP_ID> --envId=<ENV_ID> [--stopApp=[y/n>]]

  • APP_ID - クラウドアプリまたはサービスの ID
  • ENV_ID - アプリが実行されているデプロイ環境の ID

実行後に、データエクスポート中にアプリを停止するかどうかを尋ねるプロンプトが表示されます。

  • n を選択すると、エクスポートジョブの処理中にクラウドアプリが実行されたままになります。エクスポート中に新しいデータがコレクションのいずれかに追加された場合、データは現在のエクスポートジョブに含まれません。
  • y を選択すると、エクスポートジョブが開始したときにクラウドアプリが停止します。エクスポートジョブが完了したら、アプリを手動で再起動する必要があります。

コマンド実行後 (たとえば、fhc をスクリプト化する場合) にプロンプトを省略する場合は、実行前にコマンドでオプションの --stopApp フラグを提供します。

同じ環境の同じアプリに対して別のエクスポートジョブがすでに実行されている場合は、アクションを実行せずに start コマンドが終了します。

5.2.2.2. エクスポートジョブのステータスの問い合わせ

ジョブが開始されたら、コマンドラインツールによって、該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます。

fhc appdata export status --appId=<APP_ID> --envId=<ENV_ID> --jobId=<JOB_ID> [--interval=<MILLISECONDS>]

エクスポートジョブのステータスを問い合わせるには、このコマンドをシェルにコピーアンドペーストします。

コマンドを実行したままにし、定期的にジョブステータスを報告するには、オプションの --interval フラグを含め、ジョブのステータスを問い合わせる間隔を指定します。

ジョブが完了したら、status コマンドによってジョブステータスが complete と返されます。

5.2.2.3. エクスポートデータのダウンロード

ジョブが完了したらエクスポート済みデータをダウンロードするために、以下のように download コマンドを実行します。

fhc appdata export download --appId=<APP_ID> --envId=<ENV_ID> --jobId=<JOB_ID> --file=<FILENAME>

  • APP_ID - クラウドアプリまたはサービスの ID
  • ENV_ID - アプリが実行されているデプロイ環境の ID
  • JOB_ID - エクスポートジョブの ID と対応するエクスポートファイル
  • FILENAME - エクスポートされたデータを格納するファイルのパス

    指定された場所にファイルがすでに存在する場合は、アクションを実行せずに download コマンドが終了します。

5.3. アプリケーションデータのインポート

概要

fhc appdata export を使用してアプリケーションデータをエクスポートしたら、fhc appdata import を使用してデータをファイルシステムからクラウドアプリまたはサービスに関連するホスト済みデータベースにインポートできます。

完全なリファレンスについては、fhc help appdata import を実行して利用可能なコマンドのリストを参照してください。特定のコマンドのリファレンスについては、fhc help appdata import <command> を実行してください。

要件

  • RHMAP バージョン 3.12.0 以降
  • fhc バージョン 2.10.0 以降
  • ターゲットアプリケーションにはアップグレードされたデータベースが必要です。詳細については、データベースのアップグレードを参照してください。
  • インポートするファイルの形式は fhc appdata export で作成されたのと同じである必要があります。詳細については、エクスポートデータ形式を参照してください。

5.3.1. アプリケーションデータのインポート

アプリケーションデータのインポートプロセスは、主に以下の 2 つの手順から構成されます。

5.3.1.1. 新しいインポートジョブの開始

新しいインポートジョブを開始するには、以下のコマンドを入力します。

fhc appdata import start --appId=<APP_ID> --envId=<ENV_ID> --path=<FILE_PATH>

  • APP_ID - クラウドアプリまたはサービスの ID
  • ENV_ID - アプリが実行されているデプロイ環境の ID
  • FILE_PATH - インポートするファイルのパス

実行後に、提供されたファイルのアップロードが開始され、アップロードが完了するまでメッセージの出力なしでコマンドが実行されたままになります。アップロードが完了したら、コマンドが終了し、インポートジョブが開始されます。

同じ環境の同じアプリに対して別のインポートジョブがすでに実行されている場合は、アクションを実行せずに start コマンドが終了します。

5.3.1.2. インポートジョブのステータスの問い合わせ

ジョブが開始されたら、コマンドラインツールによって、該当するすべてのフィールドに情報が記入された状態で以下の status コマンドが出力されます。

fhc appdata import status --appId=<APP_ID> --envId=<ENV_ID> --jobId=<JOB_ID> [--interval=<MILLISECONDS>]

インポートジョブのステータスを問い合わせるには、このコマンドをシェルにコピーアンドペーストします。

コマンドを実行したままにし、定期的にジョブステータスを報告するには、オプションの --interval フラグを含め、ジョブのステータスを問い合わせる間隔を指定します。

ジョブが完了したら、status コマンドによってジョブステータスが complete と返されます。