GitHub Copilot で遊ぶ
GitHub Copilot の無料版(制限あり)が開放されて VS Code 上で使えるようになった。
といってもコメントの補完とかコミットメッセージくらいにしか使ってないけど。 英語不得手なので,これだけでもめっちゃ助かっている。
ちょっと思いついて github.com/goark/koyomi
/value
パッケージに曜日(Weekday)型を追加しようと思うのだが,試しに GitHub Copilot に手伝ってもらうことにした。
GitHub Copilot で遊ぶ
まず Ctrl
+ I
でプロンプトを表示し「time
.Weekday
と同等な機能で日本語の曜日名を出力する型」で問い合わせてみる。
![time.Weekday と同等な機能で日本語の曜日名を出力する型](./github-copilot-prompt.png)
おー。
一通り提示してくれるんだな。
既に作っている koyomi
/value.DateJp
型と関連するメソッドも追加されている。
これはこれで(エラーもバグもないし)使えなくもないのだが,いくつか調整したい。
WeekdayJp
型の基底型はint
ではなくtime
.Weekday
としたい- 曜日名の出力メソッドは
String()
,ShortString()
ではなくStringJp()
,ShortStringJp()
としたいString()
メソッドはtime
.Weekday
と同じ機能にする
WeekdayJp
型の値がSunday
〜Saturday
以外なら,曜日名の出力はtime
.Weekday.String()
メソッドと同じにしたい
というわけで,最終的には以下のようなコードにした。
// WeekdayJp is a type that represents the days of the week in the Japanese context.
// It is based on the time.Weekday type from the standard library.
type WeekdayJp time.Weekday
const (
Sunday WeekdayJp = WeekdayJp(time.Sunday) + iota // 日曜日
Monday // 月曜日
Tuesday // 火曜日
Wednesday // 水曜日
Thursday // 木曜日
Friday // 金曜日
Saturday // 土曜日
)
var weekdayNames = [7]string{"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"}
var weekdayShortNames = [7]string{"日", "月", "火", "水", "木", "金", "土"}
// String returns the English name of the Japanese weekday (WeekdayJp)
// by converting it to the standard time.Weekday type and calling its String method.
func (w WeekdayJp) String() string {
return time.Weekday(w).String()
}
// StringJp returns the Japanese name of the WeekdayJp if it is between Sunday and Saturday.
// If the WeekdayJp is out of this range, it returns the standard time.Weekday string representation.
func (w WeekdayJp) StringJp() string {
if w < Sunday || w > Saturday {
return time.Weekday(w).String()
}
return weekdayNames[w]
}
// ShortStringJp returns the short Japanese name of the WeekdayJp.
// If the WeekdayJp is not within the valid range (Sunday to Saturday),
// it returns the default string representation of the time.Weekday.
func (w WeekdayJp) ShortStringJp() string {
if w < Sunday || w > Saturday {
return time.Weekday(w).String()
}
return weekdayShortNames[w]
}
たとえば String()
メソッドは
![コード補完](./autocomplete-code.png)
という感じにコードを提案してくる。
この状態で Tab
キー押下で確定する。
テストコードも関数名から推測して妥当なコードを提案してくる。
変数・定数もクラス・メソッド名も名前が大事ってことですね(笑)
コメントの補完も同様。
![コメント補完](./autocomplete-comment.png)
ドキュメント生成もやってくれる。
![ドキュメント生成](./generate-docs.png)
ATOM や VS Code の使い始めの頃はスニペットベースのコード補完機能に感動したものだが, Copilot によって柔軟なコード補完や生成ができるのマジ助かる。 今回はコードレビュー機能等は紹介しないが,ちょろんと試した感じではなかなかいい感じである。 人間にレビューを投げる前に Copilot 相手にレビューを行うのはアリかもしれない。
「自律」機械は(今のところ)存在しない
教科書に載っているサンプルコード程度ならともかく,プログラムコードに 唯一の正解 はない。 今回のような小さなコードですらそうなのだ。 Copilot を含む生成 AI による提案を受け入れるか否かについては「人」による判断が不可欠だし,判断を行うためには,扱う対象に関する知識・技能・技術が要求される。 「自律」的な判断を行うのは今なお,機械ではなく,人の側なのである。
自立とは、仮想代理人ソフトウェアであるところのエージェントが自ら動き、誰の力も借りずに意思決定できることを言う。 [...] 一方、自律というのは哲学的な意味であり、自らが行動する際の基準と目的を明確を持ち、自ら規範を作り出すことができることをいう。
今、世の中で懸念されているのは、自立ではなく自律の方だが、学習能力を与えられ、自らのプログラムを改善できるようになっても、機械が自律することは考えられない。 なぜなら、機械は結局、人間に与えられた理論やルールにのっとって行動することになるからである。
GitHub Copilot をはじめとする最近流行りの生成 AI の機能とは「翻案の大量生産」であり,その膨大な翻案空間から何をどうやって拾い上げるかについては,アルゴリズムの設計を含め(今のところ)人の側に委ねられている1。 そういう意味で GitHub Copilot が文字通りコパイロット(ナビゲーション)の立ち位置に徹しているのは上手い割り切り方だと思う。
生成 AI の時代に求められる人材とはプロンプトを駆使(して翻案空間を放浪)する技能を持つ人ではなく(積極的に利用しつつ)生成 AI の提案に NO と言える見識と技術を持つ「狂狷の徒」ではないだろうか。
ブックマーク
-
GitHub、VS Code上で「Copilot Free」開始 無料で月2000回コード補完 - Impress Watch
-
無償ユーザーも対象 ~「Gemini 2.0 Flash」が「GitHub Copilot」で利用できるように - 窓の杜
-
「Visual Studio Code 1.97」が公開 ~新AI支援機能「Copilot NES」をプレビュー - 窓の杜
-
GitHub Copilot Agent Modeが登場。タスクを与えると自律的にプログラミング、テストコードも修正、テストが失敗すればデバッグも - Publickey
-
生成AIによりプログラマの仕事はなくなるのか? 「私はそうは思わない」とティム・オライリー氏。プログラマの需要はさらに増えると - Publickey
参考図書
- そろそろ、人工知能の真実を話そう (早川書房)
- ジャン=ガブリエル ガナシア (著), 小林 重裕・他 (翻訳), 伊藤 直子 (監修)
- 早川書房 2017-05-25 (Release 2017-05-31)
- Kindle版
- B071FHBGW8 (ASIN)
- 評価
シンギュラリティは起きない。
- 日経サイエンス2025年3月号 [雑誌]
- 日経サイエンス (編集)
- 日経サイエンス 2025-01-24 (Release 2025-01-24)
- Kindle版
- B0DTT1L1KL (ASIN)
- 評価
Kindle 版は固定レイアウトなのでブラウザ(Kindle Cloud Reader)で読める。特集は「ことばが世界を作る」と「CO2回収の現実味」。
- 効率的なGo ―データ指向によるGoアプリケーションの性能最適化
- Bartłomiej Płotka (著), 山口 能迪 (翻訳)
- オライリー・ジャパン 2024-02-24
- 単行本(ソフトカバー)
- 4814400535 (ASIN), 9784814400539 (EAN), 4814400535 (ISBN)
- 評価
版元で Ebook を買える。Go言語のリファレンス本ではない。フトウェア工学,プログラミング(の考え方)を学ぶ教科書的な位置づけかなぁ。
- 著作権は文化を発展させるのか: 人権と文化コモンズ
- 山田 奨治 (著)
- 人文書院 2021-07-29 (Release 2021-07-29)
- Kindle版
- B099RTG3J7 (ASIN)
- 評価
著作権を「ユーザーの人権」という観点から捉え直す。その後 文化→コモンズ→文化コモンズ と進み,本当の意味で「文化の発展に寄与する」とはどういうことか考察していく。
- 社会は情報化の夢を見る (河出文庫)
- 佐藤俊樹 (著)
- 河出書房新社 2010-09-03 (Release 2016-07-29)
- Kindle版
- B01J1I8PRQ (ASIN)
- 評価
1996年に出版された『ノイマンの夢・近代の欲望―情報化社会を解体する』の改訂新装版。しかし内容はこれまでと変わりなく,繰り返し語られる技術決定論を前提とする安易な未来予測を「情報化」社会論だとして批判する。
作業中の BGV (メン限配信以外)
ReGLOSS の五色のバラバラな声がパズルのようにカチッと填まると本当にかっこいいよね。