SNCreate
Tech
Flutter
env

FlutterプロジェクトにEnviedを導入してAPI Keyを管理する!

作成日:2024年02月03日
最終更新日:2024年11月24日

ChatGPTのAPI Keyを環境変数として利用するためEnviedを導入しようとしたのですが、 公式のReadme通りにやってもbuild_runner実行時にエラーが発生しました。
その対処法が見つかったのでメモを残しておきます。

開発環境

・ OS: Windows 11
・ Flutter: v3.16.5
・ Dart: v3.2.3
・ Envied: ^0.5.3

ディレクトリ構成

最終的な構成は下記の通りです。

Terminal window
lib/
env/
env.dart
env.g.dart
main.dart
.env.dev
.gitignore
~~~ 以下略 ~~~

下準備

.gitignoreに下記を追記してenv関連を除外しておきます。

.gitignore
.env*
env/

環境ファイル(.env.devとします)に利用したい環境変数の名前と値を入力します。

OPENAI_API_KEY='sk-###'

lib/env/にenv.dartを作成します。コードは下記になります。

env.dart
import 'package:envied/envied.dart';
part 'env.g.dart';
@Envied(path: '.env.dev')
abstract class Env {
@EnviedField(varName: 'OPENAI_API_KEY', obfuscate: true)
static final String OPENAI_API_KEY = _Env.OPENAI_API_KEY;
}

注意点として、@EnviedFieldのvarNameの値と使用する環境変数名は一致させないといけないようです。

env.g.dartを生成する

筆者の場合、Flutterプロジェクトで利用するため、以下のコマンドでEnviedをインストールします。

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

次にenv.g.dartを生成するコマンドを入力します。

Terminal window
dart run build_runner build --delete-conflicting-outputs

すると、lib/env/にenv.g.dartというファイルが生成されます。こちらが生成されていれば導入は完了です。

lib/env/env.g.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'env.dart';
// **************************************************************************
// EnviedGenerator
// **************************************************************************
// coverage:ignore-file
// ignore_for_file: type=lint
final class _Env {
static const List<int> _enviedkeyOPENAI_API_KEY = <int>[
3044926770,
1562077553,
844297019,
3 collapsed lines
1889294018,
1834524378,
~~~ 以下略 ~~~

使用例

下記のコードでコンソール上にAPI Keyの値を出力してみます。

import 'env/env.dart';
void main() {
print(Env.OPENAI_API_KEY); // sk-###
}

環境ファイルに記入した値がコンソールに出力されれば成功です。


参考リンク:

Flutter ENVied package build runner error