NuGetとは?.NET開発に欠かせないパッケージマネージャー完全ガイド

プログラミング・IT

プログラミングをしていて、こんな経験はありませんか?

「このデータベース接続の処理、誰かもう作ってないかな…」

「PDFを作成したいけど、ゼロから書くのは大変だな…」

実は、多くの開発者が直面する問題は、すでに誰かが解決していることが多いんです。

そして、その「誰かが作った便利なプログラム」を簡単に使えるようにしてくれるのが、NuGet(ニューゲット)というツールです。

この記事では、.NET開発に欠かせないNuGetについて、初心者の方にも分かるように徹底的に解説します。

「難しそう…」と思うかもしれませんが、実際の操作はとても簡単ですよ。


スポンサーリンク
  1. NuGetとは?基本を理解しよう
    1. NuGetの定義
    2. パッケージって何?
    3. なぜパッケージマネージャーが必要?
    4. NuGetの利点
  2. NuGetの仕組み:どうやって動いているの?
    1. NuGet Galleryとは
    2. パッケージの構造
    3. インストールの流れ
    4. ローカルキャッシュ
  3. NuGetの使い方:Visual Studio編
    1. 方法1:NuGetパッケージマネージャーUI
    2. 方法2:パッケージマネージャーコンソール
    3. 方法3:プロジェクトファイルの直接編集
    4. パッケージのアンインストール
    5. パッケージの更新
  4. よく使われる人気のNuGetパッケージ
    1. 1. Newtonsoft.Json(Json.NET)
    2. 2. Entity Framework Core
    3. 3. Dapper
    4. 4. Serilog
    5. 5. AutoMapper
    6. 6. FluentValidation
    7. 7. RestSharp
    8. 8. xUnit / NUnit / MSTest
    9. 9. Moq
    10. 10. Polly
  5. packages.configとPackageReference
    1. packages.config方式(古い方式)
    2. PackageReference方式(新しい方式)
    3. どちらを使うべき?
  6. パッケージの復元(Restore)
    1. パッケージ復元とは
    2. 自動復元
    3. 手動復元
    4. 復元の流れ
  7. NuGetの設定とカスタマイズ
    1. NuGet.Configファイル
    2. プライベートNuGetサーバー
    3. パッケージソースの追加
  8. 自分でNuGetパッケージを作る
    1. パッケージ作成の流れ
    2. ローカルでの使用
  9. トラブルシューティング
    1. 問題1:パッケージが復元できない
    2. 問題2:バージョンの競合
    3. 問題3:パッケージが見つからない
    4. 問題4:参照が追加されない
    5. 問題5:ビルドが遅い
  10. NuGetのベストプラクティス
    1. 1. パッケージは慎重に選ぶ
    2. 2. バージョンを固定する
    3. 3. 定期的に更新する
    4. 4. パッケージは少なめに
    5. 5. ライセンスを確認
    6. 6. セキュリティ脆弱性をチェック
    7. 7. パッケージソースを管理
  11. よくある質問(Q&A)
    1. Q1:NuGetは無料で使える?
    2. Q2:インターネット接続が必須?
    3. Q3:パッケージは安全?
    4. Q4:パッケージをGitにコミットすべき?
    5. Q5:古いバージョンに戻せる?
    6. Q6:NuGetとnpmの違いは?
    7. Q7:エラーが出た時、どこを見ればいい?
  12. まとめ:NuGetで効率的な開発を

NuGetとは?基本を理解しよう

まずは基本から見ていきましょう。

NuGetの定義

NuGet(ニューゲット)は、.NET向けのパッケージマネージャーです。

パッケージマネージャーとは、他の開発者が作った便利なプログラム(ライブラリ)を、簡単に自分のプロジェクトに追加できるツールのこと。

Microsoftが開発・提供している公式のツールで、無料で使えます。

パッケージって何?

パッケージは、再利用可能なコード(ライブラリ)をまとめたものです。

イメージとしては、「部品のセット」のようなもの。

