Mempersiapkan Lingkungan Pengembangan Elixir

mempersiapkan-lingkungan-pengembangan-elixir

Daftar Isi

  • Apa itu asdf version manager?

    • Mengapa Memilih asdf?
  • Instalasi asdf

    • Menggunakan Package Manager
    • Mengunduh Pre-compiled Binary
    • Verifikasi Lokasi Binary
    • Verifikasi Instalasi asdf
  • Instalasi Plugin di asdf

    • Plugin Erlang
    • Plugin Elixir
    • Plugin Node.js (Opsional)
  • Instalasi Runtime di asdf

    • Menelusuri Versi yang Tersedia
    • Instalasi Erlang
    • Instalasi Elixir
    • Instalasi Node.js
  • Mengatur Versi Runtime di asdf

    • Mengatur Versi Global
    • Mengatur Versi Lokal di Proyek
  • ElixirLS: Ekstensi Editor untuk Pengembangan Elixir
  • Referensi

Apa itu asdf version manager?

asdf-banner

Erlang dan Elixir bisa diinstal langsung melalui petunjuk pada halaman unduh Erlang/OTP dan halaman resmi Elixir. Namun, cara ini memiliki keterbatasan, yaitu hanya memungkinkan satu versi runtime terpasang dalam satu mesin. Jika ingin menggunakan versi lain, besar kemungkinan akan terjadi konflik atau sistem akan menyarankan untuk menimpa versi yang sudah ada.

Untuk mengatasi masalah tersebut, dapat digunakan version manager, yaitu alat yang memungkinkan instalasi dan pengelolaan beberapa versi runtime dalam satu sistem. Pendekatan ini mendukung kebutuhan proyek yang menggunakan versi berbeda, serta mempermudah perpindahan antarversi.

Version manager juga membantu menjaga konsistensi lingkungan pengembangan dalam tim, sehingga seluruh anggota menggunakan versi runtime yang sama dan menghindari masalah kompatibilitas.

Tulisan ini akan menggunakan version manager bernama asdf-vm, atau cukup disebut asdf.

Mengapa Memilih asdf?

Dalam proyek perangkat lunak modern, sering kali dibutuhkan lebih dari satu runtime. Misalnya, aplikasi Elixir mungkin menggunakan Node.js untuk assets pipeline, atau PostgreSQL sebagai basis data. Jika setiap runtime dikelola dengan alat yang berbeda, seperti nvm untuk Node.js, kiex untuk Elixir, atau alat khusus Erlang, pengelolaan lingkungan menjadi lebih kompleks dan tidak konsisten.

asdf menyederhanakan hal ini dengan menyediakan satu antarmuka untuk mengelola berbagai runtime melalui sistem plugin. Dengan asdf, kita bisa memasang dan beralih antarversi Erlang, Elixir, Node.js, dan puluhan runtime lainnya hanya dengan satu alat dan pola perintah yang seragam.

Keunggulan utama asdf adalah:

  • Antarmuka tunggal dan konsisten, kita tidak perlu mempelajari cara kerja terpisah untuk setiap runtime.
  • Dukungan plugin yang luas, termasuk plugin resmi (first-party) untuk Erlang dan Elixir.
  • Konsistensi lintas proyek dan tim, melalui file konfigurasi .tool-versions yang menyimpan versi setiap runtime secara spesifik.

Saat ini, tersedia hampir 100 plugin yang dikembangkan oleh komunitas, memungkinkan integrasi dengan berbagai bahasa pemrograman, alat basis data, dan toolchain lainnya. Karena plugin untuk Erlang dan Elixir dikembangkan secara resmi, maka asdf adalah alat rekomendasi untuk pengembangan proyek Elixir.

Instalasi asdf

Untuk menginstal asdf, terdapat dua metode yang direkomendasikan: 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 tertarik menggunakan metode tersebut, silakan merujuk ke dokumentasi resmi di halaman ini.

Menggunakan Package Manager

Ini adalah metode yang direkomendasikan oleh pengembang asdf. Saat ini, ada tiga package manager yang didukung secara langsung, yaitu Homebrew (macOS), Zypper (openSUSE Linux), dan Pacman (Arch Linux):

