Laravel Mix について(Bootstrap Sassのカスタマイズ)

2020/10/07

Webプログラマーでもフロントエンドを作成することはあります。

Laravel を学習する上でもViewの画面は必ず作成しますよね。

ただ、プロトタイプを作成するのに1からView画面を作成するのは面倒です。

そこで以前、「Bootstrap Snippets」を使ってLaravelのBlade機能を使って汎用性の高いテンプレートを作成しました。

今回はここからもう一歩進んで、Bootstrap の Sass をカスタマイズしてBootstrap臭をとってみようと思います。

 

完成形

BootstrapのSassをカスタマイズし「Laravel Mix」でコンパイルします。

出来上がった完成形が以下のデモページになります。

 

手順

前提として「Blade レイアウト定義 × Bootstrap Snippets」をベースに話を進めます。

1.Laravel Mixのインストール

Sass をコンパイルするには Laravel Mix をインストールしなければなりません。

Laravel Mix は NPM のパッケージです。ですので NPMコマンドでインストールします。

まずは NPM が入っているか確認してみましょう。


$ npm -v

 

もし、NPM のバージョンが表示されなければ、NPM が入っていません。

以下に NPM のインストール方法をご覧ください。

NPM がインストールされていれば、次にLaravelプロジェクト配下で npm install のコマンドを実行します。

引数なしの場合は package.json の内容に従ってパッケージがインストールされます。


$ npm install

 

NPMコマンドに関しては以下のページでまとめています。

上記のコマンドで package-lock.json というファイルが作成できていればOKです。

 

2.コンパイル元と先を確認

Laravel のプロジェクト直下に webpack.mix.js があるので開きます。


mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css');

 

Sassメソッドの第一引数がコンパイル元のSASSファイルになります。

第二引数がコンパイル後のCSSファイルになります。

 

3.Bootstrapソース(Sass)をLaravelに設置

今回は Bootstrap4.3 のソースコードをダウンロードすることにしました。

以下のBootstrapの公式サイトからダウンロードします。

ダウンロードしたSASSファイルを Lravel のプロジェクトに設置します。

resources/sass 直下に bootstrap というディレクトリを作成し、そこにダウンロードした Bootstrap のSASSファイルを置きます。

ファイル名の頭にアンダーバーがついているファイルは パーシャルファイル といいます。

アンダーバーをつける意味は「SCSSからCSSに変換するときに個別のCSSファイルとして出力しないでね」という意味になります。

このパーシャルファイルをすべてインポートしているのが bootstrap.scss になります。

 

4.Sassのカスタマイズ

resources/sass/_variables.scss を開いて Bootstrap の Sass の変数を設定します。


/*====================================

Bootstrap SASSカスタマイズファイル

====================================*/

/*
Typography
———————————————*/
$font-family-sans-serif: 'Nunito', sans-serif;
$font-size-base: 0.9rem;
$line-height-base: 1.6;

/*
Colors
———————————————*/
$blue: #3490dc;
$indigo: #6574cd;
$purple: #9561e2;
$pink: #f66d9b;
$red: #e3342f;
$orange: #f6993f;
$yellow: #ffed4a;
$green: #38c172;
$teal: #4dc0b5;
$cyan: #6cb2eb;

// Gray for use across Bootstrap.
$gray-base:              #000 !default;
$gray-darker:            lighten($gray-base, 13.5%) !default; // #222
$gray-dark:              lighten($gray-base, 20%) !default;   // #333
$gray:                   lighten($gray-base, 33.5%) !default; // #555
$gray-light:             lighten($gray-base, 46.7%) !default; // #777
$gray-lighter:           lighten($gray-base, 93.5%) !default; // #eee

$primary: #f25f70;

/*
Body
———————————————*/
html,
body {
    height: 100%;
}

#page-content {
    flex: 1 0 auto;
}

#sticky-footer {
    flex-shrink: none;
}

// Background color for ``.
$body-bg:               #f8fafc !default;
// Global text color on ``.
$text-color:            $gray-dark !default;

 

Sassでの変数宣言の仕方


$変数名:値;

 
Bootstrapの原色を変更したければ以下のような記述になります。


$primary: purple;
$danger: red;

 

次にコンパイル元となるファイル resources/sass/app.scss を開いて以下のように記述。


// Fonts
@import url('https://fonts.googleapis.com/css?family=Nunito');

// Variables
@import 'variables';

// Bootstrap 本体
@import 'bootstrap/bootstrap.scss';

 

Bootstrap本体をインポートする前に先ほどSassの変数をセットしたvariablesパーシャルファイルをインポートします。

 

5.Sassのコンパイル

NPMコマンドでSassファイルをCSSファイルにコンパイルします。


$ npm run dev

# Sassファイルを変更したら自動的にコンパイル
$ npm run watch

 

6.Bladeファイルを修正

master.bootstrap.blade.php を修正

CSSの読み込み先を変更します。


<!--Bootstrap CSS -->
{{--<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">--}}
<link rel="stylesheet" href="{{ asset('css/app.css') }}">

 
Laravel の Blade ではassetヘルパーを使って画像やCSSといったリソースデータを読み込むようにします。

 

header_bootstrap.blade.php を修正

Bootstrapのプライマリカラーを使ってヘッダーの色を変更してみます。


<nav class="navbar navbar-expand-lg navbar-dark bg-primary static-top">

 

7.動作確認

Bootstrapのプライマリカラーはデフォルトでは 青 なのですが、Sassの変数で指定した色に変わりました。

 
以上です。

 

Bootstrap 4 フロントエンド開発の教科書

バックエンドエンジニアでもフロント側を改修するケースはあります。特に Laravel はCSSフレームワークとして「Bootstrap」を採用しているので、Laravel 使いのエンジニアとしては、 Bootstrap は押さえておきたいスキルの1つです。本書は、Bootstrap について、機能全般を網羅している良書です。コンポーネントごとに説明があり、図で動作結果があるので初心者にとっても分かりやすく解説されています。最後のページにあるサンプルは実践でテンプレートとしても使えます。もしもの時の為に一冊保険で持っておいて損はないと思います。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築