Fastfile: แนวคิดหลัก โครงสร้าง และการตั้งค่าอัตโนมัติในการพัฒนาแอปพลิเคชันบนมือถือ

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-04-14 เวลาอ่าน: 10 นาที

Fastfile คือไฟล์การกำหนดค่าของ Fastlane ที่เขียนด้วยภาษา Ruby ซึ่งกำหนดสคริปต์อัตโนมัติสำหรับการสร้างภาพทดสอบและจัดส่งแอปพลิเคชันบนมือถือ ไฟล์จะอยู่ในไดเรกทอรีย์ fastlane ในรากโครงการและประกอบด้วยการประกาศ lanes ซึ่งเป็นลำดับของการกระทำที่มีชื่อเรียก ตามข้อมูลจาก Fastlane Docs, 2025 โครงการส่งมือถือมากกว่า 70% ใช้ Fastfile สำหรับกระบวนการ CI/CD Fastfile แทนที่สคริปต์ bash จำนวนมากด้วยคำอธิบายไพป์ไลน์แบบแสดงเดียวเดียว

หัวข้อหลัก

  • Fastfile — ไฟล์การกำหนดค่าของ Fastlane ใน Ruby ในไดเรกทอรีย์ fastlane/
  • Lane — สคริปต์ที่มีชื่อพร้อมลำดับ action และการจัดการข้อผิดพลาด
  • Action — คำสั่งในตัวของ Fastlane (gym, scan, match, deliver) พร้อมพารามิเตอร์
  • Private lane — สคริปต์ภายในที่ถูกเรียกจาก lanes อื่นโดยไม่ต้องเริ่มต้นโดยตรง
  • พารามิเตอร์ — การส่งค่าใน lane ผ่าน option และการเข้าถึงผ่านตัวแปร

Fastfile คืออะไรและทำไมถึงต้องใช้

Fastfile คือไฟล์การกำหนดค่าหลักของ Fastlane ที่เขียนด้วยภาษา Ruby และวางไว้ในไดเรกทอรีย์ fastlane ในรากโครงการ ไฟล์นี้กำหนดสคริปต์อัตโนมัติทั้งหมด (lanes) สำหรับการสร้างภาพทดสอบลงนามโค้ดและจัดส่งแอปพลิเคชัน Fastfile แทนที่สคริปต์ bash จำนวนมาก Makefile และคำแนะนำแบบเรียกใช้ด้วยคำอธิบาย CI/CD pipeline แบบแสดงเดียวเดียว

ความจำเป็นของ Fastfile เกิดขึ้นเมื่อโครงการต้องการสร้างภาพที่สามารถทำซ้ำได้บนเครื่องแต่งต่างๆ ของนักพัฒนาและเซิร์ฟเวอร์ CI/CD แทนที่จะให้นักพัฒนาแต่ละคนตั้งค่าสภาพแวดล้อมด้วยตนเอง Fastfile จะบันทึกขั้นตอนทั้งหมดในโค้ดที่สามารถควบคุมรุ่นใน Git ตรวจสอบได้และนำกลับใช้ระหว่างโครงการ Fastfile เดียว รับประกันว่าการสร้างภาพบนเครื่องของนักพัฒนาเหมือนกับการสร้างภาพบนเซิร์ฟเวอร์ CI/CD

Fastfile รองรับ แพลตฟอร์ม ผ่านคำสั่ง default_platform ใน Fastfile เดียวสามารถอธิบายสคริปต์สำหรับ iOS Android และ macOS โดยการจัดกลุ่มในบล็อก platform :ios และ platform :android นี่มีประโยชน์โดยเฉพาะสำหรับโครงการข้ามแพลตฟอร์มที่ iOS และ Android มีตรรกะการเป็นไปส่งที่เหมือนกันแต่มีเครื่องมือการสร้างภาพแตกต่างกัน

โครงสร้าง Fastfile: lanes, actions และพารามิเตอร์

Fastfile ประกอบด้วยสามส่วนหลัก: การประกาศแพลตฟอร์ม (default_platform) การกำหนด lanes และการตั้งค่าฟังก์ชันช่วยเหลือ แต่ละ lane เริ่มต้นด้วยคำหลัก lane ตามด้วยชื่อสคริปต์ (Ruby symbol) โครงสร้างหลักที่มีลำดับ actions และบล็อกการจัดการข้อผิดพลาด error success หรือ ensure

