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
ビジネス中心に7年間走り続けたAndroidをリアーキしてる話
Search
ko2ic
May 19, 2021
Programming
68
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ビジネス中心に7年間走り続けたAndroidをリアーキしてる話
ko2ic
May 19, 2021
More Decks by ko2ic
See All by ko2ic
モバイルでもエリートDevOpsチームを目指そう
ko2ic
0
190
50回面接して学んだ強い技術者チームを作る採用とオンボーディング
ko2ic
0
940
段階的な技術的負債の解消方法.pdf
ko2ic
2
2.3k
Other Decks in Programming
See All in Programming
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
140
Agentic UI
manfredsteyer
PRO
0
180
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
360
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
200
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
140
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
Lessons from Spec-Driven Development
simas
PRO
0
210
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
560
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
Vite+ Unified Toolchain for the Web
naokihaba
0
320
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.3k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
How to build a perfect <img>
jonoalderson
1
5.7k
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
150
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Code Reviewing Like a Champion
maltzj
528
40k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
310
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
ビジネス中心に7年間走り続けた Androidをリアーキしてる話 2021/05/19 @ Qiita × Uzabase Tech Meetup#2 Koji
Ishii ~ UZABASEの7つのルールを添えて ~
2 自己紹介 Qiitaではこんな記事書いてました
3 自己紹介 こんな本書いてます。 iOS/Androidもガッツリ書いてきまし た。
4 自己紹介 法人向けNewsPicks エンジニアリングマネージャー (開発リーダー) スマフォチームに所属していない、 たまにしかスマフォ実装してなかっ たが 今回のリアーキではガッツリ書きま した。
この件がきっかけで、来月からスマ フォチームのリーダーに抜擢されま した。
• 自由主義でいこう • 創造性がなければ意味がない • ユーザの理想から始める • スピードで驚かす • 迷ったら挑戦する道を選ぶ
• 渦中の友を助ける • 異能は才能 ユーザベース 7つのルール 5
なぜ変えるのか (Why) どのように変えていったか (How) このように変えてます (What) 今後の展望 01 02 03
04 6 目次
01 | なぜ変えるのか(Why)
優秀なAndroidエンジニアで構成され ているチーム (私は別チーム所属) • 社員 • 長く参画してくれてるフリーエンジニア • 業務委託の方(最近参加) NewsPicksのアプリを使っていた人ならわかる。
技術力がないとできないUI。そしてスピード感あるリリース頻度 01 | なぜ変えるのか 8 ユーザの理想から始める スピードで驚かす
正直いうとここ10年で一番ひどいコード。 少し触るだけでバグが出る。 もう辞める... 優秀な業務委託の方 01 | なぜ変えるのか 9
なぜ技術力があるメンバーでもこう なったか ビジネス優先で走り続けてきた結果です。 NewsPicksは高い成長を続けています。 ビジネス的にやりたいことだらけです。 何度かリニューアルやアーキテクチャ変更はした が、抜本的な変更をする時間が取れなかったし、 体制が取れなかった。 01 |
なぜ変えるのか 10
01 | なぜ変えるのか 11 具体的な技術構成 / 問題点 • 巨大な1つのモジュール。ルールベースでレイヤーが切られている。 ◦
ルール違反はPRで指摘するしかない。ルールってなんだっけ? • カスタムApplicationクラスへの依存が多い ◦ テストコードも書きづらいし、容易に循環参照しちゃう • 単体テストがほぼなし ◦ 気楽にリファクタできない • ライブラリなどのバージョンを気楽にあげられない ◦ 上げると思わぬクラッシュ • いろんなアーキテクチャが混在 ◦ HttpClientだけみても、Volley, Ktor, Retrofit2 • EventBusの乱用 ◦ 追いづらい • 属人性のあるコード ◦ レビューで指摘されるのは過去を知らないと書けないやつとか • ABテストの残骸 ◦ 消そうぜ • ViewModelの中でViewを使っちゃてるよ ◦ ・・・
01 | なぜ変えるのか 12 技術的負債が溜まりすぎ
会計の負債 負債(借金)があってもそこから負債以上の利益 が出てれば問題ないですよね。 利益が出せてるんだから、負債は返せばいいんで す! 01 | なぜ変えるのか 13
残ってしまっている技術的負債 その時は最適だったりそれで良かったのが 時代や組織、事業フェーズの変化によって 適さなくなった資産 アルファドライブ(ユーザベースグルー プ)CTO 01 | なぜ変えるのか 14
技術的負債って?
このままでは昔からいる人が万が一辞めて しまったら、開発スピードは確実に落ちる し、バグも増える。何よりも技術スタック 的にも魅力がなくて優秀なエンジニアを採 用できない。たとえ採用できてもスピード が出せない。 法人開発者リーダー(表) 01 | なぜ変えるのか
15
このまま何年も実装していくのはつまらん な。技術者としてこれ続けると終わってい きそうで不安だ。モチベーションあがら ん。 あと法人の機能は、俺じゃなくてもスマ フォ経験値が少ない開発者でも実装できる ようにしたいな。俺、楽になるし。 01 | なぜ変えるのか
16 法人開発者リーダー(裏)
02 | どのように変えていったか(How) 技術じゃなく方法
02 | どのように変えていったか 18 大前提 • 法人向け機能はザ・ビジネス。握ったスケジュールは絶 対。できるだけ速く機能を出して解約させない・獲得確 率を上げたい •
Androidチームも他のビジネスの実装を進めているし人 数も少ない。誰も頼れない。 • 俺はこのまま実装続けるの嫌だ。絶対アーキテクチャを 変えたい (統一したい) • 俺、法人開発リーダだし責任重大。遅延、ダメ
1人でもやり切ってやるという意思のみ + (今までの経験/自信) ただし、リスクは最小にしたい。 具体的には、間に合わなそうな場合に実装する時 間の確保をどうするか。 -> 年末年始の休暇と※ ロンバケ制度がある。 ※
半期に一度、有給とは別に5日連続休暇できる制度 ユーザの理想から始める 02 | どのように変えていったか 19 迷ったら挑戦する道を選ぶ
02 | どのように変えていったか 20 こう進めた • Androidチームに「法人の新機能で新アーキテクチャを使い たい」と頭出し。一般的に知られている文言でざっくり説明 (抽象的) (MVVM/Databinding/Repositoryとかとか)
• 2週間ぐらいで実践で使えるレベルのサンプル実装を作成。 一般論だったアイデアを現実の世界に耐えられるレベルま で作成し、Androidチームに合意 • 法人チームは他のメンバーにリーダー業務やiOS開発をで きる部分は委譲 • で、孤独の中で法人の機能の実装開始
02 | どのように変えていったか 21 途中まで • 想像していた以上に既存コードの影響を受けるので、回避す るための実装が必要 • 既存の機能を新で作ろうとしたときに想像以上に複雑な仕様
-> 開発量がとんでもなく多いことがわかってきた... やばい!!!
俺、手伝うよ!! 楽しそうじゃん!! Androidチーム 社員 02 | どのように変えていったか 22 渦中の友を助ける
02 | どのように変えていったか 23 結果 • 法人機能はスケジュール通りリリース(休暇取れたよ) • NewsPicksの経験がない外部委託の開発者でも問題なく実装できて いるし、Android経験がない開発者も実装可能に
• 法人機能以外も新アーキテクチャに移行が決定 • Androidチームが負債解消のため2人 -> 5人体制になる • 採用時に優秀な人を採用しやすくなっている • iOSも技術的負債解消のプロジェクト開始(SwiftUIなど)
03 | このように変えてます(What)
03 | このように変えてます 25 • NewsPicks -> 元々全てのコードが入っていたモジュール。 Applicationクラスだけに依存 するように変更中
• ui -> UIに関連する全て。Activity,Fragment,ViewModel。ViewModelは全くViewに依存さ せない • infrastructures -> 永続レイヤー。HttpやDBにアクセスする • domains -> ビジネスロジック, ValueObject, EntityなどDDDの考えを取り入れた • マルチモジュール化 • 明確な役割のあるレイヤーで分 割することで依存させるライブラ リを変える • コンパイラーに任せる • 古いコードは一旦legacyモ ジュールに突っ込む • legacyは洗練されてないので無 駄なコードが多い(ビルドが遅 い) • 新コードはlegacy依存がないの でビルドが早い
03 | このように変えてます 26 • 依存性逆転を容易にしたいので DI導入(Dagger Hilt) • 非同期処理はCoroutines
Flow • LiveDataは使わない。Coroutinesだけ。(独自クラスでやってるが StateFlowにするかも) • Databindingは、@BindingConversionや@BindingAdapterをフル活用。
03 | このように変えてます 27 その他、便利クラスを作成 たとえば、縦・横の一覧系は、独自 RecyclerViewAdapter作成したことで、一つのクラスだけで全ての一覧系の デザインに対応可能 (Groupieみたいなやつ)にしたり、Dialog系や共通エラーとか色々便利なクラスを実装し、 Wikiに記述。実装でルールを縛り処理の統一性を保っている
04 | 今後の展望
04 | 今後の展望 29 • 新アーキテクチャに移行を進める • テストは必須にして、進化し続けるアーキテクチャを目指す • iOSも同様
• NewsPicksで技術的ブランドを確立したい • 20%ルールを作る!(役員も合意) • Android / iOS ともに 5名体制を構築のためいろんなタイプの人を積 極採用中 創造性がなければ意味がない 異能は才能
30 締め • 意思があれば、システム改善は絶対できるよ • ただし、組織の文化は大事。(意思を実現し やすいかどうか) • たまには無茶(新機能を作りつつリアーキを1 人でやろうとした・・・)してもいいかも。
周りの環境がいい方向に変わる。
• 創造性がなければ意味がない • ユーザの理想から始める • スピードで驚かす • 迷ったら挑戦する道を選ぶ • 渦中の友を助ける
• 異能は才能 ユーザベース 7つのルール 31 • 自由主義でいこう
ご清聴ありがとうございました 32