Rust Series #2 - รู้จัก Cargo: ผู้ช่วยส่วนตัวของโปรเจกต์ Rust!

Rust Series #2 - รู้จัก Cargo: ผู้ช่วยส่วนตัวของโปรเจกต์ Rust!

ถ้าคุณเริ่มต้นเขียน Rust แล้วรู้สึกว่า “เฮ้ย! Rust เจ๋งแหะ” ก็ขอแสดงความยินดีครับ คุณเพิ่งเจอเพื่อนแท้ในโลกโปรแกรมมิ่ง! แต่เดี๋ยวก่อน... ถ้าต้องเขียนโค้ดโปรเจกต์ใหญ่ ๆ บริหารไลบรารี ดูแลไฟล์ต่าง ๆ หรือทดสอบโค้ดทุกวัน มันอาจไม่ง่ายเลย นี่แหละคือเหตุผลที่ Cargo เกิดมาเพื่อช่วยชีวิตโปรแกรมเมอร์อย่างเรา ๆ


Cargo คืออะไร?

Cargo คือเครื่องมือจัดการโปรเจกต์สำหรับ Rust (หรือพูดง่าย ๆ ว่า "package manager" คล้าย npm , yarn ใน NodeJS)
Cargo ช่วยเราทำอะไรได้บ้าง?

  • สร้างโปรเจกต์ใหม่
  • จัดการ dependency (ไลบรารีที่โปรเจกต์ของคุณต้องใช้)
  • คอมไพล์โปรเจกต์
  • รันโปรเจกต์
  • ทดสอบโค้ด (testing)
  • สร้างเอกสาร (documentation)

พูดง่าย ๆ มันคือผู้ช่วยส่วนตัวของคุณเวลาเขียน Rust นั่นเอง!


ติดตั้ง Cargo

ไม่ต้องกังวล ถ้าคุณติดตั้ง Rust ด้วย rustup ไปแล้ว Cargo จะมาพร้อมกันเลย!
ลองเช็กว่าติดตั้ง Cargo แล้วหรือยังด้วยคำสั่งนี้:

cargo --version

ถ้าได้ผลลัพธ์ประมาณนี้:

cargo 1.x.x (yyyy-mm-dd)

แปลว่าพร้อมลุยแล้วครับ 🚀


เริ่มต้นใช้งาน Cargo

1. สร้างโปรเจกต์ใหม่ด้วย Cargo

แทนที่จะสร้างไฟล์ main.rs เองแบบเดิม ๆ ใช้ Cargo ช่วยจัดการดีกว่า!

cargo new hello_cargo

คำสั่งนี้จะสร้างโครงสร้างโปรเจกต์ที่พร้อมใช้งานทันที:

hello_cargo/
├── Cargo.toml       # ไฟล์ตั้งค่าโปรเจกต์
└── src/
    └── main.rs      # ไฟล์โค้ดหลัก

Cargo.toml คืออะไร?

  • ไฟล์นี้คือหัวใจของโปรเจกต์ ใช้สำหรับกำหนดชื่อโปรเจกต์, เวอร์ชัน, และ dependency ต่าง ๆ

ลองเปิด Cargo.toml จะเห็นหน้าตาประมาณนี้:

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

[dependencies]


2. รันโปรเจกต์ด้วย Cargo

เข้าไปในโฟลเดอร์ hello_cargo แล้วรันคำสั่ง:

codecargo run

ผลลัพธ์:

Hello, world!

ง่ายมั้ยล่ะ! 😄


การจัดการ Dependency ด้วย Cargo

Dependency คือไลบรารีหรือโค้ดจากภายนอกที่โปรเจกต์ของคุณต้องใช้ เช่น จัดการ JSON, HTTP หรือการเข้ารหัส

วิธีเพิ่ม Dependency

เปิดไฟล์ Cargo.toml แล้วเพิ่มไลบรารีที่ต้องการ เช่น:

[dependencies]
serde = "1.0"        # ไลบรารีสำหรับ JSON
tokio = { version = "1", features = ["full"] }  # ไลบรารีสำหรับ async

จากนั้นรัน:

cargo build

คำสั่ง Cargo ที่ควรรู้

คำสั่งความหมาย
cargo newสร้างโปรเจกต์ใหม่
cargo initแปลงโฟลเดอร์ปัจจุบันให้เป็นโปรเจกต์ Rust
cargo runคอมไพล์และรันโปรเจกต์
cargo buildคอมไพล์โปรเจกต์ในโหมด debug
cargo build --releaseคอมไพล์ในโหมด release (ประสิทธิภาพสูงกว่า)
cargo testรันทดสอบ (unit tests)
cargo docสร้างเอกสารจากโค้ด
cargo updateอัปเดต dependency ให้เป็นเวอร์ชันล่าสุด

