شاپیفای با کمک هوش مصنوعی اپ Shop رو نیتیو کرد
خلاصهٔ کاملتر
شاپیفای از سال ۲۰۲۰ اپ Shop رو، یکی از پراستفادهترین اپهای خرید تو دنیا، با React Native ساخته بود؛ یعنی یه فریمورک که با یه کد پایه، هم اپ iOS و هم اندروید رو میسازه. این تصمیم تا الان جواب داده بود، ولی وقتی نوبت مهاجرت به New Architecture ریاکت نیتیو رسید (یه بازنویسی داخلی که ماژولهای نیتیو و رندرینگ رو از نو میخواست)، تیم شاپیفای این فرصت رو داشت کل قضیه رو زیر سوال ببره. پیشرفت coding agent ها باعث شده هزینهی نگهداشتن دو کدبیس جدا برای iOS و اندروید منطقیتر از قبل به نظر برسه.
قبل از تصمیم نهایی، یه پروفآفکانسپت (یعنی یه آزمایش کوچیک برای سنجیدن شدنیبودن ایده) انجام دادن: یه مهندس، یه هفته با کمک coding agent ها بخش زیادی از اپ React Native رو به یه اپ نیتیو iOS با SwiftUI (فریمورک اعلانی اپل برای رابط کاربری) منتقل کرد. نتیجه آمادهی انتشار نبود، ولی نشون داد مهاجرت نزدیک به یکبهیک با فیچرهای قبلی شدنیه؛ agent ها وقتی پیادهسازی موجود جلوشون بود خیلی بهتر کار میکردن: صفحه دوباره میساختن، داده وصل میکردن، انیمیشن پیاده میکردن و چیدمان رو اصلاح میکردن.
بعد از تصمیم قطعی، یه تیم هستهای شامل شش مهندس زیرساخت نیتیو و مسیرهای اصلی کاربر رو ساختن، و تیمهای فیچر هم وسط راه اومدن تا بخشهای خودشون رو تایید کنن. اولویت این بود که هم رفتار فیچرها و هم رویدادهای آنالیتیکسی که سیستمهای پاییندستی بهشون وابستهان، دقیقا حفظ بشه؛ کاربر باید لاگین میموند و نوتیفیکیشنهاش قطع نمیشد. در کنارش، از این فرصت برای سادهسازی اپ هم استفاده کردن و چندتا صفحه رو حذف یا یکی کردن.
نتیجه از نظر عدد قابلتوجه بود: زمان استارت سرد iOS از ۳۲۰۰ به ۲۴۶۶ میلیثانیه (۲۳٪ بهتر) و اندروید از ۴۴۳۳ به ۲۲۳۳ میلیثانیه (۵۰٪ بهتر) رسید. نرخ پایداری session از ۹۹.۵٪ به بیش از ۹۹.۹۵٪ رفت، یعنی session های کرششده ده برابر کمتر شده. حجم نسخهی اندروید ۱۰۹ مگابایت کوچیکتر شد (تقریبا ۳۷٪ کمتر)، حجم iOS تقریبا ثابت موند (فقط ۱ مگابایت بیشتر). زمان build اندروید هم حدود ۷۵٪ کاهش پیدا کرد.
تو کار روزمره، بهجای اینکه یه نفر تنها کد بزنه، چند session از agent رو همزمان روی worktree های مختلف (کپی موازی از یه ریپو) اجرا میکردن. یه اکستنشن اختصاصی برای ابزار Pi ساختن که کار رو بین چند subagent تقسیم میکرد: یکی کد React Native رو بررسی میکرد، یکی پلن مینوشت، یکی فیچر رو پیاده میکرد و یکی برابری نتیجه رو چک میکرد. تایید هر پلن به هش محتواش وصل بود؛ اگه پلن عوض میشد، تاییدیه باطل میشد. برای دیباگ ابزار Tardis رو ساختن که به agent ها دسترسی زنده به لاگ و state اپ میداد.
Tardis میتونست از هر دو نسخه تو نقطههای مشابه اسکرینشات و رویداد بگیره تا مقایسهی برابری راحتتر بشه. تخصص نیتیو همچنان لازم بود: کد تولیدی agent ممکن بود تکراری باشه یا از معماری درست فاصله بگیره؛ برای همین لینتینگ، تست، آنالیز استاتیک و ریویو همیشه کنارش بود. یادگیری راحتتر از حد انتظار بود چون مفاهیم UI اعلانی React Native به یادگیری SwiftUI و Jetpack Compose (معادل اندرویدش) کمک کرد. شاپیفای از این به بعد برابری فیچر iOS و اندروید رو نه با کدبیس مشترک، با فرآیند توسعه حفظ میکنه.
نکات کلیدی:
- مهاجرت کامل اپ Shop از React Native به Swift (iOS) و Kotlin (اندروید) فقط تو ۱۲ هفته انجام شده
- زمان استارت: iOS ۲۳ درصد و اندروید ۵۰ درصد سریعتر شده
- نرخ کرش session تقریبا ده برابر کمتر شده (از ۹۹.۵٪ به بیش از ۹۹.۹۵٪ پایداری)
- حجم نسخهی اندروید حدود ۳۷ درصد (۱۰۹ مگابایت) کوچیکتر شده
- برای مدیریت کار از یه اکستنشن اختصاصی روی coding agent «Pi» و ابزار دیباگ داخلی Tardis استفاده کردن
- تایید هر implementation plan به هش محتواش وصل بود تا تغییرات بدون ریویوی دوباره رد نشن




