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

หากมีข้อสงสัยหรือต้องการความช่วยเหลือ โปรดดูการรับความช่วยเหลือ

Bazel คืออะไร

Bazel คือเครื่องมือที่สร้างและทดสอบซอฟต์แวร์โดยอัตโนมัติ งานบิลด์ที่รองรับประกอบด้วยการคอมไพเลอร์และตัวลิงก์เพื่อสร้างโปรแกรมและไลบรารีที่ดําเนินการได้ ตลอดจนการประกอบแพ็กเกจที่ทําให้ใช้งานได้สําหรับ Android, iOS และสภาพแวดล้อมเป้าหมายอื่นๆ Bazel คล้ายกับเครื่องมืออื่นๆ เช่น Make, Ant, Gradle, Buck, Pants และ Maven

มีอะไรพิเศษเกี่ยวกับ Bazel

Bazel ออกแบบมาให้เหมาะกับการพัฒนาซอฟต์แวร์ที่ Google ซึ่งมีฟีเจอร์ดังต่อไปนี้

  • การสนับสนุนหลายภาษา: Bazel รองรับหลายภาษา และสามารถขยายเพื่อรองรับภาษาโปรแกรมต่างๆ ที่กําหนดเอง
  • ภาษาของบิลด์ระดับสูง: โปรเจ็กต์อธิบายด้วยภาษาBUILDซึ่งเป็นรูปแบบข้อความสั้นๆ ที่อธิบายโปรเจ็กต์เป็นชุดไลบรารี ไบนารี และการทดสอบที่เชื่อมต่อกันขนาดเล็ก ในทางตรงกันข้าม โดยใช้เครื่องมืออย่างเช่น สร้าง คุณจะต้องอธิบายไฟล์แต่ละรายการและคําขอคอมไพเลอร์
  • การรองรับหลายแพลตฟอร์ม: เครื่องมือเดียวกันและไฟล์ BUILD เดียวกันสามารถใช้เพื่อสร้างซอฟต์แวร์สําหรับสถาปัตยกรรมที่แตกต่างกัน หรือแม้แต่แพลตฟอร์มที่แตกต่างกันได้ Google ใช้ Bazel เพื่อสร้างทุกอย่างตั้งแต่แอปพลิเคชันเซิร์ฟเวอร์ที่ทํางานในระบบศูนย์ข้อมูลของเราไปจนถึงแอปไคลเอ็นต์ที่ทํางานในโทรศัพท์เคลื่อนที่
  • ความสามารถในการทําซ้ํา: ในไฟล์ BUILD ไลบรารี การทดสอบ และไบนารีแต่ละรายการต้องระบุทรัพยากร Dependency โดยตรงทั้งหมด Bazel ใช้ข้อมูลทรัพยากร Dependency นี้เพื่อให้ทราบว่าต้องสร้างใหม่เมื่อใดเมื่อทําการเปลี่ยนแปลงในไฟล์ต้นฉบับ และงานใดทํางานพร้อมกันได้ ซึ่งหมายความว่าบิลด์ทั้งหมดจะเพิ่มขึ้นและจะให้ผลลัพธ์ที่เหมือนกันเสมอ
  • ปรับขนาดได้: Bazel รองรับงานสร้างขนาดใหญ่ โดยปกติ Google จะมีไบนารีเซิร์ฟเวอร์ที่มีไฟล์แหล่งที่มา 100,000 รายการ และสร้างที่ไม่มีการเปลี่ยนแปลงไฟล์จะใช้เวลาประมาณ 200 มิลลิวินาที

