ASP.NET Core の Bootstrap を最新にする

# はじめに

Visual Studio 2019 で、ASP.NET Core Web アプリケーションをテンプレートから作成すると、Bootstrap ライブラリがリンクされた状態で作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/eceefc93-b1c0-6e9b-f7ef-4c32f50137fa.png)

これはこれで全然ありがたいのですが、Bootstrap のバージョンが最新でなかったりします。
やりたいことが最新のバージョンでしかサポートされていないこともあります。

Visual Studio 2019 では、クライアント ライブラリ マネージャーが利用でき、管理下のクライアント ライブラリを容易に任意のバージョンに更新できます。

ここでは、ASP.NET Core Web アプリケーションのクライアント ライブラリをクライアント ライブラリ マネージャー LibMan で管理する方法を説明します。

# 非管理ライブラリの削除

[<対象プロジェクト>] - [wwwroot] - [lib] - [bootstrap] を選択し、右クリック メニューから、[削除] で、"bootstrap" フォルダー以下を削除します。
**(*) 元に戻せるように必ずバックアップをとってから実行してください。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/61d017e1-2be2-c937-b60c-d4e15f8a601a.png)
削除に失敗する場合は、エディタ部を閉じてから削除を行ってください。

# LibMan によるクライアント ライブラリの追加

[<対象プロジェクト>] - [wwwroot] - [lib] を選択し、右クリック メニューから、[追加] - [クライアント側のライブラリ...] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/dfe05f20-369c-efe4-692b-289088c1058a.png)

[クライアント側のライブラリを追加します] ダイアログから、[プロバイダー] から、"jsdelivr" を選択、[ライブラリ] に "bootstrap" と入力すると、候補が一覧表示されるので、"bootstrap" を選択すると、その時に最新のバージョンに変換されます。今回は、"bootstrap@4.5.3" と、変換されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/efe75bf4-299b-20f4-6e24-72678bcc177b.png)
ここで、プロバイダーは、CDN のことで、以下から選択ができます。対象のライブラリが含まれている CDN を選択できます。

- [cdnjs](https://cdnjs.com/)
- [jsDelivr](https://www.npmjs.com/)
- [unpkg](https://unpkg.com/)

[インストール] を選択します。プロジェクトに、libman.json が追加されます。

```json:libman.json
{
  "version": "1.0",
  "defaultProvider": "jsdelivr",
  "libraries": [
    {
      "library": "bootstrap@4.5.3",
      "destination": "wwwroot/lib/bootstrap/"
    }
  ]
}
```

<対象プロジェクト>\wwwroot\lib に "bootstrap" フォルダーが追加され、各種フォルダー、ファイルが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/d5df1468-82e7-8c31-f1be-8873b3ff597a.png)

クライアント ライブラリ マネジャー(LibMan) で管理すると何がよいかというと、libman.json を開いて、対象のライブラリを選択、クイック操作のアイコンを選択すると、最新版があるときに、ここから確認して、更新することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/dc139ccd-4035-da57-74e1-36bd77187659.png)

同様の手順で、jQuery ライブラリも LibMan の管理下にしていきます。
<対象プロジェクト>\wwwroot\lib\jquery フォルダーを削除します。
[<対象プロジェクト>] - [wwwroot] - [lib] を選択し、右クリック メニューから、[追加] - [クライアント側のライブラリ...] を選択します。
[クライアント側のライブラリを追加します] ダイアログから、[プロバイダー] から、"jsdelivr" を選択、[ライブラリ] に "jquery" と入力すると、候補が一覧表示されるので、"jquery" を選択すると、その時に最新のバージョンに変換されます。今回は、"jquery@3.5.1" と、変換されました。
[インストール] を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172205/d2a222f9-499d-6a43-1ea4-e8172b17a7c6.png)

同様に、<対象プロジェクト>\wwwroot\lib\ 以下の jquery-validation、jquery-validation-unobtrusive を削除、"jsdelivr" から、jquery-validation, jquery-validation-unobtrusive をそれぞれインストールします。
ここまでで、libman.json 以下のようになります。

```json:libman.json
{
  "version": "1.0",
  "defaultProvider": "jsdelivr",
  "libraries": [
    {
      "library": "bootstrap@4.5.3",
      "destination": "wwwroot/lib/bootstrap/"
    },
    {
      "library": "jquery@3.5.1",
      "destination": "wwwroot/lib/jquery/"
    },
    {
      "library": "jquery-validation@1.19.2",
      "destination": "wwwroot/lib/jquery-validation/"
    },
    {
      "library": "jquery-validation-unobtrusive@3.2.11",
      "destination": "wwwroot/lib/jquery-validation-unobtrusive/"
    }
  ]
}
```

LibMan でクライアント ライブラリを管理する場合、[クライアント側のライブラリを追加します] ダイアログを使わず、libman.json を直接書き換えても構いません。

# クライアント ライブラリへの参照の変更

最後に、bootstrap, jquery, jquery-validation, jquery-validation-unobtrusive 各ライブラリへのパスが変更されている場合は、\<link\>、\<script\> の参照パスを変更します。

ASP.NET Core Web アプリケーション プロジェクト テンプレートでは、_Layout.cshtml に \*.css、\*.js のクライアント ライブラリの参照がありますが、最近のコードでは、ローカルのライブラリを参照するようになっているため、参照を変更する必要がありません。

```html:_Layout.cshtml
...
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
....
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
...
```

\<environment exclude="Development"\> で、非開発環境時には、CDN を参照するようにしている場合は、LibMan で管理しているバージョンと同様のバージョンを参照するように変更する必要があります。

# 参照サイト
- [LibMan を使用した ASP.NET Core でのクライアント側ライブラリの取得](https://docs.microsoft.com/ja-jp/aspnet/core/client-side/libman/)
- [ASP.NET Core で LibMan CLI を使用する](https://docs.microsoft.com/ja-jp/aspnet/core/client-side/libman/libman-cli)
- [Visual Studio の ASP.NET Core で LibMan を使用する](https://docs.microsoft.com/ja-jp/aspnet/core/client-side/libman/libman-vs)