Skip to content

Copilot Spaces を使った開発効率化

学習目標

このモジュールを完了すると、以下のことができるようになります:

  • Copilot Spacesの概念と実運用での価値を理解する
  • プロジェクト固有のコンテキストを永続化し、チームで共有する
  • 様々な開発シナリオでSpacesを効果的に活用する
  • 組織の知識管理インフラとしてSpacesを運用する

前提条件

  • GitHub Copilotのライセンス(無料版でも可)
  • C#の基本的な知識
  • Visual StudioまたはVS Codeの使用経験

Copilot Spacesとは

Copilot Spacesは、特定のタスクに関連するコンテキスト(コード、ドキュメント、指示)を一箇所に整理し、より精度の高いAI支援を受けられる機能です。2025年5月にパブリックプレビューとして公開されました。

なぜCopilot Spacesが必要なのか

1. 知識の断片化の解決

エンジニアリングチームは、重要な情報がコード、ドキュメント、チームメンバーの頭の中に散在している問題に直面しています。Spacesはこれらを一元化します。

2. プロジェクトコンテキストの永続化

ここで言う「永続化」とは、Space内に追加したコンテキスト(コード、ドキュメント、指示)が保存され続けることを意味します:

通常のCopilot Chat: - セッションごとに手動でファイルやコンテキストを追加する必要がある - チャットウィンドウを閉じると、追加したコンテキストは失われる - 次回同じ作業をする際、再度すべてのコンテキストを追加し直す必要がある

Copilot Spaces: - 一度Spaceに追加したコンテキストは永続的に保存される - 新しいConversationを開始しても、Space内のコンテキストは自動的に利用可能 - チームメンバーも同じコンテキストにアクセスできる

重要な注意点: - Conversation(会話履歴)自体は永続化されません - 新しいConversationを開始すると、前回の会話内容は引き継がれません - 永続化されるのは、Spaceに追加した静的なコンテキストのみです

3. 知識の標準化と共有

  • チーム全員が同じガイドラインとコンテキストを共有
  • コードの品質が統一され、レビュー負荷が軽減
  • ベストプラクティスが自動的に適用される

Spacesとナレッジベースの違い

特徴 Copilot Spaces ナレッジベース
作成可能者 Copilotライセンス保有者全員 組織所有者のみ
所有者 個人またはOrganization Organizationのみ
コンテンツタイプ コード、自由形式テキスト Markdownファイルのみ
コンテキストサイズ 制限あり(50ファイルまで) 無制限
応答品質 より高精度 精度が劣る場合あり
会話履歴の共有 なし(各Conversationは独立) なし

実運用での活用シナリオ

シナリオ1: マイクロサービス開発

決済サービスの開発を例に、実践的なSpaceの作成と活用方法を学びます。

ステップ1: 決済サービス用Spaceの作成

  1. https://github.com/copilot/spaces にアクセス
  2. [Create space] をクリック
  3. 以下の情報を入力:
  4. 名前: Payment Service Development
  5. 所有者: 所属するorganization
  6. 説明: 決済サービスの開発・保守用スペース(PCI-DSS準拠)

ステップ2: セキュリティ重視の指示を追加

あなたは決済システムの専門家です。以下を厳守してください:

1. セキュリティ要件
   - クレジットカード情報は絶対にログに出力しない
   - すべての決済データは暗号化して保存
   - PCI-DSS準拠のコーディング規約に従う
   - センシティブデータのマスキング処理を実装

2. エラーハンドリング
   - 決済失敗時は必ずロールバック処理を実装
   - タイムアウトは30秒に設定
   - リトライロジックは指数バックオフを使用
   - エラーメッセージにセンシティブ情報を含めない

3. 監査要件
   - すべての決済操作に監査ログを実装
   - ユーザーIDと操作時刻を必ず記録
   - 決済金額と結果をトラッキング

ステップ3: 関連コードとドキュメントを追加

namespace PaymentService.Core
{
    /// <summary>
    /// 決済処理を管理するサービス
    /// </summary>
    public class PaymentProcessor
    {
        private readonly IPaymentGateway _gateway;
        private readonly IAuditLogger _auditLogger;

        public PaymentProcessor(IPaymentGateway gateway, IAuditLogger auditLogger)
        {
            _gateway = gateway ?? throw new ArgumentNullException(nameof(gateway));
            _auditLogger = auditLogger ?? throw new ArgumentNullException(nameof(auditLogger));
        }

        /// <summary>
        /// クレジットカード決済を処理します
        /// </summary>
        /// <param name="request">決済リクエスト</param>
        /// <returns>決済結果</returns>
        public async Task<PaymentResult> ProcessPaymentAsync(PaymentRequest request)
        {
            // 引数検証
            if (request == null) throw new ArgumentNullException(nameof(request));
            if (request.Amount <= 0) throw new ArgumentException("金額は正の値である必要があります");

            // 監査ログ記録
            await _auditLogger.LogAsync(new AuditEntry
            {
                UserId = request.UserId,
                Action = "PaymentInitiated",
                Timestamp = DateTime.UtcNow
            });

            // 決済処理実行
            try
            {
                var result = await _gateway.ChargeAsync(request);
                return result;
            }
            catch (Exception ex)
            {
                // エラー時のロールバック処理
                await HandlePaymentFailureAsync(request, ex);
                throw;
            }
        }
    }
}