例えば:

  • JSON解析パッケージ:JSONデータを簡単に扱える
  • 画像処理パッケージ:画像の加工や変換ができる
  • データベース接続パッケージ:データベースとの通信を簡単にする
  • PDFライブラリ:PDF文書を作成・編集できる

これらのパッケージを使えば、複雑な機能を一から作る必要がなくなります。

なぜパッケージマネージャーが必要?

昔は、ライブラリを使うのが大変でした:

  1. ウェブサイトを探す:必要なライブラリを公式サイトから探す
  2. ダウンロード:ZIPファイルをダウンロードして解凍
  3. 手動でコピー:プロジェクトフォルダに手動でファイルをコピー
  4. 参照を追加:Visual Studioで参照設定を手動で追加
  5. バージョン管理:更新があったら、また最初から繰り返し

NuGetを使えば、これがワンクリックで終わります。

NuGetの利点

簡単にインストール

数クリックで、パッケージがプロジェクトに追加されます。

自動的な依存関係の解決

あるパッケージが別のパッケージを必要としている場合、自動的に一緒にインストールしてくれます。

バージョン管理

パッケージのバージョンを管理し、更新も簡単にできます。

アンインストールも簡単

不要になったパッケージは、簡単に削除できます。

巨大なエコシステム

30万個以上のパッケージが公開されており、ほとんどの用途をカバーできます。


NuGetの仕組み:どうやって動いているの?

NuGetの裏側を理解しましょう。

NuGet Galleryとは

