React Native, “Write Once Run Everywhere”-nya Jaman Now

Sebelum membahas React Native, saya ingat tiga belas tahun yang lalu, tahun 2005, saya menulis keluhan tentang susahnya men-debug Javascript. Sama sekali tidak ada bayangan jika kelak Javascript akan menjadi tulang punggung aplikasi web dan mobile. Tahun segitu bahasa yang sedang ngetren adalah Java. Sekarang saya sudah tidak pernah menulis dengan Java — padahal saya dulu adalah fanboys Java. Kini saya lebih suka menulis dengan Python yang memang sedang ngetren.

Kembali ke React Native, ini adalah toolkit berbasis Javascript untuk pembuatan aplikasi mobile iOS dan Android. Dua sistem yang merajai dunia mobile.

Pada dasarnya, untuk membuat aplikasi mobile yang mendukung dua sistem ini, diperlukan dua toolkit yang berbeda. Untuk Apple iOS menggunakan XCode dengan bahasa Swift atau Object C. Sedangkan untuk Google Android, perangkat yang biasa digunakan adalah Android Studio dengan bahasa Java atau Kotlin. Artinya untuk satu aplikasi, diperlukan dua codebase yang sangat berbeda sehingga seringkali diperlukan tim yang tersendiri untuk menangani masing-masing sistem. Ini tentu saja tidak praktis dan berbiaya mahal.

Karena itu saya mencari-cari apakah ada teknologi yang bisa menggabungkan keduanya, satu codebase untuk dua sistem. Ini seperti jaman ketika Java mulai ngetren, bisa jalan di semua mesin Windows dan Unix tanpa harus compile ulang (meskipun pada praktiknya iya untuk optimasi).

Terima kasih buat Adi, kawan saya yang pakar mobile apps yang selalu berbaik hati untuk berkomentar yang mencerahkan saya. Saya mencoba semua yang disarankan beliau, mulai dari Xamarin dan React Native. Saya kutipkan lagi di sini, komentar yang ditulis setahun lalu:

Dari pengalaman saya :
– Untuk app sederhana (hanya menampilkan input2 text & list dengan item2 yg tidak rumit), ionic memang cukup.
– Kalau appnya yg dibuat cukup rumit, memang lebih baik nyemplung ke native, karena framework2 js ini kebanyakan akan “mbendol mburi”. Seiring dengan bertambahnya kebutuhan misalnya chart / map / list dengan item yg sangat custom / tab dengan lebih dari 5 item / konektivitas ke bluetooth, 3d touch, canvas. Akan mulai banyak tambal sulam agar performa appnya “bisa diterima”. Akan lebih challenging lagi di android, karena kadang kita bergantung di salah satu js library yg ada, yg bisa jadi di sebuah device X dengan Android versi Y, ga jalan, dan terpaksa harus ngoprek ke dalam library & code nativenya.
– Misal sudah kadung belajar JS, bisa mengubah haluan ke React Native yg secara performa lebih baik walaupun learning curvenya lebih susah dan paradigma koding yg cukup berbeda.
– Kalau app itu ditujukan untuk internal / corporate yg notabene ga peduli dengan hasil size app, lebih baik menggunakan Xamarin (100% free). Alasan saya, karena C#, bahasa yg jauh lebih baik daripada JS dan yg kemungkinan besar sudah banyak digunakan di level korporat. Semisal tidak banyak UI yg harus custom & performa yg so-so bisa diterima, bisa menggunakan xamarin.forms. Selain itu bisa menggunakan Xamarin.iOS & Xamarin.Android, jadi bisnis logicnya tetap bisa share (60-80% code mungkin utk dishare), hanya UI-related code yg berbeda, tapi tetap semuanya menggunakan C#

Pertama kali saya tertarik Ionic Framework, sebuah toolkit hybrid berbasis Angular.JS (Javascript) yang bisa langsung di-deploy untuk di dua sistem. Menulis di Ionic menyenangkan sekali karena dokumentasi yang sangat jelas, komponen tampilan yang bagus tanpa harus repot-repot. Buat yang sudah terbiasa dengan cara berpikir pembuatan aplikasi web, menulis di Ionic seperti tak ada bedanya dengan di web. Feels like home. Ya memang begitu, karena pendekatan Ionic adalah memasang web browser di aplikasi. Jadi ini memang kurang lebih mobile web yang dipasang di aplikasi native (iOS dan Android).

Di kantor saya, kami berhasil membuat satu aplikasi berbasis Ionic. Aplikasi ini sukses karena sebenarnya hanya mobile web, tidak memerlukan akses khusus ke perangkat — bahkan termasuk penyimpanan internal. Tapi ketika kami mulai memerlukan akses khusus ini di project lain, sangat terasa kecepatan performance-nya turun drastis.

Oke, next, saya mencoba Xamarin, download bundel Visual Studio yang bergiga-giga. Ini toolkit pertama yang saya kenal yang bukan hybrid, tapi native. Artinya komponen-komponen yang ditulis akan dikompilasi menjadi komponen native masing-masing sistem, misalnya untuk komponen list, di iOS akan menjadi UITableViewController, dan di Android akan menjadi ListView. Tapi rupanya saya tidak terlalu punya kesan baik dengan Xamarin. Codebase memang satu, tetapi banyak hal yang harus ditulis spesifik dua kali untuk iOS dan Android. Mungkin saya kurang baca lebih dalam, cuma karena kesan pertama tidak menggoda ya sudah.

Akhirnya saya ke React Native. Dibuat oleh Facebook. Dia berbasis Javascript seperti Ionic tetapi menjanjikan native. Jika Ionic akan membuat web browser untuk me-render komponen, React Native akan mengkompilasinya menjadi native component, seperti Xamarin. Belajar awal-awal lambat dan susah dimengerti karena dokumentasinya tidak sebagus Ionic, tetapi kesan pertama begitu menggoda: ini benar-benar seperti write once run everywhere.

Hal yang menarik lagi adalah fitur Expo SDK. Aplikasi bisa dijalankan langsung dengan aplikasi Expo client dengan cepat. Ini memungkinkan kami untuk membuat archive iOS (ipa) tanpa harus menggunakan XCode di Mac. Tinggal build di Expo cloud langsung bisa publish ke AppStore atau download ipa-nya untuk internal distribution. Menarik, karena di kantor kami standard OS-nya adalah Windows, termasuk untuk development aplikasi. Cuma kelemahannya, size aplikasinya akan membengkak 3 kali lipat. Tapi saya rasa tidak terlalu masalah untuk user internal yang tidak terlalu fakir kuota.

Catatan-catatan saya mengenai mobile apps:

Leave a Reply

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