Lane — คืออะไร การสร้างและการใช้ใน Fastlane

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

Lane — คือสคริปต์อัตโนมัติที่มีชื่อใน Fastlane ซึ่งรวมลำดับของการดำเนินการ (actions) สำหรับการสร้าง การทดสอบ หรือการจัดส่งแอปพลิเคชันมือถือ แต่ละ lane ถูกกำหนดใน Fastfile ด้วยภาษา Ruby และสามารถรันได้ด้วยคำสั่งเดียวจากเทอร์มินัลหรือระบบ CI/CD ตามข้อมูลจาก Fastlane Docs, 2025 85% ของ Fastfile มีมากกว่าสาม lane สำหรับขั้นตอน CI/CD ที่แตกต่างกัน Lane สามารถรับพารามิเตอร์ เรียกใช้ lanes อื่น ๆ และจัดการข้อผิดพลาดในการทำงาน

ประเด็นสำคัญ

  • Lane — สคริปต์อัตโนมัติที่มีชื่อใน Fastfile ด้วยภาษา Ruby
  • พารามิเตอร์ — การส่งค่าผ่าน options hash เมื่อรัน fastlane lane_name key:value
  • before_all/after_all — บล็อกสำหรับรันโค้ดก่อนและหลังแต่ละ lane
  • Private lane — สคริปต์ที่เข้าถึงได้เฉพาะการเรียกจาก lanes อื่น
  • การจัดการข้อผิดพลาด — บล็อก error สำหรับจัดการข้อผิดพลาดและส่งการแจ้งเตือน

Lane ใน Fastlane คืออะไร

Lane — คือบล็อกพื้นฐานของ Fastlane ที่กำหนดสคริปต์อัตโนมัติที่มีชื่อ แต่ละ lane อธิบายลำดับของการดำเนินการ (actions) ที่ดำเนินการเพื่อบรรลุเป้าหมายเฉพาะ: สร้างแอปพลิเคชัน รันทดสอบ อัปโหลดบิลด์ไปยังสโตร์ หรือกำหนดค่าสภาพแวดล้อม Lane ถูกประกาศใน Fastfile และรันด้วยคำสั่ง fastlane [ชื่อ_lane] จากรากของโปรเจกต์

แนวคิดของ lane นำมาจาก Ruby DSL และรับประกัน ความสามารถในการอ่านสคริปต์ นักพัฒนามองเห็นกระบวนการ CI/CD ทั้งหมดเป็นลำดับของการเรียก actions พร้อมชื่อและพารามิเตอร์ที่เข้าใจได้ Lane สามารถเป็นแบบง่าย (คำสั่งเดียว) หรือซับซ้อน (การแยกสาขา ลูป การเรียก lanes อื่น)

แต่ละ lane หลังจากดำเนินการจะส่งคืน ผลลัพธ์ — ออบเจกต์ที่มีสถานะการดำเนินการและข้อมูลจาก actions ผลลัพธ์สามารถใช้ใน lanes อื่นหรือส่งต่อไปยังระบบ CI/CD เพื่อการตัดสินใจ หาก action ใด ๆ ใน lane สิ้นสุดด้วยข้อผิดพลาด การดำเนินการของ lane จะหยุดและเรียกบล็อก error

ไวยากรณ์ lane: การประกาศและการรัน

ไวยากรณ์การประกาศ lane เป็นไปตามรูปแบบ Ruby DSL ง่าย ๆ: คีย์เวิร์ด lane, ชื่อสคริปต์เป็นสัญลักษณ์ Ruby (symbol), บล็อก do ... end พร้อมเนื้อหาสคริปต์ ชื่อ lane ต้องไม่ซ้ำกันภายในแพลตฟอร์มและประกอบด้วยตัวอักษร ตัวเลข และขีดล่าง

การรัน lane ดำเนินการผ่านบรรทัดคำสั่ง: fastlane build (สำหรับ lane ที่ชื่อ :build) หรือ bundle exec fastlane build (หาก Fastlane ติดตั้งผ่าน Bundler) สำหรับ lanes เฉพาะแพลตฟอร์ม ให้ใช้ fastlane ios build หรือ fastlane android build

