我的 AI 開發工作流


最近剛完成第一個完全由 AI 協助我開發的 WordPress 外掛,想說應該可以來整理一下這次開發的工作流程以及用到的工具,整體的心得是有 AI 實在是快超多,開發的速度跟飛的一樣,尤其是邊做邊想到新功能時,問一下複製貼上就能搞定,就像在裝外掛。

但不變的是 AI 跟我一樣會卡關,雖然每次它的解釋都好像解決了,但實際上測試就是無法,一直回饋給它後丟出新的解法,結果還是不行,這時候就要停下來自己看程式碼,然後思考是哪一行可能會出問題。

發現有可能造成問題的地方,再拿回去問 AI,這時候它就會說:「沒錯,你發現到問題的關鍵了!」我心裡想的是這應該是你要告訴我的啊 🤣,但整體而言這樣的開發節奏讓我可以很快的進入心流,不用擔心程式碼細節而是產品的方向,真的是回不去沒有 AI 協助的日子了~

以下我從企劃、開發以及除錯階段,來說明我是如何用 AI 來設計這支外掛的。

企劃階段

這支外掛的主要功能是延續我上一個產品的概念,契機是因為 LINE Notify 停用後造成許多站長包含我自己的不便,某天在看新聞網站時跳出訂閱通知的視窗,每次都會直接關掉的我忽然靈機一動,如果把這個通知提供給管理者使用不是超適合的嗎?

有了這想法我就開始在 ChatGPT 裡面進行技術細節的討論,ChatGPT 新的專案功能我覺得非常方便,可以把聊天串做資料夾分類,同時還可以幫這個資料夾下提示詞,之後有相關的問題就能在這邊發問:

我開了一個與產品同名的資料夾,然後跟它說它的角色以及慣用工具,第一次聊天的是跟它確認這個產品如果再搭配 AI 功能是否有市場,以及是否有競爭者等等,然後再問它商業模式可以怎麼設計。

接下來則是問它 Web Push 的實作,跨不同的裝置有什麼該注意的事項,才發現到在手持裝置上需要 Progressive Web App 才有辦法接收到通知,這部分我完全沒概念,在得知技術可行才開始進行著手產品的開發。

產品的開發清單我就沒有請 AI 來幫我列出,開發 WordPress 外掛我自己心中有很清楚的藍圖,像是需要先從資料庫開始設計,然後是後台的操作介面、資料的 CRUD,然後是前台的使用者介面,這部分我用 Notion 進行彙整:

一開始大概只有前 5~10 項,然後邊做的過程就會發現還有哪邊不足,開發項目就會開始越來越長,雖然這部分也能叫 AI 列出來,但畢竟只有自己開發,用自己的話寫比較能理解這個項目應該做什麼,省去一層要理解 AI 在說什麼的過程。

之前也有試過把開發項目寫成 markdown 文件,然後讓 Cursor 去根據這些項目自動做事,這會牽涉到開發工具的使用,這部分稍後再提。列出後在實際工作時我會紀錄時數以便每個月的回顧:

因為我有紀錄時數的習慣,所以我才知道有了 AI 之後開發出基本雛形有多省時間,省下的時間就能拿來加更多新的功能,如果一個產品一樣做 40 個小時,有 AI 協助的版本絕對比自己全部手刻的有更多的功能。

開發階段

在嘗試了 Cursor、Windsurf、VSCode + Cline,以及線上編輯器 Replit 與 Firebase Studio,我還是回到了原本的 PhpStorm。PhpStorm 開發商 JetBrains 在這波 AI 浪潮中明顯跟不上,他們推出的 AI Assistant 我沒在用,最新的 AI Agent Junie 到撰文的當下還沒支援 PhpStorm,但我最後的 AI 工作流還是選擇用它搭配 ChatGPT。

先講語言模型,之前試過免錢的 Llama4 以及寫程式最強的 Claude Sonnet 都很不錯,但最後讓我回到 ChatGPT 桌面的關鍵還是使用者體驗,除了上述的專案功能以外 ( 這應該大家之後都會有 ),主要還是它的記憶能力。

我邊開發的時候會邊請它記住符合 WordPress 的程式碼撰寫習慣,這樣當我複製貼上時就不用再整理相關的格式以及處理程式碼規範的問題,另外安全性的部分也是重點,我希望它產出的程式碼就已經符合安全規範:

因為更新後的 ChatGPT 號稱可以參考過去的對話紀錄來進行回答,再加上它的記憶能力,我覺得這是 ChatGPT 的護城河,有了這功能讓我無法輕易的更換其他家模型,這已經不是在比模型的訓練資料量,而是自己與這個模型互動多年的經驗累積,最懂你的助理不是能說換就換的。

