D
Daodao AI Coding 實戰
1 / 15
Daodao 內部分享 · PM + AI Coding

Daodao AI Coding 實戰

用這幾天參與 Daodao 開發的經歷,整理流程、問題和復盤方法。

案例:Web 端自定義應用上下架 大綱:分享是什麼 / 流程 / 問題 / 復盤 形式:分頁分享版
分享內容

把一次真實開發經歷講清楚

從拿到代碼、讓 AI 建立項目規範、啟動本地環境、讓 AI 分析需求、開發功能、測試檢查,到提交 MR 和處理 Review 的完整過程。重點不放在技術名詞,而是每一步要做什麼、要問誰、要怎麼檢查。

本次案例

Daodao Web 端自定義應用上下架

這幾天我主要負責的是 Daodao Web 端「自定義應用上下架」功能,涉及前端、後端、本地啟動、測試、GitLab MR、開發 Review 等完整流程。所以這次分享會用這個真實案例來講,不講抽象概念。

一句話主線:AI 可以幫我們寫代碼,但我們要控制流程、範圍、測試和 Review 閉環。

先把幾個詞講成人話

CLAUDE.md寫給 AI 的「項目說明書」,記錄前後端規範、命令、測試規則和不要亂改的地方。
Git diff看這次到底改了哪些文件、哪些行。AI 說完成不算,diff 才是證據。
MRMerge Request,提交給開發 Review 的代碼合併請求。
Migration資料庫結構的版本管理。加字段、改字段時,用它讓團隊環境保持一致。
02

流程是什麼:先看總覽

大多數人真正卡住的是「第一步做什麼,下一步做什麼」。

核心原則:不要一上來就讓 AI 改代碼。先讓它理解項目規範、理解需求、輸出計劃,再分步執行。
1
拿代碼請開發整理倉庫,明確前後端位置
2
建規範分析前後端規範,生成 CLAUDE.md
3
配參數申請 .env / config.js 等配置
4
跑項目讀 README,安裝環境並啟動
5
出計劃AI 先分析影響範圍,不直接改
6
做測試頁面測試 + 單元測試 + 集成測試
7
查代碼看 Git diff,清理無關改動
8
提 MRcommit、push、建立 GitLab MR
9
改 Review根據 comment 修改,再測試再提交
流程重點:每一步都要可確認、可回退、可交給開發 Review。
02

步驟 1:拿代碼

請開發整理代碼倉庫,明確前後端位置。

讓開發整理代碼倉庫

確認前端、後端分別在哪裡;使用哪個分支;最後提交 MR 給誰 Review。

  • 不要直接動正式分支
  • 先讓 AI 讀目錄、技術棧、README
  • 不要一開始就大範圍重構
拿代碼 - 倉庫目錄結構
02

步驟 2:建規範

讓 AI 分析前後端規範,生成 CLAUDE.md。

建立 CLAUDE.md

拿到代碼後,先讓 AI 分析前後端代碼編寫規範,整理成項目說明書。

  • 可以在 Claude Code 執行 /init
  • 也可以手動要求 AI 分析
  • 不要把 .env 敏感參數寫進去
剛拿到代碼時可用
請先分析這個項目的前端和後端代碼編寫規範,整理成 CLAUDE.md。 請包含:技術棧、目錄結構、常用命令、前端規範、後端 Controller / Model / Migration 規範、測試規範、Git 提交與 MR 注意點,以及哪些公共邏輯不要隨便改。 不要修改業務代碼,也不要寫入任何 .env 敏感參數。
建規範 - CLAUDE.md 範例
02

步驟 3:配參數

申請本地啟動所需的 .env 和 config.js 配置。

申請本地啟動參數

後端參數主要在 .env,前端參數主要在 config.js

  • 確認測試賬號和租戶
  • 確認接口地址和文件服務
  • 不要把敏感參數提交到 Git
配參數 - 配置範例 1
配參數 - 配置範例 2
02

步驟 4:跑項目

根據 README 安裝環境並啟動,確認本地能跑。

Step 4

先啟動項目,再談開發