Actions ใน Fastfile คือการเรียกฟังก์ชันในตัวของ Fastlane ด้วยพารามิเตอร์ในรูปแบบ Hash ตัวอย่างเช่น gym(scheme: 'App', export_method: 'app-store') เริ่มต้นการสร้างภาพ iOS ด้วยพารามิเตอร์ที่ระบุ แต่ละ action ส่งคืนผลลัพธ์ที่สามารถเก็บไว้ในตัวแปรและใช้ใน actions ถัดไป ซึ่งช่วยให้สามารถสร้าง ตรรกะแบ่งเงื่อนไข ภายใน lane

Fastfile รองรับ ตัวแปรสภาพแวดล้อม ผ่านกลไก ENV มาตรฐานใน Ruby ข้อมูลที่อ่อนไหว (รหัสผ่าน token คีย์) ไม่ควรถูกเก็บไว้ใน Fastfile — ให้ใช้ตัวแปรสภาพแวดล้อมของระบบ CI/CD หรือไฟล์ .env ที่ถูกเพิ่มใน .gitignore Fastlane จะโหลดไฟล์ .env จากไดเรกทอรีย์ fastlane โดยอัตโนมัติเมื่อเริ่มต้นใช้งาน

Appfile และ Matchfile

ร่วมกับ Fastfile ในไดเรกทอรีย์ fastlane ยังมีไฟล์การกำหนดค่าเพิ่มเติม Appfile ประกอบด้วยตัวระบุตัวตนแอปพลิเคชัน (app_identifier) Apple ID และ Team ID — ข้อมูลนี้จะถูกแทรกใส่ในทุก action โดยอัตโนมัติช่วยลดการทำซ้ำในแต่ละ lane Matchfile เก็บการตั้งค่าสำหรับ match: URL คลัง Git ประเภทโปรไฟล์และคีย์การเข้ารหัส

การแยกการกำหนดค่าออกเป็นหลายไฟล์ช่วยให้การบำรุงโครงการที่มีสภาพแวดล้อมแตกต่างกันง่ายขึ้น ตัวอย่างเช่น สำหรับ staging และ production สามารถสร้างสาขาแยกในคลัง Matchfile หรือกำหนดค่าผ่านตัวแปรสภาพแวดล้อมในระบบ CI/CD

ruby
# โครงสร้างพื้นฐานของ Fastfile
default_platform(:ios)

lane :build_and_test do
  cocoapods
  scan(scheme: 'App', devices: ['iPhone 15'])
  gym(scheme: 'App')
end

lane :deploy do
  match(type: 'appstore')
  build_and_test
  pilot(skip_waiting_for_build_processing: true)
end

ไวยากรณ์ Fastfile: การเขียน lanes

ไวยากรณ์ของ Fastfile ขึ้นอยู่กับ Ruby DSL (Domain Specific Language) ที่ได้รับการออกแบบโดยเฉพาะสำหรับความสามารถในการอ่านสคริปต์อัตโนมัติ Lane ถูกประกาศผ่านโครงสร้าง lane :name do ... end โดยที่ name เป็น Ruby symbol ซึ่งกลายเป็นคำสั่ง fastlane name สำหรับการทำงานจากเทอร์มินัลหรือระบบ CI/CD

ภายใน lane สามารถใช้ ตัวดำเนินเงื่อนไข ของ Ruby: if, unless, case สำหรับการแยกสาขาของตรรกะ นอกจากนี้ยังมีลูป each และ while สำหรับการประมวลผลชุดของค่า Fastlane มีเมธอดพิเศษ before_all after_all และ error block สำหรับการจัดการกับเหตุการณ์ในวงจรของ lane

พารามิเตอร์ของ lane จะถูกส่งผ่าน options hash เมื่อรัน fastlane build --option_name value ค่าจะไปยัง options[:option_name] ภายใน lane สามารถตั้งค่าเริ่มต้นผ่าน optional: true และการตรวจสอปชนิด type สำหรับการควบคุมประเภทของพารามิเตอร์ที่ส่งมา

ruby
# Lane พร้อมพารามิเตอร์และตรรกะแบ่งเงื่อนไข
lane :build do |options|
  scheme = options[:scheme] || 'App'
  export_method = options[:export_method] || 'development'

  match(type: export_method)

  if export_method == 'appstore'
    gym(scheme: scheme, export_method: 'app-store')
    pilot(skip_waiting_for_build_processing: true)
  else
    gym(scheme: scheme, export_method: export_method)
  end
