AppSheet は、Google Cloud SQL、Amazon RDS、Oracle MySQL Cloud Service、またはその他の MySQL をサポートするクラウド ホスティング プロバイダなどの、クラウドでホストされている MySQL データベースからアプリを構築できます。
次のセクションで説明するように、MySQL のデータを使用します。
- MySQL データソースを追加する
- SSL を設定する
- アプリで MySQL データソースを使用する
- Amazon RDS で MySQL を使用する
- サポートされている MySQL バージョン
- アプリで作成されたファイルの保存方法
- 必要な列の設定方法
- IDENTITY 列を使用する
- 特殊文字を使用する
MySQL データソースを追加する
MySQL データソースを追加する前に、サポートされている MySQL バージョンをご覧ください。
注: AppSheet サーバーがデータにアクセスするには、MySQL データベースのネットワークと MySQL データベース自体の両方が、AppSheet サーバーからデータベースへの受信接続を受け入れる必要があります。詳細については、IP アドレスとファイアウォール情報を管理するをご覧ください。
MySQL データソースを追加するには:
- [My Account] > [Sources] に移動します。
現在使用できるすべてのデータソースを確認できます。 - [+ New Data Source] をクリックします。
- データソース名を入力し、データソースのリストの [Cloud Database] をクリックします。
- データベースの接続情報を構成します。
- [Type]: [MySQL] を選択します。
- [Server]: MySQL データベース サーバーのホスト名または IP アドレスを入力します。
- [Database]: データベース名を入力します。
- [Username]: データベース ユーザーのユーザー名を入力します。
- [Password]: データベース ユーザーのパスワードを入力します。
- [SSL]: 接続に必要な SSL モードを選択します。詳細については、Configure SSL をご覧ください。
- [Test] をクリックして接続の詳細をテストします。
- テストが成功したら、[Authorize Access] をクリックして、AppSheet アカウントにデータソースを保存します。
SSL を設定する
AppSheet は、セキュア ソケット レイヤ(SSL)を使用して MySQL インスタンスに接続できます。MySQL データソースを追加するときに、次のいずれかを選択します。
SSL モード |
説明 |
なし |
SSL 接続は必要ありませんが、クラウド プロバイダによっては引き続き可能な限り SSL の確立を試みます。 |
必須 |
MySQL インスタンスとの間のデータは、SSL プロトコルを使用して暗号化する必要があります。 接続を確立するために必要なのは、(MySQL インスタンスが所有する)サーバー証明書だけです。クライアント証明書(通常はアプリケーション クライアントに保存されています)は任意です。 注: MySQL インスタンスが X.509 を使用するように設定されている場合、接続を機能させるために接続モードを SSL に変更する必要があります。Google Cloud でホストされているインスタンスでは、[SSL] タブで [Allow unsecured connections] をクリックすることで、X.509 モードをオフにできます。これにより、クライアント証明書の要件が緩和されます。 |
VerifyCa |
MySQL インスタンスとの間のデータは、SSL プロトコルを使用して暗号化する必要があります。 クライアント証明書を使用して、サーバーを認証します。また、指定された CA 証明書を使用してサーバーの CA を確認します。このモードは、ホスト名の不一致を許容します。 次のコンテンツをアップロードするよう求められます。
注: このモードは、ホスト名がないが、接続用の IP アドレスを公開しているデータベース サーバー(Google Cloud SQL など)の場合に役立ちます。 |
VerifyFull |
MySQL インスタンスとの間のデータは、SSL プロトコルを使用して暗号化する必要があります。 このモードは VerifyCa と同じですが、CA 証明書を使用したサーバーホスト名にも一致します。 次のコンテンツをアップロードするよう求められます。
|
SSL 接続を使用する場合、MySQL インスタンスは VeriSign や GeoTrust などの広く認知されている認証局によって生成されたサーバー証明書を使用することを強くおすすめします。これにより、証明書が関連するすべての暗号化基準とフォーマット基準を確実に満たすことになります。Google Cloud や Amazon RDS など、一部のクラウド ストレージ プロバイダも、ホストしている MySQL インスタンス用にサーバー証明書を生成しています。現在、TinyCA によって生成されたサーバー証明書と自己署名証明書はサポートされていません。
また、SHA-2 ハッシュ アルゴリズムを使ってサーバー証明書に署名することもおすすめします。これは、SHA-1 アルゴリズムはもはや完全に安全とはみなされず、Microsoft、Amazon、Google を含む多くのクラウド プロバイダが SHA-2 や SHA-3 への移行を進めているからです。
アプリで MySQL データソースを使用する
MySQL データソースをアカウントに追加すると、MySQL テーブルやビューを任意のアプリに追加できます。アプリで [Add Table] を選択した場合、特定のデータソースとそのデータソースからのテーブルやビューを選択できます。
アプリに追加されると、AppSheet はすべてのデータソースを同様に扱います。実際に、MySQL データソースからのデータを同じアプリの他のソースからのデータと結合することは一般的です。
Amazon RDS で MySQL を使用する
MySQL インスタンスが Amazon RDS でホストされている場合、[Publicly Accessible] 設定を [Yes] に設定する必要があります。サーバーが AppSheet からのトラフィックを確実に受け入れるようにするには、Amazon RDS のセキュリティ グループ設定に移動し、EC2 Management Console に入り、[Edit inbound rules] を選択して、AppSheet の IP アドレスからのすべてのトラフィックを受け入れるルールを作成します。これについては、IP アドレスとファイアウォール情報を管理するをご覧ください。
サポートされている MySQL バージョン
AppSheet と連携する MySQL の場合、MySQL バージョン 5.7.6 以降を使用することをおすすめします。
また、MySQL はオープンソースであるため、MariaDB や Percona など、MySQL の多数のバリエーションがあります。MySQL のバリエーションを使用する場合、AppSheet ではデータベースが機能することを保証できません。
注: MySQL データソースを操作する際、Unknown column error
が表示された場合、その問題はバージョンに関連している可能性が高いと考えられます。
アプリで作成されたファイルの保存方法
たとえば、アプリが写真をキャプチャする必要がある場合、写真は通常、クラウド ストレージ内のデータのソースに隣接しているフォルダに保存されています。他のクラウド ストレージ プロバイダとは異なり、データベース サーバーにはファイル システムがなく、ファイル(画像やドキュメント)の保存時には AppSheet の動作の変更が必要です。
MySQL テーブルでは、画像ファイルとドキュメント ファイルは、アプリ作成者のプライマリ AppSheet アカウントに関連付けられたメインのクラウド ファイル システム(通常は Google ドライブ、Dropbox、Office 365、Box)に保存されます。ファイルは、アカウントのデフォルトのフォルダパスのサブフォルダ(通常、/appsheet/data
)に保存されます。
アカウント ページの [Settings] タブで、デフォルトのフォルダパスの表示や変更ができます。
必要な列の設定方法
MySQL スキーマの NOT NULL
(たとえば、NN
)を指定する各データベース列は、AppSheet テーブルで [Required?] を [ON] に設定します。MySQL 列で NOT NULL
を指定することで、MySQL データベースと AppSheet アプリの両方で列に値が含まれます。
アプリエディタでテーブルのコラムを再生成するたびに、AppSheet は、MySQL 列の現在の NOT NULL
設定に基づいて、AppSheet フィールドの [Required?] プロパティを設定します。
IDENTITY 列を使用する
データベースのテーブルでは、IDENTITY
列をキーとして使用するのが一般的です。IDENTITY
列の値はデータベースによって自動的に挿入される自動インクリメントの数です。
AppSheet でこの方法で IDENTITY
列を使用すると、問題が発生する可能性があります。デフォルトでは、MySQL はアプリケーションに IDENTITY
列の値を定義させません。AppSheet では、新しい行はオフライン時にアプリで作成でき、後で同期されるため、アプリは IDENTITY
Key-Value を割り当てられるようにする必要があります。
データベース スキーマでは、IDENTITY
列キーの使用は避けることをおすすめします。代わりに、8 以上の長さの NVARCHAR
(NVARCHAR(8)
など)の列を使用します。このキーの AppSheet の列の定義で、UNIQUEID()
を使用した初期値を入力します。この方法を使用すると、アプリによって一意のキー値が割り当てられ、バックエンドのデータベースに挿入できるようになります。
データベースが IDENTITY
列を使用しなければならない場合、大きい初期シードを使用して作成することをおすすめします。たとえば、AUTO_INCREMENT = 100000
を設定します。このキーの AppSheet の列の定義で、RANDBETWEEN
(10000, 99999)
の初期値を指定します。これで、アプリから作成されたレコードには 10000 から 99999 の範囲でランダムに配置される 5 桁の値が含まれるようになり、データベースに対して直接作成されたレコードの値はより高くなります。
データベースのスキーマを変更できず、IDENTITY
列がすでにデフォルトの初期シード(1
)で使用されている場合は、前述の方法と同じ手順を行うことをおすすめします。ただし、まず以下のように IDENTITY
シードを手動で増やすことができます。
ALTER TABLE テーブル名 AUTO_INCREMENT = 100000;
これにより、必要な範囲に IDENTITY
列が「再シード」されるはずです。AppSheet アプリは RANDBETWEEN()
関数で指定された範囲の値を AppSheet 列定義の初期値に挿入します。
特殊文字を使用する
MySQL 文字セットは、特定の MySQL データベースまたはテーブルで読み取りおよび処理できる文字を定義します。MySQL データベースのデフォルトの文字セットは、ほとんどのラテン文字で動作するはずです。しかし、スペイン語や中国語など多くの言語には、デフォルトの文字セットに含まれていない特殊文字があります。これらの特殊文字を使用するには、適切な文字セットを使用するように MySQL データベースまたはテーブルを構成する必要があります。
たとえば、スペイン語の特殊文字(ñ など)を使用するようにデータベース全体を設定するには、次のコマンドを使用します。
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;
また、1 つのテーブルだけを設定するには、次のコマンドを使用します。
ALTER TABLE db_table CONVERT TO CHARACTER SET utf8 COLLATE utf8_spanish_ci;
MySQL で使用可能な文字セットについての詳細は、MySQL デベロッパー ドキュメントをご覧ください。
https://dev.mysql.com/doc/refman/5.7/ja/charset.html