啟動前先問 AI:根據 README 和項目結構,需要安裝什麼環境、按什麼順序啟動。

遇到 PHP、Composer、Docker 鏡像、CA 憑證、OSS 配置時,先按環境問題排查。

跑項目 - 啟動成功畫面
02

步驟 5:出計劃

先出開發計劃,列出影響範圍,不直接改。

Step 5

準備需求文檔,先出開發計劃

不要直接說「幫我做上下架」。要讓 AI 先列出前端、後端、資料庫要改什麼,以及是否影響 Web / App。

拿到需求可用
請根據以下需求文檔,結合當前項目結構,分析需要修改哪些前端、後端、資料庫文件。 請輸出:實現方案、涉及文件、是否需要 migration、是否會影響 App 端或舊接口、風險點。 先不要修改代碼。
出計劃 - 開發計劃範例
02

步驟 6:做測試

功能完成後做頁面測試 + 自動測試。

Step 7

功能完成後做兩類測試

頁面功能測試 + 自動測試。自動測試要按照目前項目已有的測試規範來寫,需要包含單元測試和集成測試。

測試類型要看什麼例子
頁面功能測試從使用者角度確認功能是否符合需求新增、編輯、上架、下架、必填校驗、刷新回顯
單元測試測單個方法或邏輯是否正確字段校驗、狀態轉換、資料處理邏輯
集成測試測接口和多個模塊串起來是否正常調用新增接口後,資料是否保存並能被列表查到
測試提示詞
請先查看項目目前已有的測試目錄、測試命名方式、測試基類、Mock 方式、資料庫處理方式和測試執行命令。 然後根據本次功能補充自動測試腳本,需要包含單元測試和集成測試兩類。 不要自創一套測試規範。
做測試 - 測試結果畫面
02

步驟 7:查代碼

提交前一定看 Git diff,清理無關改動。

Step 8

提交前一定看 Git diff

  • 有沒有無關文件被改
  • 有沒有 import、空白、註釋等格式噪音
  • 有沒有改到 Middleware 這類公共邏輯
  • 有沒有直接改舊 Controller 方法,影響 App 端
  • 資料庫字段變更是否補了 Migration
提交前檢查可用
請幫我檢查本次 Git diff。 請按文件列出:哪些改動與本需求直接相關、哪些是無關改動、哪些可能影響 App 端或公共邏輯、哪些建議還原。 只分析,不要直接修改。
02

步驟 8:提 MR

commit、push、建立 GitLab MR。

Step 9

commit 到本地 → push 到 GitLab → 建立 MR

提 MR 時注意:

  • 檢查 MR 的 diff 是否只包含本需求的改動
  • 填寫清楚的 MR 描述和需求鏈接
  • 標記給對應的開發做 Review
MR 品質檢查:diff 是否乾淨、是否有多餘改動、commit 訊息是否有意義。
提 MR - GitLab MR 建立畫面
02

步驟 9:改 Review

根據 comment 修改,再測試再提交。

Step 10

Review 閉環:根據 comment 修改

開發 Review → 根據 comment 修改 → 再測試 → 再檢查 diff → 再提交。

每一次 Review comment 都是一次學習機會,可以變成下一次的提示詞和規則。

處理 Review comment 可用
以下是 GitLab MR 的 Review comment。 請先解釋 reviewer 的意思,再判斷應該怎麼改。 請輸出修改計劃、影響範圍和測試點。先不要直接修改代碼。
改 Review - MR Review comment 畫面
03

遇到了什麼問題

不要當成技術事故清單,而是看成 AI Coding 的幾類常見風險。

問題 A

環境問題:項目不是一打開就能跑

沒有 PHP、Docker 鏡像、CA SSL 憑證、OSS 配置、env 缺失等,會阻塞開發。

問題 B

AI 問題:它會「順手多做」

AI 很容易改格式、改 import、改無關文件,甚至你只是問問題,它也可能動代碼。

問題 C

代碼問題:框架默認假設會踩坑

例如 Eloquent 默認認為表都有 id 主鍵,但這次核心表是複合主鍵,導致 where id is null

