Copilot For Xcode をインストールして GitHub Copilot を Xcode から使う

Xcode ツール

これから書くであろう続きのコードを自動生成してくれる GitHub Copilot を Xcode から使えるようにする機能拡張 Copilot For Xcode を、インストールして使える環境を整えてみました。


Xcode で GitHub Copilot を使えると知り、それを実現するためのツール Copilot For Xcode を使ってみることにしました。

GitHub Copilot というのは AI を用いてコードの続きを自動で書いてもらえるツールのことで、それを Apple 公式の開発ツール Xcode から利用できるようにしたのが Copilot For Xcode になるようです。

Copilot For Xcode のインストール

今回は Homebrew を使って Copilot For Xcode をインストールしてみます。

今回は Homebrew を使って Copilot For Xcode をインストールしてみることにしたので、ターミナルから次のコマンドを実行します。なお、Homebrew を使うための準備は こちら で紹介してあります。

brew install --cask copilot-for-xcode

また、Copilot For Xcode を利用するには Node.js が必要になるようだったので、そちらも次のようにして Homebrew でインストールしておきます。

brew install node

Copilot For Xcode のセットアップ

これで必要なソフトウェアのインストールが完了ので、次に Copilot For Xcode を利用するための準備をしていきます。

Node.js のパスを指定

Copilot For Xcode では Node.js を利用するようで、それがどこにインストールされているかを指定する必要がありました。この設定は、Copilot For Xcode アプリを起動すると表示される設定画面から行います。

ここの Path to Node: のところに、Node.js のパスを指定します。Apple Silicon 版の Mac で Homebrew を使って Node.js をインストールした場合は /opt/homebrew/bin/node が Node.js のインストールパスになる様子でした。

GitHub Copilot アカウント設定

先ほどの Copilot For Xcode の設定画面で、続いて GitHub Copilot のアカウントを設定します。こちらは Accounts にある GitHub Copilotボタン をクリックすると現れるボタンを使って行います。

こちらの Sign Inボタン を選択すると、ブラウザーが起動して、GitHub Copilot のアクティベーションコードを入力する画面になります。

アクティベーションコードは、先ほど Sign In ボタンを押した Copilot For Xcode に 8 桁の英数字で表示されているので、それをここに入力してアクティベーションを進めていきます。

ブラウザー側でアクティベーション手続きが完了したら、元の Copilot For Xcode の画面に戻って Confirm Sign-inボタン を押せば、これでアクティベーションは完了です。

GitHub Copilot を利用するには、GitHub のアカウントを取得していることに加えて、GitHub Copilot の機能を有料オプションで申し込んでおく必要があるようでした。申し込みは GitHub Copilot のサインアップページ から行えるようになっています。

Open AI アカウント設定

Xcode から AI とチャットできるようにしたいときに必要な Open AI のアカウントも設定しておくことにします。こちらは Copilot For Xcode の設定画面の Accounts にある OpenAIボタン をクリックすると現れる画面で設定します。

ここで、OpenAI に関する各種情報を入力します。

項目 内容
OpenAI API Key OpenAI で取得した API キーです。
ChatGPT Model チャットパネルで使用する OpenAI の種類です。
ChatGPT Server 使用する ChatGPT のエンドポイントです。指定できるエンドポイントは ChatGPT Model 選択欄のヘルプ内に記載があるようでした。
Reply in Language ChatGPT の返答で使用する言語のようです。
Max Token 送信する最大トークン数を指定できる様子です。

これらを適宜設定することで OpenAI まわりの設定は完了です。

OpenAI の API キーは API keys のページ から取得できます。こちらは利用量に応じて料金が発生するようです。

Copilot For Xcode を有効化

各種設定が完了したら、Copilot For Xcode を有効化します。この設定は macOS の システム設定... にある プライバシーとセキュリティー で行います。

機能拡張の有効化

プライバシーとセキュリティー設定の 機能拡張Xcode Source Editor という項目があるので、それを選択して Copilot にチェックを入れます。

入力監視の許可

また、プライバシーとセキュリティー設定にある 入力監視 で Copilot For Xcode を登録します。

入力監視の設定画面を開いたら、ここの ボタン を押して Copilot For Xcode アプリを追加します。

コンピューター制御の許可

ここまで設定していざ使ってみようとしたところ、まったく Copilot による候補が表示されませんでした。

そこで、改めて Copilot For Xcode アプリの設定画面から Launch Agent をセットアップし直して、GitHub Copilot のアカウント設定周りを確認しようとしてみたところで、アクセシビリティ機能の有効化を促すダイアログが表示されました。

ここから システム設定を開くボタン を押して、CopilotForXcodeExtensionService にアクセシビリティ機能を使用してコンピュータを制御することを許可しておきます。

