Slide 1

Slide 1 text

©MIXI 1 Claude Codeで サクサクTestコードを移⾏しよう 2025/09/29 @ AI Agentで変わるモバイルアプリのテスト Kazuki CHIGITA (chigichan24)

Slide 2

Slide 2 text

2 ©MIXI ⾃⼰紹介 千北 ⼀期 (@chigichan24) - Software Engineer - 硬いグミが好き

Slide 3

Slide 3 text

3 ©MIXI 注意: このセッション内では Testコード = Unit Testsに関するコード

Slide 4

Slide 4 text

4 ©MIXI プロダクションコードよりも⼿⼊れが後回しになりがち Testコードが抱える課題 Testコードは書かれてはいるが、 - (iOS) Swift Testing化できていない - (Android) 使っているmockライブラリが場所によってばらついている

Slide 5

Slide 5 text

5 ©MIXI プロダクションコードよりも⼿⼊れが後回しになりがち Testコードが抱える課題 Testコードは書かれてはいるが、 - (iOS) Swift Testing化できていない - (Android) 使っているmockライブラリが場所によってばらついている 新しいテスト体験を享受できず、 開発効率が⻑期的にみて落ちてしまう

Slide 6

Slide 6 text

6 ©MIXI プロダクションコードよりも⼿⼊れが後回しになりがち Testコードが抱える課題 Testコードは書かれてはいるが、 - (iOS) Swift Testing化できていない - (Android) 使っているmockライブラリが場所によってばらついている 新しいテスト体験を享受できず、 開発効率が⻑期的にみて落ちてしまう ⼈間がコードを書くときにも迷いがあり、 AIと協業するときも正しく書くコストが⾼まる

Slide 7

Slide 7 text

7 ©MIXI プロダクションコードよりも⼿⼊れが後回しになりがち Testコードが抱える課題 Testコードは書かれてはいるが、 - (iOS) Swift Testing化できていない - (Android) 使っているmockライブラリが場所によってばらついている ⻑期的にリスクが⼤きいので改善したいが、 なかなか時間がとれない...

Slide 8

Slide 8 text

8 ©MIXI どう解決する?

Slide 9

Slide 9 text

9 ©MIXI MCP ServerとClaude Codeでやってみよう

Slide 10

Slide 10 text

©MIXI 10 XCTest をSwift Testing に移⾏する Case Study1

Slide 11

Slide 11 text

11 ©MIXI Swift Testingへの移⾏の多くはルールベースの置換 XCTestからSwift Testingへの移⾏ https://developer.apple.com/documentation/testing/migratingfromxctest XCTest Swift Testing import XCTest import Testing class FooTests: XCTestCase { // code snip… } struct FooTests { // code snip… } XCTAssert(x) #expect(x)

Slide 12

Slide 12 text

12 ©MIXI Swift Testingへの移⾏の多くはルールベースの置換 XCTestからSwift Testingへの移⾏ https://developer.apple.com/documentation/testing/migratingfromxctest XCTest Swift Testing import XCTest import Testing class FooTests: XCTestCase { // code snip… } struct FooTests { // code snip… } XCTAssert(x) #expect(x) たとえmigration URLを読ませても、AI Agentは 確実に同じ操作を⾏うとは限らない

Slide 13

Slide 13 text

13 ©MIXI 既存のツールをMCP Serverとして提供する

Slide 14

Slide 14 text

14 ©MIXI 以下2つの既存のライブラリ併⽤する XCTestからSwift Testingへの移⾏ https://github.com/giginet/swift-testing-revolutionary https://github.com/nicklockwood/SwiftFormat giginet/swift-testing-revolutionary - Swift Testingへの移⾏のための - CLIモードと、オプションに--dry-runがある nicklockwood/SwiftFormat - SwiftFormatの1つのオプションとして、preferSwiftTestingというルールがある - 上記とほとんど同じことができる

Slide 15

Slide 15 text

15 ©MIXI 以下2つの既存のライブラリ併⽤する XCTestからSwift Testingへの移⾏ https://github.com/giginet/swift-testing-revolutionary https://github.com/nicklockwood/SwiftFormat giginet/swift-testing-revolutionary - Swift Testingへの移⾏のための - CLIモードと、オプションに--dry-runがある nicklockwood/SwiftFormat - SwiftFormatの1つのオプションとして、preferSwiftTestingというルールがある - 上記とほとんど同じことができる これらの操作を⾏うtoolとして定義し、 MCP Serverとしてプロジェクトで読み込む

