เจาะลึก Yarunoka: เมื่อตารางเวลานั้นคือ กฎ ไม่ใช่แค่รายการเวลา
นักพัฒนาเปิดตัว Yarunoka รูปแบบ JSON DSL ภาษาอิสระที่ออกแบบมาเพื่อเก็บรักษาความหมายและกฎเกณฑ์ของตารางเวลา แทนการใช้แค่ชุดข้อมูลเวลาธรรมดา

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- Yarunoka เป็นข้อกำหนดที่เป็นอิสระจากภาษาโปรแกรม สำหรับจัดการ JSON DSL ที่เรียกว่า Yrnk
- แนวคิดหลักคือการเก็บกฎเกณฑ์และบริบทของตารางเวลา แทนที่จะเป็นเพียงรายการวันที่หรือ Timestamp
- การใช้งานชุดแรกพัฒนาด้วย PHP 8.4 และรองรับการทำงานร่วมกับไลบรารี Yasumi เพื่อจัดการวันหยุด
- ออกแบบมาเพื่อให้ทั้งมนุษย์และ AI เชิงสร้างสรรค์สามารถทำความเข้าใจตารางเวลาได้อย่างง่ายดาย
เวลาที่เราต้องแปลงตารางเวลาซับซ้อนให้กลายเป็นข้อมูล เช่น วันที่จ่ายเงินเดือนคือวันที่ 25 ของทุกเดือน แต่หากวันดังกล่าวไม่ใช่ทำการ ให้ขยับไปเป็นวันทำการก่อนหน้า ข้อมูลแบบ Timestamp ธรรมดาหรือนิพจน์ Cron ไม่สามารถแบกรับกฎทางธุรกิจที่ซับซ้อนเหล่านี้ได้ ส่งผลให้นักพัฒนาต้องกระจายเงื่อนไขเหล่านี้ไปตามโค้ดแอปพลิเคชันต่างๆ
ด้วยเหตุนี้ นักพัฒนาจึงได้สร้าง Yarunoka ขึ้นมา ซึ่งเป็นข้อกำหนดที่ไม่ขึ้นกับภาษาโปรแกรมใดๆ สำหรับ JSON DSL ขนาดเล็กที่เรียกว่า Yrnk โดยชื่อนี้มาจากประโยคคำถามในภาษาญี่ปุ่นว่า "やるのか?" (yaru no ka?) ที่สื่อความหมายว่า "จะทำไหม?" ซึ่งสอดคล้องกับหน้าที่ของตัวประเมินผลในระบบ
ตัวอย่างเช่นโครงสร้างข้อมูลสำหรับโอนเงินเดือน:
{
"label": "Payday transfer",
"description": "At 10:00 on the 25th of every month. If the 25th is not a business day, move it to the previous business day.",
"days": [25],
"shift": ["prev", "or_same", "business_day"],
"times": ["10:00"]
}ความโดดเด่นคือ แม้จะยังไม่ได้อ่านโค้ดการทำงานจริง แต่ความหมายโดยรวมก็สามารถอ่านเข้าใจได้ทันทีจากชุดข้อมูล โดยฟิลด์ label และ description ทำหน้าที่เป็นคำอธิบายสำหรับมนุษย์โดยเฉพาะ และจะไม่ส่งผลกระทบต่อกระบวนการประเมินผลแอปพลิเคชันแต่อย่างใด

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
การแยกตรรกะของตารางเวลาออกจากระบบปฏิบัติการงาน (Job Execution System) ถือเป็นสถาปัตยกรรมที่มีประโยชน์มาก เพราะช่วยให้เอกสารตารางเวลาชุดเดียวกันสามารถถูกนำไปใช้แชร์ข้ามระบบแอปพลิเคชันที่แตกต่างกันได้อย่างอิสระ โดยที่ตัวกำหนดตารางเวลาไม่ต้องไปกังวลเรื่องคิวงาน ระบบลองทำซ้ำ หรือสถานะการทำงานครั้งล่าสุด
ผู้สร้างระบุว่าเขารู้สึกขัดใจเสมอมากับเส้นแบ่งระหว่างปฏิทินและรายการสิ่งที่ต้องทำ (To-do list) ปฏิทินบอกว่าเหตุการณ์จะเกิดขึ้นเมื่อไหร่ ส่วน To-do list บอกว่าต้องทำอะไร แต่ในมุมมองของเขา ทั้งสองอย่างคือแผนงาน และเมื่อต้องพัฒนาเอเจนต์ AI ส่วนตัวที่ต้องจดจำกิจกรรมที่เกิดขึ้นซ้ำๆ เขาจึงต้องการสิ่งที่เป็นมากกว่าลิสต์วันที่สร้างขึ้นมาลอยๆ แต่ต้องการโครงสร้างที่เก็บรักษา "กฎ" ที่อยู่เบื้องหลังวันเหล่านั้น
เอกสาร Yrnk จะถูกสร้างขึ้นจากแนวคิดหลักสามประการ โดยเวอร์ชัน PHP สามารถบูรณาการเข้ากับ Yasumi เพื่อดึงข้อมูลวันหยุดนักขัตฤกษ์ได้ เช่นตัวอย่างการเก็บขยะ:
{
"label": "Recycling collection",
"description": "At 07:30 on the first and third Friday of each month, except on public holidays.",
"days": [["1st", "fri"], ["3rd", "fri"]],
"if": ["not", "holiday"],
"times": ["07:30"]
}ในกรณีที่ตรงกับวันหยุด วันดังกล่าวจะถูกตัดออกไปเลยทันทีโดยไม่มีการขยับไปวันอื่น เป้าหมายสูงสุดคือการสร้างฟอร์แมตที่ทั้งมนุษย์และ AI สามารถตีความเจตนาได้ทันทีโดยไม่ต้องอ่านโค้ดอิมพรีเมนต์ซ้ำซ้อน
สำหรับการใช้งานจริงขณะนี้ มีแพ็กเกจแรกคือ yarunoka/core ซึ่งใช้งานร่วมกับ PHP 8.4 ขึ้นไป และไม่มีการพึ่งพาไลบรารีรันไทม์ภายนอกอื่นๆ ทั้งนี้ ฟีเจอร์ในเวอร์ชัน 1.0 ยังไม่ครอบคลุมนิพจน์นามธรรมบางประเภท เช่น "ช่วงครึ่งแรกของเดือนมีนาคม" หรือ "ช่วงต้นเดือน" แต่มีชุดทดสอบความสอดคล้อง (Conformance Tests) เตรียมไว้เพื่อให้การนำไปพัฒนาในภาษาโปรแกรมอื่นได้ผลลัพธ์ที่ตรงกัน
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น