問題 D

協作問題:MR Review 卡在無關改動

Reviewer 不只看功能能不能跑,還會看 MR 是否乾淨、是否只做本 feature、是否影響其他端。

嚴重度問題當時現象真正要記住的是
P0複合主鍵被忽略tenant_has_ome_work_apps 沒有單獨 id,卻出現 where id is null涉及資料庫時,要先讓 AI 看表結構。
P0只想問問題,AI 卻改代碼問首頁是否有 8 個限制,結果 AI 順手把限制改掉。「只回答不修改」要加上禁止文件寫入。
P1格式污染 MRimport 排序、空白、格式被改,MR diff 變大。功能改動和格式改動要分開。
P1無關邏輯混入 Controller多了工作台分組清理、scope 改寫等無關代碼。AI 會順手優化,但 MR 看需求邊界。
P2home_recommend 字段遷移從全局應用表遷移到租戶-應用關聯表。字段歸屬要看業務:全局屬性還是租戶屬性。
P3分頁按鈕遮擋純前端顯示問題,AI 有時從後端開始分析。先判斷問題類型,再要求 AI 按正確方向排查。
04

復盤:下次先定這 10 條規則

把踩坑變成下一次可以直接使用的規則。

1
先建立 CLAUDE.md
剛拿到代碼時,先讓 AI 分析前後端規範,或直接執行 /init。
2
先分析,再修改
任何任務先出方案、文件清單、風險點。
3
一次只做一類改動
不要前端、後端、資料庫、格式化一起改。
4
堅持最小改動原則
只改和需求直接相關的地方。
5
每次改完立即看 diff
不要等到最後才檢查。
6
不要隨便改 Middleware
認證、權限、租戶這類公共邏輯影響範圍大。
7
Web 改動要考慮 App
共用接口不能隨便改,能新增方法就不要破壞舊方法。
8
資料庫改動要有 migration
新增字段、遷移字段、改表結構時要補。
9
自動測試按現有規範寫
先看項目已有測試,再補單元測試和集成測試。
10
Review comment 先理解再改
先解釋 reviewer 的意思和修改風險。
最核心的一句提示詞
本次對話遵循最小改動原則:不要改任何與問題無關的代碼格式、import、空白、註釋或公共配置。先只分析排查,列出需要修改的文件、原因和風險點,等我確認後再執行改動。
04

CLAUDE.md:項目說明書

寫給 AI 的「項目說明書」,控制 AI 行為的邊界和紅線。