# 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
[!info] Perintah sudo mungkin diperlukan tergantung pada konfigurasi sistem.

Jika sistem operasi yang digunakan tidak termasuk dalam daftar di atas, metode berikutnya bisa dijadikan alternatif.

Mengunduh Pre-compiled Binary

Metode ini memerlukan git. Untuk memastikan git sudah terinstal, jalankan perintah berikut:

$ 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
[!info] 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 yang digunakan.

Ekstrak arsip tersebut ke salah satu direktori yang sudah termasuk 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 tersebut berisi daftar direktori yang dipisahkan dengan titik dua :. Pilih salah satu direktori berikut sebagai lokasi ekstraksi:

  • /home/nama_user_kamu/.local/bin – direktori milik pengguna, cocok untuk instalasi tanpa akses root.
  • /usr/local/bin – umumnya digunakan untuk perangkat lunak tambahan.
  • /usr/bin dan /bin – sebaiknya dihindari kecuali benar-benar diperlukan, karena merupakan bagian dari sistem.

Direktori yang paling disarankan adalah /home/nama_user_kamu/.local/bin, karena tidak memerlukan akses root dan lebih aman untuk pemakaian sehari-hari.

Verifikasi Lokasi Binary

Setelah mengekstrak, pastikan asdf dapat dikenali oleh shell:

$ type -a asdf
asdf is /home/nama_user_kamu/.local/bin/asdf

Jika hasilnya menunjukkan lokasi file asdf, berarti asdf sudah dikenali dengan benar. Jika tidak muncul, kemungkinan besar direktori tempat ekstraksi belum terdaftar dalam $PATH.

Verifikasi Instalasi asdf

Terakhir, jalankan perintah berikut untuk memastikan instalasi berhasil:

$ asdf

Jika instalasi berhasil, akan muncul informasi versi serta nama program asdf.

asdf

Sekarang, asdf sudah siap digunakan. Selanjutnya, kita akan menginstal plugin untuk Erlang, Elixir, dan Node.js.

Instalasi Plugin di asdf

Dalam tulisan ini, kita akan menginstal tiga runtime:

  1. Erlang – karena Elixir berjalan di atas BEAM VM.
  2. Elixir – bahasa pemrograman utama yang akan digunakan dan dipelajari.
  3. Node.js (opsional) – dibutuhkan jika ingin mengelola aset frontend pada Phoenix Framework.

asdf menggunakan plugin untuk mengelola berbagai runtime seperti Erlang, Elixir, atau Node.js. Sebelum menginstal runtime, plugin yang sesuai harus ditambahkan terlebih dahulu.

Plugin Erlang

Langkah pertama adalah menambahkan plugin untuk Erlang, baru kemudian Elixir.

Sebelum menambahkan plugin Erlang, ada beberapa package sistem yang perlu diinstal. 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
[!info] Perintah sudo mungkin diperlukan tergantung pada konfigurasi sistem operasi.

Setelah semua dependensi tersedia, tambahkan plugin Erlang dengan perintah:

$ asdf plugin add erlang

Verifikasi apakah plugin berhasil ditambahkan:

$ asdf plugin list
erlang

Jika output menampilkan erlang, berarti plugin telah berhasil ditambahkan dan aktif.

Plugin Elixir

Setelah menambahkan plugin untuk Erlang, langkah selanjutnya adalah menambahkan plugin untuk Elixir:

$ asdf plugin add elixir

Verifikasi plugin yang sudah ditambahkan:

$ asdf plugin list
elixir
erlang

Dengan demikian, plugin elixir dan erlang sudah terdaftar di asdf.

Plugin Node.js (Opsional)

Plugin Node.js bersifat opsional, tetapi cukup sering digunakan dalam pengembangan aplikasi Elixir, terutama saat bekerja dengan Phoenix Framework yang melibatkan pengelolaan aset frontend.

Sama seperti plugin Erlang, plugin Node.js juga membutuhkan beberapa package tambahan, sesuai dengan sistem operasi yang digunakan:

