【Flutter】マルチパッケージ構成時のLinter設定
マルチパッケージ構成をしている場合
以下のような形式で、マルチパッケージ構成が組まれていると想定します。
project
├ apps
├ packages
│ ├ package_a
│ └ package_b
├ analysis_options.yaml
└ pubspec.yaml
このプロジェクトで、共通のLinterを流したい場合、以下のようにしてみましょう。
analysis_options.yaml
とさよならする
各packageにある各packageで固有にanalysis_options.yaml
を配置している場合、そちらがルートよりも優先して効くので、さよならしちゃいましょう。
そうすることでルートのanalysis_options.yaml
が使用されます。
melosを利用しているプロジェクトでも、個別で持たせてなかったりします。
pubspec.yaml
をいじる
ルートのlinter_rulesを自作してないよという場合が多い気がしまして、こうなったときにLinterをどうするねんという状態になります。
なので、ルートのpubspec.yaml
をいじっていきましょう。
dev_dependencies:
flutter_lints: [version]
今回はflutter_lints
を使いたいという設定での記載になっています。
その他のlintパッケージが使用したい場合は、そちらを記載してください。
analysis_options.yaml
をいじる
ルートの今回はflutter_lints
を使いたいという設定なので、それをincludeしましょう。
その他のパッケージの場合は、そちらをincludeしてください(custom_lintの設定が必要なパッケージもあると思うので各種ReadMeをお読みください)。
include: package:flutter_lints/flutter.yaml
pubspec.yaml
をいじる
各パッケージの残念ながら、これだけでは設定不足です(1敗)。
ちなみに自分はこの設定を忘れており、気付いたときにすんごい数のinfoが出たことがあります。
各パッケージにも設定が必要となります。
dev_dependencies:
flutter_lints: [version]
その他おすすめの設定
melosのShared Dependenciesを利用する
公式ドキュメント
lintパッケージはmelosのSharedDependenciesで管理しておくとバージョン差がなくなるので便利です。
masonを利用する
masonを利用して、パッケージテンプレートを作成しておくことをおすすめします。
そうすることで、最低限必要なパッケージの書き漏れを防ぐことが可能です。
masonについては、また別途記事を書こうかな・・・。
おわり
このようにルートだけにしておくことで、各パッケージで同じことを書くみたいなことは防げます。
「このパッケージでは、こう。このパッケージでは、こう。」みたいにする必要がない場合、このやり方でいいんじゃないかなと思います。
Discussion