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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
okuzawats
November 20, 2023
Programming
0
1.4k
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
450
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
430
カンファレンス参加をいかに正当化するか
okuzawats
0
340
「勉強になった」で終わらせない、ストロングスタイルの勉強会
okuzawats
0
440
Androidアプリ開発におけるSonarCloudの活用
okuzawats
0
1.3k
何故、UseCaseは1メソッドなのか
okuzawats
3
2.2k
例外を投げるな、値を返せ
okuzawats
9
8.2k
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
okuzawats
0
690
Kotlinのifを愛でる
okuzawats
0
1k
Other Decks in Programming
See All in Programming
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
150
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
130
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
170
Vuetify 3 → 4 何が変わった?差分と移行ポイント10分まとめ
koukimiura
0
170
守る「だけ」の優しいEMを抜けて、 事業とチームを両方見る視点を身につけた話
maroon8021
3
1.2k
CSC307 Lecture 14
javiergs
PRO
0
480
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
240
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
260
生成 AI 時代のスナップショットテストってやつを見せてあげますよ(α版)
ojun9
0
290
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
280
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
230
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
890
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
698
190k
The SEO identity crisis: Don't let AI make you average
varn
0
420
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
120
Designing for humans not robots
tammielis
254
26k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
91
Building Applications with DynamoDB
mza
96
7k
Agile that works and the tools we love
rasmusluckow
331
21k
Crafting Experiences
bethany
1
92
New Earth Scene 8
popppiees
1
1.8k
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)