Slide 16

Slide 16 text

16 ©MIXI 追加の利点: ライブラリでできないことも合わせてできる XCTestからSwift Testingへの移⾏ 状況に応じてParameterized Testにすることや簡単なリファクタリングを挟むこと - 従来のテストコードの中で⼀部のパラメータを除いて繰り返し同じことを書いている 部分もSwift Testing移⾏のタイミングで合わせて対応できる - 改めてテストコードを⾒たときに不⾜している条件を追加する

Slide 17

Slide 17 text

17 ©MIXI カスタムスラッシュコマンド /my-command My MCP Server swift-testing-revolutionary SwiftFormat 可読性の観点の更新

Slide 18

Slide 18 text

18 ©MIXI カスタムスラッシュコマンド カスタムスラッシュコマンド + MCP Serverで確実な マイグレーションと必要なリファクタの実⾏を実現 /my-command My MCP Server swift-testing-revolutionary SwiftFormat 可読性の観点の更新

Slide 19

Slide 19 text

©MIXI 19 Mockitoライブラリによる モックコードをMockKに移⾏する Case Study2

Slide 20

Slide 20 text

20 ©MIXI 基本的な課題解決⽅法はSwift Testingと同じ MockitoからmockKへの移⾏ - 移⾏のルールを明⽂化する‧必要に応じてMCP Serverにする - Mockito -> mockK の場合はライブラリはないので、 置き換えルールを⼿で⽤意し、まとめておく。 - カスタムコマンドとして、1ファイルごと修正を⾏っていく - 同じタイミングで、適切なリファクタリングをはさむ ここでは、Swift Testingの時とは異なる課題 について共有します

Slide 21

Slide 21 text

21 ©MIXI 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか MockitoからmockKへの移⾏

Slide 22

Slide 22 text

22 ©MIXI MockitoからmockKへの移⾏ Mockito based test codes mockK based test codes 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか 1カスタムスラッシュコマンドで移⾏できる?

Slide 23

Slide 23 text

23 ©MIXI MockitoからmockKへの移⾏ Mockito based test codes mockK based test codes 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか 1カスタムスラッシュコマンドで移⾏できる? 多分No

Slide 24

Slide 24 text

24 ©MIXI MockitoからmockKへの移⾏ 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか 1. 途中状態を許容できるようにする - 元のテストコードのファイル名を更新 (`Deprecated` suffixをつける等) - 新しく空のクラスを作成し、関数毎に移⾏していく。 2. Claude Code ⾃⾝に実⾏順序を考えさせる - 歴史があるコードの場合、どのテストコードの移⾏がしやすいのかが ⾒えにくいため、移動できるものから徐々に移動するのがおすすめ。 - 実⾏順序もAI Agentと壁打ちしながら決める。

Slide 25

Slide 25 text

25 ©MIXI MockitoからmockKへの移⾏ Mockito based test codes mockK based test codes 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか

Slide 26

Slide 26 text

26 ©MIXI MockitoからmockKへの移⾏ mockK based test codes 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか Mockito based test codes 段階移⾏

Slide 27

Slide 27 text

27 ©MIXI MockitoからmockKへの移⾏ Mockito based test codes mockK based test codes 移⾏の最終盤、ヘビーなテストファイルとどう向き合うか

Slide 28

Slide 28 text

©MIXI 28 まとめ

Slide 29

Slide 29 text

29 ©MIXI AI Agentの1つの使い⽅としてTestコードのメンテナンス まとめ コツ : 現状のAI Agentは⾼性能な推論機であることを意識する - ルールを⾔語化‧プロジェクト全体で繰り返し使っているパターンに対して有効 - ⾔語化が難しい場合には、MCP Serverを使いながら確実に適切な⽳埋めをさせる メリット : プロジェクトで後回しになりがちなTestコード⾃体のメンテナンス - プロジェクト内での不統⼀感を解消できる - AIとコードを書くときに、⼿戻り少なくTestコードを書けるようになる

Slide 30

Slide 30 text

©MIXI 30 EOF