スーパー新人が入ってきた前提で、Github Copilot導入を考えてみる

# Github copilotの導入を考える
**まず、Github copilot事前情報を得て、スーパー新人が入った前提で考えてみる**

## なんか、ちまたで、スーパー新人がすごい成果を出してるらしい
* Microsoftでの開発予算は数兆円という噂（具体的な予算は発表されていないが）
* 導入で3割、4割、ソースコード開発効率が上がったという情報も
* 企業向けは月額: $19 / ユーザー / 月で使えるらしい
* Github copilotは、通常のChatGPTやMicrosoft Copilotと異なって、Githubのソースコードに特化型らしい

## Github Copilotさんが通常のツールと違うところ
### メリット
* Github Copilotさんは、対話型AIとして回答（ソースコード新規作成や修正も含め）がいつも返ってくる
* 対話型AIのため、様々なケースに使える（ペアプロ的なことが可能になる）

### デメリット
* 通常のツールは明確な目的に合わせて、結果が得られるような作りをしているため、
KPI指標がとりやすいが、Github Copilotは目的が明確化されていないため、
専用ツールのような運用で指標が取りづらい
* 回答がいつも正しいとは限らないらしい
* 導入に対して、具体的な成果が、ネット情報や口コミに限定されるので、
上方への説明が難しい
* 回答や修正ソースコードを間違えることが多い（承認が得られにくい一番の理由になりそう）
* 評価指標の違いが通常ツールと異なるためKPI指標が出しづらいコーディング速度や開発者満足度といった、
人間の生産性・心理面に依存する評価が中心になる。

## 導入の決め手
* 値段の手頃さと開発予算の大きさによる恩恵に対する期待
* 将来性（テストやセキュリティなど幅の広い分野で開発中）
* チームで効率化が常に求められる　→　チームで効率化を行う優先度が高い
* ソースコードの説明が得意
* シーケンス図の作成ができること（PlantUMLとの親和性　口コミ情報）
* 間違えに気づけるレベルのシニアエンジニアは、チームに揃っている

## 実際に導入してみて
Github Copilotさんが上手くいくケースと上手くいかないケースが発生する
ここでスーパー新人が入ってきたチームでの対応前提による説明がわかりやすいので、
まずは参画前の技術要件から見てみます

## 参画時の技術要件
* 言語化が得意
* ソースコード読み取りや記述は得意
* プログラムやフレームワークにおけるバージョンの違いの対応や、インフラでの知識は豊富
* ライブラリ、Middlewareの知識も豊富
* ShellやExcelマクロも得意
* OSの知識もある
* 実行コマンドとエラーを貼り付けると解決策を教えてくれることもある
* 間違っている回答もある

**一番ネックになるところが、「間違っている回答もある」というところになります**
エンジニアは常に、上手くいかないことを前提で進めて行くことが必須のスキルになります
間違えが多い場合は、突っ込みによる修正、エンジニアでの修正、テストと、
工数を余分に掛けることになります

**では、このスーパー新人Github Copilotさんの間違えを
少なくするにはどうしたらいいでしょうか？**

## 参画時のチーム対応
### 言語化が得意なので、言語で導いてあげる
主に、ソースコード上のコメントやPHPDocなどで説明をする
ソースコードのコントローラーなどがやっている機能や
データでの具体例を示すことが、Github Copilotさんを惑わさないコツになります
ソースコード精度を上げる点で重要になります
このあたりは人に近い動きをします

## 指示は具体的に
### 目指すべきゴール設定が明確になります
これも人への適切な対応と近い動きをします

## 一気にタスクを振らない
### タスクを小分けにして、確認を小まめにして混乱しない状況を作ってあげます
間違っている場合は、その都度を突っ込みを入れて修正をしてもらいます
これも人への適切な対応と近い動きをします

## 必要に応じて、関連あるソースコードを見に行かせる
参照するファイルやコントローラ、メソッドを指定します
その際、各参照箇所でコメントアウトなどで情報があると有能な情報として読み取って、
上手く進めてくれることが多いです
コメントの多いソースコードは、
ソースコードを読んでもわかりづらいので良くないという定説を唱える人がいますが、
これは理想論で、実際はコメントに書いたほうがわかりやすければ、
補足してあげるほうが、可読性を高めることになります
また、直さなくていいところまで修正をする場合もあるので、
修正箇所は限定するように指示します
ここも人への対応方法に近い動きをします

