อัปเกรด Gemini CLI ด้วย Custom Slash Commands

ช่วงนี้ผมใช้ Gemini CLI เป็นผู้ช่วยค่อนข้างบ่อยครับ แต่การต้องพิมพ์ Prompt ยาวๆ ซ้ำๆ เพื่อสั่งงานเดิมๆ ก็เป็นเรื่องน่าเบื่อที่คอยขัดจังหวะการทำงานอยู่เสมอ โชคดีที่ Gemini CLI มีฟีเจอร์เด็ดอย่างการสร้าง Custom Slash Command ของเราเอง ซึ่งเข้ามาแก้ปัญหานี้ได้อย่างตรงจุด ทำให้เราสามารถสร้าง "ทางลัด" สำหรับงานที่ทำเป็นประจำได้ในพริบตา

Custom Slash Command คืออะไร? ทำไมเราควรใช้?

ลองจินตนาการว่า แทนที่เราจะต้องพิมพ์ Prompt ยาวเหยียดว่า "ช่วยเขียน Git commit message ตามหลัก Conventional Commits จาก git diff --staged ให้หน่อย" ทุกครั้งที่เราจะ commit งาน เราแค่พิมพ์สั้นๆ ว่า /git:commit แล้วปล่อยให้ AI จัดการที่เหลือให้ทั้งหมด... นี่แหละครับคือพลังของ Custom Slash Command มันคือการสร้าง "ทางลัด" หรือ "คำสั่งพิเศษ" ส่วนตัวของเราขึ้นมา เพื่อสั่งงานที่ทำบ่อยๆ ให้กับ AI ได้ในพริบตา มันเปลี่ยน Gemini จากเครื่องมือ AI ทั่วไป ให้กลายเป็นผู้ช่วยที่รู้ใจและเข้าใจ Workflow การทำงานของเราอย่างแท้จริง

ลงมือสร้างคำสั่งแรกของคุณ

การสร้าง Custom Command นั้นตรงไปตรงมาอย่างไม่น่าเชื่อ เราสามารถสร้างไฟล์คำสั่งของเราเก็บไว้ได้ 2 ที่ครับ

  1. Global: สำหรับคำสั่งที่ใช้ได้ทั่วไปกับทุกโปรเจกต์ ให้เก็บไว้ที่ ~/.gemini/commands/
  2. Project Specific: สำหรับคำสั่งที่ใช้เฉพาะในโปรเจกต์นั้นๆ ให้เก็บไว้ที่ <your-project-root>/.gemini/commands/

ชื่อของคำสั่งจะมาจากชื่อไฟล์โดยตรงเลยครับ เช่น ถ้าเราสร้างไฟล์ชื่อ test.toml เราก็จะสามารถเรียกใช้คำสั่ง /test ได้ และที่เจ๋งไปกว่านั้นคือ เราสามารถจัดระเบียบคำสั่งโดยการสร้าง Subdirectory ได้ด้วย เช่น git/commit.toml จะกลายเป็นคำสั่ง /git:commit ครับ

โครงสร้างไฟล์คำสั่ง (.toml)

ไฟล์คำสั่งจะต้องเป็นฟอร์แมต .toml เท่านั้น โดยข้างในจะมี Field ที่สำคัญอยู่ 2 ตัวคือ

  • prompt (String): เป็นหัวใจหลัก คือชุดคำสั่งหรือ Prompt ที่เราต้องการให้ LLM ทำงาน สามารถเขียนเป็นบรรทัดเดียวหรือหลายบรรทัดก็ได้
  • description (String): เป็นคำอธิบายสั้นๆ ว่าคำสั่งนี้ใช้ทำอะไร (อันนี้จะใส่หรือไม่ก็ได้)

ทำให้คำสั่ง Dynamic ด้วย Arguments และ Shell Commands

ความสามารถที่แท้จริงของมันอยู่ที่การรับค่า Arguments และการรัน Shell Command เพื่อนำผลลัพธ์มาใส่ใน Prompt ของเราได้ด้วย

  • Shorthand Injection {{args}}: ใช้สำหรับรับข้อความทั้งหมดที่เราพิมพ์ต่อท้ายคำสั่งเข้ามาใน Prompt
  • Shell Commands !{...}: นี่คือตัวเปลี่ยนเกมเลยครับ เราสามารถสั่งให้มันรันคำสั่งใน Shell ของเราก่อน แล้วนำผลลัพธ์ (output) ที่ได้ยัดเข้าไปใน Prompt โดยอัตโนมัติ

ตัวอย่างการใช้งานจริง สร้างผู้ช่วยเขียน Commit Message

พื่อให้เห็นภาพชัดเจน เรามาสร้างคำสั่ง /git:commit ที่ยกตัวอย่างไปข้างต้นกันครับ

  1. สร้างไฟล์ที่ ~/.gemini/commands/git/commit.toml
  2. ใส่เนื้อหาดังนี้ลงไป
description = "Generates a Git commit message based on staged changes."

prompt = """
Please generate a Conventional Commit message based on the following git diff:

```diff
!{git diff --staged}
```
"""

มันทำงานอย่างไร

  • เมื่อเราพิมพ์คำสั่ง /git:commit ใน Terminal...
  • Gemini CLI จะเห็น !{git diff --staged} ใน Prompt
  • มันจะรันคำสั่ง git diff --staged ในเครื่องเราก่อน เพื่อดูว่ามีไฟล์อะไรที่เปลี่ยนแปลงและพร้อมจะ commit บ้าง
  • จากนั้น มันจะนำผลลัพธ์ (output) ของ git diff ทั้งหมด ไปแทนที่ตรง !{...} ใน Prompt
  • สุดท้าย มันจะส่ง Prompt ที่สมบูรณ์แล้ว (ซึ่งมี code diff ของเราแนบไปด้วย) ไปให้ LLM เพื่อสร้าง Commit message ที่มีความหมายและเป็นไปตามมาตรฐาน Conventional Commits กลับมาให้เรา

บทสรุป

การสร้าง Custom Slash Commands ใน Gemini CLI ไม่ใช่แค่การประหยัดเวลาในการพิมพ์ แต่มันคือการยกระดับการทำงานร่วมกับ AI ไปอีกขั้น เรากำลังสร้างเครื่องมือที่ปรับแต่งมาเพื่อ Workflow ของเราโดยเฉพาะ การลงทุนลงแรงเพียงเล็กน้อยในวันนี้ จะช่วยประหยัดเวลาและลดความน่าเบื่อหน่ายในการทำงานของคุณไปได้อีกนานเลยครับ

Thanks: https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/commands.md#custom-commands