🦄

【Flutter】マルチパッケージ構成時のLinter設定

2023/12/23に公開

マルチパッケージ構成をしている場合

以下のような形式で、マルチパッケージ構成が組まれていると想定します。

project
├ apps
├ packages
│ ├ package_a
│ └ package_b
├ analysis_options.yaml
└ pubspec.yaml

このプロジェクトで、共通のLinterを流したい場合、以下のようにしてみましょう。

各packageにあるanalysis_options.yamlとさよならする

各packageで固有にanalysis_options.yamlを配置している場合、そちらがルートよりも優先して効くので、さよならしちゃいましょう。
そうすることでルートのanalysis_options.yamlが使用されます。
melosを利用しているプロジェクトでも、個別で持たせてなかったりします。

ルートのpubspec.yamlをいじる

linter_rulesを自作してないよという場合が多い気がしまして、こうなったときにLinterをどうするねんという状態になります。
なので、ルートのpubspec.yamlをいじっていきましょう。

project/pubspec.yaml
dev_dependencies:
  flutter_lints: [version]

今回はflutter_lintsを使いたいという設定での記載になっています。
その他のlintパッケージが使用したい場合は、そちらを記載してください。

ルートのanalysis_options.yamlをいじる

今回はflutter_lintsを使いたいという設定なので、それをincludeしましょう。
その他のパッケージの場合は、そちらをincludeしてください(custom_lintの設定が必要なパッケージもあると思うので各種ReadMeをお読みください)。

project/analysis_options.yaml
include: package:flutter_lints/flutter.yaml

各パッケージのpubspec.yamlをいじる

残念ながら、これだけでは設定不足です(1敗)。
ちなみに自分はこの設定を忘れており、気付いたときにすんごい数のinfoが出たことがあります。
各パッケージにも設定が必要となります。

project/packages/package_a/pubspec.yaml
dev_dependencies:
  flutter_lints: [version]

その他おすすめの設定

melosのShared Dependenciesを利用する

公式ドキュメント
lintパッケージはmelosのSharedDependenciesで管理しておくとバージョン差がなくなるので便利です。

masonを利用する

masonを利用して、パッケージテンプレートを作成しておくことをおすすめします。
そうすることで、最低限必要なパッケージの書き漏れを防ぐことが可能です。
masonについては、また別途記事を書こうかな・・・。

おわり

このようにルートだけにしておくことで、各パッケージで同じことを書くみたいなことは防げます。
「このパッケージでは、こう。このパッケージでは、こう。」みたいにする必要がない場合、このやり方でいいんじゃないかなと思います。

Discussion