[GitHub Copilot] copilot-instructions.md

こちらページは、GitHub Copilot のリポジトリ カスタム命令を追加する - GitHub Docs および「GitHub Copilotを使っている人は全員"copilot-instrucions.md"を作成してください #githubcopilot - Qiita」記事を参考に、実際に実施しつつメモを残していく、という内容です。

 

 

 

1. はじめに

GitHub Copilot を使用している皆さんは .github/copilot-instructions.md というファイルをご存じでしょうか。

このファイルにリポジトリ用のカスタム命令やルールを記載しておくことで、あなたは GitHub Copilot の AI 支援を効率よく受けることができるようになります。

GitHub オリジナルの記事は、下記を参照してください。

GitHub Copilot のリポジトリ カスタム命令を追加する - GitHub Docs

 

 

2. copilot-instructions.md の紹介

"copilot-instructions.md" は、対象リポジトリにおける GitHub Copilot への指示書です。このファイルは、GitHub Copilot がユーザーの指示を処理する前に真っ先に読み込む指示書として機能します。特別な設定は不要で、プロジェクトの .github フォルダに copilot-instructions.md という名前で置くだけで認識されます。 Copilot は、この指示書を読んでからユーザーの指示に応えるため、この "copilot-instructions.md" を作りこむほどプロジェクトの期待に沿った理想の回答を得やすくなります。

 

 

3. copilot-instructions.md を作成する

難しく考えずに、c++ 用の "copilot-instructions.md" を Google AI (Jemini?) に 「c++ 用の copilot-instructions.md を作成して」 とお願いして作成してもらいました。
これを元にアレンジして使用してみるあたりから始めてみたいと思います。

 

"copilot-instructions.md" サンプル

markdown
# Instructions for GitHub Copilot for this C++ project

## 全般的なガイドライン

*   **言語バージョン:** すべてのコードは C++17 標準に準拠してください。
*   **命名規則:**
    *   関数、変数、メンバー変数は `snake_case` を使用してください。
    *   クラス、構造体、列挙型は `PascalCase` を使用してください。
    *   定数は `UPPER_SNAKE_CASE` を使用してください。
*   **コードの書式設定:**
    *   インデントはスペース4つを使用してください。
    *   `if`, `for`, `while` などの制御文では、必ず波括弧 `{}` を使用してください。
*   **コメント:**
    *   すべての公開API(クラス、関数)には、その目的、引数、戻り値を説明するDoxygen形式のコメントを記述してください。
    *   複雑なロジックや意図が不明瞭な箇所には、行コメントを適宜追加してください。
*   **エラー処理:**
    *   関数が失敗する可能性がある場合は、例外をスローするか、エラーコードを返すことを明確にしてください。
    *   リソースを解放する必要がある場合は、RAII (Resource Acquisition Is Initialization) パターンを使用してください。

## C++固有の指示

### メモリ管理
*   生のポインタではなく、`std::unique_ptr` や `std::shared_ptr` を優先的に使用してください。
*   配列の場合は `std::vector` を、固定長の場合は `std::array` を使用してください。

### コンテナ
*   コンテナを使用する場合、可能な限り `const`参照を渡すようにしてください。
*   パフォーマンスが重視される場面を除き、イテレータの無効化に注意してください。

### デザインパターン
*   このプロジェクトでは、以下のデザインパターンを積極的に活用してください。
    *   シングルトン
    *   ファクトリーパターン
    *   オブザーバーパターン

### ヘッダーファイル
*   ヘッダーファイルにはインクルードガード (`#pragma once` または `#ifndef/#define/#endif`) を追加してください。
*   可能な限り、ヘッダーファイルでの依存関係を最小限に抑えるようにしてください。

## 具体的なタスクの指示

### ユニットテスト
*   新しい機能を追加する際には、`test/` ディレクトリにユニットテストを記述してください。
*   テストフレームワークとして Google Test を使用してください。

### ドキュメンテーション
*   公開されたAPIにはDoxygen形式のドキュメントを生成してください。
*   Copilotは、新しいコードのドキュメントを生成する際に、上記のルールに従ってください。

### リファクタリング
*   既存のコードをリファクタリングする際には、Copilotはパフォーマンスの向上、コードの簡素化、および可読性の向上を優先してください。
    
## 禁止事項
*   `#define`マクロは、インクルードガードを除いて使用しないでください。
*   `constexpr`や`enum class`を優先してください。
*   グローバル変数の使用は避けてください。
*   生のCスタイル配列や`void*`は使用しないでください。

## 例 

### 良い例
```cpp
// good_example.h
#pragma once 
#include <iostream>

/**
 * @brief 挨拶を管理するクラス
 */
class Greeter {
public:
    Greeter(const std::string& name); 

    /**
     * @brief 挨拶を出力する
     */
    void say_hello() const;

private: 
    std::string m_name; 
}; 

// good_example.cpp 
#include "good_example.h"

Greeter::Greeter(const std::string& name)
    : m_name(name) {}

void Greeter::say_hello() const {
    std::cout << "Hello, " << m_name << "!" << std::endl; 
}


### 悪い例
```cpp
// bad_example.h
#ifndef BAD_EXAMPLE_H
#define BAD_EXAMPLE_H

// マクロは使用しない 
#define GREETING "Hello" 

class BadGreeter { 
public: 
    void say_hello(char* name);   // Cスタイル配列と生ポインタ 

private: 
    // メンバー変数にプレフィックスがない 
    std::string name; 
}; 
#endif // BAD_EXAMPLE_H 


