8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CoconeAdvent Calendar 2023

Day 8

GitHub Copilot Chat活用のこまごまTips

Last updated at Posted at 2023-12-08

こんにちは。ココネ株式会社でサーバーエンジニアをしている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の劇的な進化をひしひしと感じました。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?