ステップ4: Spaceを使った開発作業

タスク: 定期購読機能の追加

既存の決済システムに定期購読(サブスクリプション)機能を追加したい。 PCI-DSS準拠とエラーハンドリングを考慮した実装を提案してください。

シナリオ2: SQL/KQLクエリ作成支援

GitHubのプロダクトマネージャーKelly Henckelが実際に作成したSpaceの例を参考に、データクエリ支援Spaceを作成します。

Space作成と設定

Space名: Data Query Assistant
説明: SQL/KQLクエリの作成支援とダッシュボード構築のサポート

指示の例:

あなたはSQLとKQLのエキスパートです:

1. クエリ作成原則
   - パフォーマンスを最優先に考慮
   - インデックスの活用を前提とした設計
   - 大量データに対してはページネーションを実装

2. セキュリティ
   - SQLインジェクション対策を必ず実装
   - パラメータ化クエリを使用

3. 出力形式
   - 実行計画の説明を含める
   - 想定される実行時間を提示

コンテキストに含めるもの: - テレメトリスキーマの定義 - よく使うクエリのサンプル集 - パフォーマンスチューニングガイド

シナリオ3: ドキュメント更新の自動化

GitHubのプロダクトマネージャーHolly Kasselの実例を基に、ドキュメント更新用Spaceを作成します。

Space名: Documentation Update Assistant
説明: カスタマーサポートの質問とディスカッションを基にしたドキュメント改善

コンテキスト: - 既存のドキュメント - よくある質問(FAQ) - カスタマーサポートチケットの要約 - ユーザーフィードバック

実践演習

演習1: セキュリティコードレビュー用Space

GitHubのRahul Zhadeが実際に作成したセキュアコーディングプラクティスのSpaceを参考に、以下を作成します:

  1. Secure Code Reviewという名前のスペースを作成
  2. 以下の要素を追加:
  3. 認証モデルのドキュメント
  4. 暗号化実装のガイドライン
  5. セキュリティレビュープロセス
  6. よくあるセキュリティの質問への回答

  7. 実際のコードをレビューして、セキュリティ上の問題を特定

演習2: 新人オンボーディング用Space

  1. Team Onboarding Guideという名前のスペースを作成
  2. 以下を追加:
  3. システムアーキテクチャの概要
  4. 開発環境セットアップ手順
  5. コーディング規約
  6. ビルド&デプロイ手順
  7. よくある質問と回答

コミュニティからのフィードバックと今後の展開

現在要望されている機能

  1. IDE統合 - VS CodeやVisual StudioからSpacesへの直接アクセス(開発中)
  2. 外部ツール連携 - Confluence、Jira、TeamsなどとのMCP統合(検討中)
  3. ファイル数制限の拡大 - 現在の50ファイル制限の見直し
  4. リポジトリ全体の追加 - フォルダ単位での自動追加機能
  5. API提供 - プログラマティックなアクセス方法
  6. Conversation履歴の共有 - チーム間での会話履歴共有(現在は未対応)

効果的な使用のためのTips

  1. 明確な命名規則
  2. 目的が一目でわかる名前を付ける
  3. 例:Payment-Service-PCI-ComplianceAPI-Integration-Testing

  4. 定期的なメンテナンス

  5. 古いコンテキストの削除
  6. 新しい仕様の追加
  7. 指示の最適化

  8. チーム展開戦略

  9. まず小さなチームでパイロット実施
  10. 成功事例を文書化して共有
  11. 段階的に全社展開

トラブルシューティング

よくある課題と解決方法

  1. 「Codespaces」との混同
  2. Copilot SpacesとGitHub Codespacesは全く別の機能
  3. Spacesは知識管理、Codespacesは開発環境

  4. 50ファイル制限への対応

  5. 重要なファイルを優先的に選択
  6. 大きなシステムは機能ごとに複数のSpaceに分割
  7. 要約ドキュメントの活用

  8. 応答精度の向上

  9. 指示をより具体的に記述
  10. 不要なコンテキストを削除
  11. 適切なAIモデルを選択(Premium vs Base)

まとめ

Copilot Spacesは単なる便利ツールではなく、チームの知識管理とプロセス標準化のための重要なインフラストラクチャです。GitHubの社内でも、コード質問への回答、セキュアコーディング標準の共有、SQL/KQLクエリ作成、ドキュメント更新など、様々な用途で活用されています。

主な効果: - プロジェクト固有の知識の永続化 - チーム全体での知識共有 - 開発プロセスの標準化 - 属人化の防止 - 繰り返しの質問の削減

次のステップとして、あなたのチームで最も価値のあるSpaceを1つ作成し、効果を測定してみましょう。

参考リソース