Flutter

【Flutter】ENViedパッケージを使ってAPIキーを安全に管理する方法

Flutter

こんにちは。

今回は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
依存関係にあるenvied_generatorもインストールが必要になります。

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キーなどの機密情報をコードに直接記載せずに済み、開発・ビルド環境に応じた管理を簡単に行うことができます。

参考

ENVied

 

今回はFlutterアプリケーションでAPIキーといった秘匿情報を安全に管理する方法として挙げられる「ENVied」パッケージを使った管理方法について簡単にまとめました。他にもベストプラクティスがあるかもですが、一参考になれば幸いです。