VSCode + GitHUB Copilot
VSCodeを使用することで、AI(GitHUB Copilot)をArduinoやM5Stackなどのマイコンのスケッチ作成に利用する事が出来ます。AI(GitHUB Copilot)が利用できるとスケッチ作成が大変楽になります。
GitHUB Copilotの利用にはGitHUBのアカウントが必用です。
GitHUBの利用料金
無料版(GitHub Copilot Free)
無料版は、以下の特徴を持つ入門向けプランです。
月間2000回のコード補完が可能。
月間50回のCopilot Chatが利用可能。
無料版は、GitHubアカウントを持つ個人ユーザーが対象で、試用や学習目的に適しています。
有料版(GitHub Copilot Pro, Business, Enterprise)
Proプラン(個人向け) 月額10ドルまたは年額100ドル。
無制限のコード補完やCopilot Chatが利用可能。 複数エディタ対応やCLI補完機能を提供。
Businessプラン(チーム向け) ユーザーあたり月額19ドル。
Proの機能に加え、セキュリティ制御や監査ログなどの管理機能を提供。 チームでの効率的な開発に最適。
Enterpriseプラン(大規模組織向け) ユーザーあたり月額39ドル。
Businessの機能に加え、独自データの活用や高度なガバナンス機能を提供。
専任サポート付きで、セキュリティ要件が厳しい環境に適応。
無料版(GitHub Copilot Free)
無料版は、以下の特徴を持つ入門向けプランです。
月間2000回のコード補完が可能。
月間50回のCopilot Chatが利用可能。
無料版は、GitHubアカウントを持つ個人ユーザーが対象で、試用や学習目的に適しています。
有料版(GitHub Copilot Pro, Business, Enterprise)
Proプラン(個人向け) 月額10ドルまたは年額100ドル。
無制限のコード補完やCopilot Chatが利用可能。 複数エディタ対応やCLI補完機能を提供。
Businessプラン(チーム向け) ユーザーあたり月額19ドル。
Proの機能に加え、セキュリティ制御や監査ログなどの管理機能を提供。 チームでの効率的な開発に最適。
Enterpriseプラン(大規模組織向け) ユーザーあたり月額39ドル。
Businessの機能に加え、独自データの活用や高度なガバナンス機能を提供。
専任サポート付きで、セキュリティ要件が厳しい環境に適応。
VSCode
MicrosoftStoreから"VSCode"で検索してインストールすることが出来ます。通常 VSCodeと略されますが正式には Visual Studio Codeです。
似た名称の Visual Studio Communityとは別物ですので注意してください。
セトアップ時にGitHUBアカウントの設定項目が表示されます。
メニューを日本語化します。拡張機能メニュー ( [Cntl]+[Shift]+X )から Japanese で検索して
Japanese Language Pack for Visual Studio Code
をインストールします。
右下に [Change Language and restart]が表示されますので、クリックしてVSCodeを再起動すると
メニュー表記が日本語に変わります。
ArduinoIDEとの連携
ArduinoIDEと連携するために拡張機能メニュー からArduino Community Edition
C/C++
C/C++ Extension Pack
をインストールします。
※ArduinoIDEまたはArduinoCLIがインストールされている事が前提です。
※ArduinoIDEをMicrosoftStoreからインストールしている場合、連携がうまく動作しない可能性があります。
※連携がうまく動作しない場合はArduino公式のインストーラを使用してArduinoIDEをインストールしなおす事をお勧めします。
スケッチの作成と書き込み
Arduinoのスケッチを作成する手順は1) ArduinoIDEで作成する場合と同じように、スケッチ(xxx.ino)と同盟のフォルダを作成し、その中にスケッチファイル(xxx.ino)を作成する。
2) 右下のプロパティをクリックして対象ボードを選択する。※例ではArduinoUNOを選択しています。
3) 接続ポートを選択する。※マイコンボードを接続していないと選択できません。
メニューの[表示] - [コマンドパレット...]を開くとショートカットを確認できます。USB接続しているマイコンにスケッチをコンパイルして書き込むには
[Cntl] + [Alt] + U を押下するか、コマンドパレットから Arduino:Upload を選択します。
GitHUB Copilotの無料プランでは、1ケ月間に利用できる回数に制限があります。コードの補完やサジェストが鬱陶しい(不要な)場合はこのダイアログで利用/停止が出来ます。
実際どれくらい使えるのか?
コード補完をフルに利用して OLED SSD1306 にラインを描くスケッチを作成してみました。スケッチの先頭に作成する機能をコメント表記します。
普通にやるとAdaflutのGFXライブラリを使って、ライブラリ関数を呼び出すだけで お終いになるので、外部ライブラリを使わないとしておきます。
/**
* SSD1306 (I2C) OLED Display Driver Example
* For Arduino UNO
* Without using any external libraries
*/
* SSD1306 (I2C) OLED Display Driver Example
* For Arduino UNO
* Without using any external libraries
*/
以降、コメンに合わせたコードが提案されるので [Tab]キーを押して全て採用してゆきます。
出来上がったコードをArduino UNOに書き込んで実行すると、実行結果はこうなりました。
画面の一部しか描画されていません。これはArduinoIDEのWireクラスを使用した場合の制限「I2Cで一度に送信できるのは32Byte」の制限に引っかかっている為です。
AIが生成したコードでは、この関数で書き込みの成功確認 or 一度に書き込むデータ数の制限を行っていない為です。
ちゃんと自前でスケッチが書けるだけの知識がないと何が問題なのか把握するのは難しいです。
void ssd1306_data(const uint8_t* data, size_t size) {
Wire.beginTransmission(SSD1306_I2C_ADDRESS);
Wire.write(0x40); // Co = 0, D/C# = 1
for (size_t i = 0; i < size; i++) {
Wire.write(data[i]);
}
Wire.endTransmission();
}
Wire.beginTransmission(SSD1306_I2C_ADDRESS);
Wire.write(0x40); // Co = 0, D/C# = 1
for (size_t i = 0; i < size; i++) {
Wire.write(data[i]);
}
Wire.endTransmission();
}
ここで、Copilot Chatに「画面が一部しか描画されません、修正してください。」と指示すると一部しか描画されない理由と修正案を提示してきます。※この一連の流れはAI利用上の問題、ポチョムキン理解の例になると思います。
※原因の解説も評価・修正もできるのに、生成時には間違ったコードを書いています。
※AIを利用する上で知っておかなければならないAIの問題点
※ハルシネーション
※正しい回答を特定できない質問に対して、最も正解する確率の高い回答を返す現象。
※マークシート式のテストで回答しなければ0点だけど、適当に塗っておけば正解する確率は0ではない。そんな感じの理屈で、一見ありそうなデタラメなな回答を捏造する現象。
※ポチョムキン理解
※LLMモデルでは、問題の解説、与えられた回答の成否は正しく分析できるが、回答自体を正しく生成する事ができない。
※今回の例のように生成結果が間違っている原因と守勢方法を回答できるのに、生成時には間違ったコード生成する現象。
※Worklop
※AIが生成した間違った生成物の修正にかかる時間がAIを使わない場合の作成時間を上回る現象
修正提案を受け入れて修正したスケッチでの実行結果。正しくラインが描画できています。
AIが生成したコードを内容を理解せずに丸呑みするのは危険ですが、サンプルコードとして利用するのはアリだと思います。