Prabogo: Go Framework dengan Hexagonal Architecture dan AI Assistance
Golang Tutorial Architecture #golang #go #prabogo #hexagonal-architecture

Prabogo: Go Framework dengan Hexagonal Architecture dan AI Assistance

A
Abd. Asis
6 min read
Bagikan:

Salah satu tantangan yang sering dihadapi saat mulai proyek Go baru adalah keputusan struktural — apakah memakai flat structure, apakah memisahkan domain dari infrastruktur, bagaimana mengelola dependency agar tidak saling terikat. Pertanyaan-pertanyaan itu tidak ada jawaban tunggal yang berlaku untuk semua kasus, tapi ada pendekatan yang sudah terbukti bekerja di proyek skala enterprise: hexagonal architecture.

Prabogo adalah Go framework open source yang mengopinionasi keputusan struktural itu. Alih-alih memulai dari blank canvas dan memutuskan sendiri setiap layer, Prabogo menyediakan scaffold yang mengikuti pola ports and adapters, dilengkapi code generation via Makefile dan AI assistance bawaan. Framework ini dibuat oleh Moch Dieqy Dzulqaidar dan dirilis di bawah lisensi MIT.

Artikel ini membahas apa itu Prabogo, bagaimana arsitekturnya bekerja, cara instalasi, dan bagaimana alur pengembangan sehari-hari terasa dengan framework ini.

Hexagonal Architecture: Mengapa Ini Penting

Sebelum masuk ke Prabogo, penting memahami pola yang menjadi fondasi framework ini. Hexagonal architecture — atau dikenal juga sebagai ports and adapters — membagi aplikasi menjadi tiga zona:

  • Domain: logika bisnis murni, tidak bergantung pada library atau framework apapun
  • Port: interface yang mendefinisikan bagaimana domain berkomunikasi dengan dunia luar, baik ke dalam (inbound) maupun ke luar (outbound)
  • Adapter: implementasi konkret dari port — bisa berupa HTTP handler, consumer RabbitMQ, koneksi ke PostgreSQL, atau klien Redis

Dengan struktur ini, kamu bisa mengganti PostgreSQL dengan MySQL, atau Fiber dengan Echo, tanpa menyentuh satu baris pun kode domain. Unit test juga jadi lebih mudah karena domain tidak bergantung pada koneksi database nyata — cukup mock outbound port-nya.

Kalau kamu sudah membaca artikel tentang hal wajib diketahui sebelum belajar Golang, pola ini akan terasa sebagai kelanjutan natural dari prinsip separation of concerns yang menjadi nilai inti bahasa Go.

Instalasi dan Setup Proyek Prabogo

Prabogo memerlukan Go versi 1.24 ke atas, Docker, dan secara opsional fzf untuk interactive command selector.

Install tool instalasi Prabogo terlebih dahulu:

go install github.com/prabogo/prabogo-install@latest

Setelah itu, buat proyek baru dengan:

prabogo-install my-project-name

Perintah ini men-scaffold seluruh struktur proyek, termasuk konfigurasi Docker Compose untuk PostgreSQL, Redis, RabbitMQ, dan Authentik. Salin file environment:

cp .env.example .env

Jalankan dependensi eksternal via Docker Compose:

docker-compose up -d

Untuk menjalankan aplikasi dalam mode HTTP:

go run cmd/main.go http

Atau gunakan make run yang membuka interactive selector berbasis fzf — pilih mode yang diinginkan dari menu tanpa perlu hafal nama command.

Struktur Direktori yang Dihasilkan

Setelah scaffold selesai, struktur proyek terlihat seperti ini:

my-project/
├── cmd/
│   └── main.go                      # Entry point aplikasi
├── internal/
│   ├── app.go                       # Setup dan wiring komponen
│   ├── domain/                      # Logika bisnis
│   │   ├── registry.go
│   │   └── entity/
│   │       ├── domain.go
│   │       └── domain_test.go
│   ├── port/                        # Interface definitions
│   │   ├── inbound/
│   │   │   ├── entity.go
│   │   │   └── registry_*.go
│   │   └── outbound/
│   │       ├── entity.go
│   │       └── registry_*.go
│   ├── adapter/                     # Implementasi port
│   │   ├── inbound/
│   │   │   ├── fiber/               # HTTP handlers
│   │   │   ├── rabbitmq/            # Message consumers
│   │   │   └── command/             # CLI handlers
│   │   └── outbound/
│   │       ├── postgres/            # Database adapters
│   │       ├── redis/               # Cache adapters
│   │       ├── rabbitmq/            # Message publishers
│   │       └── http/                # HTTP client adapters
│   ├── model/                       # Data structures
│   │   ├── entity.go
│   │   ├── request.go
│   │   └── response.go
│   └── migration/
│       └── postgres/
└── utils/

Setiap folder memiliki tanggung jawab yang jelas. Domain tidak tahu bahwa ada Fiber di inbound adapter — yang diketahui domain hanyalah port interface.

Alur Pengembangan dengan Code Generation

