enviedパッケージを使用して、環境変数をより安全に管理する

Flutter
スポンサーリンク

はじめに

Flutterアプリ開発において、APIキーやデータベースパスワードなどの機密情報を安全に管理することは非常に重要です。本記事では、enviedパッケージを使用して環境変数を安全に管理する方法を解説します。

1. enviedのインストール

まず、Flutterプロジェクトにenviedパッケージを追加します。

flutter pub add envied
flutter pub add --dev build_runner envied_generator

enviedは環境変数を安全に管理するためのパッケージで、build_runnerenvied_generatorを利用してコードを自動生成します。

2. .envファイルの作成

環境変数を定義するために、.envファイルをプロジェクトのルートディレクトリに作成し、以下のように記述します。

DB_PASSWORD=1234567890
DB_PORT=3000

このファイルには機密情報を含むため、.gitignoreに追加してバージョン管理から除外してください。

echo ".env" >> .gitignore
echo "env.g.dart" >> .gitignore  # のちに生成されるファイル

3. 環境変数を管理するファイルを作成

次に、lib/env.dartというファイルを作成し、以下のコードを記述します。

import 'package:envied/envied.dart';
part 'env.g.dart';

// requireEnvFileがtrueの場合、.envファイルがないとエラーが出る @Envied(requireEnvFile: true, path: '.env') final class Env { @EnviedField(varName: 'DB_PASSWORD') static const String dbPassword = _Env.dbPassword;

@EnviedField(varName: 'DB_PORT') static const String dbPort = _Env.dbPort; }

このファイルでは、@Enviedアノテーションを使用して.envファイルから環境変数を読み込むように設定します。

4. env.g.dartの生成

環境変数を自動生成するために、以下のコマンドを実行します。

flutter pub run build_runner build --delete-conflicting-outputs

このコマンドを実行すると、env.g.dartというファイルが自動生成されます。

生成されるenv.g.dart

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'env.dart';

// ************************************************************************ // EnviedGenerator // **********************************************************************

// coverage:ignore-file // ignore_for_file: type=lint // generated_from: .env final class _Env { static const String dbPassword = '1234567890'; // envの中身がここにくる static const String dbPort = '3000'; }

このファイルが生成されたら、.envファイルは削除しても問題ありません。

rm .env

5. 環境変数の使用方法

アプリケーション内で環境変数を使用する際は、以下のように呼び出します。

import 'env.dart';
void main() {
  print(Env.dbPassword);
  print(Env.dbPort);
}

このコードを実行すると、.envファイルに定義した値が出力されます。

6. enviedが環境変数を管理する上で安全な理由

なぜ、このような手間をかけて、環境変数を管理する必要があるのでしょうか?
それは、enviedが環境変数を暗号化してくれるからです。

通常この暗号化は、アプリのビルド時に行われます。
ただ、開発の段階で、環境変数を暗号化する機能もあります。

import 'package:envied/envied.dart';
part 'env.g.dart';
@Envied(requireEnvFile: true, path: '.env')
final class Env {
  // 暗号化する場合は、obfuscate: trueを追加
  @EnviedField(varName: 'DB_PASSWORD', obfuscate: true)
  static String dbPassword = _Env.dbPassword;
  @EnviedField(varName: 'DB_PORT')
  static String dbPort = _Env.dbPort;
}

暗号化された場合(今回だとdbPassword)、生成されるenv.g.dartは以下のようになります。

// GENERATED CODE - DO NOT MODIFY BY HAND

part of 'env.dart';

// ********************************************************************** // EnviedGenerator // ************************************************************************

// coverage:ignore-file // ignore_for_file: type=lint // generated_from: .env final class _Env { static const List _enviedkeydbPassword = [ 3175743209, 3642003943, 2774983698, 2234134847, 776266119, 3460629094, 2118227522, 209157887, 2325619839, 559751284, ];

static const List _envieddatadbPassword = [ 3175743192, 3642003925, 2774983713, 2234134795, 776266162, 3460629072, 2118227573, 209157831, 2325619782, 559751236, ];

static final String dbPassword = String.fromCharCodes(List.generate( _envieddatadbPassword.length, (int i) => i, growable: false, ).map((int i) => _envieddatadbPassword[i] ^ _enviedkeydbPassword[i]));

static const String dbPort = '3000'; }

まとめ

  • enviedを利用することで、安全に環境変数を管理できる。
  • .envファイルはバージョン管理から除外する。
  • env.g.dart.gitignoreに追加する。
  • build_runnerを使用してenv.g.dartを自動生成する。
  • 生成されたenv.g.dartを使用して環境変数を取得する。

この方法を活用することで、Flutterアプリのセキュリティを向上させることができます。ぜひ、試してみてください!

タイトルとURLをコピーしました