Slide 1

Slide 1 text

1 【 開 発 を 止 め る な 】 機 能 追 加 と 並 行 し て 進 め る ア ー キ テ ク チ ャ 改 善 株式会社ビットキー 水谷浩明 2025/12/17

Slide 2

Slide 2 text

2 © Bitkey Inc. Mizutani Hiroaki 水谷 浩明 2012.04 2015.01 2025.03 株式会社メイテツコムに入社。 鉄道系の SIer 企業で、主にネットワーク構築業務を 担当。 bravesoft 株式会社に入社。 モバイルエンジニア、情シス、サーバサイドエンジニア と経験を重ねる。 toC 自社事業の企画運営にも従事。 ビットキーへ参画 自社サービス homehub のモバイルアプリ開発を行う チームに配属。 2025.05〜 バージョンアップ開発を行いつつ、homehub アプリの 大規模なリファクタリング作業を主担当として推進。

Slide 3

Slide 3 text

3 3 © Bitkey Inc. 不動産管理会社 マンションオーナー 管理組合 デベロッパー 居住者 暮らしサービス デリバリー会社 スマートロックなどを通じて 暮らしをアップデート するサービスです

Slide 4

Slide 4 text

4 4 © Bitkey Inc. 本日は homehub アプリ における レガシーコードとの戦いについて共有できればと思います

Slide 5

Slide 5 text

5 5 © Bitkey Inc. Outline - プロジェクト開始時の状況 - 戦術1 〜段階的リリース〜 - 戦術2 〜Notion × AI〜 - 現在地とまとめ

Slide 6

Slide 6 text

6 6 © Bitkey Inc. Outline - プロジェクト開始時の状況 - 戦術1 〜段階的リリース〜 - 戦術2 〜Notion × AI〜 - 現在地とまとめ

Slide 7

Slide 7 text

7 © Bitkey Inc. homehub アプリのローンチから PoC を 繰り返すなどして5年経ち 技術的負債 が 少しづつ蓄積 - テストコードの欠如 - コードの複雑化

Slide 8

Slide 8 text

8 8 © Bitkey Inc. このまま開発を続けるのは ダメだ…!

Slide 9

Slide 9 text

9 © Bitkey Inc. リファクタリングを決断し、 クリーンアーキテクチャ へ - 関心事の分離 - テスタビリティの向上 Frameworks & Drivers Interface Adapters Application Business Rules Enterprise Business Rules

Slide 10

Slide 10 text

10 © Bitkey Inc. - プレゼンテーション層( Presentation ) - ユーザーインターフェースとそのロジックを提供 - ユーザーとの対話を担当し、下位層とのデータのやり取りを行う - コンポジションルート層( CompositionRoot ) - アプリケーション全体の依存関係を管理 - 各レイヤーのコンポーネントを適切に接続する役割を担う - アプリケーション層( Application ) - アプリケーションが提供する特定機能(ユースケース)を実装 - 複数のビジネスロジックの連携や実行順序を制御 - ドメイン層( Domain ) - アプリケーションの中核となるビジネスルールを実装 - ドメインモデル(エンティティや値オブジェクト)、ビジネスルール、 およびデータ永続化のためのインターフェース(リポジトリ)を定 義 - インフラ層( Infrastructure ) - 外部システムとの通信やデータの永続化を担当 - ドメイン層で定義されたインターフェースの具体的な実装を提供 アーキテクチャ

Slide 11

Slide 11 text

11 11 © Bitkey Inc. だが…

Slide 12

Slide 12 text

12 12 © Bitkey Inc. バージョンアップは止められない 動き続けるプロダクトに対して、スピード感を持った整備が求められた

Slide 13

Slide 13 text

13 13 © Bitkey Inc. Outline - プロジェクト開始時の状況 - 戦術1 〜段階的リリース〜 - 戦術2 〜Notion × AI〜 - 現在地とまとめ どのように 進めるか

Slide 14

Slide 14 text

14 14 © Bitkey Inc. 段階的リリース 新アーキテクチャ レガシーコード - バージョンアップを止められない以上、一度にすべてをリファクタリング するのは現実的ではない - パッケージを分けて 段階的にコードを置き換えていく 方法を検討 - まずはミニマムスタートで影響度の少ないアプリ内のお知らせ機能から実 施し、感覚を掴んだ

