Tur ini memperlihatkan wujud nyata Rails, dari perintah pembuatan aplikasi hingga fitur yang dihasilkan framework secara otomatis. Topik ini membahas rails new beserta struktur direktori aplikasi, peran config/routes.rb dalam alur permintaan (request), scaffolding yang membangkitkan berkas fitur dari satu perintah, serta hal-hal yang diotomatisasi Rails. Seluruh perintah Rails pada topik ini ditampilkan dalam bentuk perintah saja, karena framework tersebut tidak dijalankan di lingkungan jalur ini.
Kerangka aplikasi dari rails new#
Perintah rails new membuat satu direktori berisi aplikasi web yang langsung dapat dijalankan, lengkap dengan daftar gem dan struktur direktori bawaan. Menyiapkannya hanya memerlukan dua langkah, yaitu memasang Rails sebagai gem, kemudian membangkitkan kerangka aplikasinya.
# tidak-dijalankan
gem install rails
rails new aplikasi-catatanPerintah pertama memasang Rails beserta rangkaian gem penyusunnya, seperti activerecord untuk lapisan model dan actionpack untuk sisi controller. Perintah kedua membuat direktori aplikasi-catatan, menuliskan puluhan berkas kerangka, lalu memasang gem yang tercantum pada Gemfile aplikasi. Pemasangan pertama memakan waktu beberapa menit karena gem diunduh dari RubyGems, sedangkan pemasangan berikutnya jauh lebih cepat karena salinan cache sudah tersimpan. Apabila prosesnya berakhir tanpa error, direktori aplikasi-catatan berisi aplikasi yang siap dinyalakan.
Aplikasi yang baru dibuat sudah dapat melayani halaman sebelum satu baris pun ditulis sendiri.
# tidak-dijalankan
cd aplikasi-catatan
bin/rails serverPerintah bin/rails server menyalakan server pengembangan (development) pada komputer sendiri di alamat localhost:3000. Halaman sambutan Rails tampil di browser ketika alamat itu dibuka, dan tampilnya halaman itu berarti seluruh rangkaian framework berjalan dengan benar. Sesi server dihentikan dengan menekan Ctrl+C pada terminal, dan perintah yang sama menyalakannya kembali kapan pun diperlukan.
Struktur direktori aplikasi#
Direktori hasil rails new memuat banyak subdirektori, dan sebagian besar pekerjaan sehari-hari berada pada lima tempat berikut.
aplikasi-catatan/
├── app/
│ ├── models/ # kelas model, misalnya catatan.rb
│ ├── controllers/ # kelas controller
│ └── views/ # template halaman
├── config/
│ └── routes.rb # peta permintaan ke controller
├── db/
│ └── migrate/ # berkas migrasi struktur tabel
├── test/ # pengujian aplikasi
└── Gemfile # daftar gem aplikasiSusunan direktori ini adalah wujud konvensi pada topik Mental model Rails, yang kini terlihat sebagai tempat penyimpanan yang nyata. Tiga direktori di dalam app/ memuat tiga bagian MVC, yaitu model pada app/models/, controller pada app/controllers/, dan view pada app/views/. Berkas config/routes.rb menjadi satu-satunya tempat rute dinyatakan, sedangkan db/migrate/ menampung berkas migration yang mengubah struktur tabel. Gemfile di akar direktori berfungsi sama seperti pada pembahasan Bundler, yaitu daftar gem yang dipasang untuk proyek ini.
Direktori app/ menjadi tempat kerja paling ramai karena kelas-kelas aplikasi ditulis di dalamnya, sedangkan direktori lain menampung pengaturan dan perkakas pendukung. Tempat yang tetap inilah yang mempercepat pencarian, yaitu kelas model pasti berada di app/models/, rute pasti di config/routes.rb, dan berkas uji bawaan berada di test/, tanpa perlu membuka berkas konfigurasi untuk menemukannya. Keteraturan ini terasa paling jelas ketika proyek orang lain dibuka, karena peta direktorinya sama dengan peta direktori proyek sendiri.
Router dan alur permintaan#
Berkas config/routes.rb mencocokkan permintaan yang datang dengan bagian kode yang mengerjakannya. Bentuknya paling mudah dipahami sebagai tabel pencocokan string, yaitu pasangan metode HTTP dan alamat di satu sisi, controller beserta aksinya di sisi lain. Diagram berikut menggambarkan alur satu permintaan GET /catatans dari browser hingga kembali menjadi halaman HTML.
Router menerima permintaan, mencocokkannya dengan routes.rb, lalu meneruskannya ke aksi index pada CatatansController. Aksi tersebut memanggil model Catatan yang membaca tabel catatans, kemudian hasilnya diserahkan kepada view untuk disusun menjadi HTML. Respons (response) dikembalikan ke browser, dan siklus yang sama berulang untuk setiap permintaan berikutnya.
Mekanisme pencocokan itu dapat direkonstruksi dengan Ruby yang sudah dikenal, yaitu hash dengan kunci string yang dicocokkan terhadap beberapa permintaan tiruan.
# Router mini: hash rute dicocokkan terhadap beberapa permintaan tiruan.
rute = {
"GET /catatans" => "catatans#index",
"GET /catatans/1" => "catatans#show",
"POST /catatans" => "catatans#create"
}
daftar_permintaan = ["GET /catatans", "POST /catatans", "GET /catatans/1", "DELETE /catatans/1"]
daftar_permintaan.each do |permintaan|
target = rute[permintaan]
if target
puts "#{permintaan} => #{target}"
else
puts "#{permintaan} => tidak ada rute yang cocok"
end
endGET /catatans => catatans#index
POST /catatans => catatans#create
GET /catatans/1 => catatans#show
DELETE /catatans/1 => tidak ada rute yang cocokHash di atas memetakan pasangan metode dan alamat ke penanda controller#aksi, misalnya catatans#index berarti metode index pada kelas CatatansController. Permintaan DELETE tidak menemukan pasangannya karena hash contoh hanya memuat tiga rute, dan kondisi semacam ini pada Rails sesungguhnya berakhir dengan error rute yang tampil sebagai halaman 404. Pada aplikasi nyata, satu baris resources :catatans di routes.rb mendaftarkan ketujuh rute bawaan sekaligus, termasuk rute delete yang sengaja dilepas dari contoh.
Scaffolding: fitur lengkap dalam satu perintah#
Scaffolding adalah pembangkitan rangkaian berkas untuk satu fitur lengkap dari satu perintah, dan cakupannya biasa disebut CRUD, yaitu keempat operasi dasar create, read, update, dan delete. Perintah berikut membangkitkan seluruh bagian tersebut untuk catatan dengan dua kolom data, kemudian menjalankan migration-nya.
# tidak-dijalankan
rails generate scaffold Catatan judul:string isi:string
bin/rails db:migratePerintah generate mencetak daftar berkas yang dihasilkannya. Daftar itu memuat satu berkas untuk setiap bagian yang sudah dibahas, yaitu model app/models/catatan.rb, satu berkas migration untuk membuat tabel catatans dengan kolom judul dan isi, controller catatans_controller.rb dengan tujuh aksi, lima template di app/views/catatans/, serta baris resources :catatans yang ditambahkan ke config/routes.rb. Perintah bin/rails db:migrate kemudian menjalankan migration tersebut sehingga tabel catatans benar-benar dibuat di basis data.
Setelah kedua perintah selesai, alamat /catatans sudah menyajikan daftar catatan lengkap dengan formulir tambah, halaman ubah, dan tombol hapus yang berfungsi. Tidak ada satu berkas pun yang ditulis tangan pada langkah ini, sehingga seluruh fitur berasal dari kerangka yang dibangkitkan. Pengerjaan nyata dimulai dari titik ini, yaitu menyunting hasil scaffolding agar sesuai kebutuhan aplikasi.
Hal yang diotomatisasi framework#
Tur di atas menunjukkan pola yang sama berulang, yaitu pekerjaan yang mekanis dan berulang ditangani Rails, sedangkan pekerjaan yang spesifik untuk aplikasi ditulis sendiri. Butir-butir berikut merangkum yang sudah diotomatisasi.
- Routing: satu baris
resources :catatansmendaftarkan tujuh rute, sehingga pencocokan permintaan tidak ditulis satu per satu. - Migration: perubahan struktur tabel ditulis sebagai berkas migration, sehingga skema yang sama dapat dibuat ulang di komputer mana pun.
- Form: template dilengkapi helper yang menyusun formulir HTML dari atribut model, termasuk pengisian ulang nilai dan tampilan pesan error.
- Validasi: aturan seperti presence dinyatakan dalam satu baris pada model, dan pemeriksaannya dijalankan otomatis sebelum data disimpan.
- Pengujian: scaffolding menghasilkan berkas uji untuk model dan controller, sehingga setiap fitur disertai ujinya sejak awal.
Setiap butir di atas pada akhirnya adalah kode Ruby yang bekerja atas nama aplikasi. Routing adalah pencocokan string seperti pada router mini, migration adalah metode Ruby yang membangun tabel, sedangkan form dan validasi adalah metode kelas yang membawa kemampuan modul Active Record ke kelas model. Pengulangan yang dihemat Rails pun bukan pengulangan pemahaman, melainkan pengulangan penulisan.
Fondasi menuju dokumentasi Rails#
Jalur ini sengaja berhenti sebelum kedalaman Rails, karena framework tersebut layak memiliki dokumentasi dan kurikulum tersendiri. Yang diperoleh di sini adalah kemampuan membaca, yaitu membaca struktur aplikasi Rails beserta alur permintaannya. Sumber kemampuan framework tersebut kini dapat ditelusuri dengan keterampilan Ruby. Sumber lanjutan yang paling utama adalah Rails Guides, khususnya bab Getting Started yang menuntun pembuatan aplikasi pertama secara menyeluruh, karena bab itu menggunakan perintah dan struktur yang sama dengan tur ini.
Pembacaan dokumentasi itu sendiri kini berjalan ringan. Halaman dokumentasi Rails penuh dengan blok kode Ruby yang menggunakan kelas, modul, blok, dan metode kelas, sedangkan penjelasan konsepnya mengacu pada konvensi yang sudah dibentuk sepanjang jalur ini. Istilah seperti migration, router, dan scaffold tidak lagi perlu ditebak maknanya, karena setiap istilah itu sudah memiliki tempat pada mental model yang terbentuk. Dengan fondasi bahasa dan gambaran framework ini, pembelajaran Rails selanjutnya menjadi soal kedalaman, bukan soal permulaan lagi, dan perhatian dapat tertuju pada hal yang benar-benar baru seperti asosiasi antarmodel.
Ringkasan#
rails new aplikasi-catatanmenghasilkan aplikasi web yang siap dijalankan, danbin/rails servermenyalakannya dilocalhost:3000.- Struktur direktori aplikasi adalah wujud konvensi, dengan
app/models/,app/controllers/,app/views/,config/routes.rb, dandb/migrate/sebagai tempat kerja utama. - Scaffolding membangkitkan model, migration, controller, view, rute, dan berkas uji sekaligus, sehingga fitur CRUD lengkap muncul dari satu perintah.
- Routing, migration, form, validasi, dan pengujian adalah otomatisasi atas kode Ruby, sehingga dokumentasi Rails dapat dibaca dengan keterampilan Ruby murni.
Referensi#
- Getting Started with Rails — Rails Guides — Panduan resmi membuat aplikasi pertama, dari rails new, scaffolding, hingga server pengembangan.
- Ruby on Rails — rubyonrails.org — Situs resmi Rails yang memuat tautan dokumentasi, panduan, dan pengenalan framework.