Apa itu Google Apps Script (GAS)
Google Apps Script adalah platform scripting berbasis JavaScript yang digunakan untuk mengotomasi dan mengintegrasikan layanan Google Workspace, seperti:
-
Google Sheets
-
Google Docs
-
Google Forms
-
Gmail
-
Google Drive
-
Calendar
-
Dan API eksternal (REST API)
๐ GAS berjalan di cloud Google, tanpa perlu server sendiri.
Karakteristik Teknis
-
Bahasa: JavaScript (ES5–ES6 sebagian)
-
Runtime: V8 Engine
-
Paradigma: Procedural + Object-oriented
-
Akses API Google native (tanpa OAuth manual untuk internal)
Contoh Dasar: Hello World
๐ Jalankan → lihat di Executions Log
Contoh Praktis: Otomasi Google Sheets
Membaca & menulis data
Contoh: Otomasi Gmail
Contoh: Trigger Otomatis (Cron)
➡️ Triggers → Time-driven → Daily
Contoh: Web App (API Endpoint)
๐ Bisa dijadikan:
-
Backend ringan
-
API untuk frontend
-
Integrasi sistem sekolah / UMKM
Struktur Proyek GAS
-
Code.gs→ file utama -
.gslain → modular -
appsscript.json→ konfigurasi & scopes
Use Case yang Cocok untuk Anda
Sebagai programmer & trainer digital skills, GAS sangat cocok untuk:
-
๐ Dashboard laporan otomatis (Sheets → PDF → Email)
-
๐งพ Form → Approval → Email notifikasi
-
๐ Upload & manajemen Drive otomatis
-
๐ Integrasi dengan REST API (WhatsApp, payment, LMS)
-
⚙️ Backend ringan tanpa server (untuk MVP)
Roadmap Belajar GAS (Disarankan)
1️⃣ Dasar JavaScript di GAS
2️⃣ SpreadsheetApp & DriveApp
3️⃣ Trigger & permission
4️⃣ Gmail & Form automation
5️⃣ Web App & REST API
6️⃣ Best practice & security
7️⃣ Studi kasus nyata (laporan, approval, dashboard)
Studi Kasus Nyata (Contoh)
Sistem Laporan Digital Skills
-
Input data via Google Form
-
Data masuk Sheets
-
Otomatis rekap
-
Generate PDF
-
Kirim ke email Dinas / UNICEF
Jika Anda mau, saya bisa:
-
✅ Buat modul belajar GAS bertahap
-
✅ Buat studi kasus real (pendidikan / UMKM / laporan)
-
✅ Buat template script siap pakai
-
✅ Bandingkan GAS vs PHP / Node.js
Baik, saya jelaskan secara terstruktur dan teknis karena ini sudah level aplikasi web lengkap berbasis Google Apps Script (GAS) dengan role-based access control (RBAC) dan CRUD.
Script ini membangun Web App “SISKO DB – Sistem Informasi Sekolah” dengan Google Spreadsheet sebagai database dan Google Drive sebagai storage foto.
1. KONFIGURASI GLOBAL
Fungsi
-
SPREADSHEET_ID→ database utama (Google Sheet) -
FOLDER_ID→ folder Drive untuk menyimpan foto siswa
๐ Wajib diganti agar aplikasi berjalan.
2. ENTRY POINT WEB APP
Fungsi
-
Endpoint utama Web App
-
Menampilkan file
index.html -
Bertindak seperti
index.php/index.jspada web biasa
Konfigurasi tambahan
➡️ Optimasi UI, mobile friendly, bisa di-embed iframe.
3. LOGIN & AUTENTIKASI
Alur
-
Buka Spreadsheet
-
Ambil sheet Users
-
Loop data user
-
Cocokkan
username & password
Struktur Sheet Users
| username | password | role | nisn | nama_lengkap |
|---|
Role
-
Admin → full akses
-
Guru → akses berdasarkan kelas & jurusan
-
Siswa → hanya datanya sendiri
Optimasi Penting
๐ Preload data siswa saat login
➡️ Mengurangi request dari frontend
Output ke Frontend
4. GET DATA SISWA (ROLE BASED)
Fungsi Inti Aplikasi
Mengontrol hak akses data siswa berdasarkan role.
4.1. Permission Guru
๐ Guru bisa mengajar:
-
kelas tertentu
-
jurusan tertentu
-
jurusan Umum / Semua
4.2. Format Data
Tanggal diformat manual
4.3. Filter Berdasarkan Role
Admin
➡️ Lihat semua data
Siswa
➡️ Lihat data sendiri
Guru
➡️ Lihat siswa sesuai izin mengajar
๐ Ini RBAC (Role-Based Access Control) versi GAS.
5. CRUD DATA SISWA
Tambah
-
Cek duplikat NISN
-
Append ke sheet
Update
-
Cari berdasarkan NISN
-
Update kolom tertentu
Delete
-
Hapus row langsung
๐ Spreadsheet berperan sebagai database tabel tunggal.
6. CRUD DATA GURU
getGuruData()
Ambil semua guru
addGuru()
-
Buat sheet jika belum ada
-
Cek duplikat NIP
updateGuru()
Update berdasarkan NIP
deleteGuru()
Delete row guru
➡️ Mirip master data table di sistem akademik.
7. RELASI SISWA – GURU
Logika
Guru cocok jika:
-
Kelas sama
-
Jurusan sama atau Umum / Semua
๐ Ini semacam JOIN manual antara DataSiswa dan DataGuru.
8. UPLOAD FOTO (GOOGLE DRIVE)
Alur
-
Decode Base64
-
Buat Blob
-
Simpan ke Drive
-
Share public
-
Convert ke direct image URL
๐ Hack penting agar gambar bisa ditampilkan di <img> HTML.
9. HELPER URL GAMBAR
Fungsi
-
Mengubah link Drive lama
-
Jadi format direct display
➡️ Menangani kompatibilitas data lama.
10. INITIALIZE DATABASE (MIGRATION SCRIPT)
Fungsi
-
Reset seluruh sistem
-
Buat:
-
Users
-
DataSiswa
-
DataGuru
-
-
Isi data default
-
Styling header
๐ Ini seperti:
-
migration + seederdi Laravel -
schema.sql + dummy data
11. UPDATE FOTO SISWA SAJA
Fungsi
-
Update timestamp
-
Update foto profil saja
๐ Optimasi agar tidak update data lain.
12. ARSITEKTUR SISTEM (Ringkas)
13. KESIMPULAN
Script ini adalah:
✅ Web App GAS skala menengah
✅ Sistem akademik mini
✅ Role-based access control
✅ CRUD lengkap
✅ Storage gambar
✅ Siap dipakai untuk sekolah
Index.html
1. PERAN FILE index.html
index.html adalah frontend utama (UI layer) dari Web App Google Apps Script.
Fungsi utamanya:
-
Menyediakan tampilan login
-
Menampilkan dashboard berdasarkan role (Admin / Guru / Siswa)
-
Menjadi client yang memanggil function di
Code.gslewatgoogle.script.run
๐ Dalam arsitektur MVC:
-
View + Controller ringan → index.html
-
Model + Controller → Code.gs
-
Database → Google Spreadsheet
2. STRUKTUR UMUM FILE
Secara garis besar, index.html berisi:
Semua halaman ada dalam satu file (Single Page Application sederhana).
3. BAGIAN <head> – UI & STYLE
Biasanya berisi:
Fungsi
-
Styling UI
-
Membuat section bisa ditampilkan/disembunyikan
-
Tidak mempengaruhi logic backend
๐ Best practice GAS:
CSS langsung di HTML agar tidak load eksternal berat.
4. LOGIN SECTION
Fungsi
-
Input kredensial user
-
Entry point aplikasi
Kenapa penting?
-
Semua role harus lewat login
-
loginSectionakan disembunyikan setelah login sukses
5. FUNGSI doLogin() (CLIENT SIDE)
Penjelasan
-
google.script.run= bridge frontend → backend -
.login()memanggil functionlogin()di Code.gs -
Tidak reload halaman (AJAX-like)
๐ Ini bukan HTTP request, tapi RPC internal GAS.
6. HANDLE RESPONSE LOGIN
Response dari backend
Fungsi handler
-
Menyimpan state user
-
Menentukan UI yang ditampilkan
-
Menyembunyikan login
7. STATE MANAGEMENT FRONTEND
Fungsi
-
Menyimpan sesi user (client-side)
-
Dipakai ulang oleh:
-
upload foto
-
update data
-
filter UI
-
๐ Ini session palsu, bukan server session.
8. ADMIN SECTION
Fungsi
-
Tampil hanya jika
role === 'Admin' -
Menampilkan seluruh data siswa
-
CRUD siswa & guru
Data
๐ Data sudah dikirim sejak login (optimasi).
9. GURU SECTION
Fungsi
-
Read-only data siswa
-
Data sudah difilter backend berdasarkan:
-
kelas ajar
-
jurusan ajar
-
๐ Keamanan di backend, bukan frontend.
10. SISWA SECTION
Fungsi
-
Menampilkan profil siswa
-
Upload foto
๐ Siswa tidak bisa melihat siswa lain
11. RENDER DATA KE HTML
Fungsi
-
Mengubah JSON → HTML
-
Tidak ada manipulasi database di frontend
๐ Frontend hanya consumer data.
12. UPLOAD FOTO – CLIENT SIDE
Flow
Frontend:
-
Convert file → Base64
-
Kirim ke
uploadImage()
Backend:
-
Simpan ke Drive
-
Return URL
13. KOMUNIKASI FRONTEND ↔ BACKEND
Semua komunikasi memakai:
๐ Tidak bisa pakai:
-
fetch
-
axios
-
XMLHttpRequest
Karena sandbox GAS.
14. KONTROL VISIBILITAS UI
Tujuan
-
Simulasi halaman berbeda
-
Tetap satu HTML
๐ SPA versi sederhana.
15. KEAMANAN (CATATAN PENTING)
❌ Password plain text
❌ Session client-side
❌ Bisa di-manipulasi via DevTools
Namun:
✅ Aman untuk internal sekolah
✅ Bukan sistem publik besar
16. RINGKASAN FUNGSI FILE index.html
| Bagian | Fungsi |
|---|---|
| Login UI | Autentikasi user |
| Role Switch | Tampilkan dashboard sesuai role |
| Render Data | Menampilkan data dari Sheet |
| Upload Foto | Interaksi Drive |
| State User | Menyimpan sesi frontend |
17. KESIMPULAN
index.html ini:
-
Bertindak sebagai SPA Client
-
Tidak menyimpan data permanen
-
Semua logika kritikal ada di backend
-
Cocok untuk Web App GAS skala menengah
Jika Anda mau, langkah lanjut yang sangat recommended:
-
๐ Bedah index.html baris per baris
-
๐งฉ Refactor jadi komponen terpisah
-
๐ Tambahkan login hashing
-
๐ฑ Buat versi mobile-first UI
Penjelasan
1. MASALAH JIKA SATU FILE HTML BESAR
Sebelum split:
-
index.htmlpanjang & sulit dibaca -
Login, admin, guru, siswa tercampur
-
Sulit maintenance & kolaborasi
-
Tidak scalable
➡️ Solusi profesional:
Partial HTML + include()
2. KONSEP UTAMA: <?!= include('file'); ?>
Di Google Apps Script, kita bisa:
Artinya:
-
Ambil isi file
login.html -
Render ke
index.html -
Server-side rendering (sebelum dikirim ke browser)
๐ Mirip:
-
PHP
include() -
Blade / Twig partial
3. STRUKTUR FILE PROFESIONAL
๐ Ini standar produksi untuk GAS Web App.
4. index.html → ENTRY POINT
Fungsi:
-
Layout utama
-
Menggabungkan semua partial
๐ index.html tidak berisi logic detail, hanya komposisi.
5. styles.html → SEMUA CSS
Keuntungan
-
CSS terpusat
-
Mudah ganti tema
-
Tidak ganggu JS
6. header.html → UI GLOBAL
Fungsi
-
Header konsisten
-
Menampilkan nama & role user
-
Bisa ditambah logout, menu, dll
7. login.html → LOGIN VIEW
๐ Hanya HTML murni, tanpa logic
➡️ Logic ada di app.html
8. admin.html, guru.html, siswa.html
Masing-masing satu role = satu file.
Contoh admin.html
๐ Prinsip:
-
View only
-
Tidak tahu backend
-
Tidak tahu login logic
9. app.html → OTAK APLIKASI (JS)
Semua JavaScript dikumpulkan di sini:
-
State
-
Auth
-
UI control
-
Module siswa
๐ Ini seperti:
-
main.js -
app.js
10. FLOW APLIKASI SETELAH SPLIT
๐ Split file tidak mempengaruhi performa, karena include terjadi di server.
11. KEUNTUNGAN UTAMA SPLIT FILE
✅ Readable
✅ Maintainable
✅ Mudah dikembangkan
✅ Cocok untuk tim
✅ Standar industri
✅ Tidak ribet seperti React
12. BEST PRACTICE NAMING
| File | Isi |
|---|---|
login.html | login UI |
admin.html | admin view |
guru.html | guru view |
siswa.html | siswa view |
app.html | JS logic |
styles.html | CSS |
13. KESALAHAN UMUM YANG HARUS DIHINDARI
❌ Logic JS di setiap file
❌ CSS di banyak tempat
❌ ID DOM bentrok
❌ Frontend menentukan keamanan
14. SIAP NAIK LEVEL LAGI?
Langkah lanjutan (advance):
-
๐ Hash password + session token
-
๐ Lazy load data
-
๐ Search & pagination
-
๐งฉ Component pattern
-
๐ GAS sebagai REST API
-
๐ฑ Mobile-first UI


Tidak ada komentar:
Posting Komentar