前回 は Flutter の開発を始められるよう、環境構築をしました。
今回はその続きとして、CI環境を整えたいと思います。
具体的には、 Github Actions
で Lint
と Unit Test
を実行させます。
Linterの導入
CIを回すまでがテーマのこの記事ですが、 Linter
を導入したかったのが先で、どうせならCI回すようにしたほうがいいなということでそこまでを記事化することにしました。 Unit Test
はついでです。
Flutter / Dart
の Linter
を導入するに当たって、こちらの記事を参考にさせてもらい、Linter
は pedantic
、設定は pedantic_mono
を採用することにしました。
まずはパッケージを導入します。
$ flutter pub add --dev pedantic
$ flutter pub add --dev pedantic_mono
余談ですが、一度に複数パッケージを指定する方法ってあるんですかね🤔
以下のように、他のパッケージマネージャで見る感じにしたら、最初の1個しか追加されなかったんですが・・・
$ flutter pub add --dev pedantic pedantic_mono
次に、上記参考記事にあるように、analysis_options.yaml
を追加します。
include: package:pedantic_mono/analysis_options.yaml
CLIでやるときは、 flutter analyze
です。
$ flutter analyze
Analyzing webapp...
info • Prefer declaring const constructors on `@immutable` classes • lib/main.dart:31:3 • prefer_const_constructors_in_immutables
info • Prefer const with constant constructors • lib/main.dart:96:13 • prefer_const_constructors
info • Prefer const with constant constructors • lib/main.dart:109:16 • prefer_const_constructors
info • Sort pub dependencies • pubspec.yaml:30:3 • sort_pub_dependencies
4 issues found. (ran in 1.5s)
それぞれ警告がなくなるように調整して、ここまでの差分がこんな感じです。
https://github.com/yu0819ki/flutter-sample-1/pull/1/files
Github Actions で動かす
まぁ、 Circle CI
でも良かったんですけど、もはや連携が要らないほうが楽だなって。
Github Actions
で Flutter
を扱うための記事をいくつか流し読みしましたが、最終的に subosito/flutter-action の README を参考にするのが良さそうという結論に至りました。
誰かの作業ログだとバージョンが古いとかあるけど、誰がやっても subosito/flutter-action
を使うなら、それを見れば最新に追従できるわけで。
・・・
と思ったんですが、2021年6月2日 9:00 現在、subosito/flutter-action
が Flutter
のバイナリ(?)をダウンロードする部分で問題が起きており、実行ができませんでした😇
https://github.com/subosito/flutter-action/issues/99
おそらく動くはずの設定ファイルを以下のように作りました。上記Issueが解決したらまた確認します。
https://github.com/yu0819ki/flutter-sample-1/blob/feature/add_linter/.github/workflows/ci.yaml
・・・【追記】・・・
上記の件について、解消してました。
解消のPRを見る限り、ファイル置き場が変わったためのようです。
https://github.com/subosito/flutter-action/pull/100/files
解消したのを確認できたので、GithubActions
の設定ファイルはそのままで、意図的に警告が出るようにしてみたりもしました。
https://github.com/yu0819ki/flutter-sample-1/pull/2/checks?sha=e50413b5ea01f112f39baf0b188f3d2c28accc39
つぶやき
pedantic_mono
だけを導入すると、以下のような警告が出たんですが、 pedantic
も導入することで警告が消えました。
初心者からすると「それも要るんかい。依存で解決されないんかい。」って感じです。