Vibe kodning med Junie

Vibe kodning myntades i februari i år och nu i maj kom verktyget Junie i PHP Storm. Junie är verkligen bra. Jag kan beskriva vad jag vill ha för kod.
Junie analyserar den kod som finns för att få information. Kör scripts för att samla information. Skriver kod. Härmar kodstilen i befintlig fil eller om du ger den exempel på kodstil du föredrar.
Junie testar koden att den fungerar och rättar fel som dyker upp.

Du får sedan färdigskriven kod.

Olika sorters AI

JetBrains Junie är en kodningsagent som resonerar fram kod från dina instruktioner.
JetBrains AI assistent är en kodassistent som hjälper dig med mindre saker medan du skriver kod.
JetBrains AI Chat kan svara på frågor om din kod eller kodning i allmänhet.

CoPilot är samlingsnamnet för dess kodningsagent, assistent och chat. I PHP Storm får du bara assistenten och chatten. I VSCode får du även dess kodningsagent.

Komma igång

Junie är fri att använda upp till en nivå. Därefter behöver du betala en prenumeration. Upplägget gör det enkelt att komma igång om du redan kör PHP Storm eller någon av JetBrains andra kodredigerare.

Kodstandard

Jag har hittills sagt til Junie att titta i någon välpolerad PHP fil för att härma kodstandarden.
Det finns något som heter guidelines men jag har inte testat det ännu.

Resultat

Du får vad du frågar efter. Ofta är koden utmärkt och följer det du frågat efter.
Jag ville ha ett bash-script som ska fungera i Linux men vad jag egentligen ville ha är ett bash-script som fungerar i Ubuntu. Resultatet var vad jag frågade efter, med specialfall för de fem största Linux-distributinerna. Därför är det viktigt att lära sig hur man frågar.

Prenumeration

Jag gjorde slut på all quota som ingick i provperioden. Nu är jag prenumerant. Junie har hjälpt mig att spara massor med tid på jobbet. Den prenumeration jag kör nu är Pro, men även där tog det slut ganska snart. Bra är att den då automatiskt går över till free och använder dess quota också. Du kan se hur mycket quota som finns kvar. Det verkar som jag förbrukar 1-3% av quota för varje ärende jag gör.

Fördelar med Vibe coding

Min fru berättade att jag nu är mycket lugnare när jag ska ta lunch eller efter jobbet. Hjärnan behöver inte gå på konstant högvarv. Det finns tid till eftertanke när datorn kodar åt dig. Det finns tid att förbereda nästa ärende och ta en välbehövlig paus. Om en av hundarna vill ha några sekunders gos då kan jag numera ge det utan att tappa tråden på det jag håller på med.

Testerna som skrivs med Vibe coding är ofta mycket bra och betydligt mer omfattande än när jag själv skriver tester. Alla vinklar täcks in.

Nackdelar med Vibe coding

Jag är inte längre inne i koden på samma sätt. Alla detaljer sitter inte i mitt arbetsminne i huvudet. Det är en enorm fördel fysiskt men en liten nackdel när jag inte känner till koden så i i detalj. Men å andra sidan glömmer jag ändå allting efter ett par dagar. Jag kan alltid debugga med xdebug för att se detaljer.

Myter om Vibe coding

Största myten är att Vibe coding sparar tid. Ja det sparar massor av tid MEN du måste förfina dina frågor så att koden blir så pass bra att den inte behöver efterbearbetning. Sitter du och ändrar i AI genererad kod efteråt då tappar du tid.

Andra myten är att alla kan koda nu. Visst, till viss del men ibland skapas kod som inte är bra, och då behöver du inse det och styra Junie bort från de lösningarna. Till exempel att hela funktioner som du ska testa istället mockas. Det betyder att du inte testar logiken i funktionen utan istället får ett förutbestämt svar.

Skapa en vägledning

Hur du skriver är förstås viktigt. Junie vill veta målet, var det ska ändras och lite bakgrund. Här är en vägledning som jag använt i ett projekt.

Goal: Use the variable $isDryRun in all functions in main() in file RetentionLogic.php
Background: Use file MariaDbBackup.php as a template how to implement $isDryRun in RetentionLogic.
Notice that each function just before the end checks if $isDryRun === true and sets values for a positive outcome.

Exemplet är en ganska liten ändring som kommer att modifiera logiken i en enda fil men i kanske 6 st funktioner. Om du tänker skriva en hel klass eller ännu mer kod, då rekommenderar jag att du lägger till ”steps”. Olika steg som ska uppfyllas. Och fråga gärna en annan AI om den vägledning du skrivit kan förbättras. Du får då en förbättrad version och har då större chans att nå de mål du vill nå.

Om du däremot lägger in en massa ovidkommande saker som att ”Det funkade förut” eller ”Kolla på rad 123 så ser du” och annat oklart, då får du inget bra resultat.

Efter en körning kan du godkänna eller göra en återställning. Var inte så snabb med att godkänna.

Exempel på användning

Jag jobbar just nu med att modernisera en mycket gammal PHP 5.6 applikation med SQLi och SQL frågor. Tusentals rader med enorma if-wrappers, globala variabler, få funktioner. Att navigera i den koden skulle vara svårt. Istället bad jag Junie att skapa en struktur med huvudklass och huvudfunktion och sedan underklasser och underfunktioner. Den fyllde i så mycket som möjligt och lämnade referenser i varje PHPDOC till originalkoden. Där det är SQL behöver den veta vilka modeller som ska användas istället så den kopierar SQL-koden in i kommentarer i separata funktioner. Därefter kan vi fokusera på en funktion i taget, jag och Junie.

Jag brukar be den att skriva både logik och test samtidigt. Då kör den testet och testar logiken medan den skriver. Den rättar fel den hittar. Det blir TDD, Test Driven Development via AI. Jag kör docker och behöver skriva ett kommando för att starta testerna. Jag nämner det för Junie och den använder det kommandot.

Slutsats

Junie är det viktigaste verktyget. Det är en stress när quotan börjar ta slut.

CharZam