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
250
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
25
Other Decks in Programming
See All in Programming
Vibe Coding の話をしよう
schroneko
13
3.6k
AI時代の開発者評価について
ayumuu
0
230
Bedrock × Confluenceで簡単(?)社内RAG
iharuoru
1
110
一緒に働きたくなるプログラマの思想 #QiitaConference
mu_zaru
78
20k
SwiftDataのカスタムデータストアを試してみた
1mash0
0
140
State of Namespace
tagomoris
5
2.4k
20250426 GDGoC 合同新歓 - GDGoC のススメ
getty708
0
100
The New Developer Workflow: How AI Transforms Ideas into Code
danielsogl
0
100
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
280
RubyKaigi Dev Meeting 2025
tenderlove
1
1.3k
状態と共に暮らす:ステートフルへの挑戦
ypresto
3
1.1k
iOSアプリで測る!名古屋駅までの 方向と距離
ryunakayama
0
150
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
The Cult of Friendly URLs
andyhume
78
6.3k
Navigating Team Friction
lara
185
15k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
410
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
53k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.3k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Building an army of robots
kneath
305
45k
[RailsConf 2023] Rails as a piece of cake
palkan
54
5.5k
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のデファクトになったとしても必ず対応し ます❗❗❗ 最後に宣伝
終