NuGet Gallery(https://www.nuget.org/)は、パッケージが公開されている公式のウェブサイトです。

世界中の開発者が作ったパッケージが、ここに集まっています。

まるで、プログラムの部品を売っている「オンラインショップ」のようなもの。

もちろん、ほとんどのパッケージは無料です。

パッケージの構造

NuGetパッケージは、.nupkgという拡張子のZIPファイルです。

中には以下が含まれています:

  • DLLファイル:実際のプログラムコード
  • 依存関係情報:このパッケージが必要とする他のパッケージ
  • メタデータ:バージョン、作者、説明など
  • ドキュメント:使い方の説明

インストールの流れ

  1. 開発者がVisual Studioで「Newtonsoft.Jsonをインストール」と指示
  2. NuGetがnuget.orgにアクセス
  3. Newtonsoft.Jsonパッケージをダウンロード
  4. 必要な依存パッケージも自動的にダウンロード
  5. プロジェクトに参照を追加
  6. すぐに使える状態になる

すべて自動で、数秒で完了します。

ローカルキャッシュ

一度ダウンロードしたパッケージは、PCのローカルにキャッシュされます。

場所:C:\Users\(ユーザー名)\.nuget\packages

同じパッケージを別のプロジェクトで使う場合、再ダウンロード不要で高速にインストールできます。


NuGetの使い方:Visual Studio編

実際にNuGetを使ってみましょう。

方法1:NuGetパッケージマネージャーUI

最も簡単な方法です。

手順

ステップ1:プロジェクトを開く

Visual Studioでプロジェクトを開きます。

ステップ2:NuGetパッケージマネージャーを開く

以下のいずれかの方法で開きます:

  • ソリューションエクスプローラーで、プロジェクトを右クリック → 「NuGetパッケージの管理」を選択
  • メニューバーから「ツール」→「NuGetパッケージマネージャー」→「ソリューションのNuGetパッケージの管理

ステップ3:パッケージを検索

  1. 参照」タブをクリック
  2. 検索ボックスにパッケージ名を入力(例:「Newtonsoft.Json」)
  3. 検索結果が表示される

ステップ4:パッケージをインストール

  1. インストールしたいパッケージをクリック
  2. 右側にパッケージの詳細が表示される
  3. バージョンを選択(通常は最新の安定版)
  4. インストール」ボタンをクリック
  5. ライセンスに同意するダイアログが表示されたら「同意する

ステップ5:インストール完了

数秒で完了します。

「出力」ウィンドウに、インストールのログが表示されます。

方法2:パッケージマネージャーコンソール

コマンドで操作する方法です。慣れると速いです。

手順

ステップ1:コンソールを開く

メニューバーから「ツール」→「NuGetパッケージマネージャー」→「パッケージマネージャーコンソール

画面下部にコンソールウィンドウが開きます。

ステップ2:コマンドを入力

Install-Package Newtonsoft.Json

Enterキーを押すと、インストールが開始されます。

特定のバージョンをインストール

Install-Package Newtonsoft.Json -Version 13.0.1

複数のパッケージを一度にインストール

Install-Package Newtonsoft.Json
Install-Package Dapper
Install-Package Serilog

方法3:プロジェクトファイルの直接編集

.NET Core / .NET 5以降では、プロジェクトファイルを直接編集できます。

手順

ステップ1:プロジェクトファイルを開く

ソリューションエクスプローラーで、プロジェクトファイル(.csproj)をダブルクリック。

ステップ2:PackageReferenceを追加

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Dapper" Version="2.0.123" />
  </ItemGroup>
</Project>

ステップ3:保存

ファイルを保存すると、自動的にパッケージがダウンロードされます。

パッケージのアンインストール

不要になったパッケージを削除できます。

UI から

  1. NuGetパッケージマネージャーを開く
  2. インストール済み」タブをクリック
  3. 削除したいパッケージを選択
  4. アンインストール」ボタンをクリック

コンソールから

Uninstall-Package Newtonsoft.Json

パッケージの更新

新しいバージョンが公開されたら、更新できます。

UI から

  1. NuGetパッケージマネージャーを開く
  2. 更新プログラム」タブをクリック
  3. 更新可能なパッケージの一覧が表示される
  4. 更新したいパッケージを選択
  5. 更新」ボタンをクリック

コンソールから

Update-Package Newtonsoft.Json

すべてのパッケージを一括更新:

Update-Package

よく使われる人気のNuGetパッケージ

実際に多くの開発者が使っているパッケージを紹介します。

1. Newtonsoft.Json(Json.NET)

用途:JSON形式のデータを扱う

説明

JSONの解析(パース)やシリアライズ(オブジェクト→JSON変換)に使います。

.NETで最も人気のあるパッケージの一つです。

インストール

Install-Package Newtonsoft.Json

使用例

using Newtonsoft.Json;

// オブジェクトをJSONに変換
var person = new { Name = "太郎", Age = 25 };
string json = JsonConvert.SerializeObject(person);
// 結果: {"Name":"太郎","Age":25}

// JSONをオブジェクトに変換
var obj = JsonConvert.DeserializeObject<Person>(json);

2. Entity Framework Core

用途:データベース操作

説明

データベースにアクセスするための強力なORM(オブジェクト関係マッピング)フレームワーク。

SQL Serverだけでなく、MySQL、PostgreSQL、SQLiteなど様々なデータベースに対応しています。

インストール

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer

3. Dapper

用途:軽量なデータベースアクセス

説明

Entity Frameworkより軽量で高速なORM。

シンプルなデータベース操作に最適です。

インストール

Install-Package Dapper

使用例

using Dapper;
using System.Data.SqlClient;

var connection = new SqlConnection(connectionString);
var users = connection.Query<User>("SELECT * FROM Users WHERE Age > @Age", new { Age = 20 });

4. Serilog

用途:ログ出力

説明

アプリケーションのログを記録するための強力なライブラリ。

ファイル、データベース、クラウドサービスなど、様々な出力先に対応しています。

インストール

Install-Package Serilog
Install-Package Serilog.Sinks.File

使用例

using Serilog;

Log.Logger = new LoggerConfiguration()
    .WriteTo.File("log.txt")
    .CreateLogger();

Log.Information("アプリケーションが起動しました");
Log.Error("エラーが発生しました");

5. AutoMapper

用途:オブジェクト間のマッピング

説明

あるクラスのオブジェクトを別のクラスのオブジェクトに変換する処理を自動化します。

DTOパターンなどで便利です。

インストール

Install-Package AutoMapper

6. FluentValidation

用途:データの検証(バリデーション)

説明

入力データが正しいかチェックするためのライブラリ。

流れるような(Fluent)書き方で、検証ルールを定義できます。

インストール

Install-Package FluentValidation

使用例

public class PersonValidator : AbstractValidator<Person>
{
    public PersonValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("名前は必須です");
        RuleFor(x => x.Age).GreaterThan(0).WithMessage("年齢は1以上でなければなりません");
    }
}