# 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
[!info] Perintah sudo mungkin diperlukan tergantung pada konfigurasi sistem operasi.

Setelah dependensi terpasang, tambahkan plugin Node.js:

$ asdf plugin add nodejs

Verifikasi plugin yang sudah terpasang:

$ asdf plugin list
elixir
erlang
nodejs

Dengan langkah ini, semua plugin yang dibutuhkan sudah siap. Tahap berikutnya adalah menginstal masing-masing runtime menggunakan asdf.

Instalasi Runtime di asdf

Versi runtime yang akan kita instal adalah:

  • Erlang – versi 27.3
  • Elixir – versi 1.18.3-otp-27
  • Node.js – versi terbaru (saat tulisan ini dibuat: 23.10.0)

Sebelum memulai instalasi, penting untuk dicatat bahwa setiap versi Elixir memiliki ketergantungan pada versi Erlang tertentu. Karena Elixir berjalan di atas BEAM VM (yang disediakan oleh Erlang), kita perlu memastikan bahwa versi yang kita pilih saling kompatibel.

Untuk memastikan kompatibilitas, kita dapat merujuk ke dokumentasi resmi Elixir, tepatnya pada bagian Compatibility and Deprecations. Berikut adalah cuplikan tabel kompatibilitas antara Elixir dan Erlang:

Elixir version Supported Erlang/OTP versions
1.18 25 – 27
1.17 25 – 27
1.16 24 – 26

Karena target kita adalah Elixir versi 1.18, maka kita membutuhkan Erlang versi 25 hingga 27. Dalam tutorial ini, kita akan menggunakan Erlang versi 27.3 agar mendapatkan versi terbaru yang tetap kompatibel dengan Elixir 1.18.

Menelusuri Versi yang Tersedia

Sebelum instalasi, kita bisa memeriksa daftar versi runtime yang tersedia untuk memastikan versi yang kita inginkan ada:

# Memeriksa daftar versi Erlang
$ asdf list all erlang
...
27.3

# Memeriksa daftar versi Elixir
$ asdf list all elixir
...
1.18.3-otp-27

Pastikan bahwa versi Erlang 27.3 dan Elixir 1.18.3-otp-27 tersedia.

Untuk Node.js, kita akan memilih versi terbaru tanpa menentukan nomor versi secara spesifik.

Instalasi Erlang

Langkah pertama adalah menginstal Erlang versi 27.3:

$ asdf install erlang 27.3

asdf akan mengunduh source code Erlang dan mengkompilasinya. Proses ini bisa memakan waktu beberapa menit, tergantung kecepatan mesin kita.

Setelah selesai, kita set versi ini sebagai versi global:

$ asdf set --home erlang 27.3

Perintah ini akan menuliskan erlang 27.3 ke file .tool-versions di direktori home, sehingga versi ini akan digunakan secara default.

Untuk memverifikasi, kita bisa masuk ke Erlang shell:

$ erl

Terminal akan menampilkan Erlang shell beserta informasi nomor versinya.

erlang erl

Instalasi Elixir

Setelah Erlang, sekarang kita instal Elixir versi 1.18.3-otp-27:

$ asdf install elixir 1.18.3-otp-27

Elixir biasanya tersedia dalam bentuk precompiled binary, jadi proses instalasinya akan lebih cepat.

Setelah instalasi selesai, set Elixir sebagai versi global:

$ asdf set --home elixir 1.18.3-otp-27

Perintah ini akan menambahkan elixir 1.18.3-otp-27 ke file .tool-versions, melengkapi entri sebelumnya.

Untuk memastikan Elixir sudah aktif, jalankan:

$ iex

Kita akan masuk ke Elixir interactive shell dan melihat versinya.

elixir iex

Instalasi Node.js

Terakhir, kita instal Node.js. Kali ini kita akan memilih versi terbaru yang tersedia melalui asdf:

$ asdf install nodejs latest

asdf akan secara otomatis memilih dan menginstal versi terbaru (saat tulisan ini dibuat: 23.10.0).

