1.1K Views
May 28, 23
スライド概要
2023年5月に新横浜インディーゲームもくもく会でLTした資料です。
フリーランスのTAです。 主にもくもく会でのLT資料などをアップロードしたいと思います。
GitHubCopilot使ってみた おかひろ
自己紹介 おかひろ Twitter:@okahiro_p フリーランスのTA 個人で東方二次創作ゲーム作っています
おことわり 1ヶ月ぐらい使ってみて感じた個人の見解です(2023年5月時点) AI界隈は進歩が早いので、この資料の内容もすぐに古くなるかもしれません
GitHub Copilotとは? GitHubが公開しているAIサービス プログラムコード補完を行ってくれる AIペアプログラマーらしい 多くの言語に対応 UnityのC#も対応 おかひろはC#とPythonで使ってる 多くのIDEに対応 おかひろはRiderとPycharmで使ってる 有料(月$10) アカデミック(学生・教師など)は無料らしい 60日試用版あり
ざっくり説明 コメントを書くと、それに対応するコードを提案してくれる // 最大HP、最大攻撃力、最大魔力 public static readonly int MAX_HP = 100; public static readonly int MAX_ATTACK = 100; public static readonly int MAX_MAGIC = 100; コメントを書くと・・ こんな感じですか?を提案してくれる。 (この場合は1行ずつだった) 書く場所によって形をあわせてくれる // 最大HP、最大攻撃力、最大魔力 private float maxHp = 0; private float maxAttack = 0; private float maxMagic = 0; // 最大HP、最大攻撃力、最大魔力 public int MaxHp{ get; private set; } = 100; public int MaxAttack{ get; private set; } = 100; public int MaxMagic{ get; private set; } = 100; // 最大HP、最大攻撃力、最大魔力 [SerializeField, Header("最大HP")] private int maxHp = 100; [SerializeField, Header("最大攻撃力")] private int maxAttack = 100; [SerializeField, Header("最大魔力")] private int maxMagic = 100; 他のprivateメンバー変数の下に 書いたとき 他のプロパティの下に書いたと き 他のSerializeField メンバー変数 下に書いたとき
ざっくり説明 似たようなコードを書くときにある程度推測してくれる [SerializeField] private Button startButton = null; [SerializeField] private Button skipButton = null; [SerializeField] private Button settingsButton = null; [SerializeField] private Button stageSelectButton = null; [SerializeField] private Button hideAdButton = null; public IObservable<Unit> OnStartButtonClicked => this.startButton.OnClickAsObservable(); public IObservable<Unit> public IObservable<Unit> public IObservable<Unit> public IObservable<Unit> public IObservable<Unit> OnStartButtonClicked => this.startButton.OnClickAsObservable(); OnSkipButtonClicked => this.skipButton.OnClickAsObservable(); OnSettingsButtonClicked => this.settingsButton.OnClickAsObservable(); OnStageSelectButtonClicked => this.stageSelectButton.OnClickAsObservable(); OnHideAdButtonClicked => this.hideAdButton.OnClickAsObservable(); ここまですでに書いておき これを書いてあげると・・ 他のボタンでも同じ処理 必要ですよね?な感じで 提案してくれる (1行ずつ提案だった)
ざっくり説明
よくあるコード(と思われる)は途中から代わりに書いてくれる
FPSを画面に表示する処理を書こうとして・・・
private float fpsAccumCount;
private int fpsFrames;
private float fpsTimeLeft;
private float fps;
private void Update()
{
this.fpsTimeLeft -= Time.deltaTime;
this.fpsAccumCount += Time.timeScale / Time.deltaTime;
this.fpsFrames++;
if (this.fpsTimeLeft <= 0.0f)
{
this.fps = this.fpsAccumCount / this.fpsFrames;
this.fpsTimeLeft = this.fpsUpdateInterval;
this.fpsAccumCount = 0.0f;
this.fpsFrames = 0;
this.fpsText.text = $"FPS: {this.fps.ToString("F2")}";
}
}
Webを参考に変数宣言した
ら・・・
この辺全部提案してくれ
た
(1行ずつ提案だった)
使ってみた感じ 「私のやりたいことよくわかったね」という状況もあれば 「そんなメソッドないけどねwww」みたいなこともある HLSLも関数内なら提案してくれる 過信し過ぎは禁物 よく見ると間違っている箇所もある 文法的に間違っていないと、見落とす可能性も Copilotの提案を適用するショートカットがデフォルトでTabキーだけど、微妙 に邪魔なときがある とくにpythonでは、インデント開けたいのに提案コードが適用されることがある 「このショートカットいいよ」があれば教えて下さい
まとめ ある程度使うと、「ここはCopilotに任せるか」みたいな勘所がつかめるので、 効率化するのは間違いないと思う 個人で使っているものを会社で断りなしに使うのはやめたほうがいいかも 似たようなのにAWS CodeWhispererというのがある こっちは無料らしい(個人のみ?) 使ってる人いたら教えて下さい
ご清聴ありがとうございました