こんにちは。
今回はFlutterアプリケーションでAPIキーといった秘匿情報を安全に管理する方法として挙げられる「ENVied」パッケージを使った管理方法について備忘録としてまとめようと思います。
Flutterでの秘匿情報の管理方法はいくつかありますが、安全性・扱いやすさを考慮し、現時点では「ENVied」が最適かなと判断しました。
ENViedとは
ENViedとは、Flutterアプリケーションで環境変数を安全に管理するための便利なパッケージです。セキュリティ面や開発効率を向上させるために、環境ごとに異なる設定(APIキーや機密情報)を簡単に扱うことができ、特にFlutterのようなクライアントサイドでAPIキーなどを安全に管理するのに役立ちます。
ENViedパッケージはビルド時に .env
ファイルの内容をDartコードに変換して利用するため、以下のようなメリットがあります。
ランタイムの依存関係を減らす
通常、.env
ファイルから環境変数を読み込むには、アプリが実行されるランタイム時にファイルシステムからデータを読み取る必要があります。ENViedでは、ビルド時に .env
の内容がDartコードに直接埋め込まれるため、ランタイムでのファイル読み込みが不要になります。
これにより、アプリの初期化が速くなると同時に、.env
ファイル自体が必要なくなるため、ファイルの配置漏れによるエラーも防げます。
安全性の向上
ENViedでは、obfuscate: true
オプションを使うことで、生成されたDartコード内の環境変数の値を難読化できます。これにより、デコンパイルされてもAPIキーなどの機密情報が直接分かりにくくなり、セキュリティリスクを低減できます。
環境ごとの変数管理が容易
ENViedはビルド時に .env
ファイルの内容をコードに取り込むため、ビルド設定ごとに異なる .env
ファイルを使用できます。例えば、開発用の .env.dev
、ステージング用の .env.staging
、本番用の .env.prod
など、環境に応じて異なる変数を使いたい場合に、ビルドコマンドで適切な .env
ファイルを指定して管理できます。
これにより、同じコードで環境ごとに異なる設定を使用することが可能になり、デプロイの柔軟性が向上します。
ENViedの使用方法
1. ENViedのインストール
% flutter pub add envied
% flutter pub add --dev envied_generator
% flutter pub add --dev build_runner
2. .envファイルの作成
アプリケーションのルート直下に.envファイルを作成し、その中にキーを記載します。
% touch .env
KEY1=VALUE1
KEY2=VALUE2
3. 環境変数を呼び出すためのクラス作成
定義した環境変数を呼び出すためのクラスを作成します。
% mkdir lib/env.dev
% touch lib/env/env.dart
// lib/env/env.dart
import 'package:envied/envied.dart';
part 'env.g.dart';
@Envied(path: '.env.dev')
abstract class Env {
@EnviedField(varName: 'KEY1')
static const String key1 = _Env.key1;
@EnviedField()
static const String KEY2 = _Env.KEY2;
@EnviedField(defaultValue: 'test_')
static const String key3 = _Env.key3;
}
4. ジェネレータの起動
ジェネレータを起動することでlib/env/env.g.dart
が生成されます。
% flutter pub run build_runner build --delete-conflicting-outputs
5. .gitignoreの追加
.gitignore
にこれまで作成したファイルを追記します。
.env
lib/env/
6. 環境変数の使用
設定した環境変数にはEnvクラスを使用することでアクセスできます。
print(Env.key1); // "VALUE1"
print(Env.KEY2); // "VALUE2"
まとめ
ENViedパッケージは、Flutterアプリで環境変数を安全に扱うための便利なツールです。このパッケージを使うことで、APIキーなどの機密情報をコードに直接記載せずに済み、開発・ビルド環境に応じた管理を簡単に行うことができます。
参考
今回はFlutterアプリケーションでAPIキーといった秘匿情報を安全に管理する方法として挙げられる「ENVied」パッケージを使った管理方法について簡単にまとめました。他にもベストプラクティスがあるかもですが、一参考になれば幸いです。