1. 概要と前提条件

Fillowは、SaaSプラットフォーム、CRM、社内業務管理システム向けに設計されたBootstrap 5ベースの管理画面用フロントエンドテンプレートです。ApexChartsによるデータ可視化、各種フォームバリデーション、データテーブル、ライト/ダークモード切り替えなど、SaaSダッシュボード開発で頻繁に求められるUIコンポーネントがあらかじめモジュール化されています。

本稿では、配布パッケージの展開から、Node.js環境でのローカルビルド、SCSS変数の編集によるブランディング調整、不要アセットの削除、本番環境向けバンドル出力までの実装手順を解説します。

動作に必要な前提ツール

作業を開始する前に、ローカル環境に以下のランタイムが導入されていることを確認してください。

  • Node.js: v18.x または v20.x LTS(古いバージョンや奇数バージョンではSCSSコンパイラがエラーを吐く場合があるためLTSを推奨)

  • パッケージマネージャー: npm(v9以上)または Yarn(v1.22以上)

  • テキストエディタ: VS Code、WebStormなど

  • ブラウザ: 最新のChrome、Firefox、Safari、Edge(開発者ツールを使用)

ターミナルでバージョンを確認します。

codeBash

node -v
npm -v

2. ディレクトリ構成の把握

入手したアーカイブ(ZIPファイル)を展開すると、通常は以下のようなフォルダ階層になっています。

codeText

fillow-admin-template/
├── documentation/          # 公式仕様書・ライブラリ一覧
├── package.json            # 依存関係およびビルドスクリプト定義
├── gulpfile.js             # タスクランナー定義(Gulp構成の場合)
├── src/                    # 開発用ソースコード
│   ├── assets/
│   │   ├── images/         # 画像アセット
│   │   ├── js/             # アプリケーションロジック・プラグイン初期化
│   │   └── scss/           # スタイルシートソース
│   │       ├── components/ # 個別UIパーツ用SCSS
│   │       ├── layout/     # ヘッダー・サイドバー・フッター
│   │       └── _variables.scss # カラーパレットやフォントの設定
│   └── html/               # HTMLテンプレートまたはPugファイル
└── dist/ (または public/)   # コンパイル済みの静的ファイル群
  • 実務で直接触る必要があるのは主に src/ 配下です。

  • dist/ 配下のCSSやJSを直接書き換えると、次回のビルド時にすべて上書きされるため、必ず src/scss/ や src/js/ を編集します。


3. 依存パッケージのインストールとローカル起動

プロジェクトルート(package.json が存在するディレクトリ)に移動し、開発に必要な依存モジュールをインストールします。

codeBash

cd fillow-admin-template
npm install

※ネットワーク環境やNodeバージョンによってエラーが出る場合は、キャッシュをクリアするか、レガシーピア依存関係を許可してインストールを実行してください。

codeBash

npm install --legacy-peer-deps

開発用ローカルサーバーの起動

インストール完了後、開発用サーバーを立ち上げます。テンプレートの実装形式に応じて、以下のいずれかのコマンドが割り当てられています(package.json 内の scripts を確認してください)。

codeBash

# Gulp構成の場合
npm run dev
# または
npx gulp watch

# Webpack / Vite 構成の場合
npm run start