Copilot For Xcode で LaunchAgent をセットアップすると、ユーザー向けの ~/Library/LaunchAgents フォルダー内に com.intii.CopilotForXcode.ExtensionService.plist が登録されます。

System Events の許可

そうして再び Copilot For Xcode を使ってみようと Xcode を動かしたところで、新たに System Events を制御するアクセスを要求した旨のメッセージが表示されました。

これを許可してあげたところで、無事に Copilot For Xcode が Xcode 上で動作してくれるようになりました。

Copilot For Xcode を使ってみる

Copilot For Xcode を Xcode で実際に使用してみたところ、良い感じにコードの候補を挙げてくれるようになりました。

とても微妙なコードが候補に上がっていますけれど、この周辺でちょうどセマフォを使った無理矢理感のあるコードが点在していた都合か、それを汲み取ってよしなに候補を上げてくれたように思います。そうでなければ常識的に書かないようなコードでもあるので、そう思うとむしろなかなか強力なツールの可能性を秘めているようにも感じます。

ただし些か、間違いというのか、制御的に微妙なコードが生成されている感じがするので、しばらくは Copilot を当たり前のように使って作られたコードは品質的に爆弾を抱えたコードに仕上がったりするかもしれません。

Copilot の実行方法

Xcode Source Editor プラグインをインストールすることで Xcode に追加されたメニューから、Copilot にコードを書いてもらうことができます。

次のようなメニューが Editor Copilot に追加され、選べるようになっていました。実際に試してみるとわかるのですが、特に ChatGPT を使ったコードの操作はなかなか強力で楽しい感じがします。

メニュー項目 用途
Get Suggestions 現在位置から、これから書くであろうコードの候補を提案します。
Accept Suggestion 現在提案されているコードの候補を実際のコードに反映させます。
Reject Suggestion 現在提案されているコードの候補を採用せずに閉じます。
Next Suggestion 現在提案されている提案ではなく、次の提案を候補にします。
Previous Suggestion 現在提案されるものより1つ前に提案されていたものを候補にします。
Toggle Real-time Suggestions コードを入力していくだけで提案が自動でされるか否かの切り替えを行います。
Real-time Suggestions Copilot For Xcode が内部で使用する、提案取得時にそれを表示する機能らしいです。
Prefetch Suggestions Copilot For Xcode が内部で使用する、提案を先読みするための機能らしいです。
Chat with Selection チャットウィンドウが開き、選択されているコードを踏まえた ChatGPT との会話が行えます。
Explain Selection 選択されているコードの説明を ChatGPT に教えてもらいます。
Prompt to Code 選択したコードを ChatGPT と一緒に編集していきます。編集してもらった際にはその意図も聞かせてくれる様子でした。

Xcode のキーバインディングを設定する

Copilot For Xcode を動かしてみると、とても楽しくていろいろ使ってみたくなりますけれど、その度に Xcode のメニューから必要な機能を選んで実行するのはなかなか手間です。そこで、Copilot For Xcode の公式ページで推奨されていた、Xcode のキーバインディング設定を行っておくことにしました。

Xcode のキーバインディングの設定は Xcode Settings... から開いた設定画面にある Key Bindings タブで行えます。

ここで Copilot で検索すると、Copilot For Xcode で追加されたメニュー項目に的を絞ることができるので、ここで公式でオススメされていた次のショートカットをひとつひとつ設定していきます。

項目 ショートカット
Copilot > Get Suggestions ?
Copilot > Accept Suggestions }
Copilot > Reject Suggestion }
Copilot > Next Suggestion >
Copilot > Previous Suggestion <

これでわざわざポインター操作をしなくても、コードの候補を表示したりそれを選択したりするなどの操作がキーボードのショートカットで自由に行えるようになりました。

バックグラウンド項目 "Shangxin Guo" について

ところで Copilot For Xcode をセットアップしている間に、macOS に新たなバックグラウンド項目が追加されたという通知が表示されていました。

これが何なのかパッとみただけではわからなかったのですけれど、心当たりとしては Node.js のインストールのときか Copilot For Xcode のインストールのときに導入されたものと考えられます。ただ、全く関係ないものだったりすると怖いので、これが何なのか調べておくことにしました。

そうしたところ、Copilot For Xcode の Launch Agent をセットアップしているかどうかで、このバックグラウンド項目が登録されるかどうかが変化することがわかりました。

実際に確認したい場合は、Copilot For Xcode の Launch Agent をセットアップすることで追加される ~/Library/LaunchAgents フォルダー内の com.intii.CopilotForXcode.ExtensionService.plist を削除することで、macOS システム設定の 一般ログイン項目 にある Shangxin Guo がリストから消えることで確認できます。

ただし、ファイルを消してもすぐには表示は消えず、システム設定のウィンドウ自体をいったん閉じて開き直す必要があります。再登録したときはすぐにリストに反映されるので、そちらの方が判断しれないです。