Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
custom_lintで始めるチームルール管理
Search
Kosei Akaboshi (akaboshinit)
March 26, 2025
Programming
0
300
custom_lintで始めるチームルール管理
Kosei Akaboshi (akaboshinit)
March 26, 2025
Tweet
Share
More Decks by Kosei Akaboshi (akaboshinit)
See All by Kosei Akaboshi (akaboshinit)
WasmがFlutter on the Webに もたらす変化
akaboshinit
0
26
Other Decks in Programming
See All in Programming
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
2
240
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
280
GraphRAGの仕組みまるわかり
tosuri13
8
520
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
A2A プロトコルを試してみる
azukiazusa1
2
1.3k
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
480
XP, Testing and ninja testing
m_seki
3
220
VS Code Update for GitHub Copilot
74th
1
550
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
660
Benchmark
sysong
0
280
Hypervel - A Coroutine Framework for Laravel Artisans
albertcht
1
110
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
520
Featured
See All Featured
Building an army of robots
kneath
306
45k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Speed Design
sergeychernyshev
32
1k
Automating Front-end Workflow
addyosmani
1370
200k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Embracing the Ebb and Flow
colly
86
4.7k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
500
Documentation Writing (for coders)
carmenintech
72
4.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
940
Six Lessons from altMBA
skipperchong
28
3.9k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Transcript
custom_lintで始める チームルール管理 株式会社WINTICKET 赤星 @akaboshinit
• Dart/Flutterの独自のLintを利用できるパッケージ • custom_lintを基盤に利用しているLintパッケージ ◦ riverpod_lint ◦ etc… (pub.devでは70個以上のパッケージ) •
作者はRiverpodやFreezedの作者であるRemiさん(invertase.io) custom_lintとは https://x.com/remi_rousselet
custom_lintでできることを簡単に解説
Editor上でエラーを表示 custom_lintでできること
修正のアシスト ワンクリックで修正 custom_lintでできること
CLIでエラーを検知 CIをエラー落とす custom_lintでできること
“--fix”を使って 自動でコード全体を修正 custom_lintでできること
custom_lintでできること • これまでの機能を全て独自で実装可能 • Lintルールを外部に公開可能 ◦ 誰かの作ったLintを利用できる
すごく便利
custom_lint チーム/個人で使ってますか ??
今回のテーマ
CA.flutter #3 〜Flutterエンジニアが開発スピード /開発生産性を上げるには〜
WINTICKETでの custom_lint活用法
• 社内パッケージ ◦ 12個の独自ルール • 外部リントパッケージ ◦ 2個 ◦ (今後さらに拡充予定)
WINTICKETでのcustom_lint
WINTICKETでのcustom_lint • 社内パッケージ ◦ 12個の独自ルール アプリリポジトリはmelosによってマルチパッケージ構成 その中で新たなリントパッケージを作成/運用
WINTICKETでのcustom_lint • 社内パッケージ ◦ 12個の独自ルール まず、どんな理由でLintを入れている?
lint導入の経緯を分類 WINTICKETでのcustom_lint よくレビューで 指摘がある チームルール レビューでも 気づきにくいミス
PRレビュー時での出来事 WINTICKETでのcustom_lint よくレビューで 指摘がある
PRレビュー時での出来事 “HookWidget”を使ってるが、単純な”StatelessWidget”で良い WINTICKETでのcustom_lint よくレビューで 指摘がある
• “ここHookWidgetじゃなくStatelessWidgetで行けそうですね” • “imo: StatelessWidget” WINTICKETでのcustom_lint よくレビューで 指摘がある
• “ここHookWidgetじゃなくStatelessWidgetで行けそうですね” • “imo: StatelessWidget” 正しいレビューだがコアなレビューではない => 実装の本質への集中力が減る? => 誰も幸せになれないレビュー?
WINTICKETでのcustom_lint よくレビューで 指摘がある
• “ここHookWidgetじゃなくStatelessWidgetで行けそうですね” • “imo: StatelessWidget” • “flutter_hooks_lint” ◦ “hooks_unuse_widget”で解決 WINTICKETでのcustom_lint
よくレビューで 指摘がある https://pub.dev/packages/flutter_hooks_lint
=> “flutter_hooks_lint”導入 • “HookWidget”と”StatelessWidget”のレビューがゼロに • レビューが、よりコアな部分へ集中 WINTICKETでのcustom_lint よくレビューで 指摘がある
lint導入の経緯を分類 WINTICKETでのcustom_lint チームルール レビューでも 気づきにくいミス
ユーザーのエラーログを調査している時の事 WINTICKETでのcustom_lint チームルール
ユーザーのエラーログを調査している時の事 nullabelな値を安全ではない使い方をしているWidget (force_unwarp) WINTICKETでのcustom_lint チームルール
• force_unwrapして意図せずエラーが頻発してるWidgetがあった WINTICKETでのcustom_lint チームルール
• force_unwrapして意図せずエラーが頻発してるWidgetがあった => コード全体で”force_unwrap”は避けていくチームルール決定 WINTICKETでのcustom_lint チームルール
=> コード全体で”force_unwrap”は避けていくチームルール決定 • “avoid_force_unwrap”というルールを自作 WINTICKETでのcustom_lint チームルール
=> “avoid_force_unwrap”を導入 どうしても対応が必要な場合のみ、リントのIgnoreで許容 コード全体としてforce_unwrapが大幅に減少 新たなチームルールをストレスなく導入できる WINTICKETでのcustom_lint
lint導入の経緯を分類 WINTICKETでのcustom_lint レビューでも 気づきにくいミス
testファイルは”_test”の接尾辞が必要 レビュー時もファイル名までレビューが行き届かない事がある WINTICKETでのcustom_lint レビューでも 気づきにくいミス
testファイルは”_test”の接尾辞が必要 レビュー時もファイル名までレビューが行き届かない事がある => ルールを自作 • “avoid_non_suffix_test_file_name” テストファイル名の接尾辞が “_test”であることを保証する WINTICKETでのcustom_lint レビューでも
気づきにくいミス
=> “avoid_non_suffix_test_file_name”導入 テスト実装をしている段階でLintエラーが出る事で 未実行になってしまうテストが無くなった あたりまえの事だが そこに集中する必要が無くなる WINTICKETでのcustom_lint レビューでも 気づきにくいミス
今回のテーマ
CA.flutter #3 〜Flutterエンジニアが開発スピード /開発生産性を上げるには〜
正直Lintで開発スピード /開発生産性が 上がるのは言うまでも無い
そんな良い話 でもお高いんでしょう ...?
custom_lintの辛い話
Lint導入のハードル
ある外部Lintパッケージ導入時の話 Lint導入のハードル
“--fix”を使って 自動でコード全体を修正 custom_lintでできること
• Fixコマンドで簡単一括修正 Lint導入のハードル
• Fixコマンドで簡単一括修正 ◦ 簡単に導入/修正できる一方で少し気になるところも Lint導入のハードル
• Fixコマンドで簡単一括修正 ◦ 初回Fixコマンド実行時間 ▪ +約15分 • (前提初回の実行は特に重い) ◦ 平常時のCI実行時間
▪ +約3分 Lint導入のハードル
• Fixコマンドで簡単一括修正 ◦ 初回Fixコマンド実行時間 ▪ avg + 約2分 • (前提初回の実行は特に重く+15分)
◦ 平常時のCI実行時間 ▪ avg + 約3分 Lint導入のハードル コードの量や リントの種類にもよります ひとえに 全て重くなる訳ではないです
• Fixコマンドで簡単一括修正 • FixやCIの実行時間が増加 ▪ ルールによってはFix,CIの実行時間が増大する可能性がある Lint導入のハードル
• Lintを追加する事でLintに違反している部分は全てエラーになる Lint導入のハードル
• Lintを追加する事でLintに違反している部分は全てエラーになる ◦ 既存実装でLint違反している場所への対処法を考える必要があ る Lint導入のハードル
• Lintを追加する事でLintに違反している部分は全てエラーになる ◦ 既存実装でLint違反している場所への対処法を考える必要があ る ▪ 全ての箇所を修正する • ▪ 既存実装部分は全てIgnoreする
• Lint導入のハードル
• Lintを追加する事でLintに違反している部分は全てエラーになる ◦ 既存実装でLint違反している場所への対処法を考える必要があ る ▪ 全ての箇所を修正する • 基本はこっちを目指す ▪
既存実装部分は全てIgnoreする • 新たなコードでのルール違反を無くせる Lint導入のハードル
また別のLintパッケージを導入する際の話 Lint導入のハードル
• ルールの考慮から外れた、意図しないリントエラーが発生 Lint導入のハードル
• ルールの考慮から外れた、意図しないリントエラーが発生 ◦ コード上ではルールに適合しているが ルールの実装上で考慮がなされてないケースでエラー発生 ▪ 一時Ignoreで対応 Lint導入のハードル
• ルールの考慮から外れた、意図しないリントエラーが発生 ◦ ルール作成をする上で簡単に想定外は起きる ◦ 複雑性のあるルールであるほど考慮すべき事が増えていく => 独自ルールを作る時は、できるだけルールそのものをシ ンプルにする =>
それでも複雑なのであるなら、そうなっている構造そのも のを疑う Lint導入のハードル
“custom_lint”導入によって IDEがたまに重い時があるとチームから声が上がる Lint導入のハードル
“custom_lint”導入によってIDEが重い => 少し調べてみるとPCへのメモリ負荷が高い Lint導入のハードル
• Fixコマンドで簡単一括導入 • Fix / CIの実行時間が増加 ▪ コード量にも依存する上でルールによっては Fix /
CIの実行時間が増大する可能性がある Lint導入のハードル
=> 少し調べてみると結構メモリ負荷が... 正直場合によります! だが、Lintをなんでもかんでも入れる方針は難しい Lint導入のハードル
=> 少し調べてみると結構メモリ負荷が... 正直場合によります! だが、Lintをなんでもかんでも入れる方針は難しい => ご利用は計画的に Lint導入のハードル
開発スピード /開発生産性において メリットも大きいが 運用で辛い箇所も少なくはない
ここまでcustom_lintのメリデメに ついて話してきました
もう一つ皆さんが知っておかなきゃ いけないことがあります
custom_lint 実はDart公式にリプレイスされるかも
• ある日のcustom_lintのissue custom_lintがDart公式にリプレイス ?
https://github.com/invertase/dart_custom_lint/issues/298#issuecomment-2572371705
• ある日のcustom_lintのissue • DartのPub workspace機能がリリースされてcustom_lintが、うまく 動作しないという旨のissue ◦ 最終的には有志がPRを出してPub workspace対応は完了 custom_lintがDart公式にリプレイス
?
• ある日のcustom_lintのissue • DartのPub workspace機能がリリースされてcustom_lintが、うまく 動作しないという旨 ◦ 最終的には有志がPRを出してworkspace対応は完了 => スレッドの中に気になるコメントが....
custom_lintがDart公式にリプレイス ?
https://github.com/invertase/dart_custom_lint/issues/298#issuecomment-2572371705
???
custom_lintを更新するつもりは ありません ?
スレッドを追ってみると発見したもの
• “lints”/“flutter_lints”などのデフォルトのLintを動作させている ”analyzer”パッケージのシステムを変更する予定のIssue custom_lintがDart公式にリプレイス ?
https://github.com/dart-lang/sdk/issues/53402
• “lints”/“flutter_lints”などのデフォルトのLintを動作させている ”analyzer”パッケージのシステムを変更する予定のIssue • 2023年からの古めのissue => あんまりDart側の対応優先順位は高くない? custom_lintがDart公式にリプレイス ?
https://github.com/dart-lang/sdk/issues/53402
• remiさんがこのissueの状況によって”custom_lintのサポートを停 止するかも”と言っている • 2024/11月時点に”近いうちに良い報告をするよ!”と言ってる => このスレッドから“custom_lint”の新たな開発は止まっている custom_lintがDart公式にリプレイス ?
現在“custom_lint”はメンテナンス状態に近い (有志でDartバージョンなどの追従は行われている) 今後はcustom_lintはどうするの?? custom_lintがDart公式にリプレイス ?
新たな”analyzer”によってリプレイスされそう custom_lintは、そもそも有志のパッケージ Dart側が公式のLintの仕組みを提供してくれる remoさんも、それを望んでいるように感じられる custom_lintがDart公式にリプレイス ?
実装が行われている、新たな”analyzer” 今の所かなり良い物になる予感 • プラグインシステム (custom_lintのように独自でLintを作れる) • Quick Fixなどの機能 (custom_lintでできた事ほぼできそう) •
その他いっぱい custom_lintがDart公式にリプレイス ?
• 公式が提供するだけあって、Dart言語自体がLintに優しい機能を追 加することもあるかもしれない • ”custom_lint”同様の機能はサポートされそう • 将来的に”custom_lint”ではなく公式の”analyzer”でLintを作る未 来があるかもしれない custom_lintがDart公式にリプレイス ?
Lintが重いなどの問題は 十分に解決されそう
とはいえいつ来るかは分からない それまで“custom_lint”を 使うメリットは ? => 十分ある
custom_lintに全部賭ける custom_lintにちょっと賭ける
custom_lintがなく無くなっても 代替可能にしやすくしておく
最後に • Lint(custom_lint)は集中すべき事に集中させてくれる ◦ 開発スピード/生産性を上げる • “custom_lint”は辛い部分もある ◦ 負荷が高くなりがち •
新しい“analyzer”がもっとLintを良くしてくれるかも ◦ Lint込みの開発フローを始めて損は無い ◦ “custom_lint”に全力を注ぎすぎなくても良いかも
外部のLintパッケージは数多くある(70個以上) でも使いやすいルールは、いろんなパッケージに散らばっている これ入れとけばとりあえず良い感じなLintパッケージが欲しい❗ 最後に宣伝
最後に宣伝 https://pub.dev/packages/nilts
外部のLintパッケージは数多くある(70個以上) でも使いやすいルールは、いろんなパッケージに散らばっている これ入れとけばとりあえず良い感じなLintパッケージが欲しい❗ 紹介した新たな“analyzer”がLintのデファクトになったとしても必ず対応し ます❗❗❗ 最後に宣伝
終