Belajar Ruby - RubyGems, Bundler & Dependency Management
Series/Belajar Ruby/Episode 12
Episode 12 of 23

Belajar Ruby - RubyGems, Bundler & Dependency Management

Episode ini membedah ekosistem package Ruby: gem search dan gem install, struktur gemspec, pembuatan gem dengan bundle gem, Gemfile dan bundle install, Gemfile.lock dengan checksum, source multi-gem, serta kelompok dependency development dan production.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Pendahuluan

Tidak ada aplikasi modern yang dibangun dari nol tanpa library. Ruby menyediakan ekosistem package yang matang: RubyGems untuk mendistribusikan library, dan Bundler untuk mengelola dependency antar project secara reproduktif. Memahami keduanya adalah prasyarat bekerja di tim atau membuka project open-source.

Episode 12 ini membedah seluruh alur: mencari dan menginstall gem, membaca dan menulis gemspec, membuat gem sendiri dengan bundle gem, lalu mengelola dependency project melalui Gemfile, bundle install, dan Gemfile.lock yang kini menyertakan checksum. Di akhir, kalian akan paham bagaimana gem yang kalian pakai di episode 0 sampai 11 sampai ke mesin kalian.

RubyGems: Package Manager Ruby

Mencari dan Menginstall Gem

RubyGems adalah package manager resmi Ruby. Sumber utamanya adalah rubygems.org. Alur kerjanya dimulai dari pencarian, lalu instalasi:

Mencari dan menginstall gem
gem search sinatra
gem install sinatra
gem list sinatra

gem search sinatra mencari gem dengan kata kunci sinatra di rubygems.org. gem install sinatra menginstall versi terbaru beserta dependency-nya. gem list sinatra menampilkan gem yang terinstall di sistem. Instalasi global tanpa Bundler sebaiknya dihindari untuk project nyata — itu sebabnya kita butuh Bundler.

Struktur Gemspec

Setiap gem didefinisikan oleh file gemspec yang berisi metadata: nama, versi, ringkasan, penulis, dan aturan packaging. Gemspec adalah kode Ruby yang memanggil Gem::Specification.new:

RubyGemspec sederhana
Gem::Specification.new do |spec|
  spec.name = "perkenalan_ruby"
  spec.version = "0.1.0"
  spec.summary = "Gem contoh untuk belajar"
  spec.authors = ["Arman Dwi Pangestu"]
  spec.required_ruby_version = ">= 3.4"
  spec.files = Dir["lib/**/*.rb"]
end

Gemspec menentukan versi Ruby minimum (spec.required_ruby_version), daftar file yang dikemas (spec.files), dan dependency runtime via spec.add_dependency. Semua gem yang kalian install adalah manifest serupa yang dibangun menjadi file .gem lalu di-publish ke rubygems.org.

Membuat Gem dengan Bundler

bundle gem

Bundler menyediakan generator untuk membuat struktur gem baru lengkap dengan gemspec, folder lib, dan konfigurasi CI:

Membuat gem dengan bundler
bundle gem perkenalan_ruby
cd perkenalan_ruby
gem build perkenalan_ruby.gemspec
ls *.gem

bundle gem perkenalan_ruby membuat folder project gem dengan semua scaffolding standar. gem build perkenalan_ruby.gemspec mengompilasi gemspec menjadi file .gem yang bisa diinstall di mana saja. Gem yang dibuat dengan cara ini sudah siap di-publish ke rubygems.org.

Menambahkan Kode ke Lib

Kode utama gem diletakkan di lib. Bundler menciptakan file lib/perkenalan_ruby.rb sebagai entry point yang mengekspos class atau module publik. Setiap file di bawah lib ikut terpaket karena daftar spec.files di gemspec. Untuk menguji saat pengembangan, gunakan bin/console yang sudah disediakan generator — ia membuka sesi IRB dengan gem sudah di-load.

Bundler: Manajemen Dependency

Gemfile dan Grup

Gemfile mendeklarasikan dependency project. Bundler akan menyelesaikan versi yang saling kompatibel, dan Grup memisahkan dependency berdasarkan lingkungan:

RubyGemfile dengan grup
source "https://rubygems.org"
 
gem "sinatra", "~> 4.0"
gem "puma", "~> 6.4"
 
group :development, :test do
  gem "rspec"
  gem "rubocop", require: false
end

Baris source "https://rubygems.org" menetapkan sumber gem. Constraint "~> 4.0" mengizinkan update minor tapi menahan major. Group :development, :test memuat rspec dan rubocop hanya di lingkungan development dan test, tidak di production. Ini menjaga footprint produksi tetap ramping.

bundle install, exec, dan Gemfile.lock

Setelah mendefinisikan Gemfile, jalankan install untuk mengunci seluruh dependency:

Bundle install dan exec
bundle install
bundle exec ruby main.rb
bundle list

bundle install menyelesaikan dependency dan menulis Gemfile.lock — manifest yang membekukan versi persis setiap gem. Sejak RubyGems 4.0, Gemfile.lock menyertakan checksum setiap gem sehingga manipulasi artefak bisa terdeteksi. bundle exec ruby main.rb menjalankan perintah dalam konteks gem yang terkunci, dan bundle list menampilkan daftarnya.

Source Multi-Gem

Kadang sebuah gem hanya tersedia dari source internal (misalnya GitHub atau registry privat). Bundler mendukung banyak source; cukup deklarasikan gem dari source yang tepat:

RubySource multi-gem
source "https://rubygems.org"
 
gem "sinatra", "~> 4.0"
gem "gem_internal", source: "https://gem.internal.example.com"

gem "gem_internal", source: "https://gem.internal.example.com" menarik gem tersebut dari source khusus sementara sisanya dari rubygems.org. Perhatikan: source spesifik per gem ditulis sebagai argumen hash, berbeda dengan blok source global.

Tip

Selalu commit Gemfile.lock untuk aplikasi (bukan library). Lockfile memastikan setiap developer dan server CI menjalankan dependency yang persis sama, dan kini dilindungi checksum untuk integritas.

Penutup

Episode 12 menghubungkan kalian dengan ekosistem distribusi Ruby: mencari dan menginstall gem dengan RubyGems, struktur gemspec, pembuatan gem dengan bundle gem, serta pengelolaan dependency melalui Gemfile, bundle install, Gemfile.lock ber-checksum, source multi-gem, dan grup environment.

Inti yang harus dibawa pulang:

  • gem search dan gem install mengelola gem secara global; Bundler mengelola per project.
  • Gemspec adalah manifest gem: nama, versi, files, dan required Ruby version.
  • bundle gem membuat struktur gem siap publish dalam satu perintah.
  • Gemfile mendeklarasikan dependency; grup memisahkan lingkungan development dan production.
  • bundle exec menjalankan perintah dalam konteks lockfile.
  • Gemfile.lock kini menyertakan checksum untuk integritas dependency.
  • Source multi-gem memungkinkan gem dari registry internal.

Di episode 13 selanjutnya kita akan membahas networking dan HTTP — socket TCP dengan Happy Eyeballs v2 (RFC 8305) yang menjadi default sejak Ruby 3.4, UDP socket, dasar socket server, serta HTTP client dengan Net::HTTP, URI, dan gem modern seperti httparty dan faraday. Keterampilan komunikasi antar service yang wajib dikuasai developer backend.

Belajar Ruby - RubyGems, Bundler & Dependency Management | Belajar Ruby