GitHub Copilot で遊ぶ

no extension

GitHub Copilot の無料版(制限あり)が開放されて VS Code 上で使えるようになった。

といってもコメントの補完とかコミットメッセージくらいにしか使ってないけど。 英語不得手なので,これだけでもめっちゃ助かっている。

ちょっと思いついて github.com/goark/koyomi/value パッケージに曜日(Weekday)型を追加しようと思うのだが,試しに GitHub Copilot に手伝ってもらうことにした。

GitHub Copilot で遊ぶ

まず  Ctrl + I  でプロンプトを表示し「time.Weekday と同等な機能で日本語の曜日名を出力する型」で問い合わせてみる。

time.Weekday と同等な機能で日本語の曜日名を出力する型

おー。 一通り提示してくれるんだな。 既に作っている koyomi/value.DateJp 型と関連するメソッドも追加されている。

これはこれで(エラーもバグもないし)使えなくもないのだが,いくつか調整したい。

  1. WeekdayJp 型の基底型は int ではなく time.Weekday としたい
    • 機能上のメリットがあるわけではないが「文芸」的に WeekdayJp 型と time.Weekday 型が「関連」することを明示したい(Go に「継承」はない)
  2. 曜日名の出力メソッドは String(), ShortString() ではなく StringJp(), ShortStringJp() としたい
    • String() メソッドは time.Weekday と同じ機能にする
  3. WeekdayJp 型の値が SundaySaturday 以外なら,曜日名の出力は 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() メソッドは

コード補完

という感じにコードを提案してくる。 この状態で  Tab  キー押下で確定する。 テストコードも関数名から推測して妥当なコードを提案してくる。 変数・定数もクラス・メソッド名も名前が大事ってことですね(笑)

コメントの補完も同様。

コメント補完

ドキュメント生成もやってくれる。

ドキュメント生成

ATOM や VS Code の使い始めの頃はスニペットベースのコード補完機能に感動したものだが, Copilot によって柔軟なコード補完や生成ができるのマジ助かる。 今回はコードレビュー機能等は紹介しないが,ちょろんと試した感じではなかなかいい感じである。 人間にレビューを投げる前に Copilot 相手にレビューを行うのはアリかもしれない。

「自律」機械は(今のところ)存在しない

教科書に載っているサンプルコード程度ならともかく,プログラムコードに 唯一の正解 はない。 今回のような小さなコードですらそうなのだ。 Copilot を含む生成 AI による提案を受け入れるか否かについては「人」による判断が不可欠だし,判断を行うためには,扱う対象に関する知識・技能・技術が要求される。 「自律」的な判断を行うのは今なお,機械ではなく,人の側なのである。

自立とは、仮想代理人ソフトウェアであるところのエージェントが自ら動き、誰の力も借りずに意思決定できることを言う。 [...] 一方、自律というのは哲学的な意味であり、自らが行動する際の基準と目的を明確を持ち、自ら規範を作り出すことができることをいう。
今、世の中で懸念されているのは、自立ではなく自律の方だが、学習能力を与えられ、自らのプログラムを改善できるようになっても、機械が自律することは考えられない。 なぜなら、機械は結局、人間に与えられた理論やルールにのっとって行動することになるからである。

GitHub Copilot をはじめとする最近流行りの生成 AI の機能とは「翻案の大量生産」であり,その膨大な翻案空間から何をどうやって拾い上げるかについては,アルゴリズムの設計を含め(今のところ)人の側に委ねられている1。 そういう意味で GitHub Copilot が文字通りコパイロット(ナビゲーション)の立ち位置に徹しているのは上手い割り切り方だと思う。

生成 AI の時代に求められる人材とはプロンプトを駆使(して翻案空間を放浪)する技能を持つ人ではなく(積極的に利用しつつ)生成 AI の提案に NO と言える見識と技術を持つ「狂狷の徒」ではないだろうか。

ブックマーク

参考図書

photo
そろそろ、人工知能の真実を話そう (早川書房)
ジャン=ガブリエル ガナシア (著), 小林 重裕・他 (翻訳), 伊藤 直子 (監修)
早川書房 2017-05-25 (Release 2017-05-31)
Kindle版
B071FHBGW8 (ASIN)
評価     

シンギュラリティは起きない。

reviewed by Spiegel on 2016-07-02 (powered by PA-APIv5)

photo
日経サイエンス2025年3月号 [雑誌]
日経サイエンス (編集)
日経サイエンス 2025-01-24 (Release 2025-01-24)
Kindle版
B0DTT1L1KL (ASIN)
評価     

Kindle 版は固定レイアウトなのでブラウザ(Kindle Cloud Reader)で読める。特集は「ことばが世界を作る」と「CO2回収の現実味」。

reviewed by Spiegel on 2025-02-03 (powered by PA-APIv5)

photo
効率的なGo ―データ指向によるGoアプリケーションの性能最適化
Bartłomiej Płotka (著), 山口 能迪 (翻訳)
オライリー・ジャパン 2024-02-24
単行本(ソフトカバー)
4814400535 (ASIN), 9784814400539 (EAN), 4814400535 (ISBN)
評価     

版元で Ebook を買える。Go言語のリファレンス本ではない。フトウェア工学,プログラミング(の考え方)を学ぶ教科書的な位置づけかなぁ。

reviewed by Spiegel on 2024-04-21 (powered by PA-APIv5)

photo
著作権は文化を発展させるのか: 人権と文化コモンズ
山田 奨治 (著)
人文書院 2021-07-29 (Release 2021-07-29)
Kindle版
B099RTG3J7 (ASIN)
評価     

著作権を「ユーザーの人権」という観点から捉え直す。その後 文化→コモンズ→文化コモンズ と進み,本当の意味で「文化の発展に寄与する」とはどういうことか考察していく。

reviewed by Spiegel on 2022-10-23 (powered by PA-APIv5)

photo
社会は情報化の夢を見る (河出文庫)
佐藤俊樹 (著)
河出書房新社 2010-09-03 (Release 2016-07-29)
Kindle版
B01J1I8PRQ (ASIN)
評価     

1996年に出版された『ノイマンの夢・近代の欲望―情報化社会を解体する』の改訂新装版。しかし内容はこれまでと変わりなく,繰り返し語られる技術決定論を前提とする安易な未来予測を「情報化」社会論だとして批判する。

reviewed by Spiegel on 2015-09-15 (powered by PA-APIv5)

作業中の BGV (メン限配信以外)

ReGLOSS の五色のバラバラな声がパズルのようにカチッと填まると本当にかっこいいよね。


  1. 生成 AI の背後にある翻案元のコンテンツやアルゴリズムと知財権との関係についてはここでは知らないふりをする。 ↩︎