ทําไม Google ถึงไม่ใช้...

  • สร้าง นินจา: เครื่องมือเหล่านี้มีการควบคุมที่แน่นอนว่าจะต้องเรียกใช้คําสั่งใดเพื่อสร้างไฟล์ แต่ผู้ใช้จะเขียนกฎที่ถูกต้องด้วยตนเอง
    • ผู้ใช้จะโต้ตอบกับ Bazel ในระดับที่สูงกว่า เช่น Bazel มีกฎในตัวสําหรับ "การทดสอบ Java" "ไบนารี C++" และแนวคิดอย่างเช่น "แพลตฟอร์มเป้าหมาย" และ "แพลตฟอร์มโฮสต์" กฎเหล่านี้ได้รับการทดสอบเพื่อต่อต้าน
  • Ant และ Maven: Ant และ Maven มุ่งไปที่ Java เป็นหลัก ขณะที่ Bazel จัดการหลายภาษา Bazel สนับสนุนการแยกย่อยฐานของโค้ดในหน่วยโฆษณาที่นํากลับมาใช้ใหม่ได้และสามารถสร้างใหม่เฉพาะที่ต้องใช้ในการสร้างใหม่ วิธีนี้จะช่วยเร่งการพัฒนาเมื่อทํางานกับฐานของโค้ดขนาดใหญ่
  • Gradle: ไฟล์การกําหนดค่าของ Bazel มีโครงสร้างมากกว่าของ Gradle มาก ทําให้ Bazel เข้าใจอย่างแท้จริงว่าการกระทําแต่ละอย่างคืออะไร ซึ่งช่วยให้โหลดพร้อมกันได้มากยิ่งขึ้นและทําซ้ําการทํางานได้
  • กางเกงชั้นใน Buck: เครื่องมือทั้งสองชุดถูกสร้างและพัฒนาโดยอดีต Googler ที่ Twitter และ Foursquare และ Facebook ตามลําดับ ซึ่งมีการประมาณตามแบบ Bazel แต่ชุดฟีเจอร์มีความแตกต่างกัน ดังนั้นจึงไม่ได้เป็นทางเลือกสําหรับเรา

บาเซลมาจากที่ใด

Bazel เป็นเครื่องมือหนึ่งที่ Google ใช้สร้างซอฟต์แวร์เซิร์ฟเวอร์ภายในองค์กร และได้ขยายออกเพื่อสร้างซอฟต์แวร์อื่นๆ ด้วย เช่น แอปบนอุปกรณ์เคลื่อนที่ (iOS, Android) ที่เชื่อมต่อกับเซิร์ฟเวอร์ของเรา

คุณเขียนเครื่องมือภายในเป็นโอเพนซอร์สขึ้นมาใหม่หรือไม่ เป็นส้อมหรือเปล่า

Bazel แชร์โค้ดส่วนใหญ่กับเครื่องมือภายใน และใช้กฎสําหรับบิลด์หลายล้านรายการในทุกๆ วัน

ทําไม Google จึงสร้าง Bazel

นานมาแล้ว Google สร้างซอฟต์แวร์โดยใช้ Makefiles ขนาดใหญ่ การอัปเดตเหล่านี้ทําให้เกิดบิลด์ที่ช้าและไม่น่าเชื่อถือ เริ่มรบกวนประสิทธิภาพการทํางานของนักพัฒนาแอปและความคล่องตัวของบริษัท Bazel เป็นวิธีแก้ไขปัญหาเหล่านี้

Bazel ต้องการคลัสเตอร์บิลด์ไหม

Bazel จะเรียกใช้บิลด์บิลด์โดยค่าเริ่มต้น อย่างไรก็ตาม Bazel ยังเชื่อมต่อกับคลัสเตอร์บิลด์เพื่อบิลด์และการทดสอบที่เร็วขึ้นได้อีกด้วย ดูรายละเอียดในเอกสารของเราเกี่ยวกับการดําเนินการและการแคชระยะไกลและการแคชระยะไกล

กระบวนการพัฒนาของ Google ทํางานอย่างไร

สําหรับฐานโค้ดเซิร์ฟเวอร์ เราใช้เวิร์กโฟลว์การพัฒนาต่อไปนี้

  • โค้ดเซิร์ฟเวอร์ทั้งหมดของเราอยู่ในระบบควบคุมเวอร์ชันใหญ่ขนาดเดียว
  • ทุกคนสร้างซอฟต์แวร์ของตัวเองด้วย Bazel
  • แต่ละทีมเป็นเจ้าของส่วนต่างๆ ของโครงสร้างต้นทาง และทําให้คอมโพเนนต์พร้อมใช้งานเป็นเป้าหมาย BUILD
  • กิ่งไม้ใช้สําหรับจัดการการเผยแพร่เป็นหลัก ดังนั้นทุกคนจึงพัฒนาซอฟต์แวร์ของตนเองในการแก้ไขส่วนหัว

