แนะนำ direnv เครื่องมือในการจัดการ local environment variables
ว่าด้วยเรื่องของ environment variables
ในการพัฒนา software ขึ้นระบบ production ส่วนมากเราจะต้องเจอกับการจัดการ credentials ที่จำเป็นต้องใช้ในการทดสอบบน local machine หรือเอาไว้ debug เป็นต้น ซึ่งแน่นอนว่าเราก็คงไม่ hardcode หรือนำขึ้น version control system กันอยู่แล้ว (ใครรู้ตัวว่ามีลองทำตามบทความนี้ดูครับ) หนึ่งในวิธีการที่เราทำได้คือนำไปไว้บน environment variables แล้วเรียกใช้โดยระบุ key ลงไป
ปัญหาที่เราพบเจอคือถ้าเรามี environment variables ที่ต้อง export หลายตัว คงจะเป็นเรื่องเสียเวลาหากเราต้องมา export มันทุกครั้งที่ใช้งาน เพราะเพียงแค่เรา reset terminal session สิ่งที่เรา export ไว้ก็หายหมด การนำไปไว้บน runcom
file เช่น ~/.bashrc
, ~/.zshrc
น่าจะไม่ใช่เรื่องที่ดีเพราะเราก็ไม่ค้องการ export variables เหล่านี้แบบ global ด้วยเช่นกัน
export FOO=foo
export BAR=bar
...
direnv ทำอะไรได้บ้าง
“
direnv
is an extension for your shell. It augments existing shells with a new feature that can load and unload environment variables depending on the current directory.” - https://direnv.net/
เราสามารถใช้ direnv
ในการ load environment variables ที่เราระบุไว้ใน file .envrc
ใน directory ใดๆ ถ้าเราออกจาก directory นั้นตัว direnv
ก็จะทำการ unload environment variables ด้วย ทำให้เวลาเรา switch ไปทำอีก project ตัว environment variables ที่มี key เดียวกันก็จะไม่ทับกันนั่นเอง
วิธีการติดตั้ง
ข้อจำกัดของ direnv
คือมันสามารถใช้ได้แค่กับ Unix-based เท่านั้น ดังนั้นตาม documentation จะเป็นพวก Linux หรือ macOS ไป สำหรับสาย Windows ถ้าใช้ Linux subsystem ก็ไม่น่ามีปัญหา แต่ถ้าไม่ก็อาจจะต้องมองหาเครื่องมืออื่น
หลังจากนั้นเราจะต้องติดตั้ง shell ที่จะถูก hook เพื่อเปิดใช้งาน direnv
ตัวอย่างเช่น Bash หรือ Zsh หรือ Fish เป็นต้น ดูตามตัวอย่างใน documentation ได้เลย
การใช้งานใน local directory
-
ใน project directory สร้าง file
.envrc
ขึ้นมา ข้างในก็ระบุ environment variables ที่เราต้องการ -
Ignore
.envrc
ออกจาก version control อย่างใน Git ก็เพิ่ม.envrc
ลงไปใน.gitignore
ซะ -
Load environment variables ด้วยคำสั่ง เป็นอันจบงาน
$ direnv allow
direnv: loading ~/path/to/.envrc
direnv: export +FOO +BAR
$ echo $FOO
foo
$ echo $BAR
bar
แนะนำให้สร้าง file .envrc.template
ขึ้นมาซึ่งข้างในจะคล้ายกับ .envrc
แต่ให้เอา credentials ออก จากนั้นเอาขึ้น version control เวลาที่เพื่อนร่วมทีมจะใช้ direnv
ก็ copy template file แล้วเปลี่ยนชื่อเป็น .envrc
จากนั้นก็ใส่ credentials ที่ถูกต้องลงไป
ลองนำไปใช้กันดูครับ ของโคตรดี