FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

KotlinでNCMBを使う:初期化時にキーを隠蔽化する

f:id:mbaasdevrel:20181207095244p:plain

AndroidではJavaの他、Kotlinも公式言語としてサポートされています。KotlinはJVM上で動作する静的な型付け言語で、言語体系がSwiftに似ています。そのため、Swiftに慣れた開発者であればすぐに習得できるかと思います(似ているので逆に戸惑う部分もあるのですが)。

今回はAndroid Studio 3系を使い、KotlinでNCMBを利用する方法を解説します。今回はキーをコード上に書かなくする方法を紹介します。

キーの隠蔽化について

mBaaSにおけるキー(アプリケーションキーおよびクライアントキー)は重要なデータです。この二つが漏洩すると、悪意をもったデータ操作が可能になる可能性があります。そこでコード中には直接書かず、Gitなどのリポジトリにも載せないのが安全です。

Androidでは元々ビルド時のスクリプトが用意されていますので、それを使うことでキーを隠蔽化できます。

gradle.propertiesの修正

まずアプリケーションキー、クライアントキーをgradle.propertiesに記述します。

com.nifcloud.mbaas.applicationKey=d3a...f09
com.nifcloud.mbaas.clientKey=577...292

gradle.propertiesは .gitignore などに登録しておきます。

app/build.gradleの修正

app/build.gradleにて設定ファイルを生成する設定 buildConfigField を追加します。変数をそれぞれ APPLICATION_KEY と CLIENT_KEY で定義します。

android {
      :
    defaultConfig {
        buildConfigField "String", "APPLICATION_KEY", "\"${project.property("com.nifcloud.mbaas.applicationKey")}\""
        buildConfigField "String", "CLIENT_KEY", "\"${project.property("com.nifcloud.mbaas.clientKey")}\""
    }
}

使い方

このように設定すると app/build/generated/source/buildConfig/debug/PACKAGE_PATH/BuildConfig.java といったパスでファイルが生成されます。これは以下のような内容になっています。

public final class BuildConfig {
  :
  // Fields from default config.
  public static final String APPLICATION_KEY = "d3a...f09";
  public static final String CLIENT_KEY = "577...292";
}

app/build ディレクトリはあらかじめ .gitignore に入っていますので、このファイルがGitリポジトリに載ることはありません。そして、このファイルをNCMBの初期化を行うファイルで読み込みます。

import jp.moongift.keysncmb.BuildConfig

後は BuildConfig 変数が使えます。

NCMB.initialize(applicationContext, BuildConfig.APPLICATION_KEY, BuildConfig.CLIENT_KEY)

まとめ

キーを誤って公開したりすることがないよう、コードに記載するのは止めましょう。iOSであればCocoapods-keysを使って隠蔽化できます。Androidの場合は今回紹介したBuildConfigが簡単に導入できる方法になります。

今回のコードはNCMBMania/kotlin_keys: Kotlinでアプリケーションキー、クライアントキーをコードから隠蔽化するデモです。にアップロードしてあります。実装時の参考にしてください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。