Bazel คือรากฐานของปรัชญานี้: เนื่องจาก Bazel กําหนดให้ระบุทรัพยากร Dependency ทั้งหมดโดยสมบูรณ์ เราจึงสามารถคาดการณ์ได้ว่าโปรแกรมและการทดสอบใดจะได้รับผลกระทบจากการเปลี่ยนแปลง และได้รับการรับรองก่อนการส่ง

ดูข้อมูลพื้นฐานเพิ่มเติมเกี่ยวกับกระบวนการพัฒนาที่ Google ได้ที่บล็อกเครื่องมือของ eng

เหตุใดคุณจึงเปิด Bazel

การสร้างซอฟต์แวร์ควรสนุกและง่ายดาย งานสร้างที่ช้าและคาดเดาไม่ได้จะช่วยนําความสนุกมาสู่การจัดโปรแกรม

ทําไมฉันถึงต้องการใช้ Bazel

  • Bazel อาจสร้างบิลด์ได้เร็วขึ้นเนื่องจากจะรวบรวมเฉพาะไฟล์ที่ต้องคอมไพล์ใหม่เท่านั้น ในทํานองเดียวกัน ก็สามารถข้ามการทดสอบซ้ําที่รู้ว่าไม่ได้เปลี่ยนแปลง
  • Bazel ก่อให้เกิดผลลัพธ์เชิงกําหนด ซึ่งจะช่วยลดความเอียงระหว่างบิลด์ที่เพิ่มขึ้นและสะอาด แล็ปท็อป และระบบ CI เป็นต้น
  • Bazel สามารถสร้างแอปไคลเอ็นต์และเซิร์ฟเวอร์ที่แตกต่างกันได้โดยใช้เครื่องมือเดียวกันจากพื้นที่ทํางานเดียวกัน เช่น เปลี่ยนโปรโตคอลไคลเอ็นต์/เซิร์ฟเวอร์ในสัญญาผูกมัดเดียว และทดสอบว่าแอปบนอุปกรณ์เคลื่อนที่ที่อัปเดตนั้นทํางานกับเซิร์ฟเวอร์ที่อัปเดตได้ โดยสร้างทั้ง 2 อย่างด้วยเครื่องมือเดียวกัน โดยนําประโยชน์ข้างต้นทั้งหมดของ Bazel ไปใช้

ฉันจะดูตัวอย่างได้ไหม

ใช่ ดูตัวอย่างแบบง่ายหรืออ่านซอร์สโค้ดของ Waze เพื่อดูตัวอย่างที่ซับซ้อนมากขึ้น

Bazel ดีที่สุดเพราะอะไร

Bazel โดดเด่นในด้านการสร้างและทดสอบโปรเจ็กต์ด้วยพร็อพเพอร์ตี้ต่อไปนี้

  • โครงการที่มีฐานของโค้ดขนาดใหญ่
  • โปรเจ็กต์ที่เขียนเป็นภาษาเดียว (หลายภาษา)
  • โครงการที่ทําให้ใช้งานได้ในหลายแพลตฟอร์ม
  • โปรเจ็กต์ที่มีการทดสอบมากมาย

ฉันจะเรียกใช้ Bazel ได้ที่ไหน

Bazel ทํางานบน Linux, macOS (OS X) และ Windows

การเปลี่ยนมาใช้แพลตฟอร์ม UNIX อื่นๆ ควรเป็นเรื่องง่ายตราบใดที่ JDK มีให้บริการสําหรับแพลตฟอร์ม

ฉันไม่ควรใช้ Bazel

  • Bazel พยายามใช้แคชอย่างชาญฉลาด ซึ่งหมายความว่าไม่ควรเรียกใช้บิลด์ที่ไม่ควรแคชเอาต์พุตไว้ เช่น คุณไม่ควรเรียกใช้ขั้นตอนต่อไปนี้จาก Bazel
    • ขั้นตอนการรวบรวมที่ดึงข้อมูลจากอินเทอร์เน็ต
    • ขั้นตอนการทดสอบที่เชื่อมต่อกับอินสแตนซ์ QA ของเว็บไซต์
    • ขั้นตอนการติดตั้งใช้งานที่เปลี่ยนการกําหนดค่าระบบคลาวด์ของเว็บไซต์
  • หากงานสร้างของคุณประกอบด้วยขั้นตอนต่อๆ ไปเพียงไม่กี่ขั้นตอน Bazel อาจให้ความช่วยเหลือได้ไม่มากนัก คุณจะได้รับความเร็วที่มากขึ้นโดยการแบ่งย่อยเป้าหมายยาวๆ เป็นเป้าหมายที่แยกกันต่างหากและ Bazel สามารถทํางานควบคู่กันไปได้