# CLAUDE.md ## Project Identity **Daodao** ## Repository Structure Workspace root is **not** a Git repo. It contains two independent Git repositories: | Directory | Stack | Git Remote | |-----------|-------|------------| | `frontend/` | React 18 SPA | `gitlab.sjfood.us/daodao/daodao.web.git` | | `backend/` | Laravel 10 API | `gitlab.sjfood.us/daodao/daodao.api.git` | **All Git operations must be performed inside `frontend/` or `backend/` separately.** ## Global Red Lines ### Git & Repository - **绝对不要在 workspace root 执行 `git` 命令**(branch / commit / push / merge 等) - 所有 Git 操作必须先 `cd frontend/` 或 `cd backend/` - 前后端变更必须分别提交,不能混成一个 commit ### Code Modification Scope(代码修改范围控制) - **以最小改动完成当前任务** — 不要做任何与需求无关的修改、重构、优化、格式化或清理 - **修改前必须先输出变更计划**(列出预计修改的文件和方法),用户确认后再改 - 只改与当前任务直接相关的文件和方法;需要超出范围时先停止并向用户确认 - 不要因为"看起来没用"删除代码;不要改变正常工作的既有逻辑 - 保留文件原有格式风格,禁止执行全局格式化工具 - **禁止对既有的 import/use 语句进行纯粹的顺序调整**(例如按字母排序移动位置)— 即使格式化工具(如 Laravel Pint)建议调整,也不要在 MR 中夹带这类变更;只增删需要的 import,不调整已有 import 的顺序 - 任务完成前必须 `git diff --stat` + `git diff` 自查,确认每一处改动都是需求所需 ### Data & Permissions - 不要编造接口字段、数据库字段、权限、middleware - 后端涉及租户数据时必须包含 `tenant_id` - **Middleware 文件(`app/Http/Middleware/`)未经用户确认不得修改**(包括纯格式变更) ## Current Development State Active feature: **custom app management**(自定义应用管理)for OME admin panel. - Two-tier control: `tenant_enable` + `home_recommend` - `shelf_status` removed per 2026-07-02 update - Backend routes: `/ome/work-app/admin/*` (admin CRUD), `/ome/work-app/*` (frontend listing) - Frontend pages: `application-manage/`, `home/`, `foreground/` - Active branches: `feature/新增自定義上架功能-frontend`, `feature/新增自定義上架功能-backend` ## Core Documentation - `docs/prd V1.1.md` — Product requirements - `docs/backend-development-standards.md` — Backend conventions - `docs/frontend-development-standards.md` — Frontend conventions - `docs/2026-07-02-work-app-change-summary.md` — Latest change summary ## Rules & Skills **Rules**(专项规范,放在 `.claude/rules/`): | File | Covers | |------|--------| | `rules/backend/laravel-module.md` | Module structure, conventions, commands, pre-commit | | `rules/backend/tenant-rbac.md` | Tenant ID, RBAC, middleware chain, permissions | | `rules/backend/api-response.md` | `apiResponse`, `BusinessException`, validation | | `rules/frontend/react.md` | Stack, directory layout, naming, conventions, commands | | `rules/frontend/api-integration.md` | API client, interceptors, types, error handling | | `rules/git/two-repo-git.md` | Two-repo Git rules, CI/CD, branches | **Skills**(任务流程,放在 `.claude/skills/`): **开发流水线(按顺序使用):** | Skill | 职责 | 修改代码 | Git 写入 | |-------|------|----------|----------| | `project-context` | 载入项目上下文(其他 skill 的前置) | 否 | 否 | | `project-requirement-analysis` | 需求分析、影响范围、验收标准 | 否 | 否 | | `project-feature-development` | 按确认方案完成前后端开发 | 是 | 否 | | `project-quality-check` | Review diff、测试、lint/build、质量报告 | 仅测试 | 否 | | `gitlab-delivery` | 建分支、commit、push、创建 MR | 否 | 是 | **专项 Skill(按场景使用):** | Skill | When to Use | |-------|-------------| | `bug-fix` | Bug 定位与修复 | | `api-change` | 接口新增/修改/删除 | | `database-change` | 数据库结构变更 | | `frontend-backend-integration` | 前后端联调对接 |
04

Claude Code 會話分析報告

從會話記錄中提煉的項目核心線索和錯誤模式。

