サーバー機能拡張リファレンスガイド

サーバー上のデータをクライアント端末にダウンロードせずに分析したい等、サーバー上でカスタムロジックを実行したいというニーズに答えるために Kii Cloud は サーバー機能拡張を提供しています。サーバー機能拡張を使うと、JavaScript で書かれたカスタムロジック (Server Code) を Kii Cloud 上に設置でき、Kii Cloud のサーバー上で実行されます。

サーバー機能拡張は契約済のお客様のみ利用できます。詳細は 試用期間中におけるサーバー機能拡張の提供終了 (2021.01.19) を参照してください。

利用手順

サーバー機能拡張の基本的な利用方法は次のとおりです。

  1. Server Code の機能の確認

    Kii Cloud では、4 種類の方法で Server Code を実行できます。

    Server Code の機能 より、利用できる機能を確認してください。

  2. Server Code の実装

    Kii JavaScript SDK や一般公開されているモジュールを使い、カスタムロジックを JavaScript で書きます。

    詳しくは Server Code の実装 を参照してください。

  3. Server Code の管理

    Kii Cloud が提供する開発者ポータルやコマンドラインツールを使い、Server Code の Kii Cloud 上への設置、Server Code のバージョン管理、Server Hook の設置などを行います。

    詳しくは Server Code の管理 を参照してください。

  4. Server Code の実行

    Kii Android/iOS/JavaScript Cloud SDK や REST API より Server Code を手動実行、もしくは Server Hook を用いて自動実行します。手動で実行する場合は、クライアントより Server Code にカスタムパラメータを渡すこともできます。

    詳しくは Server Code の実行 を参照してください。

サーバー機能拡張を利用するメリット

サーバー機能拡張を利用すると、アプリケーションに様々なメリットがもたらされます。

アプリケーションの設計時にこれらを意識しておくことで、より容易かつ安全に目的の機能を実現することができます。

プログラムの暴露防止

サーバー機能拡張のプログラムはサーバーだけに設置されており、クライアントへは結果だけが返されるため、重要なプログラムがクライアントアプリケーションのように容易に攻撃者の手に渡ることがありません。そのため、データの書き換え方法のルールが解析しにくく、不正なデータ操作のリスクを軽減できます。

サーバー上の Server Code を設置または取得するためには、アクセスキー のうち ClientID と ClientSecret が必要です。これらは管理者だけが知る情報であるため(クライアントモジュールに埋め込む必要がないため)、Server Code のロジックに攻撃者がアクセスするのは困難です。

不正なデータ操作からアプリケーションを守るためのその他の方法については セキュリティ をご覧ください。

管理者権限でのアクセス

サーバー機能拡張を使うと、管理者権限での操作が容易に実現できます。

管理者権限で操作を行うには ClientID と ClientSecret が必要なため、一般ユーザーに配布するモバイルアプリで管理者権限での操作を実行するのは現実的ではありません。一方、Server Code は、すでに管理者権限での実行に必要な ClientID と ClientSecret を使って登録されているため、これらの再指定なしに管理者権限のコンテキストをすぐに取得できます。

管理者権限でアクセスすることにより、任意のユーザーのデータにアクセスできます。たとえば、ユーザー A からユーザー B にデータをコピーするような操作も容易に実現できます。

最新版のプログラムの利用

サーバー機能拡張で実行されるプログラムは、通常のモバイルアプリのようにクライアントにインストールされるのを待つ必要はありません。コマンドラインツールから設置するだけで、モバイルアプリを利用するすべてのユーザーが最新版のプログラムを利用できます。

たとえば、イベント企画等で短期間だけ適用されるルールのように、短期間で頻繁に変わるようなロジックでも、モバイルアプリの配布にかかる時間を気にせず、すぐに利用することができます。

安定性の確保

サーバー機能拡張は Kii Cloud のサーバー上で動作するため、クライアントデバイスで動作させる場合と比較して、安定した動作が期待できます。特に、処理の途中で通信エラーによって一貫性が失われるような現象は、サーバー上で実行することによって、ある程度回避できます。詳細は、トランザクション をご覧ください。

実装網羅性の確保

サーバートリガー起動を使うと、特定の事象が発生したときに、関連付けられた処理を漏れなく実行できます。たとえば、Bucket 内のデータ更新を契機として別の処理を行うような実装が必要な場合、データの更新箇所がモバイルアプリ内に分散して実装されていると、すべての箇所を漏れなくメンテナンスしていくのは困難な場合があります。サーバートリガーを使えば実装漏れによる不具合の発生を防止できます。

なお、無限ループ防止のため、Server Hook からのサーバートリガー起動は実行されません。Server Hook で利用される Server Code での実装網羅性には注意が必要です。