ruby
# การประกาศ lane อย่างง่าย
lane :test do
  scan(scheme: 'App', devices: ['iPhone 15'])
end

lane :build_and_deploy do
  cocoapods
  test
  gym(scheme: 'App', export_method: 'app-store')
  pilot(skip_waiting_for_build_processing: true)
end

# รัน: fastlane build_and_deploy

Lane สามารถมี ตรรกะแบบมีเงื่อนไข ตามพารามิเตอร์หรือตัวแปรสภาพแวดล้อม ใช้ if/unless เพื่อข้ามขั้นตอนในเงื่อนไขที่กำหนด นอกจากนี้ยังมีลูป each สำหรับการประมวลผลอาเรย์ ซึ่งสะดวกสำหรับการสร้างหลายเป้าหมายหรือสคีมาแอปพลิเคชันใน lane เดียว

การคืนค่าจาก lane

Lane สามารถคืนค่าที่โค้ดผู้เรียกสามารถเข้าถึงได้ สำหรับการคืนค่า ให้ใช้ return ปกติของ Ruby หรือนิพจน์สุดท้ายในบล็อก lane ค่าที่คืนสามารถเป็นสตริง ตัวเลข hash หรือผลลัพธ์ของ action ซึ่งช่วยให้ใช้ผลลัพธ์ของ lane หนึ่งในอีก lane หนึ่งเพื่อการตัดสินใจ

ตัวอย่างเช่น lane :get_version สามารถคืนเวอร์ชันปัจจุบันของแอปพลิเคชันจาก Info.plist และ lane :deploy ใช้มันเพื่อจัดรูปแบบข้อความใน Slack ค่าที่คืนมีประโยชน์โดยเฉพาะใน private lanes ซึ่งผลลัพธ์จำเป็นสำหรับการประมวลผลต่อใน lane ที่เรียก

พารามิเตอร์ lane: การส่งและการจัดการ

พารามิเตอร์ของ lane ทำให้สคริปต์มีความยืดหยุ่นและนำกลับมาใช้ใหม่ได้ Lane รับพารามิเตอร์ผ่าน options hash ซึ่งส่งผ่านเมื่อรันจากบรรทัดคำสั่ง: fastlane deploy scheme:AppStore version:2.1.0 ภายใน lane พารามิเตอร์สามารถเข้าถึงได้เป็น options[:scheme] และ options[:version]

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

ruby
# Lane พร้อมการจัดการพารามิเตอร์
lane :deploy do |options|
  scheme = options[:scheme]
  version = options[:version] || '1.0.0'
  beta = options[:beta] || false

  UI.user_error!("ไม่ได้ระบุ scheme") unless scheme

  match(type: beta ? 'adhoc' : 'appstore')
  gym(scheme: scheme, export_method: beta ? 'ad-hoc' : 'app-store')

  if beta
    pilot(distribute_external: true)
  else
    deliver(submit_for_review: true)
  end
end

# รัน: fastlane deploy scheme:MyApp beta:true version:2.1.0

สำหรับการทำงานกับ ตัวแปรสภาพแวดล้อม ภายใน lane ให้ใช้ ENV['VARIABLE_NAME'] Fastlane โหลดไฟล์ .env จากไดเรกทอรี fastlane โดยอัตโนมัติ นี่เป็นวิธีมาตรฐานในการส่งข้อมูลที่ละเอียดอ่อน — คีย์ API รหัสผ่าน และโทเคน — ในสภาพแวดล้อม CI/CD โดยไม่ต้องเก็บไว้ใน Fastfile

การตรวจสอบพารามิเตอร์

สำหรับการทำงานที่เชื่อถือได้ของ lane จำเป็นต้องตรวจสอบพารามิเตอร์ขาเข้า ใช้ UI.user_error! พร้อมคำอธิบายปัญหาหากพารามิเตอร์ที่จำเป็นหายไปหรือมีชนิดไม่ถูกต้อง Fastlane มีเมธอด options ที่ให้กำหนดชนิด (String, Boolean, Integer, Array) ค่าเริ่มต้น และคำอธิบายสำหรับแต่ละพารามิเตอร์ — การตรวจสอบจะดำเนินการโดยอัตโนมัติเมื่อเริ่ม lane

