6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

source_genで生成ファイルのディレクトリをオリジナルのソースの配下ディレクトリに出力する

Last updated at Posted at 2022-06-03

汚いディレクトリ構成はいや

最近Flutterでアプリを作って見ているんですが、freezedが便利でいっぱい使いたい気持ちになります。
が、生成ファイルがディレクトリに氾濫するので、ものごっつ醜くなってしまい、嫌な気持ちになってました。

build.yamlの指定で出力ディレクトリを単純にlib/generated/*配下などに出力することもできますが、partの指定が相対的になるため、オリジンのファイル側の指定がまた汚くなるジレンマ、、、、

vue.jsのデコレータのように、rootのパスを@とかで指定できればいいんですがね、、、(package:を使えればいいのですが)
先輩に相談したところ、LiveTemplateでpart部を自動生成するのを教えてもらいました。それで半自動でpart部を生成するのも良いかと思います。
で、教えてもらったドキュメントをみて、build.yamlのconfiguring-outputsを見てたら、ディレクトリ指定の出力方法書いてあるじゃないですか。

今の所の答え

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

で、part 'generated/filename.g.dart'と書けばいいし。

こうすればディレクトリ構成が下記のようになります。

root/
 └ src/
     └ domain/
        └ filename.dart
        └ generated/
           └ filename.g.dart
           └ filename.freezed.dart

これは綺麗なのでは?

まとめ

いったん、気分は落ち着きましたが、できれば本当は生成ファイルなど一つにまとめて気にしなくてもいいようにしたいです。
良い方法があったら教えて欲しいです。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?