end

ตัวอย่าง Fastfile สำหรับ iOS

Fastfile ที่สมบูรณ์สำหรับโครงการ iOS ประกอบด้วย lanes สำหรับการติดตั้งโปรแกรมการทดสอบการสร้างภาพและการประกาศใน TestFlight และ App Store มาดูตัวอย่างที่ครอบคลุมกระบวนการ CI/CD ทั่วไปตั้งแต่ commit ไปจนถึงการเผยแพร่ใน TestFlight สำหรับการทดสอบภายใน

ruby
# Fastfile สำหรับ CI/CD iOS
default_platform(:ios)

before_all do
  cocoapods(try_repo_update_on_error: true)
  setup_travis if ENV['TRAVIS']
end

lane :tests do
  scan(
    scheme: 'App',
    devices: ['iPhone 15', 'iPad Pro 12.9'],
    output_directory: './test_reports'
  )
end

lane :build_appstore do
  match(type: 'appstore', readonly: true)
  gym(
    scheme: 'App',
    export_method: 'app-store',
    include_bitcode: true
  )
end

lane :deploy_testflight do
  build_appstore
  pilot(
    skip_waiting_for_build_processing: true,
    distribute_external: false
  )
  slack(
    message: 'บิลด์ถูกอัปโหลดไปยัง TestFlight เพื่อการทดสอบภายใน'
  )
end

ในตัวอย่างนี้ before_all block จะทำงานก่อนแต่ละ lane และติดตั้งโปรแกรม Lane tests จะรันการทดสอบ UI และ Unit บนสองเครื่อง Lane build_appstore จะลงนามโค้ดผ่าน match และสร้าง IPA ด้วย bitcode Lane deploy_testflight จะรวมขั้นตอนทั้งหมดสำหรับการจัดส่งที่สมบูรณ์

การประกาศด้วยหลาย target

โครงการที่มีหลาย target (แอปพลิเคชันหลัก watchOS widget Notification Service Extension) จำเป็นต้องมี lanes แยกสำหรับแต่ละ target ใน Fastfile สามารถสร้าง lane :deploy_target ที่เป็นสากลสามารถรับชื่อโครงสร้างและเส้นทางของ build เป็นพารามิเตอร์ ซึ่งช่วยให้สามารถรันการประกาศสำหรับส่วนขยายทั้งหมดผ่าน fastlane deploy_target scheme:Widget

สำหรับการจัดระบบหลาย target ใช้อาร์เรย์ของโครงสร้างและลูป each ภายใน lane Fastlane รองรับการสร้างภาพแบบขนานอมของหลายโครงสร้างผ่านแฟลก parallel: true ซึ่งช่วยลดเวลาโดยรวมของ CI/CD pipeline สำหรับแอปพลิเคชันที่มีส่วนขยาย

ตัวอย่าง Fastfile สำหรับ Android

Fastfile สำหรับโครงการ Android ใช้ gradle action สำหรับการรันงาน Gradle และ supply action สำหรับการเผยแพร่ใน Google Play ต่างจาก iOS ตรงกันข้าม Android ไม่ต้องใช้ match แต่ใช้ Keystore สำหรับการลงนาม ซึ่งถูกเก็บไว้นอกคลังและส่งผ่านตัวแปรสภาพแวดล้อม

ruby
# Fastfile สำหรับ CI/CD Android
default_platform(:android)

lane :build_release do
  gradle(task: 'clean')
  gradle(task: 'bundleRelease')
  gradle(task: 'assembleRelease')
end

lane :deploy_internal do
  build_release
  supply(
    track: 'internal',
    aab: 'app/build/outputs/bundle/release/app-release.aab',
    release_status: 'completed'
  )
end

สำหรับการลงนาม Android ให้ตั้งค่า signingConfigs ใน build.gradle และส่งพารามิเตอร์ Keystore ผ่านตัวแปรสภาพแวดล้อม: ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS และ ANDROID_KEY_PASSWORD Fastlane จะใช้ apksigner ของระบบสำหรับการลงนาม AAB หรือ APK ที่สร้างเสร็จแล้ว

การลงนาม Android ใน Fastfile

สำหรับการตั้งค่าการลงนาม Android ใน Fastfile ใช้ action sign_android หรืออาศัย signingConfigs ใน build.gradle Fastlane ทำงานร่วมกับ apksigner ผ่าน Gradle — การส่งแฟลก SIGNING_CONFIG ใน gradle task จะเปิดใช้งานการลงนามด้วยพารามิเตอร์จากตัวแปรสภาพแวดล้อม ซึ่งช่วยให้สามารถลงนามไฟล์ AAB ก่อนการอัปโหลดไปยัง Google Play Console

