※「安全な管理」と書きましたが100%というわけではありません。
1.導入
以前flutter_dotenv
パッケージを使用した以下記事を書きましたが、セキュリティリスク等の観点で、私の知識不足がございました。
そのため、今度はENVied
パッケージを使用してAPIキーを読み込む方法を書きます。
2.なぜdotenvは避けるべきか
flutter_dotenv
を使用すると、APIキーはアプリのアセットフォルダに「平文」(暗号化されていないテキスト)で保存されます。
技術的な知識がある人なら、アプリのファイルを調べてAPIキーを見つけることができます。
そのため、APIキーが容易にアクセス可能な状態になり、セキュリティ上の問題が生じる可能性があります。
3.ENViedの紹介
そこでENVied
パッケージの登場です。
こちらは環境変数(例えばAPIキーなど)の管理をより安全かつ効率的に行うために設計されています。
このパッケージは、環境変数をコード内で直接使用する代わりに、コンパイル時にこれらの変数をアプリケーションに組み込むことができます。
これにより、変数が平文でアプリ内に保存されるのを防ぎます。
4.ENViedの使い方
公式を参考に説明します。
①必要なパッケージのインストール
flutter pub add envied
flutter pub add --dev build_runner
flutter pub add --dev envied_generator
②.envファイルの作成
ルートディレクトリの直下に.envファイル
を作成します。
③APIキー等を記述
作成した.envファイルに以下のように記載します。
KEY=******************************
④環境変数を取り込むクラスを作成
プロジェクト下にenvフォルダを作成し、その中にenv.dartを作成します。
※一例です
├── lib
│ ├── main.dart
│ └── env
│ └── env.dart
env.dart内に以下のコードを記入します。
import 'package:envied/envied.dart';
part 'env.g.dart';
@Envied(path: '.env')
abstract class Env {
@EnviedField(varName: 'KEY', obfuscate: true)
static String key = _Env.key;
}
varName
には.envファイルで記述した名前と同じものにします。
obfuscate: true
にすることで難読化をします。
⑤ジェネレーターを実行します。
flutter pub run build_runner build --delete-conflicting-outputs
env.g.dartが生成されます。
⑥難読化したAPIKeyの使用方法
APIKeyを使用したいファイルに以下を追加
import 'env/env.dart';
その後、Envクラス
を使用して環境変数にアクセスできます。
print(Env.key); //APIKEY
⑦.gitignoreへの追加
最後にGitで公開されないように.gitignore
に.envファイルとenv.g.dartファイルを追加します。
*.env
*env.g.dart
ただ絶対に安心というものでもありません。
参考