asdf เครื่องมือที่จัดการ Version ต่างๆครอบจักรวาล
สวัสดีครับ วันนี้มาแนะนำ Tool สำหรับจัดการ Version ของเครื่องมือ ของภาษา Programming ต่างๆ ชื่อว่า asdf-vm สามารถจัดการได้ทั้ง Node.js, Python, Ruby, Java, Swift, Kotlin, Dart, PHP, Golang, และอื่นๆ เรียกได้ว่าครอบจักรยาน เอ้ย! จักรวาลกันเลยทีเดียว
ก่อนหน้านี้ ผมชอบ Reset เครื่อง Mac ตัวเองบ่อยๆ (แบบ Clean ไปเลย) ทุกๆ 6เดือน - 1ปี ไม่ชอบใช้ Time Machine เพราะไฟล์ git ก็อยู่ github หมด ไฟล์งานก็ Google Drive / iCloud หมดแล้ว แทบไม่มีอะไรจำเป็นในเครื่อง
ทีนี้เวลาผมลง Mac OS ผมใช้แค่ Script laptop นี้ ก็ได้ Environment ที่ตอบโจทย์การทำงานผม แทบเกือบหมดละ เหลืออาจจะมีโปรแกรมอื่นๆ เล็กๆน้อย ก็ค่อยทยอยลงเพิ่ม หรืออาจจะมี Dotfile ของตัวเอง ก็จะ base จาก dotfiles ตัวนี้เช่นกัน
asdf หรือ asdf-vm คืออะไร
asdf เป็น Version Manager ครับ ตัวจัดการกับ Version ของภาษา Programming ต่างๆครับ ซึ่งข้อดีคือ มันใช้ตัวเดียว ทำได้ทุกๆภาษาครับ
จากที่เมื่อก่อน สมมติเขียน Node.js ก็อาจจะใช้ n หรือ nvm ส่วนเขียน Ruby ก็ใช้ rbenv หรือ RVM จะเปลี่ยน Version ทีนึงก็ต้องสลับภาษา สลับ Tools และก็ใช้ไฟล์ config แยกกันอีก (ยกตัวอย่างแค่ 2 ภาษานะ ถ้าคนเขียนภาษาอื่นๆ ก็ต้องใช้ไฟล์ config และก็ Version management อื่นๆ เพิ่มเอีก)
ข้อดีของ asdf คือ
- ตัวเดียวเอาอยู่ ใช้ไฟล์
.tools-version
ไฟล์เดียวเลย - รองรับ config ของ Tool ตัวเก่า เช่น
.node-version
,nvmrc
,.ruby-version
อะไรพวกนี้ - สามารถสลับ runtime ได้ ตาม folder เรา แยก local หรือใช้ global ก็ได้ เช่นโฟลเดอร์ A ใช้ local แต่ถ้าปกติ จะใช้ global ไรงี้
Install asdf-vm
คนใช้ Mac OS นั้นติดตั้งผ่าน Homebrew เลยครับ ง่ายมาก
brew install asdf
่ส่วนถ้าติดตั้งผ่าน git หรือจาก source รวมถึงตั้งค่า bash / zsh /fish แล้วแต่เครื่องครับ ลองดูรายละเอียดเพิ่มเติมประกอบเนอะ จริงๆผมไม่แน่ใจครับ ว่าต้อง set อะไรเพิ่มเติมมั้ย พอดีว่าผมรันจาก script laptop มัน install และ config ให้แล้ว 😂
ส่วน Windows User ไม่มั่นใจว่าสามารถติดตั้งผ่าน cygwin ได้มั้ยนะครับ ต้องลองไป install ดูนะครับ ส่วนนี้ขออภัยด้วยครับ
คำสั่งที่ใช้บ่อยๆ
ทีนี้มาดูคำสั่งที่ผมใช้บ่อยๆกันบ้าง
List plugins
เริ่มจาก ดู plugin ของเราว่ามีอะไรบ้าง และ list plugins ทั้งหมดที่มีของ asdf
asdf plugin-list
asdf plugin-list-all
เพิ่ม Plugins
ต้องการเพิ่ม plugins เช่นภาษา Node.js หรือ Go หรือ Dart ก็แค่
asdf plugin-add <name>
# เช่น asdf plugin-add elixir
เพิ่ม Plugin เป็น Package Manager แล้วแต่เรายังไม่มีภาษานั้นๆ ทำได้โดยการเพิ่ม
asdf install [<name> <version>]
# เช่น asdf install elixir 1.9.4
ดูรายชื่อ Version ของภาษานั้นๆ
ทีนี้ก่อน install แต่ละเวอร์ชั่น เราสามารถ list ดูว่าภาษานั้นๆมี version อะไรให้ install บ้างด้วย
asdf list-all <name>
# เช่น asdf list-all elixir
หรือจะดูว่าในเครื่อง machine เราเนี่ย install ไปกี่เวอร์ชั่นแล้วบ้าง ก็ list ได้เหมือนกัน
asdf list <name>
# เช่น asdf list exlir
ตั้งค่า Version ปัจจุบัน
มี 2 วิธีคือตั้งแบบ global และแบบ local แยกตาม folder ครับ
asdf global <name> <version>
# เช่น asdf global exlir 1.9.4
หรือเฉพาะ folder myApp เป็น เวอร์ชั่นอื่นก็ได้ เช่น
cd myApp
asdf local <name> <version>
# เช่น asdf local elixir 1.7.0
ดุ Version ปัจจุบันของทุกภาษาในเครื่อง
asdf current
ไฟล์ config แบบ global ก็จะอยู่ที่ ~/.tool-versions นั่นเอง
หมดแล้วครับ จริงๆก็เป็น Tools เล็กๆที่ผมว่าน่าจะมีประโยชน์กับ Developer เราๆทั้งหลายแน่นอน เพราะปัจจุบันคิดว่าน้อยคนนัก ที่เขียนแค่ภาษาเดียวนะ 😎
สุดท้าย
ลืมคำสั่งหรอ? พิมพ์ asdf
ดุซิ
version: v0.7.5
MANAGE PLUGINS
asdf plugin-add <name> [<git-url>] Add a plugin from the plugin repo OR, add a Git repo
as a plugin by specifying the name and repo url
asdf plugin-list List installed plugins
asdf plugin-list --urls List installed plugins with repository URLs
asdf plugin-list-all List plugins registered on asdf-plugins repository with URLs
asdf plugin-remove <name> Remove plugin and package versions
asdf plugin-update <name> Update plugin
asdf plugin-update --all Update all plugins
MANAGE PACKAGES
asdf install [<name> <version>] Install a specific version of a package or,
with no arguments, install all the package
versions listed in the .tool-versions file
asdf uninstall <name> <version> Remove a specific version of a package
asdf current Display current version set or being used for all packages
asdf current <name> Display current version set or being used for package
asdf where <name> [<version>] Display install path for an installed or current version
asdf which <command> Display the path to an executable
asdf shell <name> <version> Set the package version in the current shell
asdf local <name> <version> Set the package local version
asdf global <name> <version> Set the package global version
asdf list <name> List installed versions of a package
asdf list-all <name> List all versions of a package
UTILS
asdf exec <command> [args..] Executes the command shim for current version
asdf env <command> [executable] Prints or runs an executable under a command environment
asdf reshim <name> <version> Recreate shims for version of a package
asdf shim-versions <command> List on which plugins and versions is command available
asdf update Update asdf to the latest stable release
asdf update --head Update asdf to the latest on the master branch
เฉียบ!
Happy Coding ❤️
Reference
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit