しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

GitHub Copilotを使って自動コード補完

GitHub CopilotというAIが自動でコード補完してくれるサービスを試してみました。

github.com

Xcodeは公式未対応なので、下のプラグインを利用しました。
サードパーティーアプリなので入れる際は会社のセキュリティーポリシー上問題ないかご確認下さい。

github.com

まずはGitHub Copilotを有効にします。
有料ですが無料トライアル期間もあります。

次にCopilot for Xcodeをインストールします。
インストールはBrewを使いました。

brew install --cask copilot-for-xcode

インストールしたらCopilot for Xcodeアプリを立ち上げます。
Node.jsを使うのでインストールしていない場合はインストールします。
インストールをしたらPath to NodeにNode.jsのパスを入れます。

次に設定アプリの「プライバシーとセキュリティー」の「拡張機能」の「Xcode Source Editor」でCopilotを有効にします。

再度Copilot for Xcodeを開き直すと下のような表示になるのでSign inからGitHubにログインします。
もしうまく行かない場合、Xcodeを閉じる・Copilot for Xcodeを開き直すなどの対応をします。

下のように許可を求める表示が出るので許可を押します。

Copilot for XcodeでRefreshを押すと下のようにログイン済み表示になります。

これで設定は完了です。
次はXcodeで実際に使ってみます。

新規プロジェクトを作成して下のようなコードを書きます。

class ViewController: UIViewController {
    func readFile() {
        
    }
}

readFileメソッドにフォーカスをあてた状態でEditorのCopilotのGet Suggestionsを押します。

数秒待つとXcode右下に下のようなコード候補がでます。

許可を押すと下のようにコードが展開されます。
今回はDocumentフォルダのtest.txtファイルの文字を読み込むコードがサジェストされたようです。

class ViewController: UIViewController {
    func readFile() {
        let fileManager = FileManager.default
        let documentDirectory = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let fileURL = documentDirectory.appendingPathComponent("test.txt")
        do {
            let text = try String(contentsOf: fileURL, encoding: .utf8)
            print(text)
        } catch {
            print(error)
        }
    }
}

ViewControllerのreadFileの1行上にフォーカスをあてたら下のようにviewDidLoadメソッドを提案されました。

signInWithTwitterという利用頻度が低そうなメソッドの中で使ったら下のようにコメントだけサジェストされました。
もしかするとSwiftではsignInWithTwitterというメソッドがGitHub上になかったからかもしれません。

class ViewController: UIViewController {
    func signInWithTwitter() {
        // ...
    }
}

使ってみた感想ですがよく使われる機能のサンプルコードを探したりするのには便利そうでした。
プラグインがまだうまく動かない事もあったりするので、公式で対応されたらまた試してみようと思います。
それとコメントを入れる事でサジェストが改善されるようなのでこれも今後試していきたいと思います。

参考URL

【Xcode】XcodeでGitHub Copilotを使ってみた - Qiita

GitHub Copilot にいいコードを書いてもらう方法 - GMOインターネットグループ グループ研究開発本部(次世代システム研究室)