นอกจากนี้ยังสามารถใช้การตรวจสอบผ่านบล็อก verify: verify do |value| value.length > 0 end สำหรับพารามิเตอร์สตริง ในกรณีรูปแบบไม่ถูกต้อง Fastlane จะแสดงข้อความที่ชัดเจนพร้อมระบุรูปแบบที่คาดหวังและค่าที่ส่ง ซึ่งช่วยอำนวยความสะดวกในการดีบักในสภาพแวดล้อม CI/CD

การรวม lanes: before_all, after_all และการจัดการข้อผิดพลาด

Fastlane มี ฮุควงจรชีวิต สำหรับรันโค้ดก่อนและหลังแต่ละ lane บล็อก before_all จะรันก่อนแต่ละ lane บนแพลตฟอร์มที่กำหนดหรือทั่วโลก บล็อก after_all จะรันหลังจาก lane เสร็จสมบูรณ์ บล็อก error จะรันเมื่อเกิดข้อผิดพลาดภายใน lane

ฮุคช่วยให้ รวมศูนย์ตรรกะที่ซ้ำกัน: การติดตั้ง dependencies ใน before_all การส่งการแจ้งเตือนใน after_all การล้างไฟล์ชั่วคราวและการแจ้งข้อผิดพลาดในบล็อก error ซึ่งช่วยลดการซ้ำซ้อนของโค้ดและทำให้ lanes สะอาดขึ้น

ruby
# ฮุควงจรชีวิตของ lanes
default_platform(:ios)

before_all do
  cocoapods(try_repo_update_on_error: true)
  ensure_git_status_clean
end

after_all do |lane|
  slack(message: "Lane #{lane} ดำเนินการสำเร็จ")
end

error do |lane, exception|
  slack(
    message: "Lane #{lane} ล้มเหลวด้วยข้อผิดพลาด: #{exception}",
    success: false
  )
end

