🪶

GitHub Copilot for Xcode Pre-release 0.34.116

に公開

ついにGitHub Copilot for XcodeにAI Agentが搭載された!

期待して待っていた、AI AgentがGitHub Copilot for Xcodeに搭載されたそうです!
まだ、今の時点ではプレリリース版ですが。

でも十分使えますね。すでに完成されているような🤔

https://github.com/github/CopilotForXcode/releases/tag/0.34.116

使うときはどうすればいいのか?
今までは、質問をするAskしか使用できなかったが、コード生成やファイルの編集をしてくれるAI Agentが搭載された🤩

作業環境について

  • xcode16.3
  • GitHub Copilot for Xcode Pre-release 0.34.116
  • M4 MacBookPro 16インチの36GB

どれほどの精度なのか?

指定したファイルを編集する指示を出してみると、編集してくれた!
カウンターを追加してくださいと頼んだ。

Swift Tupleを使用して、NoteViewつくってくださいとお願いすると作ってくれた!

import SwiftUI

struct NoteView: View {
    // Define a tuple type for our notes with title, content, and date
    typealias Note = (title: String, content: String, date: Date)
    
    // Sample data using tuples
    private let notes: [Note] = [
        ("買い物リスト", "牛乳、卵、パン、野菜を買う", Date().addingTimeInterval(-86400)), // Yesterday
        ("会議メモ", "新プロジェクトのキックオフミーティングについて議論", Date().addingTimeInterval(-172800)), // 2 days ago
        ("アイデア", "新しいアプリのUIデザインについて考える", Date().addingTimeInterval(-259200)), // 3 days ago
        ("タスク", "レポートを完成させる、メールを返信する", Date()), // Today
        ("旅行計画", "京都旅行の準備リスト: ホテル予約、交通手段の確認", Date().addingTimeInterval(86400)) // Tomorrow
    ]
    
    // Date formatter for displaying dates
    private let dateFormatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        formatter.timeStyle = .none
        return formatter
    }()
    
    var body: some View {
        NavigationStack {
            List(0..<notes.count, id: \.self) { index in
                VStack(alignment: .leading, spacing: 8) {
                    Text(notes[index].title)
                        .font(.headline)
                    
                    Text(notes[index].content)
                        .font(.body)
                        .lineLimit(2)
                        .foregroundColor(.secondary)
                    
                    Text(dateFormatter.string(from: notes[index].date))
                        .font(.caption)
                        .foregroundColor(.gray)
                }
                .padding(.vertical, 6)
            }
            .navigationTitle("メモ")
        }
    }
}

#Preview {
    NoteView()
}

設定画面を作ってくださいとお願いしてみた。いい感じでできた!

import SwiftUI

struct SettingsView: View {
    @State private var notificationsEnabled = false
    @State private var darkModeEnabled = false
    @State private var username = ""
    @State private var selectedLanguage = 0
    let languages = ["English", "Japanese", "Spanish", "French", "German"]
    
    var body: some View {
        NavigationView {
            Form {
                Section(header: Text("Profile")) {
                    TextField("Username", text: $username)
                    Picker("Language", selection: $selectedLanguage) {
                        ForEach(0..<languages.count, id: \.self) {
                            Text(self.languages[$0])
                        }
                    }
                }
                
                Section(header: Text("Preferences")) {
                    Toggle("Enable Notifications", isOn: $notificationsEnabled)
                    Toggle("Dark Mode", isOn: $darkModeEnabled)
                        .onChange(of: darkModeEnabled) { newValue in
                            // Here you would implement the dark mode change logic
                        }
                }
                
                Section(header: Text("About")) {
                    HStack {
                        Text("Version")
                        Spacer()
                        Text("1.0.0")
                            .foregroundColor(.gray)
                    }
                }
            }
            .navigationTitle("Settings")
        }
    }
}

#Preview {
    SettingsView()
}

最後に

使ってみた感想ですが、期待していた通りの動作をしていたと思われます。精度は高いと思います。まだ複数のファイルが存在するアプリでは試していないので、どうなるか分かりませんが、これがリリースされれば、iOSエンジニアはCursor、Windsurf、VSCodeを開かずともxcodeだけでコーディングが快適にできるようになると思います。

生成AIの登場によって、SwiftUIのコーディングする作業は今後開発者の負担を軽減してくれるでしょう。そんな未来が訪れることを期待しております。

Discussion