ฟีเจอร์ของ Bazel มีความเสถียรเพียงใด

ฟีเจอร์หลัก (กฎ C++, Java และ Shell) มีการใช้งานอย่างครอบคลุมใน Google จึงได้รับการทดสอบอย่างละเอียดและเลิกใช้งานน้อยมาก ในทํานองเดียวกัน เราทดสอบ Bazel เวอร์ชันใหม่กับเป้าหมายหลายแสนวันในทุกๆ วันเพื่อหาการถดถอย และเราก็เปิดตัวเวอร์ชันใหม่หลายครั้งทุกเดือน

สรุปคือ Bazel ควรทํางานเพียงอย่างเดียว ยกเว้นฟีเจอร์ที่ระบุว่าเป็นการทดสอบ การเปลี่ยนแปลงกฎที่ไม่ใช่การทดสอบจะทํางานย้อนหลังได้ โปรดดูรายการสถานะการรองรับฟีเจอร์โดยละเอียดเพิ่มเติมในเอกสารการสนับสนุนของเรา

Bazel เป็นไบนารีที่เสถียรเพียงใด

ภายใน Google เราตรวจสอบว่าข้อขัดข้องของ Bazel เกิดขึ้นน้อยมาก ซึ่งควรใช้ได้กับฐานของโค้ดโอเพนซอร์สของเราด้วย

ฉันจะเริ่มใช้ Bazel ได้อย่างไร

โปรดดูที่เริ่มต้นใช้งาน

ดอร์เวย์ไม่ได้ช่วยแก้ปัญหาการทําซ้ําหรือไม่

ซึ่งจะช่วยให้คุณสร้างแซนด์บ็อกซ์ได้อย่างง่ายดายด้วยรุ่นระบบปฏิบัติการที่เสถียร เช่น Ubuntu 12.04, Fedora 21 วิธีนี้จะแก้ปัญหาการเกิดปัญหาซ้ําในสภาพแวดล้อมของระบบ ซึ่งก็คือ "ฉันต้องใช้ /usr/bin/c++ เวอร์ชันไหน"

Docker ไม่แก้ไขปัญหาการเกิดซ้ําเกี่ยวกับการเปลี่ยนแปลงซอร์สโค้ด การเรียกใช้ Maker ด้วย Makefile ที่เขียนได้สมบูรณ์ภายในคอนเทนเนอร์ Docker ยังคงให้ผลลัพธ์ที่คาดการณ์ไม่ได้

ที่ Google ตรวจสอบเครื่องมือต่างๆ ในการควบคุมแหล่งที่มาเพื่อการทําซ้ํา วิธีนี้ช่วยให้เราสามารถตรวจสอบการเปลี่ยนแปลงในเครื่องมือ ("อัปเกรด GCC เป็น 4.6.1") ซึ่งมีกลไกเดียวกับการเปลี่ยนแปลงไลบรารีฐาน ("การตรวจสอบขอบเขตใน OpenSSL")

ฉันจะสร้างไบนารีสําหรับการติดตั้งใช้งานใน Docker ได้ไหม

เมื่อใช้ Bazel คุณจะสร้างไบนารีที่ลิงก์แบบคงที่ใน C/C++ และไฟล์ Jar แบบคอนเทนเนอร์ด้วยตนเองสําหรับ Java ได้ ซึ่งทํางานโดยใช้ทรัพยากร Dependency น้อยลงในระบบ UNIX ปกติ ดังนั้นจึงควรติดตั้งภายในคอนเทนเนอร์ Docker ได้อย่างง่ายดาย

Bazel มีแบบแผนในการจัดโครงสร้างโปรแกรมที่ซับซ้อนมากขึ้น เช่น โปรแกรม Java ที่ใช้ไฟล์ข้อมูลชุดหนึ่ง หรือเรียกใช้โปรแกรมอื่นเป็นกระบวนการย่อย คุณจะจัดแพ็กเกจสภาพแวดล้อมดังกล่าวเป็นไฟล์ที่เก็บถาวรแบบสแตนด์อโลนได้ เพื่อนําไปปรับใช้ในระบบต่างๆ รวมถึงอิมเมจของ Docker