lane :deploy do
  match(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

บล็อก error รับอาร์กิวเมนต์สองตัว: ชื่อ lane (symbol) และออบเจกต์ข้อยกเว้น ภายในบล็อก คุณสามารถส่งการแจ้งเตือนใน Slack เขียนล็อกลงไฟล์ หรือเรียกใช้สคริปต์กู้คืนทางเลือก หากบล็อก error เสร็จสมบูรณ์ Fastlane จะไม่ถือว่าบิลด์ล้มเหลวในระดับ CI/CD

Private lanes และการใช้ซ้ำ

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

Private lanes มีประโยชน์อย่างยิ่งสำหรับ ลำดับที่ซับซ้อน ของการดำเนินการที่ต้องดำเนินการตามลำดับที่กำหนดอย่างเคร่งครัด ตัวอย่างเช่น private lane :setup_signing สามารถเรียกได้จาก lanes :build_dev, :build_staging และ :build_production ด้วยพารามิเตอร์ที่แตกต่างกัน แต่ตัวมันเองไม่มีความหมายเป็นคำสั่งแยก

ruby
# Private lanes สำหรับการใช้ซ้ำ
private_lane :setup_environment do |options|
  cocoapods(try_repo_update_on_error: true)
  match(type: options[:type], readonly: true)
  increment_build_number
end

lane :dev_build do
  setup_environment(type: 'development')
  gym(export_method: 'development')
end

lane :appstore_build do
  setup_environment(type: 'appstore')
  gym(export_method: 'app-store')
  deliver
end

Private lanes สามารถเรียก private lanes อื่น สร้าง ลำดับชั้นของนามธรรม แนะนำให้จำกัดความลึกของการซ้อนกันไว้ที่ 2–3 ระดับเพื่อรักษาความสามารถในการอ่านของ Fastfile จัดทำเอกสารแต่ละ private lane ด้วยคอมเมนต์ที่อธิบายวัตถุประสงค์และพารามิเตอร์ที่คาดหวัง

ตัวอย่าง lanes สำหรับ iOS และ Android

มาดู ตัวอย่างเชิงปฏิบัติ ของ lanes สำหรับโปรเจกต์ iOS และ Android โดยทั่วไป iOS lanes ใช้ scan สำหรับการทดสอบ match สำหรับใบรับรอง gym สำหรับการสร้าง และ pilot หรือ deliver สำหรับการจัดส่ง Android lanes ใช้ gradle สำหรับการสร้าง supply สำหรับการเผยแพร่ และ firebase_test_lab สำหรับการทดสอบบนคลาวด์

ruby
// Lane สำหรับ CI/CD เต็มรูปแบบของแอป iOS
lane :ci_full_ios do
  scan(scheme: 'App', code_coverage: true)
  gym(scheme: 'App', export_method: 'app-store')
  pilot(distribute_external: true)
  slack(message: 'CI/CD iOS เสร็จสมบูรณ์')
end

/* Lane สำหรับ CI/CD เต็มรูปแบบของแอป Android */
lane :ci_full_android do
  gradle(task: 'testReleaseUnitTest')
  gradle(task: 'bundleRelease')
  supply(track: 'internal')
end

การรวม lanes สำหรับ iOS และ Android คุณสามารถสร้าง กระบวนการ CI/CD แบบรวม สำหรับแอปพลิเคชันข้ามแพลตฟอร์ม ใช้บล็อกแพลตฟอร์ม platform :ios และ platform :android เพื่อจัดกลุ่ม lanes เฉพาะแพลตฟอร์ม และเรียกใช้จาก lane orchestrator ทั่วไปที่จัดการลำดับการดำเนินการ

แนวปฏิบัติที่ดีที่สุดในการเขียน lanes

เมื่อเขียน lanes แนะนำให้ปฏิบัติตามชุดแนวปฏิบัติที่รับประกันความสามารถในการอ่าน การบำรุงรักษา และความน่าเชื่อถือของสคริปต์ กฎข้อแรก — แต่ละ lane ควรทำภารกิจเดียว หาก lane ทำอะไรหลายอย่างเกินไป ให้แบ่งเป็นหลาย lanes และ private lanes

กฎข้อที่สอง — การตั้งชื่อ lanes ควรเป็นคำกริยาหรือวลีกริยา: build, deploy, test, upload_screenshots หลีกเลี่ยงชื่อนามธรรมเช่น process หรือ do_all ใช้ขีดล่างเพื่อแยกคำในชื่อ lane

กฎข้อที่สาม — จัดการข้อผิดพลาดอย่างชัดเจน ใช้ UI.user_error! สำหรับข้อความที่เข้าใจได้เกี่ยวกับปัญหา อย่าพึ่งพาข้อความข้อผิดพลาดมาตรฐานของ Fastlane — ให้บริบทแก่นักพัฒนา: “ไม่พบไฟล์ GoogleService-Info.plist — เพิ่มไปยังโปรเจกต์” แทนที่ “File not found”

แนวปฏิบัติคำอธิบายตัวอย่าง
ภารกิจเดียวLane ดำเนินการหนึ่งการดำเนินการเชิงตรรกะlane :run_tests, lane :build_ipa
พารามิเตอร์การตั้งค่าทั้งหมดผ่าน options หรือ ENVoptions[:scheme] || default
ฮุคbefore_all/after_all สำหรับโค้ดทั่วไปcocoapods ใน before_all
คอมเมนต์จัดทำเอกสารส่วนที่ซับซ้อน# สร้างด้วย bitcode
ข้อผิดพลาดข้อความข้อผิดพลาดที่เข้าใจได้UI.user_error!(“...”)

กฎข้อที่สี่ — ทดสอบ lanes ในเครื่องก่อนรันบน CI/CD Fastlane รองรับโหมด dry-run ผ่านแฟล็ก --dry-run ซึ่งแสดงว่า actions ใดจะถูกดำเนินการโดยไม่รันจริง ใช้ fastlane run_test สำหรับทดสอบ lanes แต่ละรายการอย่างแยกก่อนการรวม

การจัดทำเอกสาร lanes

การจัดทำเอกสารของแต่ละ lane เป็นแนวปฏิบัติที่สำคัญสำหรับการพัฒนาทีม Fastlane รองรับการสร้างเอกสารอัตโนมัติจากบล็อก desc ที่วางไว้ก่อนการประกาศ lane ข้อความ desc จะแสดงเมื่อรัน fastlane lanes และ fastlane list ช่วยให้นักพัฒนาเข้าใจวัตถุประสงค์ของแต่ละสคริปต์โดยไม่ต้องอ่านซอร์สโค้ดของ Fastfile

สำหรับการจัดทำเอกสารพารามิเตอร์ ให้ใช้คอมเมนต์ Ruby พร้อมคำอธิบายค่าที่คาดหวัง Fastlane สามารถสร้าง README.md พร้อมรายการ lanes ทั้งหมดและคำอธิบายผ่านคำสั่ง fastlane generate_docs ซึ่งสะดวกสำหรับการปรับตัวของสมาชิกทีมใหม่ให้เข้ากับกระบวนการ CI/CD ของโปรเจกต์

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

Lane ใน Fastlane คืออะไร?

Lane — คือสคริปต์อัตโนมัติที่มีชื่อใน Fastlane ประกาศใน Fastfile ด้วย Ruby Lane รวมลำดับของ actions เพื่อดำเนินงานเฉพาะ: สร้างแอปพลิเคชัน รันทดสอบ หรือปรับใช้ รันผ่าน fastlane [ชื่อ_lane] จากเทอร์มินัลหรือระบบ CI/CD

จะสร้าง Lane ใน Fastfile ได้อย่างไร?

ใช้โครงสร้าง lane :ชื่อ do ... end ใน Fastfile ภายในบล็อก เพิ่มการเรียก actions พร้อมพารามิเตอร์ Lane สามารถเรียก lanes อื่นตามชื่อ ในการรัน ให้เรียกใช้ fastlane ชื่อ ในเทอร์มินัลจากรากของโปรเจกต์ ซึ่งมีไดเรกทอรี fastlane ที่มี Fastfile

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

พารามิเตอร์ถูกส่งผ่าน บรรทัดคำสั่ง: fastlane build scheme:App version:2.0 ภายใน lane พารามิเตอร์สามารถเข้าถึงได้ผ่าน options[:scheme] และ options[:version] สำหรับพารามิเตอร์ที่จำเป็น ให้ตรวจสอบการมีอยู่ของค่าที่จุดเริ่มต้นของ lane สำหรับพารามิเตอร์ที่ไม่บังคับ ให้กำหนดค่าเริ่มต้น

private lane ใน Fastlane คืออะไร?

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

จะจัดการข้อผิดพลาดใน Lane ได้อย่างไร?

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

สรุป

  • Lane — สคริปต์อัตโนมัติที่มีชื่อใน Fastlane ด้วย Ruby รวม actions สำหรับงาน CI/CD
  • ไวยากรณ์ — lane :ชื่อ do ... end รองรับพารามิเตอร์ผ่าน options hash และตัวแปรสภาพแวดล้อม
  • ฮุค — บล็อก before_all, after_all และ error สำหรับการจัดการวงจรชีวิตของ lanes แบบรวมศูนย์
  • Private lane — สคริปต์ส่วนตัวสำหรับห่อหุ้มตรรกะที่ซ้ำกันโดยไม่รันโดยตรง
  • iOS lanes ใช้ scan, gym, match, pilot สำหรับการทดสอบ การสร้าง และการจัดส่ง
  • Android lanes ใช้ gradle และ supply สำหรับการสร้างผ่าน Gradle และการเผยแพร่บน Google Play
  • แนวปฏิบัติที่ดีที่สุด: หนึ่ง lane — หนึ่งงาน พารามิเตอร์ชัดเจน ข้อผิดพลาดเข้าใจได้ ทดสอบผ่าน dry-run

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

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

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

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