Setelah selesai, kita set versi ini sebagai default:

$ asdf set --home nodejs 23.10.0

Untuk memastikan instalasi berhasil, jalankan:

$ node

Masuk ke Node.js REPL dan lihat versi yang sedang digunakan.

nodejs repl

Sekarang, semua runtime yang dibutuhkan sudah berhasil diinstal dan dikonfigurasi. Di bagian selanjutnya, kita akan membahas bagaimana mengatur versi runtime secara global dan lokal sesuai dengan kebutuhan proyek.

Mengatur Versi Runtime di asdf

Setelah berhasil menginstal Erlang, Elixir, dan Node.js, saatnya mengatur versi runtime yang akan digunakan. asdf menyediakan dua cara untuk mengatur versi:

  1. Versi Global – berlaku di seluruh sistem.
  2. Versi Lokal – berlaku hanya di dalam direktori proyek tertentu.

Keduanya menggunakan file .tool-versions sebagai sumber konfigurasi, namun berada di lokasi yang berbeda.

Mengatur Versi Global

Versi global adalah versi default yang digunakan di seluruh sistem, kecuali ada versi lokal yang menimpanya. Konfigurasinya disimpan di file .tool-versions yang berada di direktori home (~).

Pada saat kita menjalankan perintah asdf set --home sebelumnya, kita sudah mengatur versi global. Namun, untuk lebih memahaminya, berikut adalah contoh perintah untuk mengaturnya kembali:

# Set versi global Erlang ke 27.3
$ asdf set --home erlang 27.3

# Set versi global Elixir ke 1.18.3-otp-27
$ asdf set --home elixir 1.18.3-otp-27

# Set versi global Node.js ke 23.10.0
$ asdf set --home nodejs 23.10.0

Dengan perintah ini, setiap kali kita menjalankan perintah seperti erl, iex, atau node, versi global yang sudah diatur akan digunakan, di mana pun kita berada di sistem.

Mengatur Versi Lokal di Proyek

Versi lokal hanya berlaku di dalam direktori tertentu (biasanya di folder proyek). Konfigurasinya disimpan dalam file .tool-versions yang terletak di root direktori proyek. Selama kita berada dalam direktori proyek (atau subdirektorinya), asdf akan menggunakan versi lokal dan mengabaikan versi global.

Untuk contoh, kita akan membuat proyek Elixir baru dan mengatur versi runtime yang berbeda dari versi global:

# Membuat proyek Elixir hello_world
$ mix new hello_world

# Masuk ke direktori proyek
$ cd hello_world

Di dalam proyek ini, kita akan mengatur Erlang ke versi 26.0 dan Elixir ke versi 1.17.0-otp-26:

# Set versi lokal Erlang ke 26.0
$ asdf set erlang 26.0

# Set versi lokal Elixir ke 1.17.0-otp-26
$ asdf set elixir 1.17.0-otp-26

Perintah ini akan menghasilkan file .tool-versions di direktori proyek dengan konfigurasi versi yang telah ditentukan:

local

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

$ asdf install

asdf akan membaca isi file tersebut, mengunduh dan menginstal versi-versi yang diperlukan:

asdf install

Setelah instalasi selesai, kita dapat memverifikasi bahwa versi lokal sudah aktif dengan menjalankan perintah:

# Menjalankan Erlang shell
$ erl
Erlang/OTP 26 [erts-14.0] ...

# Menjalankan Interactive Elixir
$ iex
...
iex(1)> System.version()
"1.17.0"

Versi Erlang akan langsung terlihat di baris awal ketika shell terbuka. Untuk Elixir, kita bisa memanggil fungsi System.version() di dalam iex.

asdf local version

Secara umum, perbedaan utama antara versi global dan lokal terletak pada cakupan penerapannya:

  • Global: Berlaku di seluruh sistem.
  • Lokal: Hanya berlaku di direktori tempat file .tool-versions berada.

Dengan memahami konsep ini, kita dapat lebih fleksibel dalam mengelola proyek yang membutuhkan versi runtime yang berbeda-beda.

