ไม่มีชื่อบทความ
เอกสารแนวปฏิบัติในการทำโปรเจ็กต์พัฒนาเว็บไซต์ของบริษัท นกฟ้า จำกัด
1. วัตถุประสงค์
เพื่อให้ทุกคนในทีมเข้าใจโครงสร้างโปรเจ็กต์และกระบวนการทำงานไปในทิศทางเดียวกัน ลดความสับสนหรือความไม่แน่นอนในการจัดการไฟล์และการโค้ด รวมถึงกำหนดมาตรฐานในการเขียนโค้ด การวางไฟล์ และการดูแลคอนเทนต์ให้เป็นระบบ
2. ภาพรวมโครงสร้างโปรเจ็กต์
my-project/
│
├── app/
│ ├── _content/ # ไฟล์คอนเทนต์ที่ Content Creator เป็นผู้ดูแล
│ └── [โฟลเดอร์ / ไฟล์อื่น ๆ ที่เกี่ยวกับโค้ดหลักของแอปพลิเคชัน]
│
├── assets/ # ไฟล์ที่ไม่ต้องการให้ build ติดไปด้วย เช่น raw data, mock data, ฯลฯ
│ └── [รูปภาพ / ไฟล์ต่าง ๆ ที่ไม่ต้องใช้ใน production โดยตรง]
│
├── public/ # ไฟล์ที่ต้องการเปิดให้เข้าถึงแบบสาธารณะ เช่น รูปภาพ ไอคอน favicon
│
├── styles/ # เก็บไฟล์ CSS ทั่วไป (ถ้าไม่เก็บไว้ใน app หรือถ้าแยก styles ออกมาใช้)
│
├── .env.local # ไฟล์ environment สำหรับ development (ไม่ commit ลง Git)
├── .env.production # ไฟล์ environment สำหรับ production
│
├── package.json
├── tsconfig.json # หรือ jsconfig.json หากใช้ JavaScript
└── ... (ไฟล์อื่น ๆ)
หมายเหตุ: โครงสร้างอาจปรับตามความเหมาะสมของทีม หรือรูปแบบโปรเจ็กต์ (เช่น ถ้าเป็น Next.js 13+ หรือใช้ App Router/Pages Router ก็อาจจัดโฟลเดอร์ต่างออกไปได้)
3. รายละเอียดและข้อกำหนดของแต่ละโฟลเดอร์
3.1 app/
- โครงสร้างหลักของตัวแอป: เป็นส่วนของโค้ดที่เป็น Business Logic หรือ UI หลัก (เช่น page, layout, component)
- โฟลเดอร์
_content/:- เก็บไฟล์คอนเทนต์ (เช่น Markdown, JSON, หรือไฟล์อื่น ๆ ที่ Content Creator จัดการ)
- ข้อปฏิบัติ:
- Dev ไม่ควรแก้ไขไฟล์ใน
_content/โดยตรง ยกเว้นกรณีจำเป็น หรือมีการตกลงร่วมกัน - เนื้อหาใด ๆ ที่ต้องการดึงมาใช้ในหน้าต่าง ๆ ควรโหลดผ่าน service หรือ API ของโปรเจ็กต์ เพื่อให้แยกบทบาท Content Creator และ Dev ออกจากกันชัดเจน
- Dev ไม่ควรแก้ไขไฟล์ใน
3.2 assets/
- เก็บข้อมูลที่ ไม่ต้องการให้ build ติดไปด้วย เช่น
- ไฟล์ raw data, mock data, ไฟล์ PDF หรืองานต้นฉบับใด ๆ ที่ใช้เฉพาะในกระบวนการภายใน
- ไฟล์รูปภาพขนาดใหญ่ที่ยังไม่ถูก optimize หรือไฟล์ที่รอตกลงว่าจะใช้หรือไม่
- แนวทางปฏิบัติ:
- หากข้อมูลไม่ได้ใช้ใน Production หรือเป็นเพียงข้อมูลเพื่อ Reference ควรเก็บใน
assets/ - หากต้องการใช้งานไฟล์บางส่วนใน Production ให้ทำขั้นตอนการ Optimizing (ถ้าจำเป็น) แล้วค่อยย้ายไป
public/หรือใส่ในโค้ดที่เป็น Static Import
- หากข้อมูลไม่ได้ใช้ใน Production หรือเป็นเพียงข้อมูลเพื่อ Reference ควรเก็บใน
3.3 public/
- เก็บไฟล์ที่พร้อมให้ผู้ใช้งาน (client) เข้าถึงได้โดยตรง เช่น ไอคอน favicon, รูปภาพทั่วไป, เอกสาร PDF ที่ต้องให้ผู้ใช้ดาวน์โหลด
- การอ้างอิงไฟล์ใน
public/สามารถเรียกได้ผ่าน path ตรง ๆ เช่น/myimage.png
3.4 styles/
- เก็บไฟล์ CSS/SCSS (ในกรณีที่แยกไฟล์ออกจาก
_app.jsหรือglobals.css) - สำหรับโปรเจ็กต์ที่ใช้ Next.js 13+ บางทีมอาจชอบเก็บสไตล์ไว้ในโฟลเดอร์
app/บางทีมอาจแยกเป็นstyles/เพื่อความเป็นระเบียบข้อแนะนำ: ควรกำหนดรูปแบบไว้ชัดเจนในทีม เพื่อให้คนอื่นเข้ามาดูแล้วเข้าใจตำแหน่งไฟล์ได้ทันที
3.5 การใช้งาน font (ตัวอย่างสำหรับ Next.js)
- ใช้
next/font/googleในการ import ฟอนต์ จากนั้นสร้างตัวแปรก่อนจะนำไปใส่ในglobals.css// Example: fonts.js import { Inter, Roboto } from 'next/font/google'; export const inter = Inter({ subsets: ['latin'], weight: ['400', '700'], }); export const roboto = Roboto({ subsets: ['latin'], weight: ['400', '700'], });/* globals.css */ :root { --font-inter: /* ใส่ค่าที่ได้จาก inter */; --font-roboto: /* ใส่ค่าที่ได้จาก roboto */; } body { font-family: var(--font-inter), sans-serif; } - ข้อปฏิบัติ:
- ให้ทุกคนใช้วิธี import ฟอนต์ในรูปแบบเดียวกัน เพื่อความสม่ำเสมอ
- หากต้องการเปลี่ยนฟอนต์ หรือเพิ่มฟอนต์ใหม่ ให้แก้ไขในไฟล์รวม (เช่น
fonts.jsหรือfonts.ts) ที่ตกลงกันในทีม
4. มาตรฐานการเขียนโค้ด (Code Standard)
- Naming Convention
- ใช้
camelCaseสำหรับตัวแปรและฟังก์ชัน - ใช้
PascalCaseสำหรับชื่อ Component React (เช่นMyComponent.js) - ใช้
kebab-caseสำหรับชื่อไฟล์ทั่วไป (เช่นmy-component.js) หากเป็นไฟล์ CSS หรือ SCSS
- ใช้
- การย่อหน้าและรูปแบบ (Formatting)
- กำหนดการตั้งค่า
.editorconfigหรือใช้ ESLint, Prettier เพื่อตั้งค่าอัตโนมัติ (เช่น 2 spaces หรือ 4 spaces ตามทีมตกลง)
- กำหนดการตั้งค่า
- Comment
- ควรเขียน Comment เฉพาะที่จำเป็น ช่วยอธิบาย Block code ที่ซับซ้อน
- การใช้ ESLint / Prettier
- ติดตั้ง ESLint และ Prettier เป็น Dev Dependencies
- ผูก script ใน
package.jsonเช่น"lint": "eslint . --ext .js,.jsx,.ts,.tsx","format": "prettier --write ." - ควรรันก่อน commit โค้ด เพื่อให้โค้ดสะอาดและเป็นระเบียบ
5. การควบคุมเวอร์ชัน (Version Control)
- การตั้งชื่อ Branch
- ชื่อสาขา (branch) ควรสื่อความหมาย เช่น
feature/login-page,fix/bug-123,hotfix/user-not-found
- ชื่อสาขา (branch) ควรสื่อความหมาย เช่น
- Pull Request (PR) Guidelines
- ทุกครั้งที่จะ merge เข้า
mainหรือdevelopควรสร้าง PR - ตรวจสอบ ESLint, Prettier, และรันเทส (ถ้ามี) ก่อนขอให้รีวิว
- ใส่รายละเอียดการแก้ไขใน PR เพื่อให้ผู้รีวิวเข้าใจบริบท
- ทุกครั้งที่จะ merge เข้า
- Commit Message
- ใช้รูปแบบที่สอดคล้องกัน เช่น
[TYPE] Short description- ตัวอย่าง TYPE:
feat,fix,chore,docs, ฯลฯ
- ตัวอย่าง TYPE:
- อธิบายใน commit message ว่าได้แก้ไขหรือเพิ่มอะไร
- หากแก้ไขบั๊กหรือฟีเจอร์ที่มีเลข Issue ให้ระบุเลขอ้างอิงด้วย (เช่น
fix: แก้บั๊กหน้าล็อกอิน (#123))
- ใช้รูปแบบที่สอดคล้องกัน เช่น
6. การจัดการ Environment Variables
- แยกไฟล์
.env.localสำหรับ Development,.env.productionสำหรับ Production (หรือใช้.env.stagingเพิ่มเติมตามต้องการ) - อย่า commit ไฟล์
.env.localหรือไฟล์ที่มีข้อมูลลับขึ้น Git (จัดการด้วย.gitignore) - ควรกำหนดตัวแปรสำคัญ เช่น API_KEY, DB_CONNECTION_STRING, SECRET_KEY ให้ชัดเจน และแจ้งวิธีตั้งค่าใน README
7. การ Build และ Deploy
- Pre-build
- ตรวจสอบให้แน่ใจว่าไม่มีไฟล์เกินจำเป็นติดไปใน Production (กรณี Next.js ก็จะ ignore โฟลเดอร์บางส่วนอัตโนมัติ เช่น
assets/หากตั้งค่าไม่ให้ import ออกมา)
- ตรวจสอบให้แน่ใจว่าไม่มีไฟล์เกินจำเป็นติดไปใน Production (กรณี Next.js ก็จะ ignore โฟลเดอร์บางส่วนอัตโนมัติ เช่น
- การทดสอบ (Testing)
- หากโปรเจ็กต์มี test suite (เช่น Jest, Cypress) ควรตั้ง script ให้ชัดเจน (
npm run test,npm run e2eเป็นต้น) และรันก่อน deploy
- หากโปรเจ็กต์มี test suite (เช่น Jest, Cypress) ควรตั้ง script ให้ชัดเจน (
- CI/CD Pipeline
- หากใช้เครื่องมือ CI/CD เช่น GitHub Actions, GitLab CI, Jenkins ฯลฯ กำหนดขั้นตอนการ build, run test, deploy ให้ชัดเจน
- ตรวจสอบหลัง Deploy
- ตรวจสอบว่าไฟล์ที่ไม่ควรออกสู่ Production ไม่ได้ถูก deploy ขึ้นไป
- ทดสอบ function หลัก ๆ, route ต่าง ๆ, การแสดงผลบนหน้าจอ, และการเรียกใช้ API
8. การดูแล Content โดย Content Creator
- ในกรณีที่มีการแก้ไข/อัปเดตคอนเทนต์ที่
_content/, ควรมีวิธีเวิร์กโฟลว์ที่ชัดเจน เช่น- Content Creator อัปเดตไฟล์ใน
_content/ - สร้าง PR (ถ้า Content Creator ใช้ Git เป็น) หรือส่งไฟล์ให้ Dev merge เข้าโปรเจ็กต์
- Dev ตรวจสอบความถูกต้องเบื้องต้น (Syntax, อักขระพิเศษ)
- Merge และ Deploy
- Content Creator อัปเดตไฟล์ใน
- ควรมีวิธีแจ้งผู้เกี่ยวข้อง หากมีการเปลี่ยนเนื้อหาที่กระทบกับฟีเจอร์ หรือโครงสร้างโค้ด
9. แนวทางเพิ่มเติมเพื่อปรับปรุงการทำงานร่วมกันในทีม
- การสื่อสารในทีม
- กำหนดช่องทางหลัก เช่น Slack, Microsoft Teams, หรือ Trello สำหรับติดตามงาน
- ตั้ง Scrum Meeting หรือ Stand-up Meeting สั้น ๆ เป็นประจำ เพื่ออัปเดตสถานะและปัญหาที่เกิดขึ้น
- การรีวิวโค้ด (Code Review)
- ตั้งกฎว่าทุก PR ต้องมีผู้รีวิวอย่างน้อย 1-2 คนก่อนจะ merge
- เน้นการรีวิวเพื่อปรับปรุงคุณภาพโค้ด ไม่เพียงแต่ตรวจหาบั๊ก ควรแนะนำวิธี refactor หรือปรับปรุงโค้ดให้ดีขึ้นได้
- Documentation
- จัดทำ README อย่างละเอียดหรือใช้ Wiki เพื่อบันทึกขั้นตอนการเซ็ตอัปโปรเจ็กต์ การ build หรือการ deploy
- อัปเดตเอกสารทันทีเมื่อมีการเปลี่ยนแปลงใหญ่ ๆ
- Performance & Security
- ตรวจสอบเสมอว่ามีการใช้เครื่องมือใด ๆ ในการ optimize หรือป้องกันช่องโหว่ (เช่นการใช้ Helmet, CSP header, Rate limit ใน server side)
- อย่าลืมอัปเดต dependencies อย่างสม่ำเสมอ เพื่อปิดช่องโหว่ด้านความปลอดภัย
10. สรุป
- แนวปฏิบัตินี้เป็น “รากฐาน” ในการร่วมงานกันของทีมพัฒนาเว็บของบริษัท นกฟ้า จำกัด
- หากมีความจำเป็นต้องแก้ไข ปรับปรุง หรือเพิ่มเติมข้อกำหนด สามารถนำเข้าที่ประชุมทีมเพื่อปรับปรุงให้สอดคล้องกับสถานการณ์จริงได้
- การรักษามาตรฐานโค้ด โครงสร้าง และการสื่อสารอย่างชัดเจนจะช่วยให้โปรเจ็กต์เสถียร บำรุงรักษาง่าย และส่งมอบงานได้ตามกำหนด
ท้ายสุด อย่าลืมอัปเดตเอกสารนี้เมื่อต้องมีการเปลี่ยนแปลงโครงสร้างหรือขั้นตอนสำคัญ เพื่อให้แน่ใจว่าทีมมี “Single Source of Truth” ในการดำเนินงานร่วมกันเสมอ
“เราทำงานเป็นทีม โค้ดและคอนเทนต์ที่ดี ย่อมเกิดจากการสื่อสารและมาตรฐานร่วมกัน”