# Daodao — Claude Code 會話分析報告 ## 🔑 項目核心線索 ### 技術棧 | 層級 | 技術 | |------|------| | 後端 | PHP 8.2 + Laravel (Eloquent ORM, Migrations, Blade) | | 數據庫 | MySQL (InnoDB) | | 認證 | Account Center、Tenant Scope 多租戶 | | 存儲 | OSS(阿里雲對象存儲)、Local 文件系統 | | 代碼質量 | Laravel Pint(PHP格式化)、GitLab CI | ### 數據庫關鍵表 - `ome_work_apps` — 全局工作應用表 - `tenant_has_ome_work_apps` — 租戶-應用關聯表(本次 feature 的核心) - `tenant_user` — 租戶用戶關聯 - `ome_workbench_grouping_has_work_apps` — 工作檯分組關聯 - `users` — 用戶表(含 avatar 訪問器) ### 功能分支 - `feature/新增自定義上架功能-backend` ← 後端 - `feature/新增自定義上架功能-frontend` ← 前端 --- ## 🧠 工作主題分析 ### 1️⃣ 項目啟動與環境配置(7/1) 最開始的任務是從零搭建本地開發環境: - 沒有 PHP → 下載 PHP 8.2.32 - 按照 README 配置 Docker 鏡像 - 遇到 SSL CA 認證問題、OSS 配置問題 - 排查管理員權限入口 ### 2️⃣ 核心功能開發(7/2) 自定義應用上架功能(CRUD): - 首頁應用顯示邏輯(限制 8 個) - 後臺應用分頁按鈕超出可見範圍的 UI 修復 - Bug 排查:新增應用後調整報錯,原因是 `tenant_has_ome_work_apps` 表在執行 `update ... where id is null` — 模型缺少主鍵聲明 ### 3️⃣ GitLab MR Review 修復(7/2 - 7/3) 最耗時、最複雜的部分,Reviewer 的核心原則:本 feature 只做 CRUD,與此無關的代碼全部還原。 - 需修復的問題:enum → as const 模式轉換、移除 SSL 驗證配置、移除無關模型屬性、還原 avatar 訪問器、清理 Controller 無關代碼、大量 Laravel Pint 格式變更 ### 4️⃣ 數據遷移與重構(7/3) `home_recommend` 字段從全局表遷移到租戶關聯表: - 新增遷移文件,從 `config('ome.recommended_work_apps')` 讀取推薦應用 - 最小改動原則:從 19 個文件清理到 15 個 --- ## ⚠️ 值得注意的點 1. MR Review 佔比極高 — 尤其是清理無關格式變更(Pint 自動格式化)花費了大量精力 2. 多次 context 壓縮續接 — 說明單個會話的工作量很大 3. 「最小改動原則」 — 非常重視 MR 的可讀性,建立了禁止 import 重排序等規則 --- ## ❌ 錯誤模式與對應提示詞 ### 模式一:格式噪音汙染(出現次數最多) 現象:Laravel Pint 自動格式化導致 MR diff 被淹沒 ✅ 最小改動原則:只改業務邏輯,不要動格式/import/空白 ### 模式二:Eloquent 複合主鍵忽略(Bug 級) 現象:`tenant_has_ome_work_apps` 是複合主鍵,但用了 `where id is null` ✅ 注意 pivot 表複合主鍵,生成查詢時避免 Eloquent 默認 id 假設 ### 模式三:「只回答不修改」被繞過 現象:說「只回答不修改」結果首頁還是被改了 ✅ 絕對不要執行任何文件寫入操作,用分析模式回答 ### 模式四:跨 session 上下文斷裂 現象:同一問題在不同 session 重複出現 ✅ 搜索 .claude/ 目錄下的記憶文件,看是否有相關記錄 ### 模式五:前端問題被後端視角帶偏 現象:CSS 問題被從後端路由/控制器角度分析 ✅ 先判斷問題類型,再要求 AI 按正確方向排查 --- ## 📋 懶人包 — 一句話前綴 本次對話遵循最小改動原則:不要改任何與問題無關的代碼格式或 import。先只分析排查,等我的確認再執行改動。 --- ## 📊 問題優先級列表 ### 🔴 P0 — Bug / 阻斷級 1. 複合主鍵 → `where id is null` — Eloquent 默認用 id 當主鍵,但該表是複合主鍵 2. 首頁顯示了 9 個應用 — Claude 在回答時順手把限制去掉了 3. CA SSL 憑證問題(cURL error 60)— 開發環境問題 vs MR 純淨度的衝突 ### 🟠 P1 — MR Review 阻塞級 4. Laravel Pint 格式變更污染 MR diff — 19 個文件裡只有 4 個是真實業務改動 5. Controller 中無關代碼被帶入 — Claude 傾向於「順手優化」 ### 🟡 P2 — 功能開發障礙 6. `home_recommend` 字段遷移(全局 → 租戶級) 7. Tenant Cookie / 400 錯誤 — 請求沒帶 tenant-id ### 🔵 P3 — UI/UX 問題 8. 後臺應用分頁按鈕超出可見範圍 9. 管理後臺入口找不到 ### 🟢 P4 — 配置/環境問題 10. 本地沒有 PHP 環境、找不到前端配置文件、OSS vs Local 存儲切換等
可用鍵盤 ← / → 翻頁;也可以點上方頁籤跳轉。