Upgrade to Pro — share decks privately, control downloads, hide ads and more …

静的解析ツールで生産性向上

4ccf6c02807d06f043a71435c48ce86a?s=47 Kengo TODA
February 24, 2021

 静的解析ツールで生産性向上

"生産性向上 Tips LT会" で発表したLTのスライドです。
https://rakus.connpass.com/event/202055/

## 参考資料

JJUG CCC 2018 Fall に参加しました!! ラクス エンジニアブログ
https://tech-blog.rakus.co.jp/entry/20181218/it-event/java/jjug

指摘の見える化 ラクス エンジニアブログ
https://speakerdeck.com/y7g/visualization-of-issues

SpotBugs マニュアルサイト
https://spotbugs.readthedocs.io/ja/latest/

4ccf6c02807d06f043a71435c48ce86a?s=128

Kengo TODA

February 24, 2021
Tweet

Transcript

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

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

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

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

    LGTM.com, Codacyなどサービ スとして稼働するものも多い。 4
  5. FindBugs? 終了したはずでは? “Java8からJava11への移行する際の注意点に関す るセッションでした。(中略) セッション内で印象に残ったのは、「 findbugsなどコ ミュニティが終了して Java11に対応できないものが ある」という点と(後略) ”

    JJUG CCC 2018 Fall に参加しました!! ラクス エンジニアブログ 5
  6. 有志によるforkがあります SpotBugsという名前でGitHubにて開発中。 Your contribution is welcome! 6

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

  8. 各ツールのデフォルト設定ルールには、言語や著名なフレームワークやライブラリの バッドプラクティスを見つけるものもある。Field InjectionよりConstructor Injectionのほ うが良いよ〜みたいなことを教えてくれる。IDEの標準機能としても知られているかも。 Static Application Security Testing (SAST)ツールでは脆弱性を見つけられることがあ

    る。Find Security Bugs (SpotBugsプラグイン)などを実行すれば、単発的な脆弱性予防 だけでなく長期的な開発者教育にも役立てることができる。決して完全ではないので、他 のテストと組み合わせることが必要。 1.言語やフレームワーク学習支援 8
  9. 2.早い段階で不具合を見つける Pull Request/Merge Requestで見つける:SonarQubeなどの各種SaaSやReviewdog, Dangerなどを使うと、クリーン環境での解析結果を確認・通知できるので各開発者の環 境に左右されない確認ができる。 コーディング中に見つける:Google Errorprone, SonarLint, 各種IDEプラグインなどを使

    うと、コーディング中あるいはコミット時に不具合を見つけることができる。ツールによっ ては自動で修正してくれることもある。 やり過ぎて開発環境が重く遅くなるのは本末転倒なので、チームやプロダクトに合わせ てバランスを考えたい。 9
  10. 3.チームワーク強化 10 ラクスさんのブログにある SonarQubeの事例がわ かりやすい。 見える化によって「他者による指摘」を減らす、開 発者が自発的に潜在的な問題を発見し修正するこ とが可能になる。 結果として保守容易性やドメインに関する議論な ど、人が議論する価値の高いものに時間を使え

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

  12. より沼にハマるために 静的解析ツールを「マサカリ自動投擲マシン」として使いたいなら、静的解析ルールの独 自実装スキルがあるとやりやすい。 • SpotBugsプラグイン実装マニュアル • Google Errorproneプラグイン実装マニュアル • SonarQubeプラグイン実装マニュアル

    新しめの言語や独自フレームワークがある環境では特におすすめ。 12