enviedとは?
enviedは、.envやシステム環境変数をDart/Flutterコードへ安全に静的取り込みするためのコードジェネレータです。
ENViedは、Dart/Flutterで環境変数を「ビルド時に」読み込み、型安全なフィールドとして使えるようにするパッケージです。プロジェクト直下の.env(例: .env, .env.dev など)やPlatform.environmentを参照し、build_runnerでpartファイル(env.g.dartなど)を生成します。生成後はEnv.keyのように通常の定数・フィールドとして即時アクセスでき、起動時読み込みのオーバーヘッドを避けられます。
主な特徴は次の通りです。
導入は、envied(注釈)とenvied_generator(ジェネレータ)、build_runner(実行ツール)を追加し、@Envied/@EnviedFieldを付けたクラスを作成してdart run build_runner buildを実行します。.envと生成ファイル(env.g.dart)は.gitignoreに含め、秘密情報の漏えいを避けます。既知の注意点として、.env変更が反映されない場合はbuild_runner cleanや–delete-conflicting-outputsでキャッシュをクリアすると改善します。
要するに、ENViedは起動時の読み込みをなくし、型安全で高速なアクセスを可能にしつつ、複数環境や命名規約、Optional、環境変数読み込みなどの現場ニーズを包括的にサポートする「.env管理の定番的なコード生成ツール」です。
GitHubリポジトリを参考に3つのパッケージを追加する。
https://github.com/petercinibulk/envied/blob/main/examples/envied_example/pubspec.yaml
追加する3つのパッケージ
https://pub.dev/packages/envied
https://pub.dev/packages/envied_generator
https://pub.dev/packages/build_runner
ターミナルで以下のコマンドを実行する
fvm flutter pub add envied && \
fvm flutter pub add dev:envied_generator && \
fvm flutter pub add dev:build_runner
.envファイルを作成する。
KEY=faljfdj1234lib/配下にenvディレクトリを作成してbuild_runnerを実行する。
import 'package:envied/envied.dart';
part 'env.g.dart';
@envied
abstract class Env {
@EnviedField(varName: 'KEY')
static const String key = _Env.key;
}
コマンドを実行
dart pub add envied dev:envied_generator dev:build_runner
自動生成されたファイルに.envの環境変数の値がセットされる。
// GENERATED CODE - DO NOT MODIFY BY HANDpart of 'env.dart';// **************************************************************************// EnviedGenerator// **************************************************************************// coverage:ignore-file// ignore_for_file: type=lint// generated_from: .envfinal class _Env {staticconstStringkey='faljfdj1234';}
画像のような構成になっていればOK

スクリーンショット
環境変数の値を複数読み込む場合は以下のように設定する。
// 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;
}
感想
環境変数の値を読み込むことはできるが、自動生成されたファイルで実際の内容が見れてしまうので、flutter_dotenvと使い分けが必要かもしれない。