ฉันจะสร้างรูปภาพ Docker ด้วย Bazel ได้ไหม

ได้ คุณใช้กฎของ Docker เพื่อสร้างรูปภาพ Docker ที่จําลองซ้ําได้

Bazel จะทําให้บิลด์ของฉันทําซ้ําได้โดยอัตโนมัติไหม

สําหรับไบนารี Java และ C++ ใช่ สมมติว่าคุณไม่ได้เปลี่ยนเครื่องมือเชน หากมีขั้นตอนการสร้างที่เกี่ยวข้องกับสูตรอาหารที่กําหนดเอง (เช่น การจัดการไบนารีผ่านสคริปต์ Shell ภายในกฎ) คุณจะต้องระมัดระวังเป็นพิเศษ ดังนี้

  • อย่าใช้ทรัพยากร Dependency ที่ไม่ได้ประกาศไว้ การดําเนินการแซนด์บ็อกซ์ (–spawn_strategy=sandboxed, only on Linux) สามารถช่วยค้นหาทรัพยากร Dependency ที่ไม่ได้ประกาศ
  • หลีกเลี่ยงการจัดเก็บการประทับเวลาและรหัสผู้ใช้ในไฟล์ที่สร้างขึ้น ไฟล์ ZIP และที่เก็บถาวรอื่นๆ มีแนวโน้มที่จะเป็นไฟล์ดังกล่าวโดยเฉพาะ
  • หลีกเลี่ยงการเชื่อมต่อกับเครือข่าย การดําเนินการแซนด์บ็อกซ์จะช่วยในส่วนนี้ได้เช่นกัน
  • หลีกเลี่ยงการใช้กระบวนการที่ใช้หมายเลขสุ่ม โดยเฉพาะอย่างยิ่งการส่งผ่านพจนานุกรมจะสุ่มเป็นหลายภาษา

คุณมีรุ่นไบนารีมั้ย

ได้ โปรดดูไบนารีการเผยแพร่ล่าสุดและอ่านนโยบายการเผยแพร่ของเรา

ฉันใช้ Eclipse/IntelliJ/XCode Bazel ทํางานร่วมกับ IDE อย่างไร

สําหรับ IntelliJ โปรดดูปลั๊กอิน IntelliJ with Bazel

โปรดดู Tulsi สําหรับ XCode

สําหรับ Eclipse โปรดดูปลั๊กอิน E4B

หากต้องการใช้ IDE อื่นๆ โปรดดูบล็อกโพสต์เกี่ยวกับวิธีการทํางานของปลั๊กอินเหล่านี้

ฉันใช้ Jenkins/CircleCI/TravisCI Bazel ทํางานร่วมกับระบบ CI อย่างไร

Bazel จะแสดงรหัสทางออกที่ไม่ใช่ 0 หากสร้างบิลด์หรือทดสอบไม่สําเร็จ และน่าจะเพียงพอสําหรับการผสานรวม CI พื้นฐาน เนื่องจาก Bazel ไม่จําเป็นต้องใช้บิลด์ที่ถูกต้องเพื่อความถูกต้องแม่นยํา ระบบจึงไม่ควรกําหนดค่าระบบ CI ให้ล้างข้อมูลก่อนเริ่มบิลด์/การทดสอบ

ดูรายละเอียดเพิ่มเติมเกี่ยวกับรหัสการออกได้ในคู่มือผู้ใช้

ในอนาคต เราจะใช้รูปแบบฟีเจอร์ใดบ้างใน Bazel

ดูแผนที่ถนนของเรา

ฉันจะใช้ Bazel สําหรับโปรเจ็กต์ INSERT LANGUAGE HERE ได้ไหม

ไบแซลขยายได้ ทุกคนจะเพิ่มการสนับสนุนภาษาใหม่ๆ ได้ รองรับหลายภาษา โปรดดูสารานุกรมบิวด์ สําหรับรายการคําแนะนําและsomebazel.com เพื่อดูรายการที่ครอบคลุมมากขึ้น

หากต้องการพัฒนาส่วนขยายหรือดูวิธีการทํางานของส่วนขยาย โปรดดูเอกสารประกอบสําหรับการส่งออก Bazel แบบขยาย

ฉันได้มีส่วนร่วมในฐานรหัส Bazel ได้ไหม

