
【Flutter】Dart Code Metricsを使って不要ファイルや不要コードを抽出してみた
2022.04.15
Dart Code Metricsを使ってみた!
(株)ライトコードの小林(こばやし)です!
皆さんは「Dart Code Metrics」をご存知でしょうか?
Dartのコードの品質を分析したり改善するのに役立つ静的分析ツールで、不要ファイルをチェックしたり、analysis_options.yml
にAnalyzer Pluginを追加して静的解析を行うことができます。
業務の中で不要ファイルや不要コードを抽出して対応する機会があったので、今回は導入から抽出までの流れをまとめていきます。
開発環境
開発環境は以下の通りです。
Flutter | 2.10.3 |
Dart Code Metricsとは?
「Dart Code Metrics」とはDartのコードの品質を分析したり改善するのに役立つ静的分析ツールです。
パッケージの詳細:https://pub.dev/packages/dart_code_metrics
ドキュメント:https://dartcodemetrics.dev/docs/cli/check-unused-code
主な機能として下記の機能があります。
- コードメトリクスのレポート
- dart analyzerの追加ルールの提供
- アンチパターンのチェック
- 未使用の
*.dart
ファイルをチェック - 未使用の
l10n
(ローカライズ言語)をチェック - CLIやanalyzer plugin、ライブラリとして使用
今回はこの中で「未使用の*.dart
ファイルをチェック」する機能を使って未使用ファイル等を検出してみます。
※ 注意点として、2022年3月18日現在クラス内の未使用メソッドについては未対応となっています。こちらは将来のリリースで修正される予定とのことです。
未使用ファイルや未使用コードを抽出してみる
準備
サンプルプロジェクトを作成し、lib配下に下記の4つのファイルを用意しました。
main.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import 'package:flutter/material.dart'; import 'first_page.dart'; void main() { runApp(const App()); } class App extends StatelessWidget { const App({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: const FirstPage(), ); } } |
first_page.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import 'package:flutter/material.dart'; import 'second_page.dart'; class FirstPage extends StatelessWidget { const FirstPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('First Page'), const SizedBox(height: 20), ElevatedButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (context) { return const SecondPage(); }, ), ); }, child: const Text('Go Second Page'), ) ], ), ), ); } } |
second_page.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import 'package:flutter/material.dart'; class SecondPage extends StatelessWidget { const SecondPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Scaffold( body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text('Second Page'), const SizedBox(height: 20), ElevatedButton( onPressed: () { Navigator.pop(context); }, child: const Text('back'), ) ], ), ), ); } } class Hoge extends StatelessWidget { const Hoge({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return Container(); } } |
third_page.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import 'package:flutter/material.dart'; class ThirdPage extends StatelessWidget { const ThirdPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return const Scaffold( body: Center( child: Text('Third Page'), ), ); } } |
second_page.dartでは使用されていないクラスがあり、third_page.dartはどこからも参照されていないファイルです。
dart_code_metricsを導入する
まずは、dart_code_metricsパッケージを導入します。
1 2 | dev_dependencies: dart_code_metrics: ^4.13.0 |
不要コードチェックコマンドが4.11.0-dev.1
から叩けるようになっているので、それ以降のバージョンを導入しましょう。
未使用ファイルを抽出する
それでは不要ファイルを抽出してみましょう。
プロジェクトのルートで下記いずれかのコマンドを叩きます。
1 2 3 | $ dart run dart_code_metrics:metrics check-unused-files lib $ flutter pub run dart_code_metrics:metrics check-unused-files lib |
すると下記のような形で出力され、未使用ファイルが抽出されました。
1 2 3 4 | $ flutter pub run dart_code_metrics:metrics check-unused-files lib ⚠ unused file: lib/third_page.dart ✖ total unused files - 1 |
未使用コードを抽出する
続けて未使用コードも抽出してみます。
プロジェクトのルートで下記いずれかのコマンドを叩きます。
1 2 3 | $ dart run dart_code_metrics:metrics check-unused-code lib $ flutter pub run dart_code_metrics:metrics check-unused-code lib |
すると下記のような形で出力され、未使用コードが抽出されました。
1 2 3 4 5 6 7 8 9 10 | $ flutter pub run dart_code_metrics:metrics check-unused-code lib lib/second_page.dart: ⚠ unused class Hoge at lib/second_page.dart:28:1 lib/third_page.dart: ⚠ unused class ThirdPage at lib/third_page.dart:3:1 ✖ total unused code (classes, functions, variables, extensions, enums, mixins and type aliases) - 2 |
まとめ
今回は「Dart Code Metrics」を使って未使用ファイルとコードを抽出してみました。
CI/CDに組み込んで、定期的に不要なファイルやコードがないかを検知する仕組みを作るのも良さそうですね。
簡単に導入できるので、ぜひ試してみてください!
書いた人はこんな人

- 「好きを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。
システム開発依頼・お見積もり大歓迎!
また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。
以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit
ライトコードの日常12月 1, 2023ライトコードクエスト〜東京オフィス歴史編〜
ITエンタメ10月 13, 2023Netflixの成功はレコメンドエンジン?
ライトコードの日常8月 30, 2023退職者の最終出社日に密着してみた!
ITエンタメ8月 3, 2023世界初の量産型ポータブルコンピュータを開発したのに倒産!?アダム・オズボーン