👌

dotnet restore の使い方 ~依存関係管理の基本~

に公開

1. はじめに

.NET プロジェクトでは、NuGet パッケージなどの外部依存関係がプロジェクトをビルド・実行するために欠かせません。dotnet restore コマンドは、これらの依存関係をプロジェクトに取り込む(=復元する)ための重要なツールです。この記事では、dotnet restore の基本的な使い方とその詳細なオプションについて解説します。

2. dotnet restore の基本的な役割

dotnet restore は、以下のような役割を担っています。

  • 依存関係の取得:
    プロジェクトファイル(.csproj)やソリューションファイル(.sln)に記述された NuGet パッケージの参照情報を元に、必要なパッケージを NuGet リポジトリから取得します。

  • キャッシュの利用:
    一度ダウンロードしたパッケージはローカルキャッシュに保存され、次回の restore 時にはキャッシュから利用されるため、ネットワークの負荷が軽減されます。

  • 環境の整備:
    パッケージが正常に復元されることで、後続のビルドや実行時に不足している依存関係が原因でエラーが発生するリスクを防ぎます。

3. 基本的な使い方

3.1 単一プロジェクト(.csproj)の場合

単一のプロジェクトファイルに対して restore を実行する場合、以下のようにコマンドを利用します。

dotnet restore MyProject.csproj

このコマンドは、MyProject.csproj 内に記述された NuGet パッケージの参照を読み取り、必要なパッケージを復元します。

3.2 複数プロジェクトを含むソリューション(.sln)の場合

複数のプロジェクトが含まれるソリューションでは、ソリューションファイルを指定することで、一度にすべてのプロジェクトの依存関係を復元できます。

dotnet restore MySolution.sln

これにより、ソリューション内の各プロジェクトに対して、必要なパッケージがすべて復元されます。

4. 自動復元機能と明示的な restore

.NET Core 2.0 以降、dotnet builddotnet run コマンドは内部で自動的に restore を実行するようになっています。しかし、以下のようなケースでは明示的な restore が有効です。

  • CI/CD パイプライン:
    継続的インテグレーション環境では、環境をクリーンな状態から構築するため、明示的に restore を行い依存関係が正しく整っているか確認するのが一般的です。

  • パッケージの更新時:
    プロジェクトで依存するパッケージが更新された場合、明示的に restore を実行することで、新しいバージョンのパッケージが取得されます。

5. dotnet restore の主要オプション

dotnet restore はいくつかのオプションを利用して、細かい挙動の制御が可能です。以下は主要なオプションの例です。

  • --source <SOURCE>
    NuGet パッケージの取得先リポジトリを指定します。プライベートなパッケージフィードを利用する場合などに有用です。

    dotnet restore --source https://api.nuget.org/v3/index.json
    
  • --packages <DIRECTORY>
    依存関係のパッケージを保存するディレクトリを指定できます。デフォルトではユーザーのローカルキャッシュが使用されますが、特定のディレクトリに保存することで環境ごとの管理がしやすくなります。

  • --configfile <FILE>
    カスタムの NuGet 設定ファイル(NuGet.Config)を指定できます。プロジェクト固有の設定が必要な場合に利用します。

  • --disable-parallel
    パッケージの復元をシーケンシャルに実行します。ネットワーク環境やディスク I/O の制限など、並列処理が問題となる場合に利用します。

これらのオプションについては、公式ドキュメントや dotnet restore --help コマンドで詳細を確認できます。

6. トラブルシューティングとベストプラクティス

6.1 トラブルシューティング

  • 依存関係が見つからない場合:
    NuGet.Config の設定やソースの URL に誤りがないかを確認してください。また、ネットワーク接続が正常に機能しているかも確認します。

  • キャッシュが原因の場合:
    キャッシュが破損している場合は、--no-cache オプションを利用して復元を試みることができます。

    dotnet restore --no-cache
    
  • プロキシ環境:
    プロキシ経由でネットワーク接続する場合、プロキシの設定が正しく行われているかを確認してください。

6.2 ベストプラクティス

  • CI/CD の設定:
    ビルド前に dotnet restore を明示的に実行し、依存関係が正しく取得されているかを確認することで、ビルドエラーを未然に防ぎます。

  • パッケージの管理:
    定期的にパッケージのバージョンを確認し、不要な依存関係がないかチェックすることで、プロジェクトの健全性を保ちます。

  • 公式ドキュメントの参照:
    常に最新の .NET CLI のドキュメントを参照し、更新されたオプションや新機能に対応することが重要です。

7. まとめ

dotnet restore は、.NET プロジェクトの依存関係を管理するための基本コマンドです。単一の .csproj だけでなく、複数のプロジェクトを含む .sln ファイルに対しても柔軟に対応でき、CI/CD パイプラインなどでもその存在感を発揮します。オプションを活用することで、プロジェクト固有の要件やネットワーク環境に合わせた復元が可能となります。日々の開発や自動化プロセスにおいて、dotnet restore を適切に使いこなすことは、ビルドエラーの防止と効率的な開発環境の構築に大いに役立ちます。

Discussion