目次
概要
私はVSCodeを使ってFlutterをアプリを開発しています。VSCodeでは自動でコードをフォーマットしてくれる機能などがあって、特に問題はありませんでしたが、他の開発者と一緒に開発するため、コードのスタイルを統一したり、バグが出る可能性を減らすためLinterの導入を検討することになりました。
今回のブログポストではFlutterでLinterを設定して使う方法について説明します。ここで紹介するソースコードは下記のリンクで確認できます。
Dart Linterルール
FlutterはDart言語を使ってるので、Dart言語に関するLinterを理解する必要があります。下記のリンクはDartで使えるLinterのルール(Rule)一覧です。
FlutterへLinter適用
FlutterでLinterを使う方法について説明します。まず、main.dart
ファイルを開いて下記のように修正します。
...
void main() {
print('Linter Test');
runApp(MyApp());
}
...
上のように私たちはprint
をデバッグするため使う時があります。しかし、このコードは開発する時だけ使えますので、デプロイするときはいらないです。もちろん、Gitを使ってソースコードを管理する必要もありません。
ここではLinterを使ってこのコードを開発者に教えてあげて、コードをスタイルを統一してみます。現在は次のように何も問題なくprint
を使うことができます。
FlutterでLinterを使うためには特にパッケージをインストールする必要はありません。たった、analysis_options.yaml
ファイルを生成するとすぐにLinterを使うことができます。Flutterプロジェクトのルートフォルダ(pubspec.yamlファイルがあるフォルダ)へanalysis_options.yaml
を生成して次のように修正します。
linter:
rules:
- avoid_print
Dart linterで確認したルールをanalysis_options.yaml
ファイルに設定しました。このように修正したら、以前と違ってLinterが動作することが確認できます。
マウスを置くと次のようにLinterの詳しい内容も確認できます。
Linterの実行
上のように修正すると、開発しているIDEを使ってLinterを確認して修正することができます。しかし、全ての開発者が同一なIDEを使うことではないので、他のIDEの環境による問題がまだ残っております。
この時は、Flutterが提供してるコマンドを使って同一な環境でLinterを実行することができます。次のコマンドをターミナルで実行します。
flutter analyze
そしたら、次のようなLinterの結果が表示されます。
Running "flutter pub get" in linter_example... 627ms
Analyzing linter_example...
info • Avoid `print` calls in production code • lib/main.dart:4:3 • avoid_print
1 issue found. (ran in 5.8s)
LinterルールのSeverity
上のようにFlutterでLinterを簡単に導入することができます。このように設定したLinterは基本的にはinfo
と言うSeverity(重大度)を持っています。
このInfo Severityは次のように青色で表示されますが、Flutterプロジェクトを実行するのには問題ないです。
そしたらこのLinterのSeverityを変更する方法について説明します。analysis_options.yaml
ファイルを開いて下記のように修正します。
analyzer:
errors:
avoid_print: error
linter:
rules:
- avoid_print
ルールのSeverityを変更するためには、analyzer
のerrors
へLinterのルールを追加した後、当該ルールのSeverityを設定します。このように修正すると、今度は次のようにInfoであった、問題がErrorで変更されることが確認できます。
このようにErrorで変更されると、当該の問題を解決する前まで、Flutterアプリをビルドすることができません。
Severityにはignore
, info
, warning
, error
を設定することができます。
pedantic (deprecated)
pedantic
パッケージはdeprecated
されました。次のセクションflutter_lints
パッケージを使ってください。
Dartで使えるLinterのルールは180
個以上あります。このルールを一つづつ見ながら設定をしても良いですが、全てのルールを確認して適用することは簡単なことではないです。
これのため、グーグルはグーグルのおすすめルールセット(Rule set)をpedantic
パッケージで提供しております。
そしたらグーグルのおすすめルールセットであるpedantic
適用してみましょう。次のコマンドを実行してpedantic
パッケージをインストールします。
flutter pub add pedantic --dev
そしてanalysis_options.yaml
ファイルを開いて下記のように修正します。
include: package:pedantic/analysis_options.yaml
そしたらグーグルのおすすめルールせっておであるpedantic
を使える状態になりました。おすすめルールセットは次のように自分だちが決めてルールと一緒に使うこともできます。
include: package:pedantic/analysis_options.yaml
analyzer:
errors:
avoid_print: warning
linter:
rules:
- avoid_print
ルールを設定したら、次のコマンドを実行してグーグルのおすすめルールセットであるpedantic
が適用されたLinterを実行してみます。
flutter analyze
flutter_lints
Dartで使えるLinterのルールは180
個以上あります。このルールを一つづつ見ながら設定をしても良いですが、全てのルールを確認して適用することは簡単なことではないです。
これのため、グーグルはグーグルのおすすめルールセット(Rule set)をflutter_lints
パッケージで提供しております。
そしたらグーグルのおすすめルールセットであるflutter_lints
適用してみましょう。次のコマンドを実行してflutter_lints
パッケージをインストールします。
flutter pub add flutter_lints --dev
そしてanalysis_options.yaml
ファイルを開いて下記のように修正します。
include: package:flutter_lints/analysis_options.yaml
そしたらグーグルのおすすめルールせっておであるflutter_lints
を使える状態になりました。おすすめルールセットは次のように自分だちが決めてルールと一緒に使うこともできます。
include: package:flutter_lints/analysis_options.yaml
analyzer:
errors:
avoid_print: warning
linter:
rules:
- avoid_print
ルールを設定したら、次のコマンドを実行してグーグルのおすすめルールセットであるflutter_lints
が適用されたLinterを実行してみます。
flutter analyze
Format
次のコマンドを実行すると、コードを自動でフォマッティング(Formatting)をすることができます。
flutter format ./lib
Lefthook
これでFlutterでLinterを設定してみました。しかし、私たちはLinterを実行するため、毎回flutter analyze
コマンドを実行しなければならないです。このように毎回コマンドを実行したら、コマンドを実行することを忘れてソースコードをコミット(commit)する場合がでます。
この問題を解決するため、Lefthook
を使ってGit hook
を設定してGitにコミットする時、flutter analyze
コマンドを実行してLinterを実行しることができます。
Lefthookインストール
Lefthookの公式ドキュメントを参考して自分の開発環境にあうLefthookをインストールしまs。
ここではmacOS
とNode
の環境でインストールする方法を紹介します。
macOS
を使う場合次のコマンドを実行してLefthook
をインストールすることができます。
brew install lefthook
Node
の開発環境である場合は次のコマンドを実行してLefthook
をインストールすることができます。
npm install @arkweid/lefthook --save-dev
Lefthook設定
このようにインストールしたLefthookを使ってGit hookを使うためには、lefthook.yml
ファイルをFlutterプロジェクトのルートフォルダに生成した後、次のように修正します。
pre-commit:
commands:
linter:
run: flutter analyze
私は次のようにLinterだけではなくFormatting, Testも一緒に使っています。
pre-commit:
commands:
pretty:
glob: '*.dart'
run: flutter format {staged_files} && git add {staged_files}
linter:
run: flutter analyze
tests:
run: flutter test
Git hook設定
このように設定したLefthookをGit hookへ適用する必要があります。次のコマンドを使ってLefthoookの設定をGit hookに適用します。
macOS
lefthook install
Node
npx lefthook install
実行
これでGit hookで私たちが設定したLefhookの内容が適用されました。このように設定されたGit hookは私たちがGitへコミットする時、実行されることになります。
その前、私たちが設定した内容がうまく動作されるか確認するため、次のコマンを実行して確認することができます。
macOS
lefthook run pre-commit
Node
npx lefthook run pre-commit
完了
これでFlutterでLinterを使う方法についてみてみました。これで他の開発者と一緒に開発する時、コードのスタイルを統一できるようになりましたし、バグが出る可能性も見つけるようになりました。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。