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

10年モノのAndroidアプリのコード品質を改善していく、3つの取り組み

okuzawats
November 20, 2023

 10年モノのAndroidアプリのコード品質を改善していく、3つの取り組み

コード品質向上のいろは - 先達に学ぶ実践例 Lunch LT https://findy.connpass.com/event/300912/ での発表資料です。

okuzawats

November 20, 2023
Tweet

More Decks by okuzawats

Other Decks in Programming

Transcript

  1. 10年モノのAndroid版アプリのコード品質を改善していく、3つの取り組み
    コード品質向上のいろは - 先達に学ぶ実践例 Lunch LT(2023/11/22)
    奥澤 俊樹@Chatwork株式会社

    View full-size slide

  2. 自己紹介
    ● 奥澤 俊樹(@okuzawats)
    ● Chatwork株式会社
    ○ 2022/09〜
    ● Androidアプリエンジニア
    ○ モバイルアプリケーションアーキテクト
    ○ Chatwork Android版アプリのアーキテクチャの改善と
    技術負債解消に取り組んでいます。

    View full-size slide

  3. 10年モノのAndroid版アプリのコード品質を改善していく、3つの取り組み

    View full-size slide

  4. 何でやるのか
    Android版アプリにコミットするチーム・メンバーが増えていく中で、コード品質が開発速度に直結し、ひいてはビジネスゴールを達成するためにコード品質を向上していくことが必要であると考えた。
    Chatwork Android版アプリは、リリースから10年が経過している。古いコードベースには、テストが書きにくく、コード品質が低いと言わざるを得ないコードも存在している。
    そのコードの上に新たな機能が追加されてしまい、コード品質が低いままアプリが育っていくループを断ち切りたい。

    View full-size slide

  5. コード品質向上の取り組み
    1. コードレビュー

    View full-size slide

  6. 結局のところ、自分が誰よりもコード品質について考えて、全部コードレビューすればいいんでしょ?

    View full-size slide

  7. と思っていたんですが。

    View full-size slide

  8. モバイルアプリ開発に関わるチーム

    View full-size slide

  9. モバイルアプリ開発に関わるチーム

    View full-size slide

  10. モバイルアプリ開発に関わるチーム

    View full-size slide

  11. モバイルアプリ開発のチーム構成

    View full-size slide

  12. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー

    View full-size slide

  13. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー
    a. Danger:各種linterの警告をPRにコメントさせる他、BIG PRに警告
    b. ktlint:Kotlin用のlinter
    c. android lint:Androidのlinter
    d. SonarCloud:コード品質の自動レビュー

    View full-size slide

  14. SonarCloudとは?
    - コード品質について自動レビューを行い、継続的インスペクションを実現するため
    のプラットフォーム。
    - SonarSource社の製品。
    - SonarLint™: IDE integrated
    - SonarQube™: self managed
    - SonarCloud™: as a service
    - publicリポジトリでは無料で使える。privateリポジトリではコード規模に応じて支払いが必要。
    - 支払いの問題が済めば、有効化は簡単。

    View full-size slide

  15. SonarCloudで計測できるメトリクス(例)
    「コードの不吉な匂い」の検出

    View full-size slide

  16. Quality Gate
    ※各メトリクスについて基準を設定し、基準を満たさない時、CIを失敗させることもできる。
    ※”Sonar way”と呼ばれるデフォルトのルールがある他、自分でルールを定義できる。

    View full-size slide

  17. 複雑度に関するメトリクス
    以下のURLからWhite Paperを入手できます。
    https://www.sonarsource.com/resources/cognitive-complexity/
    ※認知的複雑度はSonarSource社が提唱している複雑度のメトリクス
    循環的複雑度(Cyclomatic Complexity、Thomas J. McCabe)、認知的複雑度
    (Cognitive Complexity、SonarSource)を算出してくれる。

    View full-size slide

  18. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー
    3. 勉強会の開催

    View full-size slide

  19. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー
    3. 勉強会の開催
    a. 石川宗寿, (2022), “読みやすいコードのガイドライン 持続的なソフトウェア開発のために”, 技術評論社

    View full-size slide

  20. 勉強会の開催
    「読みやすいコードのガイドライン」の著者・石川宗寿さんをお招きして、コードの読
    みやすさについての勉強会を開催しました - Chatwork Creator's Note
    https://creators-note.chatwork.com/entry/code-readability
    コード品質の中でも「可読性」に焦点を当て、モバイルアプリ(特にAndroid)の開発に関わるエンジニアを集めて勉強会を開催した。
    開発生産性を維持・向上していくために、コードの可読性が大切であるという認識を持ち、具体的にはどのようなコードを書けば可読性が向上するのかを学んだ。

    View full-size slide

  21. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー
    3. 勉強会の開催
    4. コーディングガイドラインの作成

    View full-size slide

  22. コード品質向上の取り組み
    1. コードレビュー
    2. 自動レビュー
    3. 勉強会の開催
    4. コーディングガイドラインの作成
    a. コーディングガイドラインが存在せず、既存コードのスタイルも統一されていないため、作成に着手

    View full-size slide

  23. スタイルガイド
    KotlinのCoding conventions、AndroidのKotlin style guideを参考に
    しつつ、ストリームアラインドチームの多様なバックグラウンドのメンバーにもコードを読みやすく、書きやすいガイドラインを目指して作成中(WIP)

    View full-size slide

  24. スタイルガイドの例
    Kotlinは
    fun a(): Int = 42
    のように、関数本体を直接返すことができる。Kotlin Coding conventionsでも、関数が単一式から構成される場合は関数ブロック {} を省略する書き方がGoodであるとしている。自分もこの書き方がスッキリしていて好み。だけど、
    fun a(): Int {
    return 42
    }
    というように関数ブロックを省略しない書き方に統一した方が、ストリームアラインド
    チームの学習コストが少なく済むのではないか?という仮説。

    View full-size slide

  25. スタイルガイドの例
    Kotlinの言語機能に存在するスコープ関数の乱用を避けよう、ということもproposalで
    出している。Kotlinに習熟していれば何をやっているのかわかるけど、そうでなければ
    コードを読むのに時間がかかってしまうのではないか?という仮説。
    foo?.run {
    it.also {
    setFoo(!foo)
    }
    }
    a?.let {
    bar()
    } ?: {
    baz()
    }
    こういうのとか こういうのとか

    View full-size slide

  26. ストリームアラインドチームのメンバーからのフィードバック
    「スタイルガイドがあるのも嬉しいが、それよりもPRにlinterがスタイルガイドに沿ったコメントつけてくれるのが一番嬉しい」

    それはそうだなと思うので、linterファースト、つまりlinterが指摘できることを重視してスタイルガイドを再検討する。
    前述したSonarCloudを使うことでコードの複雑度などのメトリクス計測をCIに組み込め
    るので、linterと併用することでコードを読みやすくするという目的が達成できるかもしれない。

    View full-size slide

  27. まとめ
    - ひとつのリポジトリにコミットするチーム・メンバーが増えたことにより、ビジネスゴールを達成するためにコード品質がより重要になった。
    - コードレビューに頼ってコード品質を向上しようとすると、開発が阻害されることがある。
    - SonarCloudを用いた自動レビューを活用して、コード品質のメトリクスを分析する。
    - コード品質の中でも可読性に焦点を当て、勉強会を開催して可読性を向上させるコードの書き方を学んだ。
    - 多様なバックグラウンドのメンバーがコミットしやすくなるようなコーディングガ
    イドラインを考えている(WIP)。
    - We Are Hiring! カジュアル面談で待ってます!

    View full-size slide

  28. 参考文献
    - SonarCloud, https://www.sonarsource.com/products/sonarcloud/ (最終アクセス日:2023/11/07)
    - 「読みやすいコードのガイドライン」の著者・石川宗寿さんをお招きして、コードの読みやすさについての勉強会を開催しました - Chatwork Creator's Note,
    https://creators-note.chatwork.com/entry/code-readability (最終アクセス日:2023/11/07)
    - 石川宗寿, (2022), “読みやすいコードのガイドライン 持続的なソフトウェア開発のために”, 技術評論社
    - Kotlin Coding conventions,
    https://kotlinlang.org/docs/coding-conventions.html (最終アクセス日:2023/11/07)
    - Kotlin スタイルガイド,
    https://developer.android.com/kotlin/style-guide?hl=ja (最終アクセス日:2023/11/07)

    View full-size slide