Slide 15

Slide 15 text

15 15 © Bitkey Inc. お知らせ機能のみのリファクタリングは無事完了し、 プロダクトコードにも反映できた

Slide 16

Slide 16 text

16 16 © Bitkey Inc. だが…

Slide 17

Slide 17 text

17 17 © Bitkey Inc. コアドメインで問題発生…

Slide 18

Slide 18 text

18 18 © Bitkey Inc. コアドメイン展開時の問題 - homehub のコアドメインは 「デバイス管理」 - 主要機能ほぼ全てに関わってくる ので、段階的リリースと言い つつも連鎖的に 大半のコードを修正 する必要がでてきてしまう - とはいえコアドメインのリファクタリングを避けて進むことはできない

Slide 19

Slide 19 text

19 19 © Bitkey Inc. 問題の解決に向けて - コアドメインのみ置き換えて、UI やサブドメインは大きく変えずに進む ことはできないか - 新アーキテクチャと旧アーキテクチャの変換 を行えばいけそう

Slide 20

Slide 20 text

20 20 © Bitkey Inc. 新旧変換層のイメージ

Slide 21

Slide 21 text

21 21 © Bitkey Inc. 新旧アーキテクチャの共存に成功

Slide 22

Slide 22 text

22 22 © Bitkey Inc. Outline - プロジェクト開始時の状況 - 戦術1 〜段階的リリース〜 - 戦術2 〜Notion × AI〜 - 現在地とまとめ どうやって 進めるか

Slide 23

Slide 23 text

23 23 © Bitkey Inc. 作戦は立てた!                が、やり切れるのか…?

Slide 24

Slide 24 text

24 24 © Bitkey Inc. 実施に向けて - コアドメインに集中すると言っても範囲は大きい - AI (Cursor) を使って実装を進めようとしたが、複雑なリファクタリング になってくると、どうしても 精度がブレる 実装を始める前に AI の作業方針を 固めておく ことはできないか…?

Slide 25

Slide 25 text

25 25 © Bitkey Inc. Notion × AI ワークフロー 設計・指示 (人) Notion にタスク単位で「やりたいこ と」「実装時の指示」を 自然言語で記述。 要件定義 (AI) Cursor から Notion MCP を 使ってドキュメントを読み込み、疑 問点を人に質問する。 実装 (AI) AI が要件とコードベースを 理解し、実装。 理解するまで繰り返す

Slide 26

Slide 26 text

26 26 © Bitkey Inc. AI への指示 Notion のタスクテンプレート ● [人]目的 ○ 人が「タスクの意図」や 「やりたいこと」を書く ● [人]指示 ○ 人が「実装する際の方針」や 「注意事項」を書く ● [AI]確認事項 ○ AI が上記で記入された内容 とコードベースを照らし合わせて、 疑問点を書く ● [AI]方針 ○ AI にとって疑問がなくなったら、 実装方針を書く ※ 当時はまだ存在しませんでしたが、今であれば [AI] の部分は Cursor の Plan モードなどでも良さそうです このフロー用の Cursor ルールも作成。 アドベントカレンダーの記事 に全文載せています。

Slide 27

Slide 27 text

27 27 © Bitkey Inc. 結果 - 作業が 定型化 し、コードの 品質が向上 - そのまま commit できるレベルになった - AI に実装を任せてる間に、 Notion に次のタスクの指示を書いて おけるので 実施効率も向上

Slide 28

Slide 28 text

28 28 © Bitkey Inc. Outline - プロジェクト開始時の状況 - 戦術1 〜段階的リリース〜 - 戦術2 〜Notion × AI〜 - 現在地とまとめ

Slide 29

Slide 29 text

29 29 © Bitkey Inc. コアドメインのリファクタリングが完了 現在リリースに向けたフルリグレッションテストを実施中

Slide 30

Slide 30 text

30 30 © Bitkey Inc. まとめ - アーキテクチャ改善は開発と並行して進められる - 変換層を用いて新旧コードを共存させることによる、段階的リリース - 実装前に AI の作業方針を明確化させることによる、精度や効率の向上

Slide 31

Slide 31 text

31 31 © Bitkey Inc. End of File