📜 You can read the English version here!
Daftar Isi
-
Apa itu
asdf
version manager? -
Instalasi
asdf
-
Instalasi Plugin di
asdf
-
Instalasi Runtime di
asdf
-
Mengatur Versi Runtime di
asdf
- ElixirLS - Ekstensi Editor untuk Pengembangan Elixir
Apa itu asdf
version manager?
Erlang dan Elixir bisa diinstal langsung lewat panduan pada halaman unduh Erlang/OTP dan situs resmi Elixir. Namun, pendekatan ini memiliki keterbatasan dalam konteks pengembangan: sistem hanya bisa menangani satu versi runtime dalam satu waktu. Jika kita ingin menggunakan versi lain, besar kemungkinan akan terjadi konflik atau sistem meminta kita menimpa versi yang sudah terinstal.
Untuk mengatasi hal ini, kita bisa menggunakan version manager, yaitu alat yang memungkinkan kita menginstal dan mengelola banyak versi runtime secara berdampingan dalam satu sistem. Pendekatan ini memungkinkan kita mendukung berbagai proyek dengan versi runtime berbeda dan berpindah antarversi sesuai kebutuhan.
Version manager juga membantu menjaga konsistensi lingkungan pengembangan dalam satu tim, karena seluruh anggota bisa menggunakan versi yang sama dan terhindar dari masalah kompatibilitas.
Dalam tulisan ini, kita akan menggunakan version manager bernama asdf-vm, atau cukup disebut asdf.
Mengapa Memilih asdf
?
Dalam proyek perangkat lunak modern, kita sering membutuhkan lebih dari satu runtime, yang berarti juga membutuhkan beberapa version manager untuk mengelolanya. Misalnya, untuk mengembangkan aplikasi web berbasis Elixir, kita mungkin menggunakan kerl
untuk Erlang, kiex
untuk Elixir, dan nvm
untuk Node.js. Jika setiap runtime dikelola dengan alat yang berbeda, pengelolaan lingkungan menjadi rumit dan menambah beban kognitif.
asdf
menyederhanakan ini dengan menyediakan satu antarmuka terpadu untuk mengelola berbagai runtime melalui sistem plugin. Dengan asdf
, kita bisa menginstal dan beralih antarversi Erlang, Elixir, Node.js, dan puluhan runtime lainnya hanya dengan satu alat dan pola perintah yang konsisten.
Beberapa keunggulan utama asdf
:
- Antarmuka seragam. Kita tidak perlu mempelajari cara kerja berbeda untuk tiap version manager.
- Dukungan plugin yang luas, termasuk plugin resmi (first-party) untuk Erlang dan Elixir.
-
Konsistensi lintas proyek dan tim, melalui file
.tool-versions
yang mendeklarasikan versi setiap runtime secara eksplisit.
Saat ini tersedia hampir 100 plugin yang dikembangkan oleh komunitas. Karena plugin untuk Erlang dan Elixir dikembangkan secara resmi, asdf
menjadi pilihan yang sangat direkomendasikan untuk pengembangan proyek Elixir.
Instalasi asdf
Untuk menginstal asdf
, tersedia dua metode utama: pertama, melalui package manager, dan kedua, dengan mengunduh precompiled binary dari GitHub. Metode lain seperti go install
atau membangun langsung dari source code juga tersedia, tetapi tidak akan dibahas di sini. Jika ingin mengeksplorasi metode lain, silakan merujuk ke dokumentasi resmi di halaman ini.
Kita mulai dari metode pertama.
Menggunakan Package Manager
Ini adalah metode yang direkomendasikan oleh pengembang asdf
. Saat ini terdapat tiga package manager yang didukung secara langsung: Homebrew (macOS), Zypper (openSUSE Linux), dan Pacman (Arch Linux). Berikut adalah perintah instalasinya:
# Untuk Homebrew (macOS)
$ brew install asdf
# Untuk Zypper (openSUSE Linux)
$ zypper install asdf
# Untuk Pacman (Arch Linux via AUR)
$ git clone https://aur.archlinux.org/asdf-vm.git && cd asdf-vm && makepkg -si
⚠️ Perintah
sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Jika sistem operasi yang digunakan tidak termasuk dalam daftar di atas, metode berikut bisa digunakan sebagai alternatif.
Mengunduh Precompiled Binary
Metode ini memerlukan git
, jadi pastikan git
sudah terinstal dengan menjalankan:
$ git --version
Jika versi git
ditampilkan, artinya sudah terinstal. Jika belum, instal terlebih dahulu sesuai sistem operasi yang digunakan:
# APT (Ubuntu Linux)
$ apt install git
# DNF (Fedora Linux)
$ dnf install git
# Pacman (Arch Linux)
$ pacman -S git
# Zypper (openSUSE Linux)
$ zypper install git
# Homebrew (macOS)
$ brew install coreutils git
⚠️ Perintah
sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Setelah git
tersedia, buka halaman rilis asdf di GitHub dan unduh arsip .tar.gz
yang sesuai dengan arsitektur sistem.
Ekstrak arsip tersebut ke dalam salah satu direktori yang tercantum di dalam environment variable $PATH
. Untuk melihat daftar direktori dalam $PATH
, jalankan:
$ echo $PATH
/home/nama_user_kamu/.local/bin:/usr/local/bin:/usr/bin:/bin
Output di atas berisi direktori yang dipisahkan dengan tanda titik dua :
. Pilih salah satu direktori berikut sebagai target ekstraksi:
-
/home/nama_user_kamu/.local/bin
- direktori milik pengguna, cocok untuk instalasi tanpa akses root. -
/usr/local/bin
- umum digunakan untuk perangkat lunak tambahan. -
/usr/bin
dan/bin
- sebaiknya dihindari karena merupakan bagian dari sistem inti.
Direktori yang paling direkomendasikan adalah /home/nama_user_kamu/.local/bin
karena aman dan tidak memerlukan hak akses administratif.
Verifikasi Lokasi Binary
Setelah mengekstrak, pastikan asdf
dikenali oleh shell dengan menjalankan:
$ type -a asdf
asdf is /home/nama_user_kamu/.local/bin/asdf
Jika perintah di atas menampilkan lokasi binary asdf
, berarti sudah terdeteksi dengan benar. Jika tidak, kemungkinan besar direktori tempat ekstraksi belum terdaftar dalam $PATH
.
Verifikasi Instalasi asdf
Terakhir, jalankan:
$ asdf
Jika instalasi berhasil, perintah ini akan menampilkan informasi versi dan daftar subperintah asdf
.
Sekarang asdf
sudah siap digunakan. Selanjutnya, kita akan menginstal plugin untuk Erlang, Elixir, dan Node.js.
Instalasi Plugin di asdf
asdf
menggunakan sistem plugin untuk mengelola berbagai runtime. Sebelum menginstal runtime, kita perlu menambahkan plugin yang sesuai terlebih dahulu.
Dalam tulisan ini, kita akan menambahkan tiga plugin utama:
- Erlang – Karena Elixir berjalan di atas BEAM VM, maka Erlang dibutuhkan agar Elixir bisa berfungsi.
- Elixir – Bahasa pemrograman utama yang akan kita pelajari dalam seri ini.
- Node.js (opsional) – Diperlukan saat kita mengelola aset frontend dengan Phoenix Framework, seperti JavaScript dan CSS.
Plugin Erlang
Langkah pertama adalah menambahkan plugin untuk Erlang.
Namun sebelum itu, kita perlu memastikan seluruh dependensi sistem sudah terinstal. Daftar berikut menyesuaikan dengan sistem operasi yang digunakan:
# APT (Ubuntu Linux 24.04)
$ apt install build-essential autoconf m4 libwxgtk3.2-dev libwxgtk-webview3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev unzip
# DNF (Fedora Linux)
$ dnf install gcc g++ automake autoconf ncurses-devel wxGTK-devel wxBase openssl-devel libxslt fop unzip
# Pacman (Arch Linux)
$ pacman -S --needed base-devel ncurses glu mesa wxwidgets-gtk3 libpng libssh unixodbc libxslt fop unzip
# Zypper (openSUSE Linux)
$ zypper install make automake autoconf gcc-c++ ncurses-devel libssh-devel libopenssl-devel wxGTK3-3_2-devel fop libxml2-tools libxslt-tools unzip
# Homebrew (macOS)
$ brew install autoconf openssl@3 wxwidgets libxslt fop unzip
⚠️ Perintah
sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Setelah semua dependensi terinstal, tambahkan plugin Erlang dengan perintah:
$ asdf plugin add erlang
Lalu verifikasi bahwa plugin berhasil ditambahkan:
$ asdf plugin list
erlang
Jika erlang
muncul dalam daftar, berarti plugin telah berhasil ditambahkan.
Plugin Elixir
Setelah plugin Erlang ditambahkan, kita bisa lanjut menambahkan plugin Elixir:
$ asdf plugin add elixir
Verifikasi kembali daftar plugin yang sudah terdaftar:
$ asdf plugin list
elixir
erlang
Dengan begitu, elixir
dan erlang
kini siap digunakan.
Plugin Node.js (Opsional)
Plugin untuk Node.js bersifat opsional, tetapi sangat berguna dalam pengembangan aplikasi web menggunakan Phoenix, terutama ketika berurusan dengan aset frontend.
Seperti Erlang, plugin ini juga memerlukan beberapa dependensi awal:
# APT (Ubuntu/Debian)
$ apt install dirmngr gnupg curl gawk
# DNF (Fedora/CentOS/RHEL)
$ dnf install dirmngr gnupg2 curl gawk
# Pacman (Arch Linux)
$ pacman -S dirmngr gnupg curl gawk
# Zypper (openSUSE)
$ zypper install dirmngr gpg2 curl gawk
# Homebrew (macOS)
$ brew install dirmngr gpg curl gawk
⚠️ Perintah
sudo
mungkin diperlukan tergantung pada konfigurasi sistem.
Setelah semua dependensi terinstal, tambahkan plugin Node.js:
$ asdf plugin add nodejs
Lalu verifikasi:
$ asdf plugin list
elixir
erlang
nodejs
Kini semua plugin utama sudah terinstal. Tahap berikutnya adalah menginstal masing-masing runtime melalui asdf
.
Instalasi Runtime di asdf
Pada bagian ini, kita akan menginstal runtime utama yang dibutuhkan untuk pengembangan dengan Elixir, yaitu:
- Erlang - versi 27.3
- Elixir - versi 1.18.3-otp-27
- Node.js - versi terbaru (saat tulisan ini dibuat: 23.10.0)
Karena Elixir berjalan di atas BEAM VM, kita perlu memastikan versi Elixir dan Erlang yang digunakan saling kompatibel.
Memeriksa Kompatibilitas Elixir dan Erlang
Sebelum memulai instalasi, pastikan versi Elixir yang dipilih kompatibel dengan versi Erlang. Informasi ini tersedia di dokumentasi resmi Elixir pada bagian Compatibility and Deprecations.
Berikut cuplikan tabel kompatibilitasnya:
Elixir version | Supported Erlang/OTP versions |
---|---|
1.18 | 25 – 27 |
1.17 | 25 – 27 |
1.16 | 24 – 26 |
Karena kita akan menggunakan Elixir 1.18.3, maka Erlang 27.3 adalah versi yang kompatibel dan juga merupakan versi stabil terbaru saat ini.
Memeriksa Versi yang Tersedia
Sebelum menginstal, kita bisa memeriksa versi-versi yang tersedia dengan:
$ asdf list all erlang
$ asdf list all elixir
Pastikan:
- Erlang 27.3 tersedia di daftar pertama.
- Elixir 1.18.3-otp-27 tersedia di daftar kedua.
Untuk Node.js, kita tidak perlu memilih versi secara manual karena akan langsung menginstal versi terbaru.
Instalasi Erlang
Instal Erlang 27.3:
$ asdf install erlang 27.3
Proses ini akan mengunduh source code dan mengkompilasinya secara lokal. Waktu instalasi tergantung pada kecepatan mesin.
Set versi global Erlang:
$ asdf set --home erlang 27.3
Perintah ini akan menulis erlang 27.3
ke dalam file .tool-versions
di direktori home, sehingga versi ini digunakan secara default di seluruh sistem.
Verifikasi instalasi dengan membuka Erlang shell:
$ erl
Jika berhasil, akan muncul seperti ini:
Instalasi Elixir
Instal Elixir 1.18.3-otp-27:
$ asdf install elixir 1.18.3-otp-27
Karena Elixir tersedia dalam bentuk precompiled binary, proses instalasinya relatif cepat.
Set versi global Elixir:
$ asdf set --home elixir 1.18.3-otp-27
Verifikasi dengan membuka Elixir Interactive Shell (IEx):
$ iex
Jika berhasil, akan muncul seperti ini:
Instalasi Node.js (Opsional)
Instal versi terbaru dari Node.js:
$ asdf install nodejs latest
Set versi global (gantilah 23.10.0
sesuai versi yang terinstal):
$ asdf set --home nodejs 23.10.0
Verifikasi instalasi:
$ node
Jika berhasil, akan muncul tampilan Node.js REPL seperti berikut:
Dengan langkah ini, semua runtime utama sudah berhasil diinstal dan dikonfigurasi. Di bagian selanjutnya, kita akan membahas bagaimana mengelola versi runtime secara global dan lokal sesuai kebutuhan proyek.
Mengatur Versi Runtime di asdf
Setelah menginstal Erlang, Elixir, dan Node.js, langkah selanjutnya adalah mengatur versi runtime yang akan digunakan. asdf
mendukung dua skema pengaturan:
- Versi global – Berlaku di seluruh sistem.
- Versi lokal – Berlaku khusus di dalam direktori proyek.
Kedua pendekatan ini menggunakan file .tool-versions
untuk menyimpan informasi versi.
Mengatur Versi Global
Versi global digunakan sebagai default di seluruh sistem, kecuali jika direktori tempat kita berada memiliki konfigurasi lokal.
Sebenarnya, saat sebelumnya kita menjalankan perintah asdf set --home
, kita sudah mengatur versi global. Namun, jika ingin mengubah atau mengatur ulangnya, berikut contohnya:
$ asdf set --home erlang 27.3
$ asdf set --home elixir 1.18.3-otp-27
$ asdf set --home nodejs 23.10.0
Perintah-perintah ini akan menuliskan entri ke dalam file .tool-versions
di direktori $HOME
, sehingga runtime ini berlaku secara global. Versi global ini akan digunakan saat kita menjalankan perintah seperti erl
, iex
, atau node
dari direktori mana pun, kecuali jika direktori tersebut memiliki versi lokalnya sendiri.
Mengatur Versi Lokal
Versi lokal biasanya diterapkan di direktori proyek dan disimpan dalam file .tool-versions
. Selama kita berada di dalam direktori proyek (atau subdirektorinya), asdf
akan memprioritaskan versi lokal dibanding versi global.
Untuk memahami cara kerjanya, mari kita buat contoh proyek sederhana menggunakan mix:
$ mix new hello_world
$ cd hello_world
Kita ingin agar proyek hello_world
menggunakan versi Erlang dan Elixir yang berbeda dari versi global, misalnya:
$ asdf set erlang 26.0
$ asdf set elixir 1.17.0-otp-26
Perintah ini akan menghasilkan file .tool-versions
di dalam direktori proyek dengan isi seperti berikut:
Untuk menginstal semua versi runtime yang tercantum dalam file .tool-versions
lokal, jalankan perintah berikut:
$ asdf install
Perintah ini akan mengunduh dan menginstal versi-versi yang belum tersedia di sistem:
Setelah instalasi selesai, kita bisa memastikan bahwa versi lokal sudah aktif dengan menjalankan perintah berikut:
$ erl
Erlang/OTP 26 [erts-14.0] ...
$ iex
iex(1)> System.version()
"1.17.0"
Versi Erlang ditampilkan langsung saat shell terbuka, sedangkan versi Elixir dapat dicek dengan memanggil function System.version()
di dalam iex
.
Tabel berikut menunjukkan perbedaan antara versi global dan versi lokal yang digunakan di proyek hello_world
:
Versi Global | Versi Lokal (Proyek hello_world ) |
---|---|
Erlang: 27.3 | Erlang: 26.0 |
Elixir: 1.18.3-otp-27 | Elixir: 1.17.0-otp-26 |
Dengan cara ini, kita bisa mengelola banyak proyek dengan kebutuhan versi runtime yang berbeda-beda secara bersih dan terisolasi.
ElixirLS - Ekstensi Editor untuk Pengembangan Elixir
🤩 Elixir Language Server Resmi
Tim pengembang Elixir sedang mengembangkan official Elixir Language Server. Detailnya bisa dibaca di pengumuman blog ini.
Sambil menunggu rilis stabilnya, kita akan menggunakan ElixirLS, yaitu proyek komunitas dari elixir-lsp.
ElixirLS adalah ekstensi editor berbasis Language Server Protocol (LSP) yang membantu proses penulisan kode Elixir. Fitur-fitur seperti code completion, navigasi antar module, hingga debugging interaktif membuat proses pengembangan menjadi lebih efisien dan minim kesalahan, terutama karena Elixir adalah bahasa dengan dynamic typing, sehingga kesalahan tipe baru terlihat saat runtime. ElixirLS menambahkan lapisan bantuan seperti analisis statis dan anotasi tipe untuk mengurangi potensi bug sejak dini.
Fitur ElixirLS
Berikut fitur-fitur utama ElixirLS:
-
Debugger - mendukung step-through debugging, kita bisa menjalankan program baris demi baris, melihat isi variabel, dan menelusuri alur logika secara langsung dari editor. Ini sangat berguna saat mencari bug yang tidak mudah dilihat hanya dengan function
IO.inspect/1
. - Dialyzer Analysis - Dialyzer adalah alat analisis statis bawaan Erlang yang mendeteksi ketidaksesuaian tipe dan potensi bug tanpa menjalankan kode. ElixirLS menjalankan analisis ini secara otomatis dan bertahap (incremental), sehingga kita mendapat umpan balik cepat saat menulis kode tanpa harus menjalankan seluruh analisis manual.
-
@spec
Suggestions - berdasarkan hasil inferensi dari Dialyzer, ElixirLS akan menyarankan anotasi tipe (@spec
) untuk function-function yang kita tulis. Ini membantu dokumentasi dan meningkatkan kejelasan kode. - Inline Errors & Warnings - kesalahan kompilasi dan peringatan seperti variabel tidak terpakai atau argumen salah langsung ditampilkan di dalam editor, tanpa harus bolak-balik ke terminal.
- Hover Docs - saat kursor diarahkan ke nama function atau module, dokumentasi singkatnya akan muncul sebagai tooltip.
- Go-to-Definition & Find References - klik kanan pada nama function atau module dan pilih Go to Definition untuk langsung melompat ke tempat function tersebut didefinisikan. Sebaliknya, Find References akan menunjukkan di mana saja function tersebut dipanggil di dalam proyek.
- Code Completion & Formatter - saat mengetik, editor akan menyarankan nama function, variabel, atau module yang cocok. Ini mempercepat penulisan dan mengurangi typo. Sementara formatter akan memformat kode kita secara otomatis mengikuti gaya penulisan resmi komunitas Elixir.
- Symbol Lookup - memungkinkan pencarian simbol seperti function, module, atau variabel di file aktif, seluruh proyek (workspace), maupun pustaka standar Elixir/Erlang.
Dengan semua fitur ini, ElixirLS menjadi alat penting untuk meningkatkan kualitas dan kenyamanan kerja saat menulis kode Elixir, terutama untuk proyek-proyek jangka panjang dan kompleks.
Instalasi ElixirLS di VS Code
Untuk pengguna VS Code, berikut langkah-langkah instalasinya. Jika kamu menggunakan editor lain, lihat daftar plugin yang tersedia di bagian IDE Plugins pada README ElixirLS.
- Tekan
Ctrl+Shift+X
untuk membuka Extensions. - Ketik “ElixirLS” pada kolom pencarian.
- Pilih ekstensi dengan nama ElixirLS: Elixir support and debugger, lalu klik Install.
Setelah instalasi selesai, ElixirLS akan secara otomatis membangun PLT cache saat pertama kali digunakan. PLT (Persistent Lookup Table) adalah basis data yang digunakan Dialyzer untuk menyimpan informasi tipe dari pustaka standar dan dependensi proyek. Proses ini bisa memakan waktu beberapa menit tergantung spesifikasi mesin, tapi hanya perlu dilakukan sekali.
Dengan ini, kita telah menyelesaikan seluruh tahapan setup lingkungan pengembangan Elixir: mulai dari instalasi asdf
, pengelolaan versi runtime, hingga integrasi editor menggunakan ElixirLS.