การจัดการ Workspaces

Workspaces ใช้จัดการหลายโปรเจกต์ในโฟลเดอร์เดียวกัน (เหมาะกับโปรเจกต์ใหญ่ ๆ)
ตัวอย่าง Cargo.toml สำหรับ Workspaces:

[workspace]
members = [
    "project_a",
    "project_b",
]

จากนั้นแต่ละโปรเจกต์ย่อย (project_a, project_b) จะมี Cargo.toml แยกกัน


Cargo Tips & Tricks

  • ใช้ cargo check เพื่อตรวจสอบโค้ดเร็วขึ้นโดยไม่ต้องคอมไพล์เต็มรูปแบบ
  • ใช้ cargo fmt จัดฟอร์แมตโค้ดให้อ่านง่าย (ตามมาตรฐาน Rust)
  • ใช้ cargo clippy เพื่อตรวจสอบข้อผิดพลาดหรือโค้ดที่ไม่ควรทำ

สรุป

Cargo เป็นเหมือน "เครื่องมือสารพัดประโยชน์" ที่ทำให้การเขียนโปรแกรม Rust เป็นเรื่องง่ายขึ้น
ไม่ว่าคุณจะสร้างโปรเจกต์ใหม่ จัดการ dependency หรือทดสอบโค้ด Cargo ช่วยให้ทุกอย่างสะดวก รวดเร็ว และเป็นระเบียบ

Read more

การทำ Data Migration และ Seeder: คู่มือสำหรับ Developer

การทำ Data Migration และ Seeder: คู่มือสำหรับ Developer

ถ้าพูดถึงการพัฒนาแอปพลิเคชันที่เชื่อมต่อกับ Database หนึ่งในความยุ่งยากที่สุดคือการจัดการ Database structure ที่เปลี่ยนไปตามฟีเจอร์ใหม่ๆ ที่เพิ่มเข้ามา เช่น เพิ่มตาราง (Table) เปลี่ยนชนิดข้อมูล (Data type) หรือลบฟิลด์ (Field) ออกไป และแน่นอนว่

By maimem
เช็ค Internet จากเว็บ: ทำยังไงให้รู้ว่าออกเน็ตได้จริง?

เช็ค Internet จากเว็บ: ทำยังไงให้รู้ว่าออกเน็ตได้จริง?

เคยเจอไหมครับ เวลาใช้งานเว็บไซต์แล้วอยู่ดี ๆ ก็โหลดข้อมูลไม่ได้ หรือ API เงียบหายไม่มีการตอบกลับ? หลายครั้งเรามักสงสัยว่า "ตกลงปัญหาอยู่ที่ตัวเรา เซิร์ฟเวอร์ หรือ Internet กันแน่?" วันนี้ผมจะมาเล่าเรื่อง "การตรวจสอบสถานะการเชื่อมต่

By maimem
ซ่อน Credential ใน AWS CodeBuild ให้ปลอดภัยด้วย Parameter Store

ซ่อน Credential ใน AWS CodeBuild ให้ปลอดภัยด้วย Parameter Store

ทำไมต้องซ่อน Credential? ในโลกของ DevOps และ Cloud Computing การจัดการ Credential (ข้อมูลรับรอง เช่น API Keys, Passwords, หรือ Secrets ต่างๆ) เป็นเรื่องที่สำคัญอย่างยิ่ง เพราะ Credential เปรียบเสมือนกุญแจที่เปิดประตูไปสู่ทรัพยากรสำคัญในระบบ เช่น ฐานข้อมูล

By maimem
Session ไม่ตาม! เพราะ Load Balancer บน Magento2

Session ไม่ตาม! เพราะ Load Balancer บน Magento2

เมื่อเร็วๆนี้ ผมได้ทำงานเกี่ยวกับพวก Marketplace บน Magento2 ซึ่งเป็นแพลตฟอร์มอีคอมเมิร์ซที่ใช้งานมากในระดับองค์กร โครงสร้างของระบบนี้อยู่บน Server-side architecture ที่ต้องจัดการปัญหาและความท้าทายหลายด้าน โดยเฉพาะการทำให้ระบบ Load Balancer และ Auto Scaling ทำงานได้ราบรื่น เพื่อรองรับจำนวนผู้ใช้งานที่เปลี

By maimem