スポンサーリンク

Angularでbootstrapを使う方法やng-bootstrapを使うべきかについて解説

はじめに

フロントエンドのデザインでよく使われるbootstrapをAngularで使う場合、どのように環境構築すれば良いか解説していきます。

ng-bootstrapを使うべきか

Angularでbootstrapを使う方法として、
bootstrapのパッケージを使うか、Angular固有のng-bootstrapのパッケージを使うかがあります。

bootstrapの公式ドキュメントを確認すると、Angular等のJavaScriptフレームワークは、完全な互換性はないため、ng-bootstrapを使うことを推奨しています。

公式が推奨しているので、特に理由がない場合は、ng-bootstrapを使った方が良いかと思います。

Bootstrap CSSはどのフレームワークでも使用できますが、Bootstrap JavaScriptは、DOMの完全な知識を前提とするReact、Vue、AngularなどのJavaScriptフレームワークとは完全に互換性がありません。Bootstrapとフレームワークの両方が同じDOM要素を変更しようとすることがあり、その結果、ドロップダウンが「開いた」位置で動かなくなるなどのバグが発生します。

このタイプのフレームワークを使用している人のためのより良い代替案は、Bootstrap JavaScriptの代わりにフレームワーク固有のパッケージを使用することです。ここでは、最も人気のあるオプションをいくつか紹介します:

Angular: ng-bootstrap

https://getbootstrap.jp/docs/5.3/getting-started/javascript/

環境

  • Angular:18系

ng-bootstrapの使う方法

環境構築

以下のコマンドをangularプロジェクトで実行するだけで、bootstrapの環境は準備できます。

ng add @ng-bootstrap/ng-bootstrap

このコマンドを実行すれば、自動でstyle.scssやangular.jsonの設定など、環境構築に必要なものは自動で行ってくれます。

bootstrapの機能を確かめる

bootstrapの機能が使えるようになったかを確かめます。

以下は、bootstrapのグリッドの機能使ったhtmlになります。
これをhtmlテンプレートに張り付けて動作確認します。

<div class="container text-center">
    <div class="row">
        <div class="col">
        カラム1
        </div>
        <div class="col">
        カラム2
        </div>
        <div class="col">
        カラム3
        </div>
    </div>
</div>

実行してみると、以下のように3列のグリッドレイアウトで表示されていて、bootstrapの機能が動いていることが確認できました。

bootstrapを使う場合

ng-bootstrapを使わずに、bootstrapパッケージを使う場合も解説しておきます。

インストール

まずは、以下のコマンドで最新のbootstrapパッケージをnpmでインストールします。

npm install bootstrap

angular.jsonの設定

angular.jsonの設定で、bootstrapのcssファイルを、stylesキーに組み込みます。

            "styles": [
              ~
              "node_modules/bootstrap/dist/css/bootstrap.min.css"
            ],

次は、bootstrapのjavascriptのファイルをscriptsキーに組み込みます。

"scripts": ["node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"]

必要な対応は以上です。これでng-bootstrapと同じようにhtmlを記述したら、
bootstrapの機能が動いていることを確認できます。

まとめ

フロントエンドでは、bootstrapは有名なものなので、Angularでプロジェクト開発する際に、bootstrap経験者がいるか確認して、経験者が多ければプロジェクトに組み込むことで、デザインの実装がしやすくなるかと思います。