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
380
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
330
カンファレンス参加をいかに正当化するか
okuzawats
0
290
「勉強になった」で終わらせない、ストロングスタイルの勉強会
okuzawats
0
390
Androidアプリ開発におけるSonarCloudの活用
okuzawats
0
1.1k
何故、UseCaseは1メソッドなのか
okuzawats
3
2k
例外を投げるな、値を返せ
okuzawats
9
8k
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
okuzawats
0
600
Kotlinのifを愛でる
okuzawats
0
640
Other Decks in Programming
See All in Programming
DynamoDBは怖くない!〜テーブル設計の勘所とテスト戦略〜
hyamazaki
0
200
AIコーディングエージェント全社導入とセキュリティ対策
hikaruegashira
16
9.6k
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
130
技術的負債で信頼性が限界だったWordPress運用をShifterで完全復活させた話
rvirus0817
1
1.4k
QA x AIエコシステム段階構築作戦
osu
0
260
What's new in Adaptive Android development
fornewid
0
140
令和最新版手のひらコンピュータ
koba789
13
7.4k
構文解析器入門
ydah
7
2.1k
新しいモバイルアプリ勉強会(仮)について
uetyo
1
250
ワープロって実は計算機で
pepepper
2
1.3k
中級グラフィックス入門~効率的なメッシュレット描画~
projectasura
4
2.6k
Claude Code と OpenAI o3 で メタデータ情報を作る
laket
0
120
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
How STYLIGHT went responsive
nonsquared
100
5.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
KATA
mclloyd
32
14k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.3k
How to train your dragon (web standard)
notwaldorf
96
6.2k
How to Ace a Technical Interview
jacobian
278
23k
Code Reviewing Like a Champion
maltzj
524
40k
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)