ClaudeMdGeneratorService + Build::ClaudeMdsController + 미리보기/다운로드 + 테스트
ID: 398ffe8e-40cf-499a-b240-af4e42ad014b
## 목표
PRD Section 13.3 기반 Ai::ClaudeMdGeneratorService + Build::ClaudeMdsController 구현. CLAUDE.md 생성, 미리보기, 파일 다운로드.
## 현재 상태
- Build::ClaudeMdsController 스텁 (show, create + download member route)
- 라우트: `resource :claude_md, only: [:show, :create] do get :download, on: :member end`
- Project: claude_md_content(text), claude_md_generated_at(datetime)
- BlueprintGeneratorService 패턴 참고 가능
## PRD 코드 (Section 13.3) — API 호출 없이 프로젝트 데이터로 마크다운 생성
```ruby
class Ai::ClaudeMdGeneratorService
def initialize(project:)
@project = project
@user = project.user
end
def call
content = generate
@project.update!(claude_md_content: content, claude_md_generated_at: Time.current)
content
end
private
def generate
# 프로젝트 정보를 CLAUDE.md 마크다운으로 변환
# title, one_line_definition, target_customer, revenue_model, tech_stack,
# core_features, db_schema_draft, pages_list, dev_priority 포함
# 개발 원칙, 코딩 컨벤션, 디자인 시스템 등 고정 섹션 추가
end
def format_db_schema
return "아직 생성되지 않음" unless @project.db_schema_draft.present?
@project.db_schema_draft.map { |table, cols| "### #{table}\n#{cols.map { |c| "- #{c}" }.join("\n")}" }.join("\n\n")
end
end
```
## 구현 사항
### 1. app/services/ai/claude_md_generator_service.rb
- PRD 코드 기반 (API 호출 없음, 순수 마크다운 생성)
- project 데이터를 CLAUDE.md 형식으로 변환
- format_db_schema 헬퍼
### 2. Build::ClaudeMdsController
```ruby
class Build::ClaudeMdsController < ApplicationController
before_action :set_project
before_action :authorize_owner!
def show
# claude_md_content가 있으면 미리보기, 없으면 생성 버튼
end
def create
Ai::ClaudeMdGeneratorService.new(project: @project).call
redirect_to build_project_claude_md_path(@project), notice: "CLAUDE.md가 생성되었습니다."
end
def download
content = @project.claude_md_content || Ai::ClaudeMdGeneratorService.new(project: @project).call
send_data content, filename: "CLAUDE.md", type: "text/markdown"
end
private
def set_project = @project = Project.find(params[:project_id])
def authorize_owner!
redirect_to build_projects_path, alert: I18n.t("errors.messages.not_authorized") unless @project.user == Current.user
end
end
```
### 3. 뷰 (build/claude_mds/show.html.erb)
- 미리보기: claude_md_content를 simple_format 또는 pre 태그로 표시
- "다운로드" 버튼 (→ download 액션)
- "재생성" 버튼 (→ create 액션)
- 미생성 시 "CLAUDE.md 생성하기" 버튼
- claude_md_generated_at 타임스탬프 표시
- 다크 테마, 기존 Partial
### ⚠️ 주의
- services/ai/ + build/claude_mds/ 범위만 (developer-2는 build/build_steps/ 작업 중)
- 이 서비스는 API 호출 없음 (동기 실행)
### 테스트
- 서비스: CLAUDE.md 콘텐츠 생성 확인, project 필드 업데이트
- 컨트롤러: show, create, download, 인증/소유자
### 완료 기준
- CLAUDE.md 생성 + 미리보기
- .md 파일 다운로드
- 재생성 가능
- bin/rails test 전체 통과
첨부 이미지
이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)
JPEG, PNG, GIF, WebP / 최대 10MB
활동 로그
-
Ddeveloper-1 상태 변경: 할 일 → 리뷰
2026년 03월 26일 10:58:41