สำหรับการเก็บ Keystore อย่างปลอดภัยใน CI/CD ใช้การเข้ารหัสแบบ Base64 และตัวแปรสภาพแวดล้อม Fastlane รองรับ action setup_keystore ที่จะถอดรหัส Keystore จากตัวแปรและเก็บไว้ในไฟล์ชั่วคราวในขั้นตอน before_all หลังจากลันเสร็จ lane ไฟล์ชั่วคราวจะถูกลบอัตโนมัติเพื่อป้องกันการรั่วไหลของใบรับรอง

การใช้ private lanes และกลุ่ม

Private lanes (สคริปต์ส่วนตัว) คือ lanes ที่ไม่สามารถเรียกใช้โดยตรงจากคำสั่งลับแต่สามารถเรียกใช้จาก lanes อื่นภายใน Fastfile Private lane ถูกประกาศผ่านโครงสร้าง private_lane :name do ... end และใช้สำหรับการหุ้มขั้นตอนที่ทำซ้ำซึ่งไม่มีความหมายเป็นสคริปต์อิสระ

Private lanes เหมาะสำหรับการจับกลุ่มตรรกะที่ทำซ้ำ: การติดตั้งโปรแกรมการตั้งค่าสภาพแวดล้อมการส่งการแจ้งเตือน ตัวอย่างเช่น สามารถสร้าง private lane :setup_signing ที่เรียกใช้จากหลาย lanes การประกาศแต่ไม่ควรเปิดให้นักพัฒนาเรียกใช้โดยตรงเพื่อหลีกเลี่ยงข้อผิดพลาด

ruby
# Private lane และการจับกลุ่ม
default_platform(:ios)

private_lane :setup_signing do |options|
  match(
    type: options[:type],
    readonly: true,
    verbose: false
  )
end

lane :beta do
  setup_signing(type: 'adhoc')
  gym(export_method: 'ad-hoc')
  pilot(distribute_external: true)
end

lane :release do
  setup_signing(type: 'appstore')
  gym(export_method: 'app-store')
  deliver(
    force: true,
    submit_for_review: true
  )
end

การจับกลุ่ม lanes ผ่าน platform blocks ช่วยให้สามารถแยกสคริปต์สำหรับ iOS และ Android ใน Fastfile เดียวกัน โครงสร้าง platform :ios do ... end และ platform :android do ... end จะแยก lanes ของแพลตฟอร์มนั้น ส่วน private lanes ทั่วไปสามารถวางไว้นอกบล็อกแพลตฟอร์มเพื่อนำกลับมาใช้ใหม่

การส่งพารามิเตอร์ไปยัง lanes

กลไกของพารามิเตอร์ใน Fastfile ทำให้ lanes มีความยืดหยุ่นและสามารถนำกลับมาใช้ใหม่ได้ พารามิเตอร์จะถูกส่งตอนรันผ่านคำสั่งลับ: fastlane build scheme:App export_method:appstore ภายใน lane ค่าต่างๆ สามารถเข้าถึงได้ผ่าน options hash ที่ถูกส่งไปยัง lane block เป็นอาร์กิวเมนต์

Fastlane รองรับพารามิเตอร์ที่มีชนิดข้อมูลพร้อมการตรวจสอบผ่าน OptionalHash สามารถตั้งค่าชนิดของค่า (String Boolean Integer) ค่าเริ่มต้นและรายละเอียดสำหรับการสร้างเอกสารโดยอัตโนมัติ นอกจากนี้ยังมีตัวแปรสภาพแวดล้อมเป็นวิธีทางเลือกสำหรับการส่งพารามิเตอร์ ซึ่งสะดวกสำหรับระบบ CI/CD

ruby
# พารามิเตอร์ที่มีการตรวจสอบชนิด
lane :build do |options|
  gym(
    scheme: options[:scheme],
    export_method: options[:export_method] || 'development',
    include_bitcode: options[:include_bitcode] || false,
    output_name: options[:output_name]
  )
  slack(message: "การสร้าง #{options[:scheme]} เสร็จสมบูรณ์")
end

# คำสั่ง: fastlane build scheme:MyApp export_method:appstore

