Sebagian besar program Ruby nyata tidak ditulis dari nol, melainkan disusun dari pustaka yang sudah tersedia. Topik ini membahas gem sebagai bentuk paket pustaka Ruby, RubyGems sebagai pengelolanya, perintah dasar untuk memasang dan menghapus gem, serta pemuatan pustaka ke dalam program dengan require dan require_relative. Perbedaan antara pustaka standar dan gem pihak ketiga juga dijelaskan agar sumber setiap pustaka yang digunakan dalam program mudah dilacak.
Gem sebagai paket pustaka#
Gem adalah paket terstandar yang berisi satu pustaka Ruby beserta metadata pendaftarannya, seperti nama, versi, penulis, dan daftar dependensi. Isi gem umumnya berupa kode Ruby dalam direktori lib, dan sebagian kecil gem menyertakan ekstensi yang perlu dikompilasi. Seluruh gem publik terkumpul pada satu katalog daring, rubygems.org, sehingga pemasangan cukup dilakukan dengan menyebut nama gemnya. Satu komputer dapat menyimpan beberapa versi dari gem yang sama secara berdampingan, dan setiap versi tersalin ke direktori khusus yang dikelola RubyGems. Pola penomoran versinya mengikuti tiga tingkat mayor.minor.patch, misalnya 1.2.3.
RubyGems dan perintah dasarnya#
RubyGems adalah alat pengelola gem yang menyertai Ruby sejak pemasangan, sehingga tidak memerlukan penyiapan tambahan. Perintah-perintahnya dijalankan melalui program gem pada terminal, dan versinya dapat diperiksa lebih dahulu.
# menampilkan versi RubyGems yang terpasang
gem -v3.6.9Gem dipasang dengan perintah gem install diikuti nama gemnya. Pemasangan mengunduh gem dari rubygems.org, menyalinnya ke direktori gem milik RubyGems, lalu melaporkan versi yang baru terpasang. Opsi –no-document melewatkan pembuatan dokumentasi lokal sehingga prosesnya lebih cepat.
# memasang gem colored tanpa dokumentasi lokal
gem install colored --no-documentSuccessfully installed colored-1.2
1 gem installedKeluaran di atas menyatakan colored versi 1.2 terpasang dan siap dimuat. Daftar gem yang terpasang diperiksa dengan gem list. Perintah gem list tanpa argumen menampilkan seluruhnya, sedangkan penambahan pola nama membatasi keluaran pada gem yang cocok.
# menampilkan gem yang namanya memuat pola colored
gem list coloredcolored (1.2)Baris colored (1.2) menyatakan satu gem bernama colored dengan versi 1.2 terpasang. Pola pada gem list bersifat pencocokan sebagian, sehingga gem lain yang namanya memuat pola tersebut turut tercantum apabila ada.
Memuat pustaka dengan require dan require_relative#
Gem yang terpasang belum otomatis dapat digunakan oleh program karena pustakanya harus dimuat terlebih dahulu dengan require. Metode require “nama” mencari berkas pustaka pada load path, yaitu daftar direktori tempat Ruby mencari pustaka, yang telah diatur RubyGems agar mencakup gem yang terpasang. Metode require_relative “berkas” berbeda tujuan, yaitu memuat berkas Ruby lain yang posisinya relatif terhadap berkas yang sedang berjalan, dan bentuk ini digunakan untuk kode lokal proyek. Program berikut menggunakan keduanya sekaligus.
# pustaka lokal yang dimuat lewat require_relative
def sapa(nama)
"Salam, #{nama}!"
end# tidak-dijalankan: keluaran program ini diperagakan pada blok bash di bawah
# memuat gem pihak ketiga dan berkas lokal pada satu program
require "colored"
require_relative "alat-sapa"
spesifikasi = Gem.loaded_specs["colored"]
puts "colored versi #{spesifikasi.version} telah dimuat"
puts sapa("Ruby")Berkas di atas dijalankan dengan perintah berikut dari direktori kerja yang sama.
# menjalankan program peraga dari direktori kerja
ruby peraga-require.rbcolored versi 1.2 telah dimuat
Salam, Ruby!Baris pertama keluaran membuktikan gem colored termuat, karena Gem.loaded_specs menyimpan daftar gem yang sedang aktif dan versinya dibaca dari situ. Gem colored menambahkan metode pewarnaan teks pada String seperti green, sehingga keberadaannya cukup diperiksa melalui pemuatan yang berhasil. Baris kedua berasal dari metode sapa yang didefinisikan pada alat-sapa.rb dan dimuat oleh require_relative. Pembagian peran keduanya perlu dijaga, yaitu require untuk gem dan pustaka standar, sedangkan require_relative untuk berkas milik proyek yang letaknya pasti.
Pustaka standar dan gem pihak ketiga#
Setiap pustaka yang dimuat dengan require berasal dari salah satu dari dua sumber, yaitu pustaka standar (standard library) atau gem pihak ketiga. Pustaka standar menyertai interpreter Ruby sejak pemasangan, sedangkan gem pihak ketiga harus dipasang lebih dahulu dengan gem install. Pemuatannya identik, karena keduanya ditulis dengan nama yang sama pada require. Tabel berikut merangkum perbedaannya.
| Aspek | Pustaka standar | Gem pihak ketiga |
|---|---|---|
| Sumber | menyertai interpreter Ruby | diunduh dari rubygems.org |
| Pemasangan | tidak diperlukan | gem install nama |
| Contoh | json, csv | colored |
| Pemuatan | require “json” | require “colored” |
Pemilahan sumber pustaka menjadi penting saat membaca program orang lain. Baris require “json” langsung dapat dipahami tanpa pemasangan apa pun, sedangkan baris require “colored” menandakan ada gem yang harus dipasang terlebih dahulu. Kebiasaan mencermati baris require pada bagian atas berkas memberi gambaran cepat tentang dependensi sebuah program.
Kesalahan umum#
Kesalahan yang paling sering terjadi pada penggunaan gem berada di tahap pemuatan, bukan pada pemasangannya. Kesalahan pertama adalah memanggil konstanta milik gem tanpa memuat pustakanya lebih dahulu, dan programnya berhenti karena NameError.
begin
puts Colored::VERSION
rescue NameError => e
puts "#{e.class}: #{e.message}"
endNameError: uninitialized constant ColoredPerbaikannya menambahkan require "colored" pada bagian atas berkas sebelum konstanta Colored digunakan. Pola yang sama berlaku untuk setiap gem maupun pustaka standar lainnya.
Kesalahan kedua adalah menukar peran require dan require_relative. Penulisan require_relative “colored” untuk sebuah gem menghasilkan LoadError karena berkas dicari relatif terhadap program, sedangkan require “alat-sapa” untuk berkas lokal proyek juga menghasilkan LoadError karena pencariannya hanya berlangsung pada load path. Perbaikannya mengikuti letak pustakanya, yaitu require untuk gem dan pustaka standar, sedangkan require_relative untuk berkas proyek.
Menghapus gem dan memasangnya kembali#
Gem yang tidak lagi diperlukan dihapus dengan gem uninstall. Apabila hanya ada satu versi terpasang, penghapusan berlangsung langsung tanpa pertanyaan konfirmasi, sedangkan adanya beberapa versi sekaligus memunculkan daftar pilihan.
# menghapus gem colored dari direktori gem
gem uninstall coloredSuccessfully uninstalled colored-1.2Penghapusan ini lengkap, sehingga require “colored” kembali gagal selama gem belum dipasang ulang. Pemasangan kembali menggunakan perintah yang sama dengan pemasangan pertama.
# memasang kembali gem colored
gem install colored --no-documentSuccessfully installed colored-1.2
1 gem installedKeluaran pemasangan ulang ini tidak memuat baris proses unduhan karena berkas gemnya masih tersimpan pada cache RubyGems, yaitu simpanan sementara berkas gem yang pernah diunduh. Siklus pasang, hapus, dan pasang ulang seperti ini lazim terjadi saat bereksperimen dengan gem baru, dan tidak meninggalkan sisa konfigurasi apa pun.
Ringkasan#
- Gem adalah paket pustaka Ruby beserta metadata nama, versi, dan dependensinya, dengan katalog publik pada rubygems.org.
- Versi RubyGems diperiksa dengan gem -v, gem dipasang dengan gem install nama –no-document, diperiksa dengan gem list nama, dan dihapus dengan gem uninstall nama.
- require “nama” memuat gem maupun pustaka standar dari load path, sedangkan require_relative memuat berkas lokal relatif terhadap program.
- Pustaka standar menyertai Ruby tanpa pemasangan, sedangkan gem pihak ketiga dipasang terlebih dahulu, dan keduanya dimuat dengan require yang sama.
Referensi#
- What is a gem? — RubyGems Guides — Penjelasan resmi isi sebuah gem beserta strukturnya.
- Command Reference — RubyGems Guides — Daftar perintah gem seperti install, list, dan uninstall beserta opsinya.
- Kernel — Dokumentasi Ruby — Dokumentasi metode require dan require_relative pada modul Kernel.