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

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

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/

Kengo TODA

February 24, 2021
Tweet

More Decks by Kengo TODA

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide