Visual Studio で ASP.NET(MVC / Razor Pages)プロジェクトを新規作成すると、「えっ、この Bootstrap まだこのバージョン?」と感じることがあります。既存プロジェクトの Bootstrap を安全に最新版へ更新したい、新規プロジェクトも最初から新しい Bootstrap を前提にしたい——そんなときの現実的な解決パターンを、Visual Studio と ASP.NET Core に絞って整理します。
Visual Studio で Bootstrap が古いままになる理由
Visual Studio 2022 などで「ASP.NET Core Web アプリ(MVC)」や古い「ASP.NET MVC(.NET Framework)」プロジェクトを作成すると、プロジェクト テンプレートに埋め込まれている Bootstrap がそのまま展開されます。
- テンプレートは Visual Studio / .NET のバージョンごとに作成時点のライブラリを同梱
- Bootstrap や jQuery の更新は、Visual Studio のテンプレート更新タイミングに依存
- ユーザーが「既定で使う Bootstrap バージョン」を GUI から切り替える設定は用意されていない
そのため、「新規作成したのに、プロジェクト内の Bootstrap が既に古い」 状態になりがちです。本記事では、
- 既存プロジェクトの Bootstrap を最新に更新する方法
- 新規プロジェクトで最初から新しい Bootstrap を使うためのテンプレート戦略
- 更新時にレイアウト崩れを防ぐ運用のポイント
を、実務で使えるレベルまで具体的に解説します。
既存プロジェクトの Bootstrap を更新する(最短ルート)
まずは、既にあるプロジェクトの Bootstrap を更新する方法です。ここでは、Visual Studio 2022 を想定し、主に次の 2 つのパターンを扱います。
- NuGet で Bootstrap を管理している場合(古い ASP.NET MVC や一部の Core プロジェクト)
- LibMan(libman)で管理している場合(ASP.NET Core テンプレートの標準に近い形)
NuGet で Bootstrap を更新する手順
ASP.NET MVC (.NET Framework) プロジェクトや、一部の ASP.NET Core プロジェクトでは、bootstrap が NuGet パッケージとして参照されていることがあります。最も手軽に更新したいだけなら、この方法が最短です。
- ソリューション エクスプローラーで対象プロジェクトを右クリック
- 「NuGet パッケージの管理」 を選択
- 上部タブから 「更新」 をクリック
- 検索ボックスに
bootstrapと入力し、表示されたパッケージを選択 - 右側の「バージョン」から更新したいバージョンを選び、「更新」ボタン をクリック
NuGet で更新すると、通常は Content や wwwroot 以下にある bootstrap.css / bootstrap.js が新しいものに差し替えられます。更新後は必ず以下を確認しましょう。
_Layout.cshtml等で参照しているパスが、更新後のパスと一致しているか- 独自の CSS を
bootstrap.cssに直接書き込んでいないか(上書きされていないか) - ビルド/発行後の成果物に、新しいファイルが正しく含まれているか
注意点:NuGet は本来「サーバー側 / .NET 用パッケージ」の配布が主目的で、Bootstrap のようなクライアント サイド ライブラリは、近年では LibMan や npm で管理するのが主流です。既存プロジェクトでは NuGet 更新で手早く済ませつつ、今後のプロジェクトでは LibMan / npm へ寄せる方向を検討するとよいでしょう。
LibMan(libman)で Bootstrap を更新する手順
ASP.NET Core の近年のテンプレートでは、クライアント側のライブラリ管理に LibMan(Library Manager) が使われていることがあります。プロジェクト直下に libman.json があれば、そのプロジェクトは LibMan 管理です。
例として、Bootstrap を CDNJS から取得している libman.json は次のような内容になっています。
{
"version": "1.0",
"defaultProvider": "cdnjs",
"libraries": [
{ "library": "[email protected]", "destination": "wwwroot/lib/bootstrap" }
]
}
この場合、Bootstrap のバージョンを更新するには、"library" の値を書き換え、Restore を実行するだけです。
libman.jsonを開く"library": "bootstrap@…"の部分を、希望バージョン(例:[email protected])に変更- ファイルを保存
- ソリューション エクスプローラー上で
libman.jsonを右クリックし、「復元(Restore)」 を実行
CLI 派であれば、プロジェクト フォルダーで次のコマンドを実行しても同じ結果が得られます。
libman install [email protected] -p cdnjs -d wwwroot/lib/bootstrap
LibMan は「指定したバージョンをそのまま落としてくる」シンプルなツールであり、npm のようなバージョン範囲指定(^5.3.0 や ~5.3.0)による自動追随は行いません。その代わりに、Visual Studio との統合や、構成のシンプルさがメリットです。
npm(+ビルドツール)で Bootstrap を更新する手順の概要
本格的にフロントエンドを運用しているプロジェクトでは、Bootstrap を npm で管理し、Webpack や Vite などでバンドルしていることも多いでしょう。その場合の更新は次のような流れになります。
package.jsonのbootstrap依存関係を更新- 例:
"bootstrap": "^5.3.3"
- 例:
- ターミナルで
npm installまたはnpm update bootstrapを実行 - SCSS を利用している場合は、Bootstrap の
scssエントリを読み込んでいるか確認 - ビルド(
npm run buildなど)を実行し、成果物をwwwroot等へ配置
ASP.NET Core アプリにおいて 長期的にメンテナンス していく前提なら、LibMan よりも npm+ビルドパイプラインのほうが、
- 依存関係の一元管理(他の JS ライブラリも含めて)
- 脆弱性チェック(
npm auditなど) - Tree Shaking や圧縮などの最適化
といった面で有利になるケースが増えていきます。
新規プロジェクト作成時の「既定」を新しい Bootstrap にする
ここがよく誤解されるポイントですが、Visual Studio の標準テンプレートが使う Bootstrap バージョンを、設定画面から変更することはできません。 テンプレート内容は、Visual Studio / .NET SDK に同梱されており、ユーザーが上書き更新する仕組みは提供されていないためです。
実務的な解決策は、次のいずれかになります。
- 自分(またはチーム)専用のカスタム プロジェクト テンプレートを作成する
dotnet newのカスタム テンプレートを作成し、コマンドからプロジェクトを生成する- CDN 参照に切り替え、「常に新しめの Bootstrap」を使う方針にする
方法1:Visual Studio のカスタム プロジェクト テンプレートを作る
Visual Studio 単体で完結する、最も分かりやすい方法です。「毎回同じ初期設定をするのが面倒」という場合は、まずこれを検討するとよいでしょう。
作成手順
- 通常どおり、Visual Studio で ASP.NET Core MVC プロジェクトを作成
- LibMan / npm / NuGet の好きな方法で Bootstrap を最新版に更新
_Layout.cshtml、_ValidationScriptsPartial.cshtmlなどのレイアウトやスクリプト参照を、自分好みの形に整える- 不要な jQuery / Popper.js 参照を削除
- Bootstrap 5 向けにクラス名を調整(例:
.form-groupをユーティリティクラスに置き換える 等)
- アプリをビルド・実行し、最低限の画面表示を確認しておく
- メニューから 「プロジェクト」→「テンプレートのエクスポート…」 を選択
- 「プロジェクト テンプレート」を選び、テンプレート名や説明、アイコンなどを設定して完了
これで、「新しいプロジェクトの作成」画面に、自分専用の MVC テンプレート が追加されます。以降はそれを選ぶだけで、毎回最新 Bootstrap 前提のプロジェクトを作ることができます。
カスタム テンプレートを育てるコツ
- 会社ロゴを仮のプレースホルダーとして配置しておく
- 共通のヘッダー/フッター構造(ナビバーなど)をある程度作り込んでおく
- よく使うコンポーネント(モーダル、フォーム、テーブル)を
_Partialで用意しておき、サンプルとして埋め込む - Bootstrap のバージョンを更新したら、テンプレート自体も更新し直す
Visual Studio のテンプレートは、個人の開発スタイルをカプセル化する のに非常に便利です。小さな改善でも、積み重ねると新規プロジェクトの作成コストを大きく下げてくれます。
方法2:dotnet new テンプレート化でチーム配布する
複数の開発者が関わるチームや CI 環境では、dotnet new テンプレートとして整備しておくと、IDE に依存しない形で再利用できます。
全体の流れは次のようになります。
- 基準となる MVC プロジェクト(Bootstrap 更新済み)を作成
- テンプレート用の
template.jsonを追加し、テンプレートとしてのメタデータを定義 - プロジェクト一式をテンプレート パック(フォルダ or NuGet パッケージ)として作成
- 各開発者の環境で
dotnet new --install <パスorパッケージ>を実行し、テンプレートをインストール - 以後は
dotnet new mvc-bs5 -n MyProjectのように CLI から生成
テンプレート側で、プロジェクト作成後に自動で libman restore などを実行させたい場合は、postActions を使います。
{
"$schema": "http://json.schemastore.org/template",
"author": "Your Company",
"classifications": [ "Web", "MVC" ],
"name": "MVC with Bootstrap5",
"identity": "Company.Web.Mvc.Bootstrap5",
"shortName": "mvc-bs5",
"sourceName": "MyMvcProject",
"preferNameDirectory": true,
"postActions": [
{
"actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025",
"description": "Run libman restore",
"manualInstructions": [
{ "text": "Run 'libman restore' in the project directory." }
],
"args": {
"executable": "libman",
"args": "restore"
},
"continueOnError": true
}
]
}
このようにしておくと、開発者はテンプレートからプロジェクトを作成するだけで、Bootstrap を含むフロントエンド資産が自動的に復元され、すぐに開発を始められます。
方法3:CDN 参照で「常に新しめ」を保つ
より簡易な方法として、Bootstrap をローカルに持たず、CDN(Content Delivery Network)から直接参照する 手があります。_Layout.cshtml 内の CSS/JS 参照を次のように差し替えます。
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="(SRI をここに)"
crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
integrity="(SRI をここに)"
crossorigin="anonymous"></script>
CDN 利用時のポイントは以下の通りです。
- メジャーバージョンは固定 する(例:
@5ではなく、できれば@5.3.3のように完全固定) @latestのような指定は、本番環境では避ける- 突然のメジャーアップデートでレイアウト崩れが発生するリスクが高いため
- 可能な限り Subresource Integrity(SRI) を設定し、改ざん検知を有効にする
- 社内ネットワークやオフライン環境では CDN が使えない場合があるので、要件を確認する
CDN は「とにかく手軽に新しめの Bootstrap を使いたい」ケースには便利ですが、企業システムなどではセキュリティポリシーやオフライン動作の観点から、ローカル配布+LibMan/npm を選ぶことが多い点も押さえておきましょう。
Bootstrap 更新時にレイアウトを崩さないためのチェックポイント
Bootstrap をメジャーバージョンごと更新するときは、クラス名やコンポーネント仕様の変更 によってレイアウトが崩れることがあります。特に注意したいパターンを整理しておきます。
| 更新パターン | 主な影響 | 対処のポイント |
|---|---|---|
| 3 → 4 / 5 | グリッドやフォーム、ユーティリティクラスが大幅変更。 Glyphicons が廃止され、アイコンは別ライブラリへ。 | デザインをほぼ作り直す覚悟で。 アイコンは Font Awesome / Bootstrap Icons などへ移行。 |
| 4 → 5 | jQuery 依存の廃止、フォーム構造の変更、ユーティリティクラス追加。 一部コンポーネントのマークアップが変化。 | .form-group など古いクラスを洗い出し、新しいユーティリティクラス( .mb-3 や .row-cols など)へ置き換え。 |
| 同一メジャー内のマイナー/パッチ更新 | 大きな崩れは少ないが、バグ修正や細かな仕様変更が入ることがある。 | 開発環境での表示確認と、自動テスト(E2E テスト)があると安心。 可能なら試験環境に段階的に展開。 |
更新前後で特に確認しておきたい UI の例は次の通りです。
- ナビバー(レスポンシブな折りたたみやドロップダウン)
- フォーム全般(バリデーションメッセージや入力枠の高さなど)
- モーダルダイアログ(開閉アニメーション・オーバーレイ)
- テーブル(罫線やストライプ、レスポンシブテーブル)
事前に「ここが崩れたら困る」という画面を洗い出しておき、Bootstrap 更新時には必ずそこを重点的に確認するようにしておくと、事故を減らせます。
LibMan・NuGet・npm・CDN の違いと選び方
ここまでに登場した 4 つの管理方式を、Visual Studio / ASP.NET Core の観点から比較してみます。
| 方式 | 手軽さ | 自動化 | ASP.NET Core での推奨度 | 主な用途・コメント |
|---|---|---|---|---|
NuGet(bootstrap) | ◎ | △ | △〜○ | Visual Studio から完結して更新可能。 既存 ASP.NET MVC プロジェクトを手早く延命させたいときに有効。 |
| LibMan | ○ | △(明示更新) | ○ | 軽量で Visual Studio と相性が良い。 ローカル配布が必要な社内システムなどで扱いやすい。 |
| npm(+ビルド) | △ | ◎ | ◎ | 依存関係を一元管理し、ビルドパイプラインに組み込みやすい。 SPA や大規模フロントエンドとの共存に最適。 |
| CDN 直参照 | ◎ | ○ | ○ | ローカルにファイルを持たずに済み、導入が非常に簡単。 ただしオフラインやセキュリティポリシーには注意。 |
既存プロジェクトで「とりあえず最新版にしたい」だけなら NuGet / LibMan、 これから長く育てていく新規プロジェクトなら npm+ビルド という組み合わせが現実的な落としどころになることが多いでしょう。
実務で役立つ運用パターン例
ここからは、Visual Studio 2022 と ASP.NET Core を前提に、Bootstrap を「壊さず、サボらず」更新していくための運用パターンをいくつか紹介します。
パターンA:シンプルな社内業務システム向け(LibMan ベース)
- クライアントライブラリは LibMan で固定バージョン管理
libman.jsonはリポジトリにコミット- 半年〜1年に一度、Bootstrap と主要ライブラリをまとめてバージョンアップ
- 更新前後で主要画面を手動確認
Visual Studio のみで開発している少人数チームなら、LibMan は非常に扱いやすい選択肢です。CI では libman restore をビルド前ステップに加えておけば、ビルド環境でも同じバージョンが復元されます。
パターンB:Web フロントをしっかり作り込む案件向け(npm+ビルド)
- Bootstrap を npm 管理し、SCSS からカスタマイズ
- Vite / Webpack / Gulp などで CSS/JS をバンドル・圧縮
npm auditや Dependabot 等で脆弱性チェックを自動化- CI で
npm ci→npm run buildを実行し、成果物だけを発行
このパターンでは、ASP.NET Core はあくまで API やサーバーサイド処理を担当し、フロントエンドの依存関係管理は npm に任せます。React / Vue などと共存させたい場合にも自然にスケールします。
パターンC:PoC・試作・デモ用途(CDN+カスタムテンプレート)
- プロジェクト テンプレートで最初から CDN 参照を埋め込んでおく
- Bootstrap のバージョンは メジャー固定+マイナー固定(例:5.3.3)
- PoC 用途のため、多少の UI 崩れは割り切る
短命なプロトタイプやデモでは、ライブラリをローカル配置するメリットが薄くなります。CDN と自作テンプレートを組み合わせることで、「VS で新規作成 → すぐデザイン調整」 に集中できる環境を作ることができます。
Bootstrap 更新に合わせた Visual Studio 側の小技
Bootstrap の更新と一緒に、Visual Studio プロジェクト周りも少し整えると、保守性がぐっと上がります。
_Layout.cshtml のカスタマイズをテンプレートに反映させる
Bootstrap を入れ替えるタイミングで、_Layout.cshtml を次のような方針で整理し、その状態をカスタムテンプレートとして固定しておくと便利です。
- CSS の読み込み順を統一
- Bootstrap → アイコンフォント → 共通 CSS → ページ固有 CSS
- JS の読み込み順を統一
- (必要なら)jQuery → Bootstrap → 共通 JS → ページ固有 JS
@RenderSection("Scripts", required: false)のようなセクションを忘れずに残す- ナビバーやフッターを部分ビューに切り出して読み込む
毎回のプロジェクトで同じ調整を行うくらいなら、一度テンプレート側に取り込んでおく のがおすすめです。
バンドル・圧縮の設定を見直す
古い ASP.NET MVC では BundleConfig.cs を使ったバンドル/圧縮機構がありますが、Bootstrap のバージョンを変えたり、ファイル構成を変えた場合は、ここに定義されたパスも合わせて見直します。
- 古い
~/Scripts/bootstrap.jsから、新しいパスへ差し替え - 不要になった jQuery バンドル(Bootstrap 5 移行後など)は整理する
- 自分で追加した CSS/JS が、意図した順序で読み込まれているか確認
ASP.NET Core では、既定で古い WebOptimizer 的なバンドル機構は含まれていませんが、サードパーティや npm ベースのビルドツールを導入している場合は、そちらの設定も忘れずに更新しておきましょう。
まとめ:Visual Studio で「最新 Bootstrap 前提」で開発するために
この記事で見てきたように、Visual Studio の既定テンプレートを一発で書き換えることはできません が、工夫次第で「常に新しい Bootstrap を前提にした開発体験」に近づけることができます。
- 既存プロジェクトは、
- NuGet なら「NuGet パッケージの管理」から
bootstrapを更新 - LibMan なら
libman.jsonの"library"を書き換えて Restore - npm 管理なら
package.jsonを更新してnpm install
- NuGet なら「NuGet パッケージの管理」から
- 新規プロジェクトの既定は、
- Visual Studio の カスタム プロジェクト テンプレート を作る
dotnet newテンプレートを用意してチームで共通化する- CDN 参照+メジャー固定で簡易的に最新系を使う
- 運用のコツとして、
- メジャーバージョンは固定(例:5.x 系を維持)
- 半年〜1年ごとにマイナー/パッチ更新をまとめて行う
- 更新前後での UI 回帰確認をルーチン化する
- よく使うレイアウトやナビバーはテンプレートに取り込んでおく
Visual Studio 2022 と ASP.NET Core の組み合わせでも、少しだけ最初の手間をかけておけば、「新規プロジェクトを作った瞬間から、最新 Bootstrap ベースでコーディングできる」快適な環境を用意できます。 一度よく使う構成をテンプレート化しておき、今後のプロジェクトではそのテンプレートを入り口にする——これが、Bootstrap 更新とテンプレート運用を同時にスマートに回す近道です。

コメント