こんにちは。ココネ株式会社でサーバーエンジニアをしているkkuchiです。
2023年、私の仕事における最も大きなインパクトは
GitHub Copilotの導入でした。
弊社ではGitHub Copilot活用の動きが進んでおり、
日々の業務の効率化や、コードの品質向上に貢献してくれています。
そこでCocone Advent Calendar 20238日目となる本記事では、
VSCodeの拡張機能GitHub Copilot Chatを中心として
GitHub Copilotさんと一緒にエンジニアリングを行うためのTipsをお伝えできればと思います。
ちょっとした事ばかりですが、何かの役に立てば幸いです。
前提
GitHub Copilot本体ののコード提案も大変便利なのですが、
今回はあくまでもGitHub Copilot Chatを中心にお話します。
そのため、
拡張機能GitHub Copilot ChatがインストールされたVSCodeの使用を前提としています。
あらかじめご了承下さい。
Tips1:質問はインラインチャットではなく、サイドバーから行う
色々試してみた所感として、サイドバーのチャットで聞くほうが
インラインチャットよりも提案の幅が広いように思えます。
例として以下のシェルスクリプトを使います。
TZ=Asia/Tokyo date +"%Y-%m-%dT%H:%M:%S.%3N%z"
JSTの現在日時をISO8601形式(ミリ秒あり)で出力したいのですが、
ミリ秒部分がうまく出力されません。修正してもらいます。
お願いすること
Macで実行しましたが、ミリ秒が出力されません。修正して下さい。
インラインでの修正
TZ=Asia/Tokyo date +"%Y-%m-%dT%H:%M:%S.%3N%z" | sed 's/.\{4\}$//'
直りませんでした。しかもタイムゾーン部分がなくなってしまった...
サイドバーでの修正
回答がこちら。
Macのdateコマンドは、Linuxのdateコマンドとは異なり、ミリ秒を直接サポートしていません。しかし、pythonやrubyなどの他のツールを使用して同じ結果を得ることができます。
以下に、Pythonを使用して現在の日時を同じフォーマットで出力する方法を示します。
python -c 'import datetime; print(datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f%z"))'このコマンドは、Pythonのdatetimeモジュールを使用して現在の日時を取得し、指定されたフォーマットで出力します。%fはマイクロ秒を表し、%zはタイムゾーンを表します。ただし、このコマンドはマイクロ秒単位で時間を出力するため、ミリ秒単位に変換するためには出力を調整する必要があります。
これでミリ秒が出力されるようになりました。
(タイムゾーンを表す数字部分がなくなってしまったため、別の修正は必要ですが)
所感
サイドバーの良いところは、理由の説明や出力したコードの説明があることです。
上記のケースで言えば、
Macのdateコマンドではミリ秒のフォーマットができないという原因が分かったのが大きかったです。
(調査の時間がだいぶ削減できました)
インラインチャットの使い所
じゃあインラインチャットは使わない方がいいの?と思うかもしれませんが、
そういうわけではありません。
インラインチャットは、サイドバーからの質問に比べて応答が早いと感じます。
そのため「コードの修正をしたい」ケース、その中でも特に
- 限定的な範囲
- 「どう変更するか」のイメージがついている
- 手を動かす手間を省きたい
といった状況ではとても便利です。
Tips2:もう一声!と思ったら、何回か質問してみる
この記事を書くにあたり、色々試してみたのですが
同じ質問をしたとしても、提案されるコードはちょいちょい変わります。
出力されたコードに「おや?」と思った時は、もう一度同じ質問をしてみると
欲しい答えに近づけるかもしれません。
本記事を書くにあたり、同じ質問を何度も投げかけたり
ちょっと言葉を変えて質問をしてみたりと、時間を使って色々試してみたのですが
その時々で提案されるコードがガラッと変わることがありました。
Tips3:質問の粒度を調整してみる
ChatGPTはじめ、他のAIサービスでも同様かと思いますが
質問する際に、どのくらい詳細に情報を渡すかによって、提案されるコードが変わってきます。
またまた日時を出力するシェルスクリプトを例に出します。
ざっくりした投げかけ
現在日時を出力するシェルスクリプトを書いて下さい
#!/bin/bash
# 現在の日時を取得
date
実行結果がこちら。
何も指定していないので、dateコマンドのデフォルト出力です。
2023年 12月 7日 木曜日 21時09分08秒 JST
フォーマットを名前で指定
現在日時をISO8601形式で出力するコードを書いて下さい
#!/bin/bash
# 現在の日時をISO 8601形式で取得
date -u +"%Y-%m-%dT%H:%M:%SZ"
実行結果がこちら。
秒までは想定通りですが、「ミリ秒が欲しい」「JSTにしてほしい」「タイムゾーンの数字4桁が欲しい」など、もう一声というところです。
2023-12-07T12:09:46Z
フォーマットの実例を渡す
JSTの現在日時を出力するコードを書いて下さい。
フォーマット例→"2023-12-01T12:00:00.000+0900"
#!/bin/bash
# JSTの現在の日時を取得
TZ=Asia/Tokyo date +"%Y-%m-%dT%H:%M:%S.%3N%z"
実行結果がこちら。
前述のミリ秒問題以外は想定通りになりました。
2023-12-07T21:09:57.3N+0900
所感
やはり詳細に条件を指定をした方が、出力されるコードも理想に近いものになります。
(当たり前ですが...)
とはいえ、適当な質問から意図を汲んでくれることも多いため
- 考えるのが面倒な時は、ざっくりした質問をする
- 欲しい答えが得られなければ、細かい条件を伝えていく
が良さそうです。
まとめ・最後に
以上、GitHub Copilot Chatさんと二人三脚でエンジニアリングを進めるための
ちょっとしたTipsをお届けしました。
色々試してみての結論をざっくりとまとめると
誤解を与えないよう明確な文章で伝えれば、理想に近い答えが得られる
という印象です。
人間同士でコミュニケーションを取る時と同じですね。
人間と話す時と同じ考え方が、AIへの意思伝達においても通用する
というところに、AIの劇的な進化をひしひしと感じました。