Ruby — ภาษาที่ถูกแปลความหมายแบบไดนามิกที่มีไวยากรณ์สวยงาม รู้จักกันดีจากเฟรมเวิร์ก Ruby on Rails ในการพัฒนาแอปมือถือ Ruby ถูกใช้เป็นหลักผ่าน Fastlane — เครื่องมือมาตรฐานสำหรับการอัตโนมัติการ build การทดสอบ และการ deploy แอป iOS และ Android จากข้อมูลของ เอกสารทางการของ Fastlane เครื่องมือนี้ถูกใช้ในกว่า 100,000 โปรเจกต์ทั่วโลก
สาระสำคัญ
Ruby — ภาษาที่ถูกแปลความหมายแบบไดนามิกแบบโอเพนซอร์ส สร้างโดย Yukihiro Matsumoto ในปี 1995 หลักการสำคัญของ Ruby คือ “optimal simplicity” (principle of least surprise) ภาษานี้รู้จักในเรื่องบล็อก (closures) แนวคิดเชิงวัตถุบริสุทธิ์ (ทุกอย่างเป็นอ็อบเจกต์ รวมถึงตัวเลข) และระบบเมตาโปรแกรมมิ่งที่ทรงพลัง
Ruby ทำงานบนอินเทอร์พรีเตอร์ YARV (Yet Another Ruby VM) พร้อม JIT คอมไพเลชันตั้งแต่เวอร์ชัน 3.1 เวอร์ชันล่าสุด Ruby 3.4 (2025) มีเดคอเรเตอร์ พาร์เซอร์ Prism ที่ปรับปรุงใหม่ และการรองรับชนิดข้อมูลเชิงทดลองผ่าน RBS RubyGems — ตัวจัดการแพ็คเกจ — มีมากกว่า 200,000 gems
Ruby on Rails — เว็บเฟรมเวิร์กที่โด่งดังที่สุดบน Ruby แต่ในการพัฒนาแอปมือถือ Ruby ถูกใช้ในลักษณะที่แตกต่างออกไป จุดหลักคือ Fastlane: ระบบนิเวศของสคริปต์ Ruby และ gems สำหรับอัตโนมัติทุกขั้นตอนของวงจรชีวิตแอปมือถือ ตั้งแต่การเซ็นใบรับรองไปจนถึงการเผยแพร่ในสโตร์
การทำงานกับ Fastlane ต้องการความเข้าใจพื้นฐาน Ruby: เมธอด บล็อก do-end สัญลักษณ์ (:symbol) และไวยากรณ์แฮช { key: value } ต่างจาก Python ตรงที่ Ruby ใช้ end เพื่อปิดบล็อก แทนที่จะใช้การย่อหน้า เมธอดสามารถเรียกได้โดยไม่ต้องวงเล็บ — ซึ่งถูกใช้อย่างมากใน Fastlane DSL
# พื้นฐานไวยากรณ์ Ruby ที่ใช้ใน Fastlane
def download_assets(version, platform: "ios")
paths = {
ios: "ios/Assets.car",
android: "android/app/src/main/assets"
}
url = "https://cdn.example.com/assets/#{version}/#{paths[platform.to_sym]}"
puts "Downloading from: #{url}"
unless File.exist?("temp/assets")
Dir.mkdir("temp/assets")
end
result = system("curl -o temp/assets.zip #{url}")
raise "Download failed" unless result
end
download_assets("1.2.3", platform: "android")ในตัวอย่าง เมธอด download_assets รับอาร์กิวเมนต์ version และพารามิเตอร์แบบมีชื่อ platform (ค่าเริ่มต้น “ios”) การแทรกสตริงผ่าน #{...} จะแทรกค่าลงในสตริงโดยตรง unless — ตรงข้ามกับ if ดำเนินการโค้ดถ้าเงื่อนไขเป็นเท็จ
Fastlane — เครื่องมือโอเพนซอร์ส เขียนด้วย Ruby ติดตั้งผ่าน gem install fastlane โดยมีชุดคำสั่งสำหรับอัตโนมัติงานที่ซ้ำซากที่สุดของนักพัฒนาแอปมือถือ: การสร้างภาพหน้าจอ การเซ็นโค้ด การเผยแพร่ใน TestFlight และ Google Play Console
Fastlane ประกอบด้วยเครื่องมือ (tools): sigh (จัดการใบรับรอง), match (ซิงค์ใบรับรองในทีม), gym (build iOS), gradle (build Android), deliver (เผยแพร่ iOS), supply (เผยแพร่ Android), snapshot (ภาพหน้าจอ), scan (การทดสอบ) เครื่องมือทั้งหมดเข้าถึงได้จาก Fastfile เดียว
ในโปรเจกต์ขนาดใหญ่ Fastlane จัดการกว่า 50+ การกระทำในไปป์ไลน์เดียว: การเพิ่มเวอร์ชัน การโหลดสินทรัพย์จาก CDN การ build การเซ็น การอัปโหลดไปยัง App Store Connect การส่งการแจ้งเตือนไปยัง Slack ทั้งไปป์ไลน์ทำงานด้วยคำสั่งเดียว: fastlane release
Fastfile — ไฟล์บน DSL คล้าย Ruby ที่อธิบายลำดับการกระทำ (lanes) แต่ละ lane — งานแยก: beta (build สำหรับทดสอบ), release (ปล่อย), screenshots (สร้างภาพหน้าจอ) Lane สามารถเรียก lane อื่นผ่านพารามิเตอร์ที่ส่งต่อได้
# Fastfile — การกำหนดค่าไปป์ไลน์ build แอป iOS
fastlane_version "2.220.0"
default_platform :ios
platform :ios do
desc "การ build และ deploy บิลด์ TestFlight"
lane :beta do |options|
increment_build_number(
build_number: options[:build]
)
match(type: :appstore)
gym(
scheme: "MyApp",
export_method: "app-store",
configuration: "Release"
)
upload_to_testflight(
app_identifier: "com.example.myapp"
)
slack(
message: "บิลด์ #{options[:build]} ถูกอัปโหลดไปยัง TestFlight"
)
end
endLane beta ดำเนินการตามลำดับ: เพิ่มหมายเลข build (increment_build_number), ซิงค์ใบรับรอง (match), build ไฟล์เก็บถาวร (gym), อัปโหลดไปยัง TestFlight (upload_to_testflight) และส่งการแจ้งเตือนไปยัง Slack พารามิเตอร์ :build ส่งไปยัง lane เป็นอาร์กิวเมนต์แบบมีชื่อ
Fastlane รองรับทั้งสองแพลตฟอร์มใน Fastfile เดียว สำหรับ Android ใช้ lane ภายใต้ platform :android พร้อม actions gradle, supply และ google_play_track_version_codes
platform :android do
desc "การ build APK และเผยแพร่ใน Google Play Internal Testing"
lane :beta do
gradle(
task: "assemble",
build_type: "Release",
flavor: "Production"
)
supply(
track: "internal",
apk_paths: ["app/build/outputs/apk/release/app-release.apk"]
)
end
endFastlane มีมากกว่า 200 actions ในตัว ด้านล่างคือ actions ที่สำคัญที่สุดสำหรับการพัฒนาแอปมือถือ แบ่งตามหมวดหมู่
| Action | แพลตฟอร์ม | วัตถุประสงค์ |
|---|---|---|
| match | iOS | ซิงค์ใบรับรองและ provisioning profiles ผ่าน Git |
| gym | iOS | build .app และ .ipa archive |
| scan | iOS | รัน UI-test บน simulator |
| snapshot | iOS | สร้างภาพหน้าจออัตโนมัติบนอุปกรณ์ต่างๆ |
| deliver | iOS | อัปโหลด build ภาพหน้าจอ และ metadata ไปยัง App Store Connect |
| pilot | iOS | จัดการ TestFlight: อัปโหลด build เพิ่มผู้ทดสอบ |
| gradle | Android | รัน Gradle tasks: assemble, test, bundle |
| supply | Android | อัปโหลด APK/AAB และ metadata ไปยัง Google Play Console |
| screengrab | Android | ภาพหน้าจออัตโนมัติสำหรับ Google Play |
| firebase_app_distribution | ทั้งคู่ | อัปโหลด build ไปยัง Firebase App Distribution |
match — gem ของ Fastlane สำหรับซิงค์ใบรับรอง iOS และ provisioning profiles ระหว่างนักพัฒนา ความลับทั้งหมดถูกเก็บใน Git repository ที่เข้ารหัสหรือ S3 Match สร้างใบรับรองอัตโนมัติถ้าไม่มีอยู่ และอัปเดตเมื่อหมดอายุ
# การเริ่มต้น match สำหรับโปรเจกต์ใหม่
$ fastlane match init
# การสร้างและซิงค์ใบรับรอง App Store
$ fastlane match appstore
# การสร้างใบรับรอง Development สำหรับทีม
$ fastlane match development
# การอัปเดตใบรับรองทั้งหมดเมื่อหมดอายุ
$ fastlane match --forceMatch เก็บคีย์ส่วนตัวด้วยรหัสผ่านที่นักพัฒนาเท่านั้นที่รู้ นักพัฒนาแต่ละคนโคลน repository ใบรับรองและรัน match เพื่อติดตั้งโปรไฟล์ล่าสุด อายุใบรับรอง Apple — 1 ปี match ต่ออายุอัตโนมัติ
Fastlane บูรณาการกับแพลตฟอร์ม CI/CD ใดก็ได้: GitHub Actions, GitLab CI, CircleCI, Bitrise, Jenkins และ Xcode Cloud (ผ่าน xcode-build) Fastlane ทำงานบน CI ผ่านคำสั่ง fastlane
การตั้งค่าสำหรับ GitHub Actions รวมถึงการติดตั้ง Ruby, fastlane และรัน lane ผ่าน bundle exec fastlane สำหรับ iOS build ต้องใช้ macOS runner สำหรับ Android ใช้ ubuntu-latest ซึ่งถูกกว่า
# .github/workflows/deploy.yml — CI/CD ด้วย Fastlane
name: Deploy Mobile App
on:
push:
branches: [main]
jobs:
ios-deploy:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
- run: bundle install
- run: bundle exec fastlane beta
- env:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}Workflow ทำงานเมื่อ push ไปยัง main macOS runner ดำเนินการ bundle exec fastlane beta จาก Fastfile MATCH_PASSWORD ส่งผ่าน GitHub Secrets เพื่อถอดรหัสใบรับรอง หลังจาก lane เสร็จ Slack action ส่งการแจ้งเตือน
RubyGems — ตัวจัดการแพ็คเกจสำหรับ Ruby Fastlane ขยายผ่านปลั๊กอิน — gems ที่เพิ่ม actions ใหม่ ปลั๊กอิน fastlane-plugin-versioning จัดการเวอร์ชัน fastlane-plugin-firebase_app_distribution อัปโหลด build ไปยัง Firebase บน GitHub มีมากกว่า 500 ปลั๊กอิน Fastlane
Gemfile ใน root ของโปรเจกต์กำหนดเวอร์ชันของ dependencies ทั้งหมดเพื่อให้การ build ทำซ้ำได้ bundle install ติดตั้ง gems ตาม Gemfile.lock gems หลักสำหรับการพัฒนาแอปมือถือ: fastlane, cocoapods (dependencies iOS), xcodeproj (ทำงานกับ .xcodeproj)
# Gemfile สำหรับโปรเจกต์มือถือ
source "https://rubygems.org"
gem "fastlane", "~> 2.220"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)Fastlane — ไม่ใช่เครื่องมืออัตโนมัติเพียงตัวเดียว เปรียบเทียบกับทางเลือกหลักตามเกณฑ์ที่สำคัญสำหรับทีมมือถือ
| เกณฑ์ | Fastlane (Ruby) | Bitrise (เว็บ) | Xcode Cloud (Apple) | GitHub Actions (YAML) |
|---|---|---|---|---|
| ความยืดหยุ่น | สูงสุด (โค้ด) | ปานกลาง (steps) | ต่ำ (จำกัด) | สูง |
| iOS | รองรับเต็ม | เต็ม | เต็ม (ในตัว) | ผ่าน self-hosted macOS |
| Android | รองรับเต็ม | เต็ม | ไม่มี | เต็ม |
| ใบรับรอง (match) | ในตัว | ผ่าน Code Signing | อัตโนมัติ | ผ่าน fastlane |
| รันในเครื่อง | ได้ | ไม่ได้ (CI เท่านั้น) | ไม่ได้ | ผ่าน act |
| ปลั๊กอิน | 500+ | 200+ integrations | ไม่มี | 20,000+ actions |
Fastlane ยังคงเป็นเครื่องมือที่ยืดหยุ่นที่สุดสำหรับไปป์ไลน์ที่ซับซ้อน Bitrise สะดวกสำหรับทีมที่ไม่มีนักพัฒนา Ruby Xcode Cloud — สำหรับโปรเจกต์ iOS อย่างง่าย GitHub Actions — ถ้าทีมใช้ GitHub อยู่แล้ว
คำถามที่พบบ่อย
Ruby ใช้ไม่ได้สำหรับการเขียนแอปมือถือ แต่ใช้สำหรับอัตโนมัติกระบวนการ build การทดสอบ และการ deploy ผ่าน Fastlane Fastlane — มาตรฐานโดยพฤตินัยสำหรับ CI/CD ในการพัฒนา iOS และ Android
Fastlane ทำงานบน macOS, Linux และ Windows แต่สำหรับ iOS build ต้องใช้ Xcode และ macOS Android build ทำได้บนทุกแพลตฟอร์ม นักพัฒนาใช้ macOS ในเครื่อง ส่วน CI ใช้ macOS สำหรับ iOS และ Linux สำหรับ Android
ความเข้าใจพื้นฐาน Ruby เพียงพอสำหรับการทำงานกับ Fastlane Fastlane ใช้ DSL คล้าย Ruby ใน Fastfile สำหรับงานทั่วไป ความรู้เกี่ยวกับ gems บล็อก do-end และไวยากรณ์พื้นฐานก็เพียงพอ ไม่จำเป็นต้องรู้ Ruby เชิงลึก
ทางเลือก: Gradle สำหรับ Android (ในตัว), Xcode Cloud (Apple), Bitrise (เว็บอินเทอร์เฟซ), GitHub Actions (YAML) Fastlane ยังคงเป็นเครื่องมือที่ยืดหยุ่นที่สุดด้วยระบบนิเวศ actions และปลั๊กอินที่หลากหลาย
ใช่ Fastlane ถูกใช้โดยบริษัทขนาดใหญ่ actions และไฟล์คอนฟิกทั้งหมดถูกจัดเวอร์ชันใน repository และ match ให้การจัดเก็บใบรับรองอย่างปลอดภัยใน repository หรือ S3
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