ElixirLS: Ekstensi Editor untuk Pengembangan Elixir

[!info] Official Elixir Language Server
Tim pengembang Elixir telah mengumumkan bahwa mereka sedang mengembangkan Elixir Language Server resmi, yang dapat dibaca lebih lanjut di halaman blog ini. Sambil menunggu rilisnya, kita akan menggunakan ElixirLS, proyek yang dikembangkan oleh komunitas melalui elixir-lsp.

ElixirLS adalah ekstensi editor yang mempermudah pengembangan proyek Elixir dengan menyediakan berbagai fitur yang meningkatkan kenyamanan dan produktivitas. Ada dua komponen utama dalam ElixirLS:

  • Language Server, yang memungkinkan editor seperti VS Code untuk memahami struktur kode Elixir kita. Dengan fitur-fitur seperti code completion, go-to-definition, dan inline documentation, pengalaman menulis kode menjadi lebih interaktif.
  • Debug Adapter, yang memungkinkan kita melakukan step-through debugging, yaitu menelusuri alur program baris demi baris, melihat nilai variabel, dan memahami bagaimana kode dijalankan secara langsung.

Dengan kedua komponen ini, ElixirLS menghadirkan pengalaman pengembangan modern dan interaktif.

Beberapa fitur unggulan yang dimiliki ElixirLS antara lain:

  • Debugger: Fitur step-through debugging untuk menelusuri alur eksekusi kode secara langsung.
  • Automatic, Incremental Dialyzer Analysis: Analisis statis dengan Dialyzer yang memberikan umpan balik bertahap saat menulis kode.
  • Automatic @spec Suggestions: Saran type annotations berdasarkan inferensi Dialyzer.
  • Inline Reporting of Warnings and Errors: Peringatan dan kesalahan kompilasi ditampilkan langsung di editor.
  • Documentation Lookup on Hover: Dokumentasi fungsi atau modul ditampilkan saat kursor diarahkan ke kode.
  • Go-to-Definition: Melompat langsung ke definisi fungsi atau modul.
  • Code Completion: Saran kode yang muncul saat mengetik.
  • Code Formatter: Memformat kode secara otomatis sesuai gaya penulisan standar Elixir.
  • Find References: Menemukan semua referensi terhadap fungsi atau modul.
  • Quick Symbol Lookup in File: Memungkinkan pencarian simbol seperti fungsi atau variabel dalam file aktif.
  • Quick Symbol Lookup in Workspace and Stdlib: Memungkinkan pencarian simbol di seluruh proyek dan pustaka standar Elixir/Erlang.

Dengan fitur-fitur tersebut, ElixirLS menjadi alat yang sangat berguna untuk menulis kode Elixir yang lebih rapi, mudah dipahami, dan minim bug.

Pada tulisan ini, kita akan menginstal plugin ElixirLS di VS Code. Untuk pengguna editor lain, daftar ekstensi yang tersedia dapat dilihat pada bagian IDE Plugins di README repositori elixir-lsp.

Langkah-langkah Instalasi ElixirLS di VS Code

  1. Buka menu Extensions dengan menekan Ctrl+Shift+X atau klik ikon plugin di Activity Bar.
  2. Ketik ElixirLS pada kolom pencarian.
  3. Pilih plugin yang muncul, lalu klik Install.

elixir ls

Setelah terinstal, ElixirLS akan membangun PLT cache untuk Dialyzer pada pemakaian pertama. Proses ini bisa memakan waktu sekitar 10 menit, tergantung spesifikasi mesin yang kita gunakan. Setelah selesai, semua fitur ElixirLS siap digunakan.

elixir ls in action

Dengan ini, kita telah menyelesaikan semua tahapan untuk menyiapkan lingkungan pengembangan Elixir, mulai dari instalasi asdf, pengaturan versi runtime, hingga integrasi editor dengan ElixirLS.

Referensi

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post
from-design-to-code:-our-journey-building-itconnect

From Design to Code: Our Journey Building ITConnect

Next Post
exception-handling-overview

Exception Handling Overview

Related Posts