至於 PhpStorm 也是相同的概念,當初為了要上手這款複雜的編輯器,花了好多時間把它調整到自己順手的流程,雖然在這之前都是用 VSCode,而現在的 AI 編輯器也都是從 VSCode 分支出來的,但用過 PhpStorm 之後就會覺得 VSCode 有種浮浮的感覺。

PhpStorm 有一種紮實感,在寫程式時能夠很直觀的獲得提示,哪裡出錯也會明確提示,索引整個程式庫的速度很快,讓我能知道這一段程式碼是在哪邊定義的,雖然這些功能 VSCode 也都能用擴充功能辦得到,但 PhpStorm 就是讓我覺得安心,這應該也是跟它合作多年產生的信賴感。

所以我現在已經不會被新的 AI 編輯器給迷惑了,最好的工具一個就夠,也就是自己最信賴的那一套。那天逛 FB 看到有朋友使用 Dreamweaver 開發,一樣寫出一堆大賣的工具,重點從來不是工具,留意哪些新工具可以激發自己下一個產品的想法才是關鍵。

因此我現在的工作流程是這樣:

  1. 老方法建立好開發環境以及外掛資料結構
  2. 用 PhpStorm 的 Live template 把外掛的基本骨架完成
  3. 使用 ChatGPT 開始長肉,從開資料表到後台介面的實作
  4. 檢查 ChatGPT 產出的程式碼,貼回 PhpStorm
  5. 開瀏覽器啟用外掛操作看看、開資料庫工具查看資料的 CRUD 是否正確
  6. 有錯的話開啟 Tinkerwell,埋 log 或直接 return,看 function 的執行結果是否如我預期
  7. 看到錯誤 log 評估是自己修還是請它修比較快
  8. 重複以上 3~7 過程

最喜歡的就是用 AI 產出需要整理一堆資料欄位的部分,像是開資料表、撈訂單資料,以前自己手刻這環節最花時間,還會想要偷懶乾脆不要放那麼多資料,但現在不管有多少,一句話就能搞定。

另一個最大心的地方是安全性的部分,由於 Web Push 是用公私鑰來比對要推播給誰,當時就在想這些密鑰該怎麼存最安全,討論後它建議我公鑰存資料庫、密鑰存檔案,這樣萬一其中一個被攻破了至少不會全部被拿走。

然後 OpenAI API Key 的加密儲存機制也能請它幫我設計,讓 Key 不會是以明碼的方式存在資料庫,在後台查看的時候也不會看到完整的 Key,這如果是自己開發的話,如果當天身心靈狀況不好很有可能會偷懶XD,畢竟要另外處理很麻煩,有 AI 處理這塊方便無敵多,而且也學到很多原來還可以這樣做的知識~

除錯階段

本以為有了 AI 協助就再也不會卡關了,但想不到有一些關還是卡了半天以上。具體的例子是在做聊天介面時注音輸入選字的判斷,這部分很多國外的聊天介面都沒有處理到,也就是如果用注音的話當選完字按 Enter,就會直接送出訊息,正確的是選完字按下 Enter,再按一次才是送出訊息。

這部分的實作之前就有留意到,所以請 AI 要記得幫我處理,後來上正式機發現 Safari 選完字按下 Enter 會直接出去,因為複製貼上的當下我沒有去理解這部分是怎麼判斷的,因此我就很自然的把整段 JS 跟 HTML 丟到 ChatGPT 請它幫我修。

來來回回修了好幾個版本,Safari 就是無法正確運作,我受不了後開始 Google 研究這東西是怎麼運作的,原來瀏覽器本身就有 Composition Events 的事件來判斷非拉丁語系的輸入法,開始輸入的事件叫做 compositionstart,結束輸入的叫做 compositionend,AI 給我的寫法是在 start 的狀態改變變數狀態,讓按下 enter 不會送出訊息,要 end 時才會送出。

然後我就在 start 跟 end 的事件下埋 log 來檢查變數的狀態,才發現到 Safari 判斷 end 的時機跟 Chrome 不一樣,把這發現再丟回 ChatGPT 才得到正確的解決辦法,也就是讓 end 的觸發時間延遲,才能得到正確的結果。

事後回過頭看之前它給的答案就有提到這個問題,但它的寫法沒有配合到我的 HTML 所以沒有生效,即使我當初有把完整的 HTML 貼給它看,所以當初發問時還是要先仔細看過它給的東西,不要想說這個問題好像很容易解決就直接複製貼上,也許運氣好一下就能解決,但對於自我的學習成長完全沒有幫助。

要讓 AI 理解整個程式碼架構,這部分 AI 編輯器像是 Cursor 就做得很好,除了可以標記指定的段落,也能跨檔案進行標記,如果只是用 PhpStorm + ChatGPT 就比較麻煩了,自己要記得這功能牽涉到哪些檔案,然後要手動一個一個貼給它參考。

