Slide 1

Slide 1 text

静的解析ツールで生産性向上 2021-Feb-24, Kengo TODA 1

Slide 2

Slide 2 text

自己紹介 https://github.com/kengotoda/ Java, Groovy, TypeScriptなどで開発する趣味&本業プログラマ。最近はGroovyプラグ イン開発が楽しい。 2

Slide 3

Slide 3 text

Agenda 1. 静的解析ツールとは 2. 静的解析ツールによる3つの主な生産性向上 3. まとめ 4. 付録 3

Slide 4

Slide 4 text

静的解析ツールとは ソースコードやコンパイル結果などに対して解析を行い、それを実行することなく課題を 発見するためのツール。 Java言語周りだけでもFindBugs, PMD, Checkstyle, Checker Framework, Google Errorproneなど多様なツールが存在。またSonarQube, LGTM.com, Codacyなどサービ スとして稼働するものも多い。 4

Slide 5

Slide 5 text

FindBugs? 終了したはずでは? “Java8からJava11への移行する際の注意点に関す るセッションでした。(中略) セッション内で印象に残ったのは、「 findbugsなどコ ミュニティが終了して Java11に対応できないものが ある」という点と(後略) ” JJUG CCC 2018 Fall に参加しました!! ラクス エンジニアブログ 5

Slide 6

Slide 6 text

有志によるforkがあります SpotBugsという名前でGitHubにて開発中。 Your contribution is welcome! 6

Slide 7

Slide 7 text

静的解析ツールによる3つの主な生産性向上 1. 言語やフレームワークの学習効率の改善 2. 早い段階で不具合を見つけて手戻り削減 3. コードレビューで人が議論すべき論点に注力してチームワーク強化 7

Slide 8

Slide 8 text

各ツールのデフォルト設定ルールには、言語や著名なフレームワークやライブラリの バッドプラクティスを見つけるものもある。Field InjectionよりConstructor Injectionのほ うが良いよ〜みたいなことを教えてくれる。IDEの標準機能としても知られているかも。 Static Application Security Testing (SAST)ツールでは脆弱性を見つけられることがあ る。Find Security Bugs (SpotBugsプラグイン)などを実行すれば、単発的な脆弱性予防 だけでなく長期的な開発者教育にも役立てることができる。決して完全ではないので、他 のテストと組み合わせることが必要。 1.言語やフレームワーク学習支援 8

Slide 9

Slide 9 text

2.早い段階で不具合を見つける Pull Request/Merge Requestで見つける:SonarQubeなどの各種SaaSやReviewdog, Dangerなどを使うと、クリーン環境での解析結果を確認・通知できるので各開発者の環 境に左右されない確認ができる。 コーディング中に見つける:Google Errorprone, SonarLint, 各種IDEプラグインなどを使 うと、コーディング中あるいはコミット時に不具合を見つけることができる。ツールによっ ては自動で修正してくれることもある。 やり過ぎて開発環境が重く遅くなるのは本末転倒なので、チームやプロダクトに合わせ てバランスを考えたい。 9

Slide 10

Slide 10 text

3.チームワーク強化 10 ラクスさんのブログにある SonarQubeの事例がわ かりやすい。 見える化によって「他者による指摘」を減らす、開 発者が自発的に潜在的な問題を発見し修正するこ とが可能になる。 結果として保守容易性やドメインに関する議論な ど、人が議論する価値の高いものに時間を使え る。

Slide 11

Slide 11 text

まとめ 静的解析ツールを導入すると生産性が爆上がり! チーム開発はもちろん、個人開発でも有用なので試してみてください。 11 Twitter: @Kengo_TODA GitHub: @KengoTODA

Slide 12

Slide 12 text

より沼にハマるために 静的解析ツールを「マサカリ自動投擲マシン」として使いたいなら、静的解析ルールの独 自実装スキルがあるとやりやすい。 ● SpotBugsプラグイン実装マニュアル ● Google Errorproneプラグイン実装マニュアル ● SonarQubeプラグイン実装マニュアル 新しめの言語や独自フレームワークがある環境では特におすすめ。 12