ローソンデジタルイノベーション テックブログ

ローソンデジタルイノベーション(LDI)の技術ブログです

AIコーディングエージェント(Cline + Skills)活用実践編 - DataBindingからViewBindingへ楽々移行しました!

はじめに

  • こんにちは、ローソンデジタルイノベーション(LDI)でiOS/Androidエンジニアを担当している山形です。
  • 本記事では、先日ご紹介したAIコーディングエージェント「Cline for LDI」を用いたDataBindingからViewBindingへの移行手順を、具体的な事例を交えてご紹介します。

techblog.ldi.co.jp

  • AIコーディングエージェント活用の一例としてみなさんのお役に立てれば幸いです。

DataBinding移行:リファクタリングの機会

  • 今回の移行は、Kotlin 2へのアップデートがきっかけでした。K2コンパイラを採用するにあたり、KaptからKSPへの移行が必要となりましたが、DataBindingはKaptに依存しているため、これを機にViewBindingへ移行することになりました。
  • そもそもDataBindingには、以下のような課題が存在していました。
    • ビルド速度の低下
    • 型安全性の課題
  • さらに、DataBindingからViewBindingへの移行作業自体にもハードルがありました。
    • レイアウトファイルの <layout> タグ除去やIDの付与
    • XML側で完結していたLiveData監視処理のKotlinコードへの書き換え
    • 対象ファイル数が多く、手作業では修正工数が膨大になる
  • これらの課題は開発者の集中力を削ぎ、ヒューマンエラーを誘発する要因となっていました。

移行を効率化した手法について

Gradleによる自動置換

  • まず、以下のリソースを参考にさせていただきました。
  • このGradleタスクを実行することによって、レイアウトファイルのタグ除去や、基本的なコード置換を自動で行うことが可能です。

Clineにプロジェクト固有の知識(Skills)を組み込む

  • 自動化スクリプトでは対応しきれないプロジェクト独自の実装や、複雑なロジックの再構築といった作業をAIで補完し、リファクタリングを完遂するために、Clineの 「Skills(.cline/skills)」 機能を活用することにしました。
  • Skillsとは、Markdown形式で記述された一連の指示であり、AIエージェントに「このプロジェクトでの正しい手順」を覚え込ませるための、構造化された「手順書(プロンプト)」です。
  • このSkillは、プロジェクトルートの .cline/skills ディレクトリ内にMarkdownファイルとして配置され、一連の指示が定義されています。

  • 今回作成した databinding-to-viewbinding Skillには、以下の手順を定義しました。

ステップ 内容
1. レイアウトIDの付与 Gradleスクリプトが認識できるように、不足しているIDをプロジェクト規約に沿って付与します。
2. Gradleタスクの実行 migrateDataBindingToViewBinding コマンドを実行します。
3. Extensionによる修正 生成された一時的なExtensionファイルを解析し、プロパティを適切な場所に移動します。
4. LiveData監視の置換 ViewModelの observe 処理パターンを認識し、ViewBindingを利用した簡潔なプロパティアクセスとデータ更新の形へ、コードの構造を保ちつつリファクタリングします。
5. クリーンアップ 不要になったファイルの削除とコードの整形を行います。
  • 以下は、実際のSkill Markdownの抜粋です。このように、AIが従うべき手順を自然言語で構造化して記述します。
---
name: databinding-to-viewbinding
description: DataBindingをViewBindingへ移行するためのワークフロー
---

# DataBinding to ViewBinding Migration

## ワークフロー

### ステップ1: レイアウトファイルのID確認
対象レイアウトファイルを確認し、bindingしている箇所でIDがない場合は、
コーディング規約に沿ったIDを付与してください。

### ステップ2: 移行コマンドの実行
以下のコマンドを実行して、自動移行処理を開始します。
`./gradlew :app:migrateDataBindingToViewBinding -Ppattern=[指定されたレイアウト]`

### ステップ3: Extensionファイルの修正
移行コマンド実行後に作成される `*Extension.kt` ファイル内のTODOを修正します。

### ステップ4〜10: セルフチェック・処理の移動・LiveData監視設定・クリーンアップ
... (以降、段階的に検証・移動・整形のステップが続きます)

実際のプロジェクト導入で工夫したこと

  • 実際の作業は、Clineにシンプルに依頼するだけで進めることができます。

    「このLayoutファイルをViewBindingに移行して」

  • これだけで、Clineは自らの手順書である SKILL.md を読み込み、移行ステップをこなしていきます。

  • 特に驚いたのが、「LiveDataの監視設定」 の書き換えです。DataBindingでXML側で完結していたロジックを、ClineがKotlinコード側のLiveData監視処理をまとめた関数内に正しく再構築していく様子を見て、AIコーディングエージェントによる生産性向上そのものを実感することができました。
// Before (DataBinding in XML)
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@{viewModel.userName}" />

// After (ViewBinding in Kotlin)
viewModel.userName.observe(viewLifecycleOwner) { name ->
    binding.userNameTextView.text = name
}
  • 実際に自分でやると1ファイル10分〜20分はかかる作業が数分で、一貫した品質で完了することができました。
  • 手順(Skill)として明文化されているため、ミスが起きにくいというのも大きなメリットだと感じています。

最後に

  • ここまで記事を読んでいただきありがとうございます!
  • Gradleコマンドと、柔軟な判断力を持つパートナー(Cline)の連携を「Skills(手順書)」 で実現し、自分たちのノウハウや手順を共有することでプロダクトにあったルールに沿って開発を進めることができました。
  • この経験から、AIエージェントを最大限に活用するためには、プロジェクト固有の知識や手順をSkillsとして体系化し、AIに「知識」として与えることが重要であると実感しました。読者の皆様も、ぜひご自身のプロジェクトで同様のアプローチを試してみてはいかがでしょうか。
  • 今後もローソンデジタルイノベーションでは技術ブログを更新していきますので、是非「読者になる」で応援していただけますと幸いです。