近期朋友推薦 Repomix 這個工具,可以把整個程式庫變成一份讓 AI 好理解的文件,實際用過後比只貼一個連結給它來得完整得多,而且提供整個程式碼,會比只給技術文件更完整,我現在都會把常用的第三方套件轉成文件後,請 ChatGPT 幫我記住,這樣之後寫出來的範例就更準確了。

心得

現在的我抱持著 AI 是協助者的角色,我不會只丟幾個提示詞給它然後請它產生所有的程式碼,如果是自己玩的小工具或許還有可能,但要產品化面對到一般使用者,我不會拿這樣的產品出去銷售,一方面我不知道這樣的產品安全性是否可靠,重點是萬一出了問題我連該怎麼改都不知道。

對自己的產品負責是我深信的價值,如果當我知道一個產品無人為介入、全部都是用 AI 寫出來的,我應該不太敢用吧XD,我們下週見!

WordPress 開發日常

Read more from WordPress 開發日常

大家端午快樂,這週分享一下我目前的主力開發工具~ 開發工具的使用歷程 在 AI 時代前,我都是使用 PhpStorm。PHPStorm 確實順手——跳到函式定義、儲存時自動格式化和檢查,這些功能讓開發效率提升不少。 進入 AI 時代後,我用了 Cursor 好幾個月。自動補全和聊天介面加速了不少開發流程。但用了一段時間,我發現自己還是需要理解程式碼的能力,最後回到 PHPStorm 搭配 Claude Code 的組合。 後來也試過 Google 的 Antigravity。除了免費額度以外,用起來跟 VS Code 差不多。直到某天我打開系統監控,發現 Antigravity 的記憶體佔用竟然到了 40 幾 GB。 40 幾 GB,只為了一個程式碼編輯器。 程式碼視窗還重要嗎? 這讓我開始重新思考一個問題:傳統 IDE 的設計核心是「程式碼」。整個介面以程式碼編輯器為主體,側邊欄、終端機、除錯面板都是輔助角色。 但我現在的開發流程已經變了。大部分時間我在跟 Claude Code 對話,描述需求、確認方向、審查它產出的結果。真正需要自己打開檔案逐行閱讀的時候,一天可能不到三成。...

前陣子,我教會一位朋友使用 Claude Code。他完全不會寫程式,連終端機是什麼都沒聽過。但他有一個很清楚的產品想法,一直找不到工程師幫他做。 兩週後,他把那個產品完整地實作出來了。 不是原型、不是 wireframe,是一個可以實際運作的產品。他全程沒有寫過任何一行程式碼——他只是用中文描述他要什麼功能,Claude Code 就幫他把程式寫出來、跑起來、除完錯。 你可能會想:那它跟 ChatGPT 到底差在哪? 一、你說中文,它寫程式 大部分人聽到「Claude Code」就先退了一步。Code,程式碼,那不是工程師的事嗎? 試試看跟它說這句話:「幫我把這個資料夾裡所有 PDF 的檔名,整理成一份清單。」 它會自己寫一段程式碼、跑完、把清單生出來。你完全不需要看懂那段程式碼。同樣的事在 ChatGPT 上做,它會把程式碼貼給你看,然後你得自己想辦法找地方執行。 你需要學的不是程式語言,而是怎麼把需求講清楚。但光是能下指令還不夠——如果它每次只能做一件事就停下來等你,那跟比較聰明的 Siri 也沒什麼兩樣。 二、它不是聊天機器人,它是 Agent 用過 ChatGPT 或...

如果你有在使用 AI 開發 WordPress 外掛,並且要設計一些自訂的後台管理介面時,一定遇過資料送出時無法正確儲存,或是儲存後被導向到奇怪的頁面。 根據我的經驗,這十之八九是 Nonce 的問題,AI 在處理 Nonce 這一塊常常會出錯,為了讓 AI 更好地理解該怎麼處理 Nonce,這篇文章就來分享 Nonce 的作用,以及如何讓 AI 不要再犯這種錯。 Nonce 是為了擋 CSRF 而生的 所謂的 Nonce,最主要的功能是要防止跨站請求偽造(也就是俗稱的 CSRF)。 CSRF 主要的攻擊方式,是攻擊者誘導已經登入受害者的瀏覽器,自動發送請求到你的網站,也就是說,攻擊者不需要入侵你的網站,只要你的瀏覽器在登入狀態下點擊了惡意網址,攻擊就會開始。 舉個例子: 站長登入了某個 WordPress 網站的後台沒登出,繼續開著分頁 站長切換到另一個由惡意攻擊者準備好的頁面,這個惡意頁面藏了一段惡意程式 程式裡面的連結會指向站長 WordPress 後台 瀏覽器在送出這個請求時,會自動帶上站長已經登入的 Cookie(因為原本分頁沒關) 站長踩到這個惡意網址、讀到那段...