コマンドが正常に通ると、ローカルホスト(例: http://localhost:3000 または http://localhost:8080)上で自動的にブラウザが開き、ダッシュボード画面が表示されます。この状態では、src/ 配下のファイルを変更・保存するたびに差分ビルドとブラウザのホットリロードが実行されます。


4. テーマカスタマイズとスタイル設計

自社サービスや対象システムのデザイン要件に合わせて、カラー、フォント、レイアウト初期状態を変更します。

4.1 ブランドカラー(Primary Color)の変更

メインカラーを変更する場合、全CSSを置換するのではなく、src/assets/scss/_variables.scss(または src/scss/abstracts/_variables.scss)を編集します。

codeScss

// src/assets/scss/_variables.scss

// 規定のテーマカラーを自社ブランドカラーに上書き
$primary:       #1E40AF; // 既定値から任意のブルーへ変更
$secondary:     #64748B;
$success:       #10B981;
$info:          #06B6D4;
$warning:       #F59E0B;
$danger:        #EF4444;
$light:         #F8FAFC;
$dark:          #0F172A;

// フォントファミリーの指定
$font-family-base: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;

// 角丸(ボーダーラディウス)の調整
$border-radius:               0.375rem;
$border-radius-sm:            0.25rem;
$border-radius-lg:            0.5rem;

ファイルを保存するとタスクランナーがSCSSを自動再コンパイルし、ボタン、アクティブなナビゲーション、チャートのアクセントカラー等に一括反映されます。

4.2 レイアウト構造の制御(属性値の変更)

FillowはHTML要素の data-* 属性を用いて、サイドバーの位置、ヘッダーの固定、ライト/ダークモードを制御しています。

初期状態をダークモードやミニマルサイドバーに固定したい場合は、src/html または各画面の <body>(または #main-wrapper)タグに付与されている属性値を修正します。

codeHtml

<!-- 標準設定例: ライトモード、縦型ナビゲーション、固定ヘッダー -->
<div id="main-wrapper" 
     data-theme-version="light" 
     data-layout="vertical" 
     data-nav-headerbg="color_1" 
     data-headerbg="color_1" 
     data-sidebar-style="full" 
     data-sidebarbg="color_1" 
     data-sidebar-position="fixed" 
     data-header-position="fixed" 
     data-container="wide">

ダークモードを標準にする場合は、以下のように書き換えます。

codeHtml

<div id="main-wrapper" data-theme-version="dark">

動的に切り替える仕組みは src/assets/js/custom.js 内に定義されているため、バックエンドからユーザー設定を読み出して属性値をレンダリング時に差し替えるか、JavaScriptでローカルストレージと連動させる実装を追加してください。


5. JavaScriptプラグインの管理とチャート設定

管理画面テンプレートの表示速度が低下する主な原因は、デモ用プラグインの読み込み過多です。Fillowには多数のサードパーティ製ライブラリが同梱されているため、不要なものを整理して運用します。

5.1 不要プラグインの選定

デモ画面でしか使わないプラグイン(例: 複数の異なるカレンダープラグイン、未使用のフォーム装飾ライブラリ)は、HTML下部の <script> タグ一覧から削除します。

codeHtml

<!-- 使用しない場合は削除してバンドルサイズを抑制 -->
<!-- <script src="./vendor/flot/jquery.flot.js"></script> -->
<!-- <script src="./vendor/peity/jquery.peity.min.js"></script> -->

5.2 ApexChartsの初期化とAPI連携

メインダッシュボードの売上チャートやアクティブユーザー数のグラフは、通常 src/assets/js/plugins-init/apex-chart-init.js または dashboard-1.js に記述されています。

バックエンドAPIから取得した実データを流し込むための最小構成例を以下に示します。

codeJavaScript

// 売上推移チャートの初期化例
document.addEventListener("DOMContentLoaded", function () {
    const chartElement = document.querySelector("#revenueChart");

    if (!chartElement) return;

    // 基本オプションの定義
    const options = {
        series: [{
            name: '成約件数',
            data: [] // 初期状態は空配列
        }],
        chart: {
            height: 350,
            type: 'area',
            toolbar: { show: false }
        },
        colors: ['#1E40AF'],
        dataLabels: { enabled: false },
        stroke: { curve: 'smooth', width: 2 },
        xaxis: {
            categories: []
        }
    };

    const chart = new ApexCharts(chartElement, options);
    chart.render();

    // 内部APIから非同期でデータを取得して更新する処理
    fetch('/api/admin/metrics/revenue')
        .then(response => response.json())
        .then(apiData => {
            chart.updateOptions({
                xaxis: {
                    categories: apiData.labels // 例: ['1月', '2月', '3月', ...]
                }
            });
            chart.updateSeries([{
                data: apiData.values // 例: [32, 45, 68, ...]
            }]);
        })
        .catch(error => {
            console.error('メトリクスデータの取得に失敗しました:', error);
        });
});

6. 本番環境向けビルドとデプロイ

開発作業が完了したら、静的ファイルを圧縮・最適化して本番用アセットを書き出します。

6.1 プロダクションビルドの実行

ターミナルで以下のコマンドを実行します。

codeBash

npm run build

実行後、SCSSの圧縮(ミニファイ)、JavaScriptの難読化/統合、画像パスの再計算が行われ、dist/ フォルダに出力されます。

6.2 不要なソースの除外確認

本番サーバーに転送する際は、開発用ファイルを含めないよう整理してください。

転送に含める対象:

  • dist/ 配下の全ファイル(HTML、CSS、JS、画像、ベンダーライブラリ)

転送から除外する対象:

  • node_modules/

  • src/

  • gulpfile.js / webpack.config.js

  • .git/ / .gitignore

  • package.json / package-lock.json

6.3 Webサーバー(Nginx)の設定例

静的サイトとして配備する場合、またはLaravel、Go、Node.jsなどのバックエンドと同一ホスト内で配信する場合のNginx基本設定です。

codeNginx

server {
    listen 80;
    server_name dashboard.example.com;

    root /var/www/fillow-admin/dist;
    index index.html;

    # 静的アセットのキャッシュ設定
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }

    # HTMLのルーティング
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 404/エラーページ
    error_page 404 /page-error-404.html;
    error_page 500 502 503 504 /page-error-500.html;
}

7. 実務で直面しやすい問題とトラブルシューティング

Q1. npm install 実行時に node-sass または node-gyp のビルドエラーが出る

  • 原因: テンプレートが古い node-sass に依存している一方、作業端末のNode.jsバージョンが新しすぎる場合に発生します。

  • 解決策:

    1. package.json を開き、node-sass の記載があれば削除し、sass(Dart Sass)に置き換えます。

      codeBash

      npm uninstall node-sass
      npm install sass --save-dev
    2. Gulpタスク内で require('gulp-sass')(require('sass')) に書き換えて再ビルドします。

Q2. 本番環境に配備するとアイコンフォントや画像が404エラーになる

  • 原因: SCSS内の相対パス設定と、配備先サーバーの公開ディレクトリの階層が一致していません。

  • 解決策:

    • src/assets/scss/_variables.scss 付近にある $image-path や $font-path の変数値を確認します。

    • サブディレクトリ(例: https://example.com/admin/)に配備する場合は、ベースURLを相対パス(./)で解決するようビルド設定を調整してください。

Q3. サイドバーのトグルボタンが動作しない

  • 原因: jQueryまたはBootstrapのJavaScriptが重複して読み込まれているか、読み込み順序が不正です。

  • 解決策:

    • HTMLソース末尾の読み込み順序を点検してください。

    • 必須構成:

      1. vendor/global/global.min.js(jQuery、Bootstrapバンドル等を含むコア)

      2. プラグイン系スクリプト(Select2、Datatables等)

      3. js/custom.min.js(トグル処理・UI制御)

      4. js/dlabnav-init.js(ナビゲーション初期化)


8. 保守・拡張におけるチェックリスト

システム構築後、長期運用を見据えて以下の項目を整理しておくことを推奨します。

  1. SCSSの共通化:
    新しい画面やカスタムUIを追加する際は、既存のCSSファイルを直書きせず、src/assets/scss/pages/ 配下に画面専用のSCSSファイルを作成し、main.scss から @import すること。

  2. ライブラリのライセンス管理:
    vendor/ 配下に配置されているオープンソースライブラリのライセンス形式(MIT、Apache 2.0等)を確認し、商用利用規約と競合していないか監査すること。

  3. アクセシビリティとレスポンシブ検証:
    デスクトップだけでなく、タブレット(768px)やスマートフォン(375px〜414px)幅でサイドバーがオーバーレイ表示になり、操作を妨げないかテストすること。

以上の手順に従って環境構築と調整を行うことで、Fillowテンプレート本来の軽量性を保ちながら、保守性の高いSaaS管理基盤を短期間で立ち上げることが可能です。