Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

と思っていたんですが。

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

SonarCloud

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

ストリームアラインドチームのメンバーからのフィードバック 「スタイルガイドがあるのも嬉しいが、それよりもPRにlinterがスタイルガイドに沿ったコメントつけてくれるのが一番嬉しい」 ↓ それはそうだなと思うので、linterファースト、つまりlinterが指摘できることを重視してスタイルガイドを再検討する。 前述したSonarCloudを使うことでコードの複雑度などのメトリクス計測をCIに組み込め るので、linterと併用することでコードを読みやすくするという目的が達成できるかもしれない。

Slide 28

Slide 28 text

まとめ

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

参考文献 - 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)