#生成AIでリファクタリングやってみた
企画内容
生成AIを使ってリファクタリングをします。
下記のプロンプトとBeforeのコードからAfterのコードが生成されました。
Afterのコードを採用しますか?
採用する / 採用しない
回答パネルへ理由や感想などの付箋を貼ってください。
AI モデル
ChatGPT GPT-5
プロンプト
以下のSwiftコードを分析し、enumとパターンマッチングを活用して最適化してください。 【改善の指針】 - 複数のBool/Optional変数をenum + associated valueで統合 - if-else文の連鎖をswitch文に置き換え - 無効な状態の組み合わせを型レベルで排除 - 不要な変数のスコープ汚染を防止 【出力形式】 問題点:[1文] 改善案:[コードのみ] 効果:[1文] 【コード】 ```swift [ここにコードを挿入] ```
Before
class APIService { var isLoading = false var data: [User]? = nil var error: Error? = nil var isEmpty = false func fetchUsers() { isLoading = true error = nil data = nil isEmpty = false URLSession.shared.dataTask(with: URL(string: "...")!) { data, response, error in DispatchQueue.main.async { self.isLoading = false if let error = error { self.error = error return } if let users = self.parseUsers(data) { if users.isEmpty { self.isEmpty = true } else { self.data = users } } } }.resume() } }
After
class APIService: ObservableObject { enum State { case idle case loading case success([User]) case empty case failure(Error) } @Published private(set) var state: State = .idle func fetchUsers() { state = .loading URLSession.shared.dataTask(with: URL(string: "...")!) { data, _, error in DispatchQueue.main.async { if let error = error { self.state = .failure(error) return } guard let users = self.parseUsers(data) else { self.state = .failure(NSError(domain: "ParseError", code: -1)) return } self.state = users.isEmpty ? .empty : .success(users) } }.resume() } private func parseUsers(_ data: Data?) -> [User]? { // JSON decoding処理 nil } }
※出力結果から「改善案」のコードのみ抜粋