一般社団法人 全国個人事業主支援協会

COLUMN コラム

enviedとは?

enviedは、.envやシステム環境変数をDart/Flutterコードへ安全に静的取り込みするためのコードジェネレータです。

ENViedは、Dart/Flutterで環境変数を「ビルド時に」読み込み、型安全なフィールドとして使えるようにするパッケージです。プロジェクト直下の.env(例: .env, .env.dev など)やPlatform.environmentを参照し、build_runnerpartファイル(env.g.dartなど)を生成します。生成後はEnv.keyのように通常の定数・フィールドとして即時アクセスでき、起動時読み込みのオーバーヘッドを避けられます。

主な特徴は次の通りです。

  • 注釈ベースで定義: @Envied @EnviedField を付けたクラスから、.envや環境変数の値を埋め込んだコードを自動生成します。varName未指定でもフィールド名をキーにできます。
  • 定数ケース変換: useConstantCasetrueにすると、camelCaseのフィールド名をAPI_KEYのようなCONSTANT_CASEに自動変換し、.envの慣習に合わせられます。
  • オプション・デフォルト値: allowOptionalFieldsoptionalNullableを許可し、missing時はnullに。defaultValueで欠落時のフォールバックも指定可能。
  • 複数環境・切替: @Enviedを複数付与して「ProductionEnv」「DebugEnv」などを同一クラスから生成し、条件で切替。CLI–definebuild.yamloverrideで使用する.envを切り替え可能。
  • システム環境変数モード: environment:trueで、.envに書いたキーを「実際の環境変数名」としてPlatform.environmentから読み取る設定ができます。
  • 価値のあるセキュリティ実務: obfuscate:trueで値を難読化できます(static finalが必須)。ただし攻撃者に対して完全な秘匿にはならない点を明示しています。

導入は、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=faljfdj1234

lib/配下に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 HAND
part of 'env.dart';
// **************************************************************************
// EnviedGenerator
// **************************************************************************
// coverage:ignore-file
// ignore_for_file: type=lint
// generated_from: .env
final 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と使い分けが必要かもしれない。

The following two tabs change content below.

橋本 純一

スマホアプリのエンジニアしてます。

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア