19
10

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.

【小ネタ】荒廃したFlutterプロジェクトにlint系パッケージを導入する手順

Last updated at Posted at 2023-09-12

はじめに

Flutter 2.5.0以降で新規プロジェクトを作るとデフォでflutter_lintsが導入されています。
こういうやつです。

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

逆に言うとそれより前に作られたプロジェクトはlints系パッケージが導入されていない場合があります。
今回はそういった際にlints系パッケージを導入するための小ネタ記事です。

lints系パッケージを選ぶ

自分が知っているパッケージをいくつか挙げます。まずは以下から選ぶのが良いのではないかと思います🙆‍♂️

flutter_lints

flutter_lintsは公式がFlutter用に推奨しているlintルールをまとめたパッケージです。
実装を見ると分かるように公式のDart推奨ルールをまとめたlintsパッケージのrecommended.yamlにflutter用ルールを追加しています。

flutter_lints/lib/flutter.yaml
# Recommended lints for Flutter apps, packages, and plugins.

include: package:lints/recommended.yaml

linter:
  rules:
    - avoid_print
    - avoid_unnecessary_containers
    - avoid_web_libraries_in_flutter
    - no_logic_in_create_state
    - prefer_const_constructors
    - prefer_const_constructors_in_immutables
    - prefer_const_declarations
    - prefer_const_literals_to_create_immutables
    - sized_box_for_whitespace
    - sort_child_properties_last
    - use_build_context_synchronously
    - use_full_hex_values_for_flutter_colors
    - use_key_in_widget_constructors

lintsパッケージは特に重要なルールをまとめたcore.yamlと、core.yamlに推奨ルールを足したrecommended.yamlを提供しています。

flutter_lints ⊃ recommended ⊃ core
という関係ですね。

pedantic_mono

pedantic_monoはmonoさんが公開しているflutter_lintsを更に厳しくしたパッケージです。
全部貼ると長いので一部ですが、flutter_lintsをincludeしてルールを追加していますね👀

pedantic_mono/lib/analysis_options.yaml
include: package:flutter_lints/flutter.yaml
analyzer:
  errors:
    missing_required_param: warning
    missing_return: warning
  language:
    strict-casts: true
    strict-inference: true
    strict-raw-types: true
linter:
  rules:
    - always_declare_return_types
    - always_put_control_body_on_new_line
    - avoid_bool_literals_in_conditional_expressions
~~~

pedantic_mono ⊃ flutter_lints ⊃ recommended ⊃ core
って感じですね。

余談

知り合いがpedantic_monoをペダモノって略してたんですが一般的なんですかね🤔

very_good_analysis

very_good_analysisはVGVが公開しているパッケージです。
僕は使ったこと無いのですが有名企業が公開しているので利用者は多いかと思います。
過去バージョンのyamlが残っているので、バージョン固定がしやすそうです。

image.png

ルールを適用していく

本編です。

パッケージの追加

どのパッケージもだいたい同じです。
pubspec.yamlのdev_dependenciesにパッケージを追加します。

pubspec.yaml
dev_dependencies:
  flutter_lints: ^{バージョン}

analysis_options.yamlでincludeします。

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

この段階で場合によっては数千の警告がでて😇となります。

dart fixコマンドを使う

dart fixコマンドが警告の解消に役立ちます。
dart fix --applyを使うことでfix可能な警告をまとめて消せますが、今回のようなケースだと修正の正しさを確認しきれないので微妙です。
まずはdart fix --dry-runを使いましょう。
そうすると最後の方に修正可能なルールに対し、各ルールを修正するコマンドが表示されるのでメモしておきましょう。

To fix an individual diagnostic, run one of:
  dart fix --apply --code=avoid_redundant_argument_values 
  dart fix --apply --code=avoid_returning_null_for_void 
  dart fix --apply --code=avoid_unused_constructor_parameters 
  dart fix --apply --code=avoid_void_async 
  dart fix --apply --code=cast_nullable_to_non_nullable 
  dart fix --apply --code=curly_braces_in_flow_control_structures 
  dart fix --apply --code=dangling_library_doc_comments 
~~~

ルールごとに修正

lints系パッケージを導入するときは可能ならルールごと(もしくはファイルごとなど)の小さな粒度で修正するのが良いと思います。

dart fix --applyで直るルールを修正

先程dart fix --dry-runで表示されたコマンドでルールごとに修正できます。

ターミナル
dart fix --apply --code=prefer_single_quotes 

わかりやすいように以下のようにincludeをコメントアウトしながら進めることもできます。(コマンド実行するルールの追記を忘れず)

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

# 対応完了したrule、最後に消す
linter:
  rules:
    - prefer_single_quotes

dart fix --apply --code={ルール}の余談

dart fixのドキュメントで特に触れられてなくて知らなかったのですが、Flutter 2.19.0から--codeで特定のルールに対してfixできるようになってたらしいです。
https://github.com/dart-lang/sdk/commit/f4ea96ff2cc00b5c73a35da34c04c118f3ebc435

また現状はanalysis.yamlに導入しているルールにしかfixが反応しませんが、それを改善するIssueもあるみたいです。
https://github.com/dart-lang/sdk/issues/49815

それ以外のルールを修正

dart fixコマンドで直せないルールはルールのページを見つつ気合で直しましょう。

CI

lintルールが適用できたらGithub Actionsなどでanalyzeのworkflowを入れたいですね🥳

まとめ

正直この知識が役立つ日が来ないほうが良い😇

19
10
2

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
19
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?