ดูหลักเกณฑ์ด้านการมีส่วนร่วมของเรา

เหตุใดจึงดําเนินการไม่เสร็จสิ้นทั้งหมด

เรายังคงต้องปรับเปลี่ยนอินเทอร์เฟซระหว่างรหัสสาธารณะใน Bazel และส่วนขยายภายในของเราบ่อยๆ ซึ่งทําให้การพัฒนาอย่างเปิดกว้างเป็นเรื่องที่ยากมาก

คุณโอเพนซอร์สแบบโอเพนซอร์สหรือยัง

โอเพนซอร์ส Open Bazel อยู่ระหว่างดําเนินการ โดยเฉพาะอย่างยิ่ง เรายังพยายามใช้การจัดหาแบบโอเพนซอร์ส ดังนี้

  • การทดสอบหน่วยการเรียนรู้และการผสานรวมของเราจํานวนมาก (ซึ่งควรปรับปรุงแพตช์ให้ง่ายขึ้น)
  • การผสานรวม IDE เต็มรูปแบบ

นอกเหนือจากรหัสแล้ว เราอยากจะรวมการตรวจสอบโค้ด การติดตามข้อบกพร่อง และการตัดสินใจออกแบบทั้งหมดต่อสาธารณะด้วยชุมชน Bazel ที่เกี่ยวข้อง เรายังไม่มีการเปลี่ยนแปลงดังกล่าว การเปลี่ยนแปลงบางอย่างจะปรากฏในที่เก็บ Bazel โดยไม่มีคําอธิบายที่ชัดเจน แม้จะไม่มีความโปร่งใส แต่เราก็ต้องการที่จะสนับสนุนนักพัฒนาซอฟต์แวร์ภายนอกและทํางานร่วมกัน ด้วยเหตุนี้เราจึงเปิดโค้ดขึ้นมา แม้ว่าจะยังมีการพัฒนาบางอย่างที่อยู่ภายใน Google โปรดแจ้งให้เราทราบหากมีสิ่งที่ไม่ชัดเจนหรือไร้เหตุผลเมื่อเราเปลี่ยนไปใช้รูปแบบแบบเปิด

มีบางส่วนที่ Bazel จะไม่เป็นโอเพนซอร์สหรือไม่

ใช่ ฐานโค้ดบางส่วนจะผสานรวมกับเทคโนโลยีที่เฉพาะเจาะจงของ Google หรือเราต้องหาวิธีกําจัด (หรือทั้ง 2 อย่างรวมกัน) บางส่วนของฐานของโค้ดไม่พร้อมใช้งานใน GitHub และอาจไม่มีเลย

ฉันจะติดต่อทีมได้อย่างไร

คุณติดต่อได้ที่ bazel-dialog@googlegroups.com

ฉันจะรายงานข้อบกพร่องได้ที่ไหน

เปิดปัญหาใน GitHub

คําว่า "Blaze" ในโค้ดเบสคืออะไร

ชื่อนี้คือชื่อภายในของเครื่องมือ โปรดดู Bazel เป็น Bazel

ทําไมโครงการอื่นๆ ของ Google (Android, Chrome) ถึงใช้เครื่องมือสร้างอื่นๆ

Bazel ไม่พร้อมใช้งานจากภายนอกจนกว่ารุ่นแรก (อัลฟ่า) จะไม่มีให้ใช้งาน ดังนั้นโปรเจ็กต์โอเพนซอร์ส เช่น Chromium และ Android จึงไม่พร้อมใช้งาน นอกจากนี้ การขาดการรองรับเดิมของ Windows จะเป็นปัญหาในการสร้างแอปพลิเคชัน Windows เช่น Chrome เนื่องจากโปรเจ็กต์สําหรับผู้บรรลุนิติภาวะแล้วและมีความเสถียรมากขึ้น โครงการโอเพนซอร์ส Android จึงอยู่ระหว่างการย้ายข้อมูลไปยัง Bazel

คําว่า “Bazel” ออกเสียงอย่างไร

เช่นเดียวกับ "Bsil" (สมุนไพร) ในภาษาอังกฤษแบบสหรัฐอเมริกา: "BAY-zel" เพลงนั้นคล้องจองกับคําว่า "เฮเซล" IPA: /فbeจะใช้ความคิดเห็น