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.2k
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
300
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
230
カンファレンス参加をいかに正当化するか
okuzawats
0
230
「勉強になった」で終わらせない、ストロングスタイルの勉強会
okuzawats
0
350
Androidアプリ開発におけるSonarCloudの活用
okuzawats
0
1k
何故、UseCaseは1メソッドなのか
okuzawats
3
1.8k
例外を投げるな、値を返せ
okuzawats
9
7.8k
GitHub ActionsでAndroidアプリのテストを回しまくってたら全プロジェクトのCI/CDが完全停止する寸前だった件
okuzawats
0
530
Kotlinのifを愛でる
okuzawats
0
500
Other Decks in Programming
See All in Programming
2025.2.14_Developers Summit 2025_登壇資料
0101unite
0
200
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.6k
苦しいTiDBへの移行を乗り越えて快適な運用を目指す
leveragestech
0
1k
AIプログラミング雑キャッチアップ
yuheinakasaka
18
4.3k
From the Wild into the Clouds - Laravel Meetup Talk
neverything
0
150
機能が複雑化しても 頼りになる FactoryBotの話
tamikof
0
150
「個人開発マネタイズ大全」が教えてくれたこと
bani24884
1
200
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
580
Introduction to kotlinx.rpc
arawn
0
760
.NET Frameworkでも汎用ホストが使いたい!
tomokusaba
0
200
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
150
はじめての Go * WASM *OCR
sgash708
1
100
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
GraphQLとの向き合い方2022年版
quramy
44
14k
Optimizing for Happiness
mojombo
376
70k
Writing Fast Ruby
sferik
628
61k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Agile that works and the tools we love
rasmusluckow
328
21k
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Building Adaptive Systems
keathley
40
2.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Rails Girls Zürich Keynote
gr2m
94
13k
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)