7. RestSharp

用途:REST API呼び出し

説明

WebAPIにHTTPリクエストを送信するためのシンプルなライブラリ。

インストール

Install-Package RestSharp

8. xUnit / NUnit / MSTest

用途:単体テスト

説明

プログラムが正しく動作するかテストするためのフレームワーク。

インストール

Install-Package xunit
Install-Package xunit.runner.visualstudio

9. Moq

用途:モックオブジェクトの作成

説明

テスト時に、依存関係のある部分を「偽物」に置き換えるライブラリ。

単体テストで重要です。

インストール

Install-Package Moq

10. Polly

用途:リトライとフォールバックの処理

説明

ネットワーク通信などで失敗した場合に、自動的に再試行する仕組みを簡単に実装できます。

インストール

Install-Package Polly

packages.configとPackageReference

NuGetのパッケージ管理方式は、2つあります。

packages.config方式(古い方式)

.NET Frameworkプロジェクトで使われていた方式です。

特徴

  • プロジェクトルートにpackages.configというXMLファイルが作成される
  • パッケージはpackagesフォルダにダウンロードされる
  • プロジェクトファイルには直接的な記述がない

packages.configの例

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
  <package id="Dapper" version="2.0.123" targetFramework="net48" />
</packages>

PackageReference方式(新しい方式)

.NET Core以降で標準になった方式です。

特徴

  • プロジェクトファイル(.csproj)内に直接記述
  • パッケージはグローバルキャッシュに保存
  • 復元が高速
  • よりシンプルで管理しやすい

プロジェクトファイルの例

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Dapper" Version="2.0.123" />
  </ItemGroup>
</Project>

どちらを使うべき?

PackageReference方式を推奨します。

.NET Framework 4.6.1以降であれば、PackageReference方式に移行できます。

移行ツールも用意されています。


パッケージの復元(Restore)

チーム開発で重要な機能です。

パッケージ復元とは

プロジェクトファイルには、「どのパッケージを使っているか」という情報だけが記録されています。

実際のパッケージファイル(DLL)は、Git などのバージョン管理システムにはコミットしません。

他の開発者がプロジェクトを取得したら、パッケージを復元(Restore)する必要があります。

自動復元

Visual Studioでプロジェクトを開くと、自動的にパッケージが復元されます。

または、ビルド時に自動的に実行されます。

手動復元

Visual Studio

ソリューションを右クリック → 「NuGetパッケージの復元

コマンドライン

nuget restore

または、.NET CLI(.NET Core以降):

dotnet restore

復元の流れ

  1. プロジェクトファイルやpackages.configを読み込む
  2. 必要なパッケージのリストを作成
  3. ローカルキャッシュにあればそれを使用
  4. なければnuget.orgからダウンロード
  5. プロジェクトから参照できるようにする

NuGetの設定とカスタマイズ

高度な使い方を見ていきましょう。

NuGet.Configファイル

NuGetの動作を制御する設定ファイルです。

場所:

  • グローバル%AppData%\NuGet\NuGet.Config
  • ソリューション:ソリューションルートの.nuget\NuGet.Config

設定例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="MyPrivateFeed" value="https://mycompany.com/nuget" />
  </packageSources>
</configuration>

プライベートNuGetサーバー

社内専用のパッケージを公開したい場合、プライベートなNuGetサーバーを構築できます。

方法

  • Azure Artifacts:Microsoftのクラウドサービス
  • MyGet:サードパーティのホスティングサービス
  • 自前のサーバー:NuGet.Serverを使って構築

パッケージソースの追加

Visual Studioでパッケージソースを追加できます。

手順

  1. ツール」→「オプション」を開く
  2. NuGetパッケージマネージャー」→「パッケージソース」を選択
  3. +」ボタンをクリック
  4. 名前とURLを入力
  5. OK」をクリック

