シンクロ・フードでは全社的に業務における AI 活用を進めており、開発部でも今年から全エンジニアに Claude Code を配布しています。ただ「配って終わり」ではなく、活用ノウハウの共有や、日々の開発業務の中で AI でできそうなことは AI に任せるといった取り組みを継続して行っています。
その結果、Claude Code によって開発速度は上がった一方で、レビューやテストにかける時間が新たなボトルネックになるという変化が見えてきました。本記事では、こうした AI 活用の取り組みの一例として、特に負荷の大きかった gem バージョンアップの手動テスト を自動化した事例を紹介します。
開発フローを AI 前提で見直す
Claude Code の配布後、私たちはコードを書く工程だけでなく、レビュー・テスト・調査といった周辺工程も AI に任せられないかを順に検討してきました。その中でも費用対効果が大きいと判断したのが、長年エンジニアの手を取られてきた「手動テスト」の領域です。なかでも代表的なのが、gem バージョンアップに伴うテストでした。
大津: まず自分が印象に残ったのは、「From Formal Specification to Property Based Test」という形式仕様をもとに、Property Based Testを半自動生成させる発表です。
岡塚: 形式仕様という概念が自分は初めて聞くものだったんですが、どういうものなんですか?
大津: 自然言語ではなく、形式仕様記述言語という論理的な記述が行える言語で記述した仕様のことです
// 【ドメインモデル】 本と利用者という概念を定義
sig Book {}
sig User {
borrowed: set Book
}
// 【業務ルール(不変条件)】 1人が同時に借りられるのは3冊まで
fact BorrowLimit {
all u: User | #u.borrowed <= 3
}
// 【検証したい性質】 2人のユーザーが同じ本を持っていることは絶対にない
assert NoDoubleBorrow {
no disj u1, u2: User | some u1.borrowed & u2.borrowed
}
// 本5冊・ユーザー5人までのあらゆる組み合わせを試して、
// 「2人のユーザーが同じ本を同時に持っている」状況が作れないことを確認
check NoDoubleBorrow for 5
岡塚: では、続けて私が興味を持った発表について話します。「The AST Galaxy to the Virtual Machine Blues」(https://atdot.net/~ko1/activities/2026_rubykaigi2026.pdf)についてなのですが、YARVを作った本人の笹田さんが、AST(Rubyのコードを構文解析した結果であるデータ構造)の直接実行の話をされるというところが面白そうだなと思い聞きに行きました。
今回、求人飲食店ドットコムの求人詳細画面に「アプリで開く」ボタンを追加することになりました。このボタンはアプリをインストールしていないユーザーにも利用してもらう想定です。
つまり、「未インストールのユーザーをApp Store / Google Playへ誘導し、インストール後に目的の画面へ遷移させる」 という仕組みが必要でした。この課題を解決するのがディファードディープリンクです。
サードパーティ製SDK(AppsFlyer / Adjust等):SDKが提供するリンク機能を利用する方式です。ディープリンクとしての機能に加えて、インストール前後の計測やアトリビューションにも対応しており、マーケティング施策と連携しやすいのが特徴です。今回はもともとAppsFlyerのOneLinkを利用していたため、AppsFlyerが提供するUDL(Unified Deep Linking)を採用する方針となりました。
UDL(Unified Deep Linking)とは
UDLはAppsFlyerが提供するディープリンク取得APIで、従来は別々のコールバックで制御していた「Direct Deep Linking」と「Deferred Deep Linking」のAPIを、1つのインターフェースに統合した仕組みのようです。
Direct Deep Linkingは、アプリがすでにインストールされている状態でリンクから起動するケースです。
Deferred Deep Linkingは、未インストールの状態でリンクを踏んだユーザーがストアからインストールし、初回起動した際に遷移先を復元するケースです。コールバックはアプリ起動後に非同期で返ってくるため、「いつデータが返ってくるか」というタイミングの揺らぎへの対応が、実装上の重要な課題となります。