ควรใช้ค่าเริ่มต้นสำหรับพารามิเตอร์ที่ไม่จำเป็นเพื่อให้ lane สามารถรันได้โดยไม่ต้องระบุทุกอาร์กิวเมนต์ สำหรับพารามิเตอร์ที่จำเป็น ให้ตรวจสอบค่าตั้งแต่ต้น lane และหยุดการทำงานด้วยข้อความผิดพลาดที่เข้าใจง่ายผ่าน UI.user_error!

คำถามที่พบบ่อย

Fastfile คืออะไรในการพัฒนาแอปพลิเคชันบนมือถือ?

Fastfile คือไฟล์การกำหนดค่าของ Fastlane ที่เขียนด้วย Ruby ซึ่งกำหนดสคริปต์อัตโนมัติสำหรับการสร้างภาพทดสอบและจัดส่งแอปพลิเคชัน iOS และ Android ไฟล์จะอยู่ในไดเรกทอรีย์ fastlane และประกอบด้วย lanes ซึ่งเป็นลำดับการกระทำที่มีชื่อสำหรับกระบวนการ CI/CD

จะเขียน Fastfile ง่ายๆ สำหรับ iOS ได้อย่างไร?

สร้างไดเรกทอรีย์ fastlane ในรากโครงการและไฟล์ Fastfile เพิ่ม default_platform(:ios) ประกาศ lane ชื่อ :build ภายในเรียก cocoapods สำหรับติดตั้งโปรแกรมและ gym สำหรับการสร้างภาพ รันผ่าน fastlane build จากเทอร์มินัลในรากโครงการ

Private lane แตกต่างจาก lane ทั่วไปอย่างไร?

Private lane ถูกประกาศผ่าน private_lane แทนที่ lane และไม่สามารถเรียกใช้โดยตรงจากคำสั่งลับ โดยจะเรียกใช้ได้เฉพาะจาก lanes อื่นภายใน Fastfile ใช้สำหรับการหุ้มขั้นขั้นตอนที่ทำซ้ำซึ่งไม่มีความหมายเป็นสคริปต์อิสระ

จะส่งพารามิเตอร์ไปยัง lane ใน Fastfile ได้อย่างไร?

พารามิเตอร์จะถูกส่งผ่านคำสั่งลับ fastlane build scheme:App และสามารถเข้าถึงได้ภายใน lane ผ่าน options hash สามารถตั้งค่าเริ่มต้นผ่านตัวดำเนิน || และสำหรับพารามิเตอร์ที่จำเป็นให้ตรวจสอบค่าผ่าน raise หรือ UI.user_error! ตั้งแต่ต้น lane

Fastfile ควรอยู่ที่ไหนในโครงการ?

Fastfile ควรอยู่ในไดเรกทอรีย์ fastlane ในรากโครงการ ตัวอย่าง: /Users/user/projects/MyApp/fastlane/Fastfile Fastlane จะค้นหาไฟล์โดยอัตโนมัติเมื่อรันจากรากโครงการ ในไดเรกทอรีย์เดียวกันอาจมี Appfile Matchfile และไฟล์การกำหนดค่าอื่นๆ

สรุป

  • Fastfile — ไฟล์การกำหนดค่าของ Fastlane ที่เขียนด้วย Ruby สำหรับการกำหนดสคริปต์ CI/CD สำหรับแอปพลิเคชันบนมือถือ
  • Lane — สคริปต์ที่มีชื่อซึ่งรวมลำดับ actions พร้อมการรองรับพารามิเตอร์และการจัดการข้อผิดพลาด
  • Private lane — สคริปต์ส่วนตัวสำหรับการหุ้มขั้นตรรกะที่ทำซ้ำ ไม่สามารถเรียกใช้โดยตรง
  • iOS Fastfile ประกอบด้วย before_all lanes สำหรับการทดสอบ (scan) การสร้างภาพ (gym) และการประกาศ (pilot deliver)
  • Android Fastfile ใช้ gradle action สำหรับการสร้างภาพและ supply action สำหรับการเผยแพร่ใน Google Play
  • พารามิเตอร์ ถูกส่งผ่านคำสั่งลับ สามารถเข้าถึงได้ผ่าน options hash พร้อมค่าเริ่มต้น
  • Fastfile ถูกควบคุมรุ่นใน Git พร้อมกับโครงการ ทำให้มั่นใจได้ว่าสามารถสร้างภาพได้เหมือนกันบนทุกเครื่องในทีม

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม