【Claude Code小ネタ】インタラクティブなコンソール手順はCLAUDE.mdに書こう

※この記事はClaude Codeに清書させた内容を一部編集したものです。
※この記事は「エムティーアイ Blog Summer 2025」の 8/15 分の記事です。

この記事の概要

Claude Codeでプロジェクトを扱う際、認証が必要なコマンドやインタラクティブな操作が必要なケースがあります。今回は、.NETプロジェクトでプライベートNuGetリポジトリを使用する場合を例に、CLAUDE.mdに手順を記述することでClaude Codeが適切に動作する方法を紹介します。

前提条件

問題:プライベートNuGetリポジトリへのアクセス

以下のような構成でプライベートNuGetリポジトリを使用する.NETプロジェクトがあるとします。プライベートNuGetリポジトリの認証情報は保持していません。

NuGet.Config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="my-nuget-repos" value="https://pkgs.dev.azure.com/my-org/_packaging/my-nuget-repos/nuget/v3/index.json" />
  </packageSources>
</configuration>

プロジェクトファイル(.csproj)

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <RootNamespace>hello_use_custom_lib</RootNamespace>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="My.Org.CustomLib" Version="1.0.0" />
  </ItemGroup>
</Project>

CLAUDE.mdを記述していない場合の動作

ユーザーが「buildしてください」と依頼した場合、Claude Codeは通常のdotnet buildコマンドを実行しますが、プライベートリポジトリにアクセスできないためビルドが失敗します。

> buildしてください

● Bash(dotnet build)
  ⎿  Error: Determining projects to restore...
     ~エラー内容は省略~


● NuGetのプライベートリポジトリ(Azure DevOps)にアクセスできないため、ビルド
  が失敗しています。認証情報の設定が必要です。

解決策:CLAUDE.mdに手順を記述

CLAUDE.mdに手順と説明を記述します:

# プロジェクト共通のClaude Code指示ファイル

## dotnet プロジェクト
* Nugetリポジトリを ~/.nuget/NuGet/NuGet.config に記述済みである。
* クレデンシャルはファイルに記述していないため、リポジトリからRestoreする場合は以下のコマンドを実行してユーザーにインタラクティブなクレデンシャル取得を求めるべきである。

```dotnet restore --interactive```

以下 通常のコンソールでコマンドを実行した場合の動作例である。
1. interactive オプションを設定した場合、標準出力に外部ブラウザでアクセスすべき認証エンドポイントが表示され、コンソールは待ち状態になる。
2. ユーザーは表示された内容に従い、認証アクションを実施する。
3. ユーザーが外部ブラウザを利用して認証を行った場合、コンソールの待ち状態は解消され、ライブラリがダウンロードされる。

CLAUDE.mdに記述後のClaude Codeの動作

同じく「buildしてください」と依頼すると、Claude CodeはCLAUDE.mdの内容を参照して適切な手順を実行します:

> buildしてください

● Update Todos
  ⎿  ☐ Identify the project type and build system
     ☐ Run the appropriate build command

● List(~/samples/hello-use-custom-lib)
  ⎿  Listed 6 paths

● Read(hello-use-custom-lib.csproj)
  ⎿  Read 13 lines

● Update Todos
  ⎿  ☒ Identify the project type and build system
     ☐ Run the appropriate build command

● Bash(dotnet restore --interactive)
  ⎿  [CredentialProvider]DeviceFlow: 
     https://pkgs.dev.azure.com/my-org/_packaging/my-nuget-repos/nuget/v3/index.json
     [CredentialProvider]ATTENTION: User interaction required.
     **********************************************************************
     To sign in, use a web browser to open the page https://microsoft.com/devicelogin 
     and enter the code AAABBB111 to authenticate.
     **********************************************************************

意図したとおりにdotnet restore --interactiveコマンドを実行し、外部ブラウザでの認証を待ってくれています。

認証後の動作

ブラウザで認証を完了すると、自動的にビルドが続行されます:

● Bash(dotnet build)
  ⎿  Determining projects to restore...                                                                         
     All projects are up-to-date for restore.
     hello-use-custom-lib -> /home/user1/samples/hello-use-custom-lib/bin/Debug/net8.0/hello-use-custom-lib.dll

● Update Todos
  ⎿  ☒ Identify the project type and build system
     ☒ Run the appropriate build command

● ビルドが成功しました。

まとめ

CLAUDE.mdにインタラクティブなコマンド手順を記述することで、Claude Codeが:

  1. プロジェクトの特殊な要件を理解
  2. 適切なコマンドを選択
  3. ユーザーの認証操作を待機
  4. 認証完了後に処理を継続

という一連の流れを自動で実行できるようになります。

なお、今回の例のdotnet restore --interactiveコマンドは、キャッシュが効いている時は認証アクションが不要なため、毎回ユーザーアクションが必要になるわけではありません。

Claude Codeを使用する際は、プロジェクト固有の手順やコマンドをCLAUDE.mdに記述しておくことで、より効率的な開発体験を実現できます。