ในระบบ ecosystem ของภาษา Rust การจัดการ dependency และการแบ่งปันโค้ดทำได้อย่างมีประสิทธิภาพผ่านสิ่งที่เรียกว่า Crate ซึ่งก็คือ library หรือ binary ที่สามารถนำมาใช้งานซ้ำ และแจกจ่ายสู่ชุมชนผ่าน crates.io
บทความนี้จะพาคุณไปรู้จักกับขั้นตอนแบบละเอียด ตั้งแต่การสร้าง crate ไปจนถึงการเผยแพร่ให้คนอื่นใช้งานได้ พร้อมคำแนะนำเชิงปฏิบัติ
Crate คืออะไร?
ในภาษา Rust crate คือหน่วยโค้ดที่ compile ได้ เช่น:
- Binary crate: โปรแกรมที่รันได้ เช่น
main.rs
- Library crate: โค้ด reusable เช่น
lib.rs
เริ่มต้นสร้าง Library Crate
cargo new my_utils --lib cd my_utils
โครงสร้างไฟล์:
my_utils/ ├── Cargo.toml └── src/ └── lib.rs
เขียนโค้ดใน lib.rs
// src/lib.rs /// คำนวณผลรวมของเลขทั้งหมดใน vector pub fn sum(v: &Vec) -> i32 { v.iter().sum() }
อย่าลืมใส่ pub
เพื่อเปิดให้โค้ดภายนอกสามารถใช้งานได้
เพิ่ม Metadata ใน Cargo.toml
[package] name = "my_utils" version = "0.1.0" edition = "2021" authors = ["Your Name "] description = "Utility functions สำหรับการใช้งานทั่วไป" license = "MIT OR Apache-2.0" repository = "https://github.com/yourname/my_utils" documentation = "https://docs.rs/my_utils" readme = "README.md" keywords = ["utility", "sum", "math"] categories = ["algorithms"]
เพิ่ม README.md
# my_utils Crate นี้ประกอบด้วยฟังก์ชัน utility ที่ใช้บ่อย ```rust use my_utils::sum; fn main() { let v = vec![1, 2, 3]; println!("{}", sum(&v)); // 6 } ```
ทดสอบด้วย Unit Test
#[cfg(test)] mod tests { use super::*; #[test] fn test_sum() { let v = vec![1, 2, 3]; assert_eq!(sum(&v), 6); } }
รันด้วยคำสั่ง cargo test
Build & ตรวจสอบก่อน Publish
cargo check cargo test cargo doc --open
สร้างเอกสารแบบ HTML อัตโนมัติด้วย cargo doc
สมัครสมาชิก Crates.io
- สมัครที่ crates.io และ Login ด้วย GitHub
- สร้าง API token จากหน้า Account Settings
- บันทึก token ลงในเครื่อง
cargo login <your-api-token>
เผยแพร่ Crate
cargo publish
หากสำเร็จ Crate ของคุณจะปรากฏใน crates.io และสามารถติดตั้งได้ด้วย:
[dependencies] my_utils = "0.1"
การออกเวอร์ชันใหม่
- เพิ่มเลข version ใน Cargo.toml เช่น จาก
0.1.0
เป็น0.2.0
- รัน
cargo publish
อีกครั้ง
แนวทางการออกแบบ Crate ที่ดี
- ตั้งชื่อ crate ให้สื่อความหมาย
- จัด module ให้สะอาด
- ใส่ document comment (///) ครบทุก public API
- มี test ครอบคลุม
- รองรับ feature flag ถ้าเหมาะสม
Crate ที่เป็นที่นิยม
serde
– serialization/deserializationrand
– สุ่มข้อมูลregex
– regular expression
ศึกษาตัวอย่างได้จากโค้ดของ crate เหล่านี้
บทสรุป
การสร้าง crate library แล้วเผยแพร่ให้ผู้อื่นใช้งานได้ไม่เพียงแต่ช่วยให้คุณ reuse โค้ดได้อย่างมีระบบ แต่ยังเป็นการมีส่วนร่วมกับ community Rust
Crate หนึ่ง อาจกลายเป็น library ที่ถูกใช้งานในโปรเจกต์นับพันทั่วโลก
อย่ารอช้า! ลองสร้าง Crate ของคุณเอง แล้วแชร์สู่ชุมชนวันนี้เลย