これで、公式のnuget.org以外からもパッケージをインストールできます。


自分でNuGetパッケージを作る

自作のライブラリを公開する方法です。

パッケージ作成の流れ

ステップ1:プロジェクトの準備

クラスライブラリプロジェクトを作成します。

ステップ2:プロジェクトファイルの編集

パッケージのメタデータを追加します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <PackageId>MyAwesomeLibrary</PackageId>
    <Version>1.0.0</Version>
    <Authors>Your Name</Authors>
    <Company>Your Company</Company>
    <Description>便利なユーティリティライブラリ</Description>
    <PackageTags>utility;helper</PackageTags>
    <PackageLicenseExpression>MIT</PackageLicenseExpression>
    <RepositoryUrl>https://github.com/yourname/yourrepo</RepositoryUrl>
  </PropertyGroup>
</Project>

ステップ3:パッケージのビルド

dotnet pack -c Release

bin\Releaseフォルダに.nupkgファイルが作成されます。

ステップ4:パッケージの公開(オプション)

nuget.orgに公開する場合:

  1. https://www.nuget.org/ でアカウントを作成
  2. APIキーを取得
  3. 以下のコマンドで公開:
nuget push MyAwesomeLibrary.1.0.0.nupkg -Source https://api.nuget.org/v3/index.json -ApiKey YOUR_API_KEY

ローカルでの使用

公開せずに、ローカルやチーム内だけで使うこともできます。

  1. .nupkgファイルをローカルフォルダに配置
  2. そのフォルダをパッケージソースに追加
  3. 通常通りインストール

トラブルシューティング

よくある問題と解決方法です。

問題1:パッケージが復元できない

症状

「パッケージを復元できません」というエラーが出る。

原因

  • ネットワーク接続の問題
  • パッケージソースへのアクセス権限がない
  • パッケージが削除または非公開になった

解決策

  1. インターネット接続を確認
  2. プロキシ設定を確認(企業ネットワークの場合)
  3. Visual Studioを再起動
  4. NuGetキャッシュをクリア:
nuget locals all -clear

または

dotnet nuget locals all --clear

問題2:バージョンの競合

症状

「パッケージXのバージョンAとバージョンBが競合しています」というエラー。

原因

複数のパッケージが、同じパッケージの異なるバージョンを要求している。

解決策

  1. NuGetパッケージマネージャーの「統合」タブで、バージョンを統一
  2. または、明示的にバージョンを指定:
<PackageReference Include="PackageName" Version="1.2.3" />

問題3:パッケージが見つからない

症状

検索しても目的のパッケージが表示されない。

原因

  • パッケージソースの設定が間違っている
  • プレリリース版のみが公開されている

解決策

  1. パッケージソースにnuget.orgが含まれているか確認
  2. 「プレリリースを含める」にチェックを入れる
  3. 正確なパッケージ名で検索

問題4:参照が追加されない

症状

パッケージをインストールしても、コード内で使えない。

原因

  • パッケージのターゲットフレームワークが合っていない
  • インストールが完全に完了していない

解決策

  1. プロジェクトを再ビルド
  2. Visual Studioを再起動
  3. パッケージを一度アンインストールして、再インストール

問題5:ビルドが遅い

症状

パッケージが多いと、ビルドに時間がかかる。

解決策

  1. 不要なパッケージをアンインストール
  2. キャッシュを定期的にクリア
  3. パッケージの自動復元設定を見直す

NuGetのベストプラクティス

効率的にNuGetを使うためのコツです。

1. パッケージは慎重に選ぶ

チェックポイント

  • ダウンロード数:人気があるか
  • 最終更新日:メンテナンスされているか
  • ライセンス:商用利用可能か
  • 依存関係:他のパッケージをたくさん必要としないか
  • ドキュメント:使い方が分かりやすいか

2. バージョンを固定する

本番環境では、パッケージのバージョンを固定しましょう。

<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />

範囲指定は避ける(開発環境ではOK):

<!-- 本番では避ける -->
<PackageReference Include="Newtonsoft.Json" Version="13.*" />

3. 定期的に更新する

