これは「エイプリルナイツ アドベントカレンダー2025」の14日目の記事です。
https://adventar.org/calendars/11678
GitHub Copilot、便利ですよね。私が加入しているサブスクで一番有意義かつ楽しく使えてるんじゃなかろうか… 次点がAmazon Prime
ということで、今回は現在Copilot Pro以上のプランに加入しているGitHubユーザが利用できる GitHub Copilot CLI(パブリックプレビュー版) を使って所謂バイブコーディングをしてみた話となります。
見せてもらおうかGitHub Copilot CLIの性能とやらを
GitHub Copilot CLIとは
9月末にパブリックプレビュー版としてGitHub MCPサーバと共に公開されたコマンドラインにネイティブ対応したGitHub Copilotです。
できること
VSCodeの拡張機能として提供されるCopilotと異なりCLI上で動くので、
CLIでコマンドを叩いてできることなら、(ほぼ)なんでもできます。
- プロジェクト全体のフォルダ構造を見た上でのコードの操作
- GitHubの高度な操作
- 同時に公開されたGitHub MCPサーバにより可能になった機能
-
commit/pushといったGitコマンドどころかPull Requestの作成やissuesの管理、リポジトリのルール設定も可能
できないこと
フォアグラウンドで動作するブロッキングプロセスの管理
例えばWebサーバをフォアグラウンドで起動したり、 tail -f とか叩いたり
(本記事執筆時点での)Copilotが叩くコマンドは「完了」を期待しているのか、
「フォアグラウンドで動作するブロッキングプロセス」 を一定時間(?)で勝手に中断してしまいます。
デフォルトだとCopilotはこれを自覚していないのか、「サーバを起動したよ」「起動してねぇよ」「おかしいな、もう一度起動したよ」「してねぇよ」という不毛なやりとりが…
対話型に頼らないイベント駆動型の自動コーディング
また、あくまで対話型なので、ユーザの操作に起因する動作、例えば「issueを新しく起票したらそれをチェック、ブランチを切って対応、プルリク作成」といったことはできません。
一方で「新しくissue切ったから対応して」はできるので、常駐する仕組みになったらもう一歩先へ行けるかも。
cronを使ってプログラムモードで呼び出せば現状でも実現できるかと思いましたが、無理っぽい。
実際に作ってみた
ということで本題、GitHub Copilot CLIに全力で頼り切ってサービスを開発してみましょう。
ルール
- プログラムは一切書かず、全部Copilotにやってもらう
- 環境周りも可能な限り任せる、無理な部分は人力で(インフラ側とかそうなりそう)
- APIキーなど漏れては困る認証情報等の設定だけは自分でやる
- 画面イメージはdraw.ioで書いてCopilotに読み込ませる
こんなサービスを作ってみる
- 閲覧者が任意の1行コメントを書き込める匿名のミニ掲示板
- Gemini CLIを使って書き込み内容をチェック、変な書き込みはさせないようにする
- 個人情報のやりとりや暴言、一般的に掲示板で禁止されている行為
- ネットスラングなど見る人が見れば不快になりそうな場合は伏せ字にして、見るか否かは閲覧者に任せる
- D1→KVにキャッシュを行い、D1へのReadクエリの発行回数を減らす
- コメント書き込み時はD1に、参照時はKVから取得する
1. 設計書作成
- DESIGN.md - 設計書
- moderation-rules.md - モデレーションルール
- main.drawio.svg - 画面設計
サンプルとして main ブランチはこの初期状態にしています。
2. Copilotにぶん投げる
> @DESIGN.md を元に掲示板システムを作ってください。
3. 動かしつつダメ出しして修正していく
やり取りの例
> モデレーションルールは @moderation-rules.md に従って作成してください。
> 画面デザインは @main.drawio.svg を参考に調整してください。
4. 完成!
※致命的な問題が発覚しない限り、2025-12-31までは公開します。その後は削除するかも。
5. いや、やっぱここ改良したいな?
GitHub上でissueを切って「対応ブランチを作成して対応、プルリク作成まで進めてください」みたいにCopilotに依頼するとそのまま対応してくれます。
推奨される設定
開発環境の設定ファイルを作成しておく
.github/copilot-instructions.md
プロジェクトのルールとでも言えばいいのでしょうか。
このファイルに記述した内容は、特に何も指定しなくても標準でCopilotに読み込まれます。
例えばこれに以下のようなルールを定めておくと、何も言わなくても「コミットして」とお願いすればこのルールに従った形でコミットしてくれます。
### コミットメッセージ
**形式:**
```
[Copilot] <日本語の説明>
```
**例:**
```bash
git commit -m "[Copilot] Cloudflare Workers APIの実装を追加"
git commit -m "[Copilot] レスポンシブデザインのCSSを修正"
git commit -m "[Copilot] Cron設定のエラーを修正(SUN形式に変更)"
git commit -m "[Copilot] マルチアカウント対応のドキュメントを追加"
```
このファイルについての詳細はこちらで書かれているのが参考になるので是非どうぞ。
作成が面倒くさければ「日本語で返答して」「コミットメッセージにはAI生成である旨を追記して」など、あれこれやり取りしたあとに
> ここまでのやり取りから copilot-instructions.md を生成してください。
でもOK。
今回の作業を通して思った未来のエンジニアの仕事
設計メインになっていく
私の持論として 「エンジニアとは人と機械の間に立つ通訳である」 というものがあるのですが、ここについてはAIへの丸投げコーディングが一般化したとしても変わらないと考えています。
つまり、これまで行っていた 「顧客が実現したいことを理解し、仕様を決め、設計に落とし込む」 という作業は、ずっと残り続けると思います。
「できるエンジニア」としてコミュ力(顧客から要件を聞き出す能力)の重視される未来が来るのかなぁ…
Googleもそんな方向に舵を切るようなサービスを公開しました。
おまけ
作業中にCopilotがやらかしたこと
- GeminiのAPIキーを含む設定ファイルのコミット
- 即GitHubから警告メールが飛んでくる、何そのマッチポンプ
- 「再発防止してください」と言ったら設定を切り離して
.gitignoreに追加してくれた
Copilot Proを契約しているアカウントとpushするアカウントを別にしたい
今回公開しているリポジトリは会社用のメールアドレスで作ったGithubアカウントですが、サブスクを契約しているのは個人アカウントです。
コピーするしかないのかなー、面倒くさいなー、と思いつつ試行錯誤していたところ、個人アカウントでCopilotを起動しつつプロファイルを切り替えて会社用Githubアカウントにpushすることができました。
以下、copilot-instructions.md の設定から対象部分を抜粋したものです。
## GitHub 認証設定
**このリポジトリでは `.copilot-profile` に記載されているGitHubプロファイルを使用してください。**
### 設定手順
1. `.copilot-profile` ファイルからプロファイル名を読み取る
2. GitHub CLI認証: `gh auth switch -u $(cat .copilot-profile)`
3. Git設定(このリポジトリのみ):
```bash
PROFILE=$(cat .copilot-profile)
git config user.name "$PROFILE"
git config user.email "$PROFILE@users.noreply.github.com"
```
4. リモートURL: HTTPS形式を使用
リクエスト消費量に注意
何度もやり取りするため、従来のChat等で呼び出すよりも多くのリクエストを消費しがちです。
この記事を11月中に書こうと思ったらその他私的に遊びすぎて上限達してたよ。
Premium Requestsを消費しないタイプのコード補完やChatは使用できるので、「Copilot CLIが使えないと詰む」みたいな運用をしない限りは従来のコード入力支援としては使えます。
余談
後日(19日予定)、同じことを「Antigravityでやってみた」記事を公開する予定です。
今回との比較なども行いつつ書いていくので、もしよろしければそちらも読んでいただけると幸いです。
既に今回作ったリポジトリに別ブランチを切ってはありますが
【2025-12-19追記】
続きを公開しました。
https://qiita.com/three_woods/items/063ccf387f2ab0149fd4
