本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つRust Coding Conventions and Best Practicesについてです。
Rust Coding Conventions and Best Practices
Rust Coding Conventions and Best PracticesはRustらしい(idiomatic)・安全・保守性重視の production-grade Rust を書くルールです。
Rustは「安全性・速度・並列処理を重視したシステムプログラミング言語」です。もともとはMozillaが開発し、現在はRust Foundationが中心になって発展しています。
以下のページからGenaiscriptのインストールボタンをクリックして取得します。
github.com
インストールボタンを押してRust Coding Conventions and Best Practicesをダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと、CopilotはRustの所有権・型安全・API設計まで考えるRustエンジニアとして振る舞います。
以下のRustファイル全般を対象に動作します。
- **/*.rs
具体的にはCopilotは以下のような行動をとります。
Rustらしい書き方(Idiomatic Rust)を強制する
「Rustっぽくないコード」を避けるようになります。
Copilotはborrow checkerを前提に設計し始めます。
例えば以下のようにborrow を優先し、不要な allocation を避ける設計になります。
fn process(data: &str) {
println!("{}", data);
}以下はownershipを無駄に消費し、clone()を多用する悪い例です。
fn process(data: String) {
println!("{}", data.clone());
}
panicではなくResultベースになる
Copilot は 「落とすコード」ではなく「回復できるコード」 を生成します。
以下のようなパターンを推奨します。
let file = File::open(path)?;
match File::open(path) {
Ok(file) => file,
Err(e) => return Err(e.into()),
}更に以下も積極的に使うようになります。
- thiserror
- anyhow
- meaningful error types
API設計がかなり厳格になる
CopilotはRust API Guidelinesに強く寄ります。
そのためCopilotは型安全を重視します。
例えば以下のように、bool地獄を避ける設計を好みます。
enum UpdateMode {
Enabled,
Disabled,
}
非同期・並列処理がRust標準寄りになる
非同期コードを書くと、Copilotはasync/awaitを基本にします。
さらに以下を前提にしやすくなります。
- tokio
- async-std
またCPU並列処理ならrayonを提案します。
例えば以下のようなRustらしい並列化に寄ります。
items
.par_iter()
.map(process)
.collect()
テストファースト寄りになる
Copilotがテストを書こうとする率がかなり上がります。
例えば関数を書くと以下のテストを自然に生成しやすくなります。
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_parse_valid_input() {
...
}
}また以下もテスト対象にしようとします。
- edge case
- invalid input
- error handling
ドキュメントを書くAIになる
Rustはdocumentation cultureが強いので、
Copilotが以下のようなrustdoc (///)を付け始めます。
/// Parses configuration file. /// /// # Errors /// Returns an error if the file is invalid.
特にpublic APIでは以下の要素まで説明しようとします。
- エラー条件
- panic 条件
- 使用例
- safety
プロジェクト構造まで改善する
Copilot が以下のようなmodule分割を提案するようになります。
src/ ├── main.rs ├── lib.rs ├── service.rs ├── model.rs └── error.rs





