Claude Code + Codex MCP を使った開発プロジェクトの標準的なフォルダ構成と開発フロー。 AIエージェント開発の情報管理-原則 のフォルダ構成をベースに、Claude Code のシステム上の制約を組み合わせたもの。
原則のフォルダ構成をそのまま採用し、Claude Code 固有の設定ファイル群(.claude/, CLAUDE.md)を追加する。
Claude Code + Codex MCP を使った開発プロジェクトの標準的なフォルダ構成と開発フロー。 AIエージェント開発の情報管理-原則 のフォルダ構成をベースに、Claude Code のシステム上の制約を組み合わせたもの。
原則のフォルダ構成をそのまま採用し、Claude Code 固有の設定ファイル群(.claude/, CLAUDE.md)を追加する。
| // | |
| // AlertController.swift | |
| // | |
| // Created by ryotapoi on 2025/01/20. | |
| // | |
| import UIKit | |
| /// Represents an action displayed in an alert. | |
| /// |
| class ToastWindow: UIWindow { | |
| override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { | |
| let view = super.hitTest(point, with: event) | |
| if view == self { | |
| return nil | |
| } else { | |
| return view | |
| } | |
| } | |
| } |
| import Foundation | |
| import zlib | |
| struct CRC32: Equatable, ExpressibleByIntegerLiteral, CustomStringConvertible { | |
| typealias IntegerLiteralType = UInt32 | |
| let value: UInt32 | |
| var description: String { String(format: "%08X", value) } | |
| init(data: Data) { |
| import Foundation | |
| import Combine | |
| extension Combine.Publishers { | |
| struct Sequencial<Sequence, Output, Failure>: Publisher | |
| where | |
| Sequence: Swift.Sequence, | |
| Sequence.Element: Publisher, | |
| Sequence.Element.Output == Output, | |
| Sequence.Element.Failure == Failure |
| import Foundation | |
| import Combine | |
| extension FileManager { | |
| struct RemoveItemPublisher: Publisher { | |
| typealias Output = Void | |
| typealias Failure = Error | |
| var url: URL | |
| var fileManager: FileManager |
| import Foundation | |
| let formatter = DateComponentsFormatter() | |
| formatter.unitsStyle = .positional | |
| formatter.allowedUnits = [.minute, .second] | |
| formatter.zeroFormattingBehavior = .pad | |
| formatter.string(from: 61) |
| zip -0 -r archive.zip source… |