セキュリティパッチや機能改善のため、定期的にパッケージを更新しましょう。

ただし、メジャーバージョンアップは慎重に。

破壊的変更(Breaking Changes)が含まれることがあります。

4. パッケージは少なめに

必要最小限のパッケージだけを使いましょう。

パッケージが多すぎると:

  • ビルド時間が長くなる
  • デプロイサイズが大きくなる
  • 依存関係の管理が複雑になる

5. ライセンスを確認

パッケージのライセンスを必ず確認してください。

特に商用プロジェクトでは重要です。

NuGetパッケージマネージャーで、ライセンス情報を確認できます。

6. セキュリティ脆弱性をチェック

Visual Studio 2022以降では、既知の脆弱性があるパッケージに警告が表示されます。

定期的にチェックして、必要に応じて更新しましょう。

7. パッケージソースを管理

企業では、承認されたパッケージソースのみを使用するようにしましょう。

NuGet.Configで制御できます。


よくある質問(Q&A)

NuGetについて、よくある質問にお答えします。

Q1:NuGetは無料で使える?

A:はい、完全に無料です。

NuGetツール自体も、nuget.orgのパッケージも、ほとんどが無料で利用できます。

一部の企業向けパッケージは有料の場合もあります。

Q2:インターネット接続が必須?

A:初回のダウンロードには必要です。

しかし、一度ダウンロードしたパッケージはローカルにキャッシュされるので、その後はオフラインでも使えます。

また、企業内にプライベートNuGetサーバーを構築すれば、外部インターネット接続なしでも運用できます。

Q3:パッケージは安全?

A:基本的には安全ですが、注意が必要です。

nuget.orgに公開されているパッケージは、誰でも公開できます。

そのため:

  • 人気のあるパッケージ(ダウンロード数が多い)を選ぶ
  • 公式または信頼できる作者のパッケージを使う
  • セキュリティ脆弱性の警告に注意する

Q4:パッケージをGitにコミットすべき?

A:いいえ、通常はコミットしません。

パッケージファイル(DLL)は容量が大きく、バージョン管理には不向きです。

代わりに、プロジェクトファイルやpackages.configだけをコミットします。

他の開発者は、パッケージ復元機能で取得できます。

Q5:古いバージョンに戻せる?

A:はい、簡単にダウングレードできます。

NuGetパッケージマネージャーで、バージョンのドロップダウンから古いバージョンを選択して「更新」をクリックするだけです。

Q6:NuGetとnpmの違いは?

A:対象となる開発環境が違います。

  • NuGet:.NET開発用のパッケージマネージャー
  • npm:Node.js / JavaScript開発用のパッケージマネージャー

仕組みや思想は似ていますが、使える言語とプラットフォームが異なります。

Q7:エラーが出た時、どこを見ればいい?

A:以下の順で確認してください。

  1. 出力ウィンドウ:詳細なエラーメッセージが表示される
  2. エラー一覧:エラーの概要が表示される
  3. パッケージマネージャーコンソール:より詳細なログ

エラーメッセージをコピーして、GoogleやStack Overflowで検索するのも有効です。


まとめ:NuGetで効率的な開発を

NuGetについて、理解できましたか?

この記事の重要ポイント

  • NuGetは.NET向けのパッケージマネージャー
  • 30万個以上のパッケージが利用可能
  • インストール、更新、削除が簡単
  • 依存関係を自動的に解決してくれる
  • Visual StudioやコマンドラインからUI操作可能
  • 人気パッケージ:Newtonsoft.Json、Entity Framework、Dapperなど
  • パッケージは慎重に選び、バージョンを管理する
  • 復元機能により、チーム開発がスムーズ

NuGetを使えば、「車輪の再発明」をせずに、既存の優れたライブラリを活用できます。

開発スピードが上がり、品質も向上します。

まずは、Newtonsoft.Jsonなどの人気パッケージを試してみてください。

きっと、「こんなに簡単なのか!」と驚くはずですよ。

NuGetを活用して、効率的な.NET開発を楽しみましょう!

コメント

タイトルとURLをコピーしました