คำว่า Scaffold มาจากแนวคิดในวงการพัฒนาซอฟต์แวร์ที่หมายถึง "นั่งร้าน" หรือโครงสร้างชั่วคราวที่ช่วยให้สามารถเริ่มพัฒนาได้อย่างรวดเร็ว ในกรณีของ Odoo scaffold คือคำสั่งที่ใช้สร้างโครงสร้างของโมดูลใหม่โดยไม่ต้องเขียนไฟล์ทุกอย่างด้วยตนเอง
เมื่อรันคำสั่ง odoo-bin scaffold <module_name> <destination_path> Odoo จะสร้างโฟลเดอร์ชื่อ <module_name> ซึ่งภายในจะมีไฟล์พื้นฐาน เช่น:
- __manifest__.py – ใช้กำหนด metadata ของโมดูล
- __init__.py – ไฟล์สำหรับ import module
- models/ – โฟลเดอร์สำหรับเก็บ model (Python class)
- views/ – โฟลเดอร์สำหรับไฟล์ XML ที่กำหนด UI
- security/ – ใช้สำหรับเก็บ access control
ขั้นตอนที่ 1: เตรียมสภาพแวดล้อม
- ติดตั้ง Odoo (เวอร์ชันที่ต้องการ)
- เตรียม virtual environment
- เข้าไปที่ root directory ของ Odoo
โค้ด: เลือกทั้งหมด
./odoo-bin scaffold my_module_name addons/
โค้ด: เลือกทั้งหมด
odoo scaffold my_module_name /path/to/custom/addons
โค้ด: เลือกทั้งหมด
my_module_name/
├── __init__.py
├── __manifest__.py
├── controllers/
│ └── __init__.py
├── models/
│ ├── __init__.py
│ └── models.py
├── views/
│ └── my_module_name_template.xml
├── security/
│ └── ir.model.access.csv
└── static/
└── description/
└── icon.png
- ลดเวลาเตรียมไฟล์: ไม่ต้องสร้างโฟลเดอร์และไฟล์พื้นฐานเอง
- มีมาตรฐาน: ได้โครงสร้างที่ตรงตามมาตรฐานของ Odoo
- ช่วยลดข้อผิดพลาด: เพราะไฟล์เบื้องต้นถูกสร้างให้พร้อมใช้งาน
- เหมาะสำหรับทีมงาน: ทุกคนจะใช้โครงสร้างเดียวกัน ทำให้เข้าใจตรงกัน
หลังจาก scaffold โมดูลแล้ว นักพัฒนาควร:
- เปลี่ยนชื่อไฟล์ XML และ model ให้ตรงกับฟังก์ชัน
- แก้ไข __manifest__.py เพื่อกำหนดข้อมูลของโมดูล เช่น name, depends, data
- เขียน model ใหม่ใน models/models.py และเพิ่ม field ตามที่ต้องการ
- สร้าง view แบบ form/tree ในไฟล์ XML
- เพิ่ม security rule ใน ir.model.access.csv
สมมุติว่าเราต้องการสร้างโมดูลชื่อ library_management สำหรับจัดการหนังสือ:
1. รัน:
โค้ด: เลือกทั้งหมด
./odoo-bin scaffold library_management addons/
โค้ด: เลือกทั้งหมด
from odoo import models, fields
class Book(models.Model):
_name = 'library.book'
_description = 'Book'
name = fields.Char(string='Title', required=True)
author = fields.Char(string='Author')
isbn = fields.Char(string='ISBN')
โค้ด: เลือกทั้งหมด
<odoo>
<record id="view_form_book" model="ir.ui.view">
<field name="name">library.book.form</field>
<field name="model">library.book</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<field name="name"/>
<field name="author"/>
<field name="isbn"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
5. เพิ่มสิทธิ์การเข้าถึงใน security/ir.model.access.csv
เมื่อครบขั้นตอนก็สามารถ install โมดูลนี้ใน Odoo ได้ทันที
6. คำแนะนำเพิ่มเติม
- ใช้ scaffold เป็นจุดเริ่มต้น แต่ควรปรับปรุงต่อให้เหมาะสมกับโปรเจกต์
- ตั้งชื่อโมดูลให้สื่อความหมาย เพื่อให้เข้าใจได้ง่าย
- ควรใช้ Git version control ควบคู่กับ scaffold เพื่อจัดการเวอร์ชันโค้ด
- หมั่นอ่านเอกสารของ Odoo เพื่อเข้าใจมาตรฐานที่เปลี่ยนไปในแต่ละเวอร์ชัน
Odoo scaffold เป็นเครื่องมือพื้นฐานที่ช่วยให้นักพัฒนาสามารถเริ่มต้นสร้างโมดูลใหม่ได้อย่างรวดเร็วและเป็นระบบ เหมาะสำหรับทั้งมือใหม่และนักพัฒนาที่มีประสบการณ์ เพราะช่วยประหยัดเวลา ลดความผิดพลาด และสนับสนุนการทำงานแบบทีมได้อย่างมีประสิทธิภาพ, การเข้าใจวิธีการใช้งาน scaffold อย่างถูกต้อง จะช่วยให้การพัฒนาโมดูล Odoo เป็นเรื่องที่ง่ายและเป็นมืออาชีพมากยิ่งขึ้น โดยเฉพาะเมื่อมีการปรับแต่งและขยายต่อยอดโมดูลในโปรเจกต์จริง ทั้งนี้นักพัฒนาควรใช้ scaffold ควบคู่กับแนวทางปฏิบัติที่ดี เช่น การตั้งชื่อที่สื่อความหมาย การใช้ Git และการวางโครงสร้างโค้ดให้เป็นระเบียบ, สุดท้ายนี้ scaffold ไม่ใช่คำตอบทั้งหมดของการพัฒนาโมดูลใน Odoo แต่เป็นเครื่องมือเริ่มต้นที่ยอดเยี่ยมซึ่งจะพาคุณไปสู่การสร้างโมดูลคุณภาพได้เร็วและมั่นคงมากขึ้น
อ้างอิง
https://www.odoo.com/documentation/18.0/developer/reference/cli.html
https://www.cybrosys.com/odoo/odoo-books/odoo-15-development/ch3/scaffold-command/
https://www.packtpub.com/en-us/learning/how-to-tutorials/how-to-scaffold-a-new-module-in-odoo-11