## 人が書くと時間が掛かるが、Github Copilotさんが書くと早いケースがある
複雑な3重ループや、複雑なIF文やCASE文などはコメントでしっかり補足してあげると
出来上がるソースコードの確実性が増します
CSVの取り込みや、APIでの、データ受信、送信系は、機械寄りのことについては特に、
ソースコード作成がとても得意です

## AWSの質問が得意
プロダクトの詳細を書き、AWSアーキテクチャーの質問をすると、
的確な回答が帰って来ることが多いです
予算面まで考慮してくれたりします

## EXCELマクロが得意
これもタスクを小分けにして、
EXCELマクロスクリプトを書いてもらいます
EXCELマクロ開発時は、データは小さめすると、
確認時間が少なくなり、開発効率が上がります

### シェルも得意
シェルを使って何かやりたいことを書くと、
すぐシェルスクリプトにしてくれます

### OSの知識もすごい
LINUX OSの選択でとても役立ちました
OSごとの特徴やサポートの期限、バージョンでの違い、
運用のしやすさなど
ネット検索で頑張って集まる知識を、
一気に確認させてくれます

## 大規模データの処理
ソースコードに限定した動きをするので、
データを直接読み込んでデータ加工や確認するなどの機能はできません
やるとしたら、
**スクリプトを作成して、大規模データ取り込み、加工するような流れになります**
確実性の高いスクリプトが完成すれば、
使用は限定的にはなりますが、
他のChatGPTに指示して、データ加工や確認をしてもらうよりも確実なものになります

## ライブラリー知識がすごいため、気軽に使える
主にpythonでのデータ解析などで使っていましたが、
あまり、プログラム知識が無くても、
実践投入までは、確実に説明をしてくれるので、手軽に使えます
バージョン管理や他言語ライブラリなどもお手の物で、詳細に教えてくれます

# 不足を感じること
### 添付ファイルの処理
* Githubソースコードは見に行きますが、添付ファイルの処理は想定されていません
画像やその他添付ファイル読み込みが得意な通常のChatGPTのほうが得意になります
* 大規模データやクエリ限界処理数の高さや自動操作では、Claudeが得意な分野になります
* 予算限りがある場合は、使用限界値の設定がGemini Flashなども対象になります

## 使える範囲が限定的
見る範囲は事前の質問内容やソースコード特化し、
持っている知識はプログラムやインフラなど、IT開発専門知識に偏っている

## 持っている知識はプログラムやインフラなど、IT開発専門知識に偏っている
これだけGithub Copilotのことを説明しておいて大変恐縮ですが、
いろいろな専門知識を必要とする上流からの開発設計への落とし込みは、
IT開発専門知識やソースコードに限定的に特化しているため、苦手部分がございます
他のAIでの専門知識を用いた上流の部分、
画像データやビッグデータなどを解析などについては
基本、ソースコードやIT開発専門というカテゴリ的に、
できないと思っていいレベルになります

あくまで、主たる目的は、ソースコードを作ることなので、
どうしても上記な苦手な処理をしたい場合、
ひたすらpythonなどでライブラリを用いてソースコードを作ることとなります
当然、エンジニアのパワー部分が大きくなってきます

# 他のAIと併用することが実践的
これだけGithub Copilotのことを説明しておいて大変恐縮ですが、
**いろいろな専門知識を必要とする上流からの開発設計への落とし込みは、**
**IT開発専門知識やソースコードに特化しているため、苦手部分があります**
他のAIでの専門知識を用いた上流の部分、画像データやビッグデータなどを解析などについては
基本、ソースコードやIT開発専門という縛り的に、できないと思っていいレベルになります
**やはり苦手なところを補足するには、他AIの力が必要になります**

# 他のAIと併用する場合に注意すること
* 機密情報入力は避ける
* 個人情報の扱いには気をつける（基本打ち込まないか、ソースコード作成に使う場合は、データをダミーに変える）
* 企業での利用においては、
オフにできる環境やサービスの選択を基本とする
* インプットに使うデータが著作権を侵害しないよう注意する