Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10年モノのAndroidアプリのコード品質を改善していく、3つの取り組み
Search
okuzawats
November 20, 2023
Programming
0
1.3k
10年モノのAndroidアプリのコード品質を改善していく、3つの取り組み
コード品質向上のいろは - 先達に学ぶ実践例 Lunch LT
https://findy.connpass.com/event/300912/
での発表資料です。
okuzawats
November 20, 2023
Tweet
Share
More Decks by okuzawats
See All by okuzawats
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
370
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
310
カンファレンス参加をいかに正当化するか
okuzawats
0
280
「勉強になった」で終わらせない、ストロングスタイルの勉強会
okuzawats
0
380
Androidアプリ開発におけるSonarCloudの活用
okuzawats
0
1.1k
何故、UseCaseは1メソッドなのか
okuzawats
3
2k
例外を投げるな、値を返せ
okuzawats
9
8k
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
okuzawats
0
590
Kotlinのifを愛でる
okuzawats
0
610
Other Decks in Programming
See All in Programming
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
840
チームのテスト力を総合的に鍛えて品質、スピード、レジリエンスを共立させる/Testing approach that improves quality, speed, and resilience
goyoki
5
1k
ニーリーにおけるプロダクトエンジニア
nealle
0
890
AI時代の『改訂新版 良いコード/悪いコードで学ぶ設計入門』 / ai-good-code-bad-code
minodriven
22
9k
dbt民主化とLLMによる開発ブースト ~ AI Readyな分析サイクルを目指して ~
yoshyum
3
1.1k
脱Riverpod?fqueryで考える、TanStack Queryライクなアーキテクチャの可能性
ostk0069
0
340
CDK引数設計道場100本ノック
badmintoncryer
2
360
코딩 에이전트 체크리스트: Claude Code ver.
nacyot
0
870
Goで作る、開発・CI環境
sin392
0
260
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
900
Rubyでやりたい駆動開発 / Ruby driven development
chobishiba
1
750
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
3
470
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Become a Pro
speakerdeck
PRO
29
5.4k
Gamification - CAS2011
davidbonilla
81
5.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.4k
A better future with KSS
kneath
238
17k
Transcript
10年モノのAndroid版アプリのコード品質を改善していく、3つの取り組み コード品質向上のいろは - 先達に学ぶ実践例 Lunch LT(2023/11/22) 奥澤 俊樹@Chatwork株式会社
自己紹介 • 奥澤 俊樹(@okuzawats) • Chatwork株式会社 ◦ 2022/09〜 • Androidアプリエンジニア
◦ モバイルアプリケーションアーキテクト ◦ Chatwork Android版アプリのアーキテクチャの改善と 技術負債解消に取り組んでいます。
10年モノのAndroid版アプリのコード品質を改善していく、3つの取り組み
何でやるのか Android版アプリにコミットするチーム・メンバーが増えていく中で、コード品質が開発速度に直結し、ひいてはビジネスゴールを達成するためにコード品質を向上していくことが必要であると考えた。 Chatwork Android版アプリは、リリースから10年が経過している。古いコードベースには、テストが書きにくく、コード品質が低いと言わざるを得ないコードも存在している。 そのコードの上に新たな機能が追加されてしまい、コード品質が低いままアプリが育っていくループを断ち切りたい。
コード品質向上の取り組み 1. コードレビュー
結局のところ、自分が誰よりもコード品質について考えて、全部コードレビューすればいいんでしょ?
と思っていたんですが。
モバイルアプリ開発に関わるチーム
モバイルアプリ開発に関わるチーム
モバイルアプリ開発に関わるチーム
モバイルアプリ開発のチーム構成
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー a. Danger:各種linterの警告をPRにコメントさせる他、BIG PRに警告 b. ktlint:Kotlin用のlinter
c. android lint:Androidのlinter d. SonarCloud:コード品質の自動レビュー
SonarCloud
SonarCloudとは? - コード品質について自動レビューを行い、継続的インスペクションを実現するため のプラットフォーム。 - SonarSource社の製品。 - SonarLint™: IDE integrated
- SonarQube™: self managed - SonarCloud™: as a service - publicリポジトリでは無料で使える。privateリポジトリではコード規模に応じて支払いが必要。 - 支払いの問題が済めば、有効化は簡単。
SonarCloudで計測できるメトリクス(例) 「コードの不吉な匂い」の検出
Quality Gate ※各メトリクスについて基準を設定し、基準を満たさない時、CIを失敗させることもできる。 ※”Sonar way”と呼ばれるデフォルトのルールがある他、自分でルールを定義できる。
複雑度に関するメトリクス 以下のURLからWhite Paperを入手できます。 https://www.sonarsource.com/resources/cognitive-complexity/ ※認知的複雑度はSonarSource社が提唱している複雑度のメトリクス 循環的複雑度(Cyclomatic Complexity、Thomas J. McCabe)、認知的複雑度 (Cognitive
Complexity、SonarSource)を算出してくれる。
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー 3. 勉強会の開催
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー 3. 勉強会の開催 a. 石川宗寿, (2022),
“読みやすいコードのガイドライン 持続的なソフトウェア開発のために”, 技術評論社
勉強会の開催 「読みやすいコードのガイドライン」の著者・石川宗寿さんをお招きして、コードの読 みやすさについての勉強会を開催しました - Chatwork Creator's Note https://creators-note.chatwork.com/entry/code-readability コード品質の中でも「可読性」に焦点を当て、モバイルアプリ(特にAndroid)の開発に関わるエンジニアを集めて勉強会を開催した。 開発生産性を維持・向上していくために、コードの可読性が大切であるという認識を持ち、具体的にはどのようなコードを書けば可読性が向上するのかを学んだ。
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー 3. 勉強会の開催 4. コーディングガイドラインの作成
コード品質向上の取り組み 1. コードレビュー 2. 自動レビュー 3. 勉強会の開催 4. コーディングガイドラインの作成 a.
コーディングガイドラインが存在せず、既存コードのスタイルも統一されていないため、作成に着手
スタイルガイド KotlinのCoding conventions、AndroidのKotlin style guideを参考に しつつ、ストリームアラインドチームの多様なバックグラウンドのメンバーにもコードを読みやすく、書きやすいガイドラインを目指して作成中(WIP)
スタイルガイドの例 Kotlinは fun a(): Int = 42 のように、関数本体を直接返すことができる。Kotlin Coding conventionsでも、関数が単一式から構成される場合は関数ブロック
{} を省略する書き方がGoodであるとしている。自分もこの書き方がスッキリしていて好み。だけど、 fun a(): Int { return 42 } というように関数ブロックを省略しない書き方に統一した方が、ストリームアラインド チームの学習コストが少なく済むのではないか?という仮説。
スタイルガイドの例 Kotlinの言語機能に存在するスコープ関数の乱用を避けよう、ということもproposalで 出している。Kotlinに習熟していれば何をやっているのかわかるけど、そうでなければ コードを読むのに時間がかかってしまうのではないか?という仮説。 foo?.run { it.also { setFoo(!foo) }
} a?.let { bar() } ?: { baz() } こういうのとか こういうのとか
ストリームアラインドチームのメンバーからのフィードバック 「スタイルガイドがあるのも嬉しいが、それよりもPRにlinterがスタイルガイドに沿ったコメントつけてくれるのが一番嬉しい」 ↓ それはそうだなと思うので、linterファースト、つまりlinterが指摘できることを重視してスタイルガイドを再検討する。 前述したSonarCloudを使うことでコードの複雑度などのメトリクス計測をCIに組み込め るので、linterと併用することでコードを読みやすくするという目的が達成できるかもしれない。
まとめ
まとめ - ひとつのリポジトリにコミットするチーム・メンバーが増えたことにより、ビジネスゴールを達成するためにコード品質がより重要になった。 - コードレビューに頼ってコード品質を向上しようとすると、開発が阻害されることがある。 - SonarCloudを用いた自動レビューを活用して、コード品質のメトリクスを分析する。 - コード品質の中でも可読性に焦点を当て、勉強会を開催して可読性を向上させるコードの書き方を学んだ。 -
多様なバックグラウンドのメンバーがコミットしやすくなるようなコーディングガ イドラインを考えている(WIP)。 - We Are Hiring! カジュアル面談で待ってます!
参考文献 - 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)