torikatsu.dev

Flutterとかプログラミングとかガジェットとか書きます

【Flutter】freezed・json_serializableのファイル生成先を変更するためのbuild.yaml

こんにちは、とりかつ(@torikatsu923)です。 今回の記事ではfreezed・json_serializableのファイル生成先を変更する方法を紹介します。

課題感

freezed・json_serializableは、手動で作成するのが面倒なコードをサクッと生成できるため非常に便利です。しかし、生成対象のクラスが増えるにつれて生成ファイルの数がとても多くなります。

APIとの通信まわりのオブジェクトを格納するディレクトリがこのようになってしまった経験がある方は少なくないと思います。

f:id:torikatsu923:20220207061208p:plain:h300
生成ファイルだらけになってしまったディレクト

このままだと見通しが悪いため、生成ファイルは一箇所でまとめて管理したいですよね。

ファイル生成先を変更するためのbuild.yaml

以下のようにbuild.yamlで生成先を指定することで、ファイルの生成先を変更することができます。

build.yaml

targets:
  $default:
    builders:
      source_gen|combining_builder:
        options:
          build_extensions:
            '^lib/{{}}.dart': 'lib/generated/{{}}.g.dart'
      freezed:
        options:
          build_extensions:
            '^lib/{{}}.dart': 'lib/generated/{{}}.freezed.dart'

ここでfreezedとjson_serializable別で生成先を指定する必要がある点に注意です。

また、source_genをpubspec.yamlのdev_dependenciesに追加する必要がある点についても注意が必要です。

pubspec.yaml

dev_dependencies:
  # ...
  source_gen: ^1.2.1

これで自動生成ファイルを一箇所にまとめることができました。

f:id:torikatsu923:20220207235136p:plain:h300
ファイルの生成先を変更できた

参考

  • source_genのbuild.yamlの設定方法の紹介 pub.dev

  • 生成先のパスの指定方法について github.com

  • freezedのbuild_extensionsの対応についてのIssue github.com