Ini bagian yang membuat Prabogo terasa berbeda dari sekadar template proyek. Makefile yang disertakan menyediakan perintah untuk generate setiap layer secara otomatis.

Membuat Model dan Migrasi

Mulai dengan mendefinisikan model domain:

make model VAL=product

Perintah ini membuat file model di internal/model/product.go beserta struktur request dan response yang relevan. Dilanjutkan dengan migrasi database:

make migration-postgres VAL=product

File migrasi diletakkan di internal/migration/postgres/ dengan konvensi penamaan yang konsisten.

Generate Inbound Adapter

Untuk menambahkan HTTP endpoint baru menggunakan Fiber:

make inbound-http-fiber VAL=product

Prabogo membuat HTTP handler di internal/adapter/inbound/fiber/product.go, mendaftarkannya di registry, dan sekaligus membuat inbound port interface di internal/port/inbound/product.go. Semua koneksi antar layer dilakukan secara otomatis.

Tersedia juga generator untuk adapter lain:

# Consumer RabbitMQ
make inbound-message-rabbitmq VAL=product

# CLI command handler
make inbound-command VAL=product

# Temporal workflow worker
make inbound-workflow-temporal VAL=product

Generate Outbound Adapter

Untuk koneksi ke PostgreSQL:

make outbound-database-postgres VAL=product

Ini menghasilkan adapter di internal/adapter/outbound/postgres/product.go beserta outbound port interface di internal/port/outbound/product.go. Generator serupa tersedia untuk Redis, RabbitMQ publisher, HTTP client, dan Temporal workflow starter.

Generate Mock untuk Testing

Setelah semua layer terbentuk, generate mock untuk keperluan unit test domain:

make generate-mocks

Perintah ini menjalankan semua go:generate directive di project dan menghasilkan mock implementation dari setiap outbound port, sehingga domain bisa ditest secara terisolasi.

Mode Jalankan Aplikasi

Prabogo mendukung beberapa mode eksekusi yang sesuai dengan jenis adapter yang dikonfigurasi:

# HTTP server
make http

# Message consumer
make message SUB=upsert_product

# CLI command
make command CMD=publish_upsert_product VAL=product-name

# Temporal workflow worker
make workflow WFL=upsert_product

Atau gunakan make run untuk membuka selector interaktif — berguna saat berpindah antara mode yang berbeda selama development.

AI Assistance Bawaan

Salah satu fitur yang membedakan Prabogo dari framework Go lainnya adalah AI assistance yang diintegrasikan langsung ke dalam alur pengembangan. Framework ini menyertakan tiga AI agent:

  • Clarifier: membantu mengklarifikasi kebutuhan dan spesifikasi fitur sebelum implementasi
  • Task Designer: mengubah spesifikasi menjadi task implementasi yang terstruktur
  • Executor: membantu mengeksekusi task dengan mengikuti pola arsitektur yang sudah ada di proyek

Ketiganya dirancang untuk bekerja dalam konteks hexagonal architecture Prabogo, sehingga saran yang dihasilkan mengikuti konvensi direktori dan pola kode yang sudah ada.

Hal yang Perlu Diperhatikan

Beberapa hal yang perlu kamu pertimbangkan sebelum memilih Prabogo:

  • Opinionated: framework ini sangat menentukan cara kamu mengorganisasi kode. Kalau proyek sudah memiliki konvensi sendiri, ada gesekan untuk beradaptasi.
  • Docker sebagai kebutuhan: Docker Compose diperlukan untuk menjalankan dependensi lokal. Ini bukan masalah di sebagian besar setup modern, tapi perlu diperhatikan di lingkungan yang terbatas.
  • Go 1.24+: pastikan versi Go yang digunakan sudah memenuhi syarat minimum.
  • Proyek aktif berkembang: dengan 358 bintang di GitHub dan 20 fork, Prabogo masih tergolong framework baru. API dan konvensinya mungkin masih akan berubah.

Kesimpulan

Prabogo memberikan jawaban yang konkret untuk pertanyaan “bagaimana cara memulai proyek Go yang scalable” — bukan dengan memberikan lebih banyak pilihan, tapi dengan mengopinionasi struktur dan mengotomasi boilerplate melalui code generation. Bagi tim yang ingin menerapkan hexagonal architecture tanpa harus menyusun template dari nol, ini adalah titik mulai yang solid. Langkah berikutnya setelah instalasi adalah membaca dokumentasi architecture untuk memahami bagaimana domain, port, dan adapter saling berinteraksi dalam praktik.

Referensi

  1. 1Hexagonal Architecture Guide - Prabogo Go Framework
  2. 2Dokumentasi Resmi Prabogo - Make Commands dan Development Workflow
  3. 3GitHub - prabogo/prabogo: Go framework dengan interactive command interface dan AI assistance

Tentang Penulis

Abd. Asis

Abd. Asis

Software Developer dan Laravel Programmer dari Madura, Indonesia. Passionate tentang PHP, Laravel, dan teknologi web modern.

Artikel Terkait

Artikel lain yang mungkin menarik untuk kamu