// bad_example.cpp 
#include "bad_example.h" 

void BadGreeter::say_hello(char* name) { 
    // グローバル変数を避ける 
    std::cout << GREETING << ", " << name << "!" << std::endl; 
} 

 

このファイルの使い方

  1. 上記の内容をコピーし、プロジェクトのルートディレクトリに .github/copilot-instructions.md という名前で保存します。
    フォルダ .github 中に保存すること、ご注意ください。
  2. プロジェクトのコーディングスタイルや要件に合わせて、このファイルを編集します。
  3. このファイルをリポジトリにコミットし、他の開発者と共有します。

 

 

4. どんなことを書く?

4-1. 全般的なガイドライン、前提条件

「回答は必ず日本語で」や「100行以上の大規模な変更を行う場合は、先に変更計画を提案してください」というような全般的なルールを記載します。

 

4-2. アプリ概要

このプロジェクトが作成するアプリケーションの目的、主要な機能、を簡潔に記載します。

AI がプロジェクト全体像を理解することで、無駄なファイル探索を減らしてより的確な回答を行えるようにします。

 

4-3. 使用している言語 固有の指示

「C++ を使用します」や[言語バージョン: すべてのコードは C++17 標準に準拠してください」などです。

上記のAIが作成した例に記載の内容は、多くが本項目に該当しますね。

 

4-4. フレームワーク、主要なライブラリ

フレームワーク、主要なライブラリとそれらのバージョンを明記します。これにより、Copilotがプロジェクトで使われていないライブラリを勝手にimportしたり、古い構文を提案したりするのを防げます。

 

4-5. ディレクトリ構成

主要なディレクトリと、それぞれの役割を説明します。

「src/features には機能ごと、src/share dには共通コンポーネント」などと記述することで、Copilot が新しいファイルを適切な場所に作成・提案するようになります。

 

4-6. アーキテクチャ・設計指針

プロジェクトで採用している設計指針(例: MVVM、Atomic Design、Clean Architectureなど)を記載します。

これを定義しないと、AIが既存の設計と一貫性のないコードを生成してしまう可能性があります。チーム開発では特に重要です。

 

4-7. テスト方針

使用しているテストフレームワーク(Google Test, Vitest, Jest, RSpec など)、テストの記述方針(「テストコードは __tests_ _配下に置く」「カバレッジは80%を目指す」など)を記載します。

 

4-8. アンチパターン

「こう書かないでほしい」というルールを記載することも有効です。

例えば、「default export は禁止」「any 型は原則使用禁止」などプロジェクト固有の禁止事項を明記しましょう。

 

 

5. copilot-instructions.md サンプル

5-1. c++

markdown
# Instructions for GitHub Copilot for this C++ project

## 全般的なガイドライン

*   **言語バージョン:** すべてのコードは C++17 標準に準拠してください。
*   **命名規則:**
    *   関数、変数、メンバー変数は `snake_case` を使用してください。
    *   クラス、構造体、列挙型は `PascalCase` を使用してください。
    *   定数は `UPPER_SNAKE_CASE` を使用してください。
*   **コードの書式設定:**
    *   インデントはスペース4つを使用してください。
    *   `if`, `for`, `while` などの制御文では、必ず波括弧 `{}` を使用してください。
*   **コメント:**
    *   すべての公開API(クラス、関数)には、その目的、引数、戻り値を説明するDoxygen形式のコメントを記述してください。
    *   複雑なロジックや意図が不明瞭な箇所には、行コメントを適宜追加してください。
*   **エラー処理:**
    *   関数が失敗する可能性がある場合は、例外をスローするか、エラーコードを返すことを明確にしてください。
    *   リソースを解放する必要がある場合は、RAII (Resource Acquisition Is Initialization) パターンを使用してください。

## C++固有の指示

### メモリ管理
*   生のポインタではなく、`std::unique_ptr` や `std::shared_ptr` を優先的に使用してください。
*   配列の場合は `std::vector` を、固定長の場合は `std::array` を使用してください。

### コンテナ
*   コンテナを使用する場合、可能な限り `const`参照を渡すようにしてください。
*   パフォーマンスが重視される場面を除き、イテレータの無効化に注意してください。

### デザインパターン
*   このプロジェクトでは、以下のデザインパターンを積極的に活用してください。
    *   シングルトン
    *   ファクトリーパターン
    *   オブザーバーパターン

### ヘッダーファイル
*   ヘッダーファイルにはインクルードガード (`#pragma once` または `#ifndef/#define/#endif`) を追加してください。
*   可能な限り、ヘッダーファイルでの依存関係を最小限に抑えるようにしてください。

## 具体的なタスクの指示

### ユニットテスト
*   新しい機能を追加する際には、`test/` ディレクトリにユニットテストを記述してください。
*   テストフレームワークとして Google Test を使用してください。

### ドキュメンテーション
*   公開されたAPIにはDoxygen形式のドキュメントを生成してください。
*   Copilotは、新しいコードのドキュメントを生成する際に、上記のルールに従ってください。

### リファクタリング
*   既存のコードをリファクタリングする際には、Copilotはパフォーマンスの向上、コードの簡素化、および可読性の向上を優先してください。


 

 

 

ライセンス

本ページの情報は、特記無い限り下記 MIT ライセンスで提供されます。

The MIT License (MIT)

  Copyright 2025 Kinoshita Hidetoshi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

 

 

参考

 


 

変更履歴

2025-10-24 - 新規作成

 

Programming Items トップページ

プライバシーポリシー