Ruby off Rails

Kali ini saya ingin membahas tentang Ruby. Dan hal-hal yang mendorong saya untuk belajar Ruby dan saudara tirinya di JVM: Groovy.

Ruby Tanpa Rails

Sebagian orang mungkin mengetahui Ruby dari kerangka kerja Rails. Sebuah kerangka kerja pemrograman yang lahir tahun 2005 untuk membuat Basecamp oleh DHH. Kerangka kerja kekinian di masa itu dan favorit banyak orang.

Kebetulan saya berkenalan dengan Ruby melalui jalan lain: otomatisasi. Seperti yang saya pernah tulis di artikel medium sebelumnya, apapun yang bisa saya otomatisasi, pasti saya otomatisasi. Ruby, memenuhi syarat sebagai bahasa yang mudah untuk keperluan otomatisasi.

  1. Ruby mempunyai ekosistem yang cukup mature. Semenjak adanya Rails dan kepopuleran RubyGems, banyak sekali pustaka yang langsung bisa dipakai. Ingin mengambil kumpulan file teks dari Amazon S3, lalu mengolahnya dan membuat Google Sheet? Semua yang diperlukan sudah ada di Ruby. Ingin mengotomatisasi pembangunan aplikasi iOS, ada fastlane yang berbasis Ruby. Rasanya hanya seperti menata batu bata saja.
  2. Ruby itu pragmatis. Bahasanya merupakan bahasa berorientasi objek yang semua orang kenal dengan sedikit konstruksi fungsional seperti blocks dan sintaks praktis seperti interpolasi string dan regex.
  3. Isolasi eksekusi dan dependensi dengan Bundler. Bentuk seperti ini banyak dicontoh oleh bahasa lain seperti NodeJS dengan npm-nya. Dengan bundler saya bisa memilih versi pustaka dependensi (gem) dengan mudah tanpa mempengaruhi pustaka yang sudah terpasang secara global.
  4. Ruby adalah bahasa scripting, tidak perlu kompilasi. Sunting dan langsung jalan.
  5. Soal tooling, Ruby salah satu yang sangat lengkap. Plugin untuk editor teks seperti vim, emacs, dan IntelliJ IDEA cukup membantu ketika membangun otomatisasi dengan Ruby.

Bagaimana dengan Groovy?

Mirip dengan Ruby, bedanya adalah Groovy merupakan bahasa scripting untuk lingkungan pemrograman berbasis mesin virtual Java. Jika kebanyakan pustaka dependensi Ruby berbasis bahasa C, Groovy bisa langsung memakai pustaka dari ekosistem Java yang cukup mature.

Peran Groovy sebenarnya tidak begitu nampak sampai adanya Gradle. Gradle ini cukup populer dan bahkan jadi alat utama dalam membangun aplikasi Android.

Alasan penggunaan Groovy adalah sama dengan Ruby untuk otomatisasi. Saya menulis beberapa plugin Gradle untuk memudahkan saya untuk mengotomatisasi pembuatan aplikasi Android.

Sistem Pembangun Aplikasi

Hal yang sangat membosankan dari pembuatan aplikasi mobile adalah membangun dan mendistribusikan aplikasi itu sendiri. Jadi saya memakai Ruby dan Groovy untuk membuat sistem pembangunan aplikasi terpadu untuk iOS dan Android.

Blok Diagram Pembangunan Aplikasi

Gambar di atas adalah blok diagram sistem pembangunan aplikasi yang seringkali saya buat. Ruby dan Groovy terutamanya perannya biasanya ada di bagian berikut ini:

  • Bagian Pembangunan, Fastlane dan Gradle digunakan untuk membangun aplikasi mobile beserta hal-hal lain yang diperlukan seperti mengambil sertifikat untuk signing.
  • Menjalankan Unit Test merupakan salah satu task untuk membangun sebelum digabungkan dalam proses merge. Jika unit test tidak lolos, dan cakupan pengujiannya kurang cukup, maka kode tersebut tidak akan dilihat.
  • Menjalankan uji fungsional. Saya menggunakan calabash. Setelah kode digabungkan, Integration Test pun dijalankan. Calabash berbasiskan Ruby.
  • Jika pengujian lolos, maka artefak seperti berkas IPA dan APK diunggah ke platform distribusi beta seperti Fabric atau HockeyApp. Untuk ini biasanya sudah ada plug-in dari pembuat platform tersebut untuk fastlane maupun Gradle.
  • Untuk keperluan back-up, biasanya artefak juga diunggah ke tempat lain seperti Amazon S3 atau Azure Blob Storage. Untuk melakukan ini, kita perlu membuat plug-in sendiri untuk fastlane dan Gradle sesuai kebutuhan kita.
  • Untuk submission juga bisa diotomatisasi. Fastlane bisa langsung membuatkan tangkapan layar dan deskripsi dari pembaruan aplikasi tersebut. Gradle mempunya plug-in untuk langsung mengirim APK tersebut ke Google Play.

Untuk melakukan itu semua saya biasa gunakan Travis, tetapi sebenarnya bisa dipakai juga untuk platform lain seperti Jenkins. Praktis titik-titik di mana ada sentuhan tangan manusia hanya di bagian pull request dan code review dan kadang-kadang untuk menambah dan mengurangi tes fungsional. Sisanya, hampir otomatis.

Jadi Ruby dan Groovy memang sangat membantu pekerjaan saya sehari-hari. Hanya saya memakainya tanpa Rails dan Grails karena memang bukan untuk keperluan pengembangan Web.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.