Mempersiapkan Lingkungan Pengembangan Elixir
Muzhawir Amri

Muzhawir Amri @muzhawir

About: 🧙🏼⚗️ A Neophyte Elixir Alchemist

Location:
Indonesia
Joined:
Oct 2, 2018

Mempersiapkan Lingkungan Pengembangan Elixir

Publish Date: Jun 18
4 0

📜 You can read the English version here!

Daftar Isi

Apa itu asdf version manager?

asdf banner

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
Enter fullscreen mode Exit fullscreen mode

⚠️ 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

⚠️ 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Jika instalasi berhasil, perintah ini akan menampilkan informasi versi dan daftar subperintah asdf.

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:

  1. Erlang – Karena Elixir berjalan di atas BEAM VM, maka Erlang dibutuhkan agar Elixir bisa berfungsi.
  2. Elixir – Bahasa pemrograman utama yang akan kita pelajari dalam seri ini.
  3. 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
Enter fullscreen mode Exit fullscreen mode

⚠️ Perintah sudo mungkin diperlukan tergantung pada konfigurasi sistem.

Setelah semua dependensi terinstal, tambahkan plugin Erlang dengan perintah:

$ asdf plugin add erlang
Enter fullscreen mode Exit fullscreen mode

Lalu verifikasi bahwa plugin berhasil ditambahkan:

$ asdf plugin list
erlang
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Verifikasi kembali daftar plugin yang sudah terdaftar:

$ asdf plugin list
elixir
erlang
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

⚠️ Perintah sudo mungkin diperlukan tergantung pada konfigurasi sistem.

Setelah semua dependensi terinstal, tambahkan plugin Node.js:

$ asdf plugin add nodejs
Enter fullscreen mode Exit fullscreen mode

Lalu verifikasi:

$ asdf plugin list
elixir
erlang
nodejs
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Jika berhasil, akan muncul seperti ini:

erl Erlang

Instalasi Elixir

Instal Elixir 1.18.3-otp-27:

$ asdf install elixir 1.18.3-otp-27
Enter fullscreen mode Exit fullscreen mode

Karena Elixir tersedia dalam bentuk precompiled binary, proses instalasinya relatif cepat.

Set versi global Elixir:

$ asdf set --home elixir 1.18.3-otp-27
Enter fullscreen mode Exit fullscreen mode

Verifikasi dengan membuka Elixir Interactive Shell (IEx):

$ iex
Enter fullscreen mode Exit fullscreen mode

Jika berhasil, akan muncul seperti ini:

IEx Elixir

Instalasi Node.js (Opsional)

Instal versi terbaru dari Node.js:

$ asdf install nodejs latest
Enter fullscreen mode Exit fullscreen mode

Set versi global (gantilah 23.10.0 sesuai versi yang terinstal):

$ asdf set --home nodejs 23.10.0
Enter fullscreen mode Exit fullscreen mode

Verifikasi instalasi:

$ node
Enter fullscreen mode Exit fullscreen mode

Jika berhasil, akan muncul tampilan Node.js REPL seperti berikut:

NodeJS REPL

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:

  1. Versi global – Berlaku di seluruh sistem.
  2. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Perintah ini akan menghasilkan file .tool-versions di dalam direktori proyek dengan isi seperti berikut:

Local

Untuk menginstal semua versi runtime yang tercantum dalam file .tool-versions lokal, jalankan perintah berikut:

$ asdf install
Enter fullscreen mode Exit fullscreen mode

Perintah ini akan mengunduh dan menginstal versi-versi yang belum tersedia di sistem:

asdf install

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"
Enter fullscreen mode Exit fullscreen mode

Versi Erlang ditampilkan langsung saat shell terbuka, sedangkan versi Elixir dapat dicek dengan memanggil function System.version() di dalam iex.

asdf local version

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.

  1. Tekan Ctrl+Shift+X untuk membuka Extensions.
  2. Ketik “ElixirLS” pada kolom pencarian.
  3. Pilih ekstensi dengan nama ElixirLS: Elixir support and debugger, lalu klik Install.

ElixirLS

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.

ElixirLS in Action

Dengan ini, kita telah menyelesaikan seluruh tahapan setup lingkungan pengembangan Elixir: mulai dari instalasi asdf, pengelolaan versi runtime, hingga integrasi editor menggunakan ElixirLS.

Comments 0 total

    Add comment