ColorlibHQ/AdminLTE

⭐ 44,796 🍴 18,226 CSS📄 MIT License GitHubで見る →

主な特徴

  • **Bootstrap 5ベース**: 最新のBootstrap 5.3.7を採用し、モダンなUI/UXを実現
  • **完全レスポンシブ**: モバイルからデスクトップまで、あらゆる画面サイズに対応
  • **WCAG 2.1 AA準拠**: 包括的なアクセシビリティ機能を標準装備
  • **TypeScript対応**: 型安全な開発が可能
  • **モジュラー設計**: 必要なコンポーネントのみを使用可能
  • **豊富なUIコンポーネント**: カード、チャート、テーブル、フォームなど30以上のサンプルページ
  • **ダークモード対応**: システム設定に応じた自動切り替え
  • **高度なビルドシステム**: Astro、Rollup、PostCSSによる最適化されたビルドプロセス
  • **アクティブな開発**: Discord コミュニティと継続的なアップデート
  • **MITライセンス**: 商用・個人利用問わず無料で使用可能

リポジトリ解析: ColorlibHQ/AdminLTE

基本情報

  • リポジトリ名: ColorlibHQ/AdminLTE
  • 主要言語: CSS
  • スター数: 44,796
  • フォーク数: 18,226
  • 最終更新: 2025年1月(v4.0.0-rc3)
  • ライセンス: MIT License
  • トピックス: admin-dashboard, bootstrap5, responsive-design, admin-template, javascript, sass, typescript

概要

一言で言うと

AdminLTEは、Bootstrap 5をベースにした完全レスポンシブ対応の管理画面テンプレートで、WCAG 2.1 AA準拠のアクセシビリティ機能を備え、モダンなUIコンポーネントと開発者フレンドリーな設計を提供する、エンタープライズレベルの管理パネルソリューションです。

詳細説明

AdminLTEは、Webアプリケーションの管理画面を迅速に構築するためのオープンソーステンプレートです。Bootstrap 5フレームワークとJavaScriptプラグインをベースに構築されており、高度にカスタマイズ可能で使いやすい設計となっています。小型のモバイルデバイスから大型のデスクトップまで、様々な画面解像度に対応しています。

v4.0.0-rc3では、本番環境デプロイメントの問題が解決され、FTP、静的ホスティング、CDNなど様々な環境で確実に動作するようになりました。パスの自動解決、RTL CSSの修正、依存関係の更新など、実用性を重視した改善が施されています。

主な特徴

  • Bootstrap 5ベース: 最新のBootstrap 5.3.7を採用し、モダンなUI/UXを実現
  • 完全レスポンシブ: モバイルからデスクトップまで、あらゆる画面サイズに対応
  • WCAG 2.1 AA準拠: 包括的なアクセシビリティ機能を標準装備
  • TypeScript対応: 型安全な開発が可能
  • モジュラー設計: 必要なコンポーネントのみを使用可能
  • 豊富なUIコンポーネント: カード、チャート、テーブル、フォームなど30以上のサンプルページ
  • ダークモード対応: システム設定に応じた自動切り替え
  • 高度なビルドシステム: Astro、Rollup、PostCSSによる最適化されたビルドプロセス
  • アクティブな開発: Discord コミュニティと継続的なアップデート
  • MITライセンス: 商用・個人利用問わず無料で使用可能

使用方法

インストール

前提条件

  • Node.js LTS バージョン(開発環境の場合)
  • 最新のWebブラウザ(Chrome、Firefox、Safari、Edge)
  • 基本的なHTML、CSS、JavaScriptの知識

インストール手順

# 方法1: NPM経由
npm install admin-lte

# 方法2: Yarn経由
yarn add admin-lte

# 方法3: CDN経由(最も簡単)
# HTMLファイルに以下を追加するだけ

基本的な使い方

Hello World相当の例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>AdminLTE 4 | Starter</title>
    
    <!-- Google Font: Source Sans Pro -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css" integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q=" crossorigin="anonymous">
    <!-- overlayScrollbars -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css" integrity="sha384-k1Dod2vmmJfgM5aazBHAIrMlh5O9CQHn8OBY0JP+vZnwM2JqBKTKv5hyJyqJ7EJO" crossorigin="anonymous">
    <!-- Bootstrap Icons -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css" crossorigin="anonymous">
    <!-- AdminLTE -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-rc3/dist/css/adminlte.min.css">
</head>
<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
    <div class="app-wrapper">
        <!-- Navbar -->
        <nav class="app-header navbar navbar-expand bg-body">
            <div class="container-fluid">
                <ul class="navbar-nav">
                    <li class="nav-item">
                        <a class="nav-link" data-lte-toggle="sidebar" href="#" role="button">
                            <i class="bi bi-list"></i>
                        </a>
                    </li>
                </ul>
            </div>
        </nav>
        
        <!-- Main Sidebar -->
        <aside class="app-sidebar bg-body-secondary shadow" data-bs-theme="dark">
            <div class="sidebar-brand">
                <a href="./index.html" class="brand-link">
                    <span class="brand-text fw-light">AdminLTE 4</span>
                </a>
            </div>
            <!-- Sidebar Menu -->
            <div class="sidebar-wrapper">
                <nav class="mt-2">
                    <ul class="nav sidebar-menu flex-column" role="menu">
                        <li class="nav-item">
                            <a href="#" class="nav-link">
                                <i class="nav-icon bi bi-speedometer"></i>
                                <p>Dashboard</p>
                            </a>
                        </li>
                    </ul>
                </nav>
            </div>
        </aside>
        
        <!-- Content Wrapper -->
        <main class="app-main">
            <div class="app-content-header">
                <div class="container-fluid">
                    <h3 class="mb-0">Dashboard</h3>
                </div>
            </div>
            <div class="app-content">
                <div class="container-fluid">
                    <h1>Hello World!</h1>
                    <p>This is a minimal AdminLTE 4 setup.</p>
                </div>
            </div>
        </main>
    </div>
    
    <!-- REQUIRED SCRIPTS -->
    <script src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js" integrity="sha384-Bm6bLnkmKUxpJKdJJwTYoWa7kD1vf6m6+VqwJe5MU7w5LF2rMPJrcGLPN3BOcr3g" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/admin-lte@4.0.0-rc3/dist/js/adminlte.min.js"></script>
</body>
</html>

実践的な使用例

<!-- ダッシュボードのカード例 -->
<div class="row">
    <div class="col-lg-3 col-6">
        <!-- Small Box -->
        <div class="small-box text-bg-primary">
            <div class="inner">
                <h3>150</h3>
                <p>New Orders</p>
            </div>
            <svg class="small-box-icon" fill="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
                <path d="M2.25 2.25a.75.75 0 000 1.5h1.386c.17 0 .318.114.362.278l2.558 9.592a3.752 3.752 0 00-2.806 3.63c0 .414.336.75.75.75h15.75a.75.75 0 000-1.5H5.378A2.25 2.25 0 017.5 15h11.218a.75.75 0 00.674-.421 60.358 60.358 0 002.96-7.228.75.75 0 00-.525-.965A60.864 60.864 0 005.68 4.509l-.232-.867A1.875 1.875 0 003.636 2.25H2.25zM3.75 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0zM16.5 20.25a1.5 1.5 0 113 0 1.5 1.5 0 01-3 0z"></path>
            </svg>
            <a href="#" class="small-box-footer link-light link-underline-opacity-0 link-underline-opacity-50-hover">
                More info <i class="bi bi-link-45deg"></i>
            </a>
        </div>
    </div>
    <!-- ./col -->
</div>

<!-- データテーブル例 -->
<div class="card">
    <div class="card-header">
        <h3 class="card-title">DataTable with minimal features & hover style</h3>
    </div>
    <div class="card-body">
        <table class="table table-bordered table-hover">
            <thead>
                <tr>
                    <th style="width: 10px">#</th>
                    <th>Task</th>
                    <th>Progress</th>
                    <th style="width: 40px">Label</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1.</td>
                    <td>Update software</td>
                    <td>
                        <div class="progress progress-xs">
                            <div class="progress-bar bg-danger" style="width: 55%"></div>
                        </div>
                    </td>
                    <td><span class="badge text-bg-danger">55%</span></td>
                </tr>
            </tbody>
        </table>
    </div>
</div>

高度な使い方

開発環境のセットアップ

# リポジトリのクローン
git clone https://github.com/ColorlibHQ/AdminLTE.git
cd AdminLTE

# 依存関係のインストール
npm install

# 開発サーバーの起動(自動リロード付き)
npm start
# ブラウザが自動的に http://localhost:3000 を開きます

# 本番ビルドの作成
npm run production

カスタムテーマの作成

// カスタムSCSSファイル
// 変数のオーバーライド
$primary: #007bff;
$secondary: #6c757d;
$success: #28a745;
$info: #17a2b8;
$warning: #ffc107;
$danger: #dc3545;

// AdminLTEのインポート
@import "admin-lte/src/scss/adminlte";

// カスタムスタイル
.my-custom-component {
  background-color: $primary;
  padding: 1rem;
}

TypeScriptでのカスタムウィジェット作成

import { CardWidget } from 'admin-lte/src/ts/card-widget';

// カスタムカードウィジェットの拡張
class CustomCardWidget extends CardWidget {
  constructor(element: HTMLElement) {
    super(element);
    this.init();
  }

  init(): void {
    // カスタム初期化ロジック
    this.element.addEventListener('click', () => {
      console.log('Custom card clicked!');
    });
  }
}

// 初期化
document.addEventListener('DOMContentLoaded', () => {
  const cards = document.querySelectorAll('.custom-card');
  cards.forEach(card => new CustomCardWidget(card as HTMLElement));
});

ドキュメント・リソース

公式ドキュメント

  • README.md: プロジェクトの概要、クイックスタート、ブラウザサポート、コントリビューションガイド
  • CHANGELOG.md: バージョンごとの変更履歴、新機能、バグ修正の詳細
  • ACCESSIBILITY-COMPLIANCE.md: WCAG 2.1 AA準拠の詳細、アクセシビリティ機能の実装ガイド
  • docs/ディレクトリ: MDXフォーマットのコンポーネントドキュメント(Astroで生成)
  • 公式サイト: https://adminlte.io - ライブデモ、プレミアムテンプレート情報

サンプル・デモ

  • dist/index.html: メインダッシュボードデモ(チャート、ウィジェット、統計情報)
  • dist/index2.html: 代替ダッシュボードレイアウト
  • dist/index3.html: 第3のダッシュボードバリエーション
  • examples/login.html & login-v2.html: ログインページの2つのデザイン
  • examples/register.html & register-v2.html: ユーザー登録ページのバリエーション
  • examples/lockscreen.html: ロックスクリーン画面
  • UI/general.html: 一般的なUIコンポーネントのショーケース
  • UI/icons.html: Bootstrap Iconsの完全なリスト
  • UI/timeline.html: タイムラインコンポーネントのデモ
  • forms/general.html: フォームコンポーネントと検証
  • tables/simple.html: テーブルレイアウトとスタイル
  • widgets/: カード、情報ボックス、スモールボックスのコレクション

チュートリアル・ガイド

  • Discordコミュニティ: https://discord.gg/jfdvjwFqfz - リアルタイムサポートとディスカッション
  • GitHubリポジトリ: 継続的な開発、Issue報告、プルリクエスト
  • 公式デモサイト: https://adminlte.io/themes/v3/ - v3のライブプレビュー(v4は開発中)
  • 貢献ガイド: CONTRIBUTING.mdでコードスタイル、プルリクエストのガイドライン

技術的詳細

アーキテクチャ

全体構造

AdminLTE v4はモジュラーアーキテクチャを採用し、コンポーネントベースの設計で構築されています。SCSSとTypeScriptを使用してメンテナビリティとタイプセーフティを確保し、Astroを使用してHTMLテンプレートを生成しています。

ディレクトリ構成

AdminLTE/
├── dist/              # ビルド済みファイル(本番環境用)
│   ├── css/          # コンパイル済みCSS(RTL対応、ソースマップ付き)
│   ├── js/           # コンパイル済みJS(ES6モジュール、UMDビルド)
│   ├── assets/img/   # 画像アセット(ロゴ、アバター、アイコン)
│   └── *.html        # デモページ(ダッシュボード、フォーム、テーブル等)
├── src/               # ソースファイル
│   ├── scss/         # Sassソースファイル(コンポーネントごとに分割)
│   ├── ts/           # TypeScriptソースファイル(ウィジェットロジック)
│   ├── html/         # Astroテンプレート(コンポーネントとページ)
│   ├── config/       # ビルド設定(Rollup、PostCSS、Astro)
│   └── assets/       # 静的アセット
├── package.json      # プロジェクト設定とスクリプト
└── README.md         # プロジェクトドキュメント

主要コンポーネント

  • CardWidget (カードウィジェット): 折りたたみ、全画面表示、閉じる機能を持つカード

    • 場所: src/ts/card-widget.ts
    • 依存: Utilクラス
    • インターフェース: collapse(), expand(), remove(), maximize()
  • PushMenu (サイドバートグル): サイドバーの表示/非表示制御

    • 場所: src/ts/push-menu.ts
    • 依存: Layoutクラス
    • インターフェース: toggle(), open(), close()
  • Treeview (ツリービュー): 階層的なメニューナビゲーション

    • 場所: src/ts/treeview.ts
    • 依存: Utilクラス
    • インターフェース: init(), expand(), collapse()
  • Layout (レイアウト管理): ページ全体のレイアウト制御

    • 場所: src/ts/layout.ts
    • 依存: 独立
    • インターフェース: fixLayoutHeight(), fixLoginRegisterHeight()

技術スタック

コア技術

  • 言語:
    • HTML5(セマンティックマークアップ、アクセシビリティ属性)
    • CSS3/Sass(CSSカスタムプロパティ、Flexbox、Grid)
    • TypeScript 5.x(型安全なJavaScript開発)
  • フレームワーク:
    • Bootstrap 5.3.7(UIコンポーネント、グリッドシステム、ユーティリティ)
    • Astro 2.x(静的サイト生成、コンポーネントベース開発)
  • 主要ライブラリ:
    • Bootstrap Icons 1.13.1: 1,800以上のアイコンセット
    • OverlayScrollbars 2.11.0: カスタムスクロールバー
    • ApexCharts 3.37.1: インタラクティブチャート
    • jsvectormap 1.5.3: ベクターマップ
    • @fontsource/source-sans-3 5.0.12: Webフォント

開発・運用ツール

  • ビルドツール:
    • Rollup: TypeScriptのES6モジュールバンドル
    • Sass: CSSプリプロセッサー
    • PostCSS: CSSポストプロセッサー(Autoprefixer、rtlcss)
    • Terser: JavaScriptミニファイ
    • CleanCSS: CSSミニファイ
  • テスト:
    • ESLint: JavaScript/TypeScriptリント
    • Stylelint: CSS/SCSSリント
    • BundleWatch: バンドルサイズ監視
    • Prettier: コードフォーマッター
  • CI/CD:
    • GitHub Actions: 自動テスト、ビルド
    • Netlify: デモサイトの自動デプロイ
    • Dependabot: 依存関係の自動更新
  • デプロイ:
    • CDNホスティング(jsDelivr、unpkg)
    • 静的ホスティング(GitHub Pages、Netlify、Vercel)
    • 伝統的FTP/サーバーホスティング

設計パターン・手法

  • コンポーネントベースアーキテクチャ: 各UI要素を独立したコンポーネントとして実装
  • BEM (Block Element Modifier): CSSの命名規則でメンテナビリティを向上
  • モジュールパターン: TypeScriptクラスを使用したモジュール化
  • Observerパターン: イベントリスナーによるコンポーネント間の通信
  • ユーティリティファーストCSS: Bootstrapのユーティリティクラスを活用

データフロー・処理フロー

  1. 初期化フロー:

    • DOM読み込み完了 → AdminLTEクラス初期化
    • コンポーネント自動検出 (data-lte-*属性)
    • イベントリスナー登録
  2. ユーザーインタラクション:

    • イベント発生 (クリック、ホバー等)
    • イベントハンドラー実行
    • DOM更新とアニメーション
    • Bootstrapコンポーネントとの連携
  3. レスポンシブ対応:

    • ブレークポイント検出
    • レイアウト調整
    • サイドバー自動折りたたみ/展開

API・インターフェース

公開API

JavaScript API

  • 目的: プログラマティックなコンポーネント制御
  • 使用例:
// カードウィジェットの操作
const cardElement = document.getElementById('myCard');
const cardWidget = new CardWidget(cardElement);
cardWidget.collapse(); // カードを折りたたむ
cardWidget.expand();   // カードを展開
cardWidget.maximize(); // カードを最大化

// サイドバーの制御
const pushMenu = new PushMenu('[data-lte-toggle="sidebar"]');
pushMenu.toggle(); // サイドバーの表示/非表示切り替え

// Treeviewの初期化
const treeview = new Treeview('.nav-treeview');
treeview.init();

データ属性API

<!-- データ属性による動作指定 -->
<button data-lte-toggle="sidebar">サイドバートグル</button>
<div class="card" data-lte-card-widget="collapse">
  <!-- 自動的に折りたたみ機能が追加される -->
</div>
<nav data-lte-treeview="init">
  <!-- 自動的にTreeviewが初期化される -->
</nav>

設定・カスタマイズ

SCSS変数のオーバーライド

// _variables.scssをオーバーライド
$enable-shadows: true;
$enable-gradients: true;
$enable-transitions: true;

// カラースキーム
$primary: #007bff;
$secondary: #6c757d;
$success: #28a745;
$info: #17a2b8;
$warning: #ffc107;
$danger: #dc3545;

// サイドバー設定
$sidebar-width: 250px;
$sidebar-mini-width: 4.6rem;
$sidebar-bg: $dark;

// ヘッダー設定
$main-header-height: 3.5rem;
$main-header-bg: $white;

プラグイン開発

// カスタムプラグインの例
import { AdminLTE } from 'admin-lte';

class MyCustomPlugin {
  constructor(private element: HTMLElement) {
    this.init();
  }

  init(): void {
    // AdminLTEのユーティリティを使用
    AdminLTE.Util.findElement(this.element, '.my-selector');
    
    // イベントの発火
    AdminLTE.Util.trigger(this.element, 'custom.event');
  }
}

// プラグインの登録
AdminLTE.Plugins.register('myPlugin', MyCustomPlugin);

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • ファイルサイズ (ミニファイ版):

    • adminlte.min.css: ~65KB (gzipped: ~12KB)
    • adminlte.min.js: ~25KB (gzipped: ~7KB)
    • 合計: ~90KB (gzipped: ~19KB)
  • パフォーマンス指標:

    • First Contentful Paint (FCP): < 1.5s
    • Time to Interactive (TTI): < 3.5s
    • Lighthouseスコア: 90+
  • 最適化手法:

    • CSS/JSのミニファイとgzip圧縮
    • クリティカルCSSのインライン化
    • 遅延読み込み対応(lazy loading)
    • Tree-shakingによる不要コードの除去
    • CDN配信推奨

スケーラビリティ

  • コンポーネントベース: 必要な機能のみを選択的に使用可能
  • モジュラーCSS: 不要なスタイルを除外してファイルサイズ削減
  • 静的ファイル: サーバーサイド処理不要で高速配信
  • ブラウザキャッシュ: 長期キャッシュ対応のファイル名
  • マルチデバイス対応: 様々な画面サイズで最適表示

制限事項

  • 技術的な制限:

    • IE11はサポート外(Bootstrap 5の制約)
    • JavaScriptが無効な環境では一部機能が制限
    • ネストが深いメニューではパフォーマンス低下の可能性
  • 運用上の制限:

    • 大量のDOM要素(数千以上)ではパフォーマンス調整が必要
    • リアルタイム更新が頻繁な場合は追加の最適化が必要
    • メモリ制限のあるデバイスでは機能を選択的に使用

評価・所感

技術的評価

強み

  • 完成度の高さ: 即座に使える30以上のテンプレートページと豊富なUIコンポーネント
  • アクセシビリティ重視: WCAG 2.1 AA準拠で、障害者にも配慮した設計
  • 最新技術の採用: Bootstrap 5、TypeScript、Astroなど最新の技術スタック
  • 本番環境対応: v4.0.0-rc3での重要なバグ修正により実用性が大幅に向上
  • 開発者体験: 詳細なドキュメント、型定義、自動リロードなど
  • コミュニティ: 活発なDiscordコミュニティとGitHubでの継続的な開発

改善の余地

  • React/Vue統合: モダンJSフレームワークとの公式統合がまだ不十分
  • テストカバレッジ: ユニットテストやE2Eテストの充実が望まれる
  • プラグインエコシステム: サードパーティプラグインのエコシステムが発展途上
  • ドキュメントの日本語化: 英語ドキュメントのみで、多言語対応が限定的

向いている用途

  • 企業向け管理システム: CRM、ERP、HRMなどの業務アプリケーション
  • SaaSダッシュボード: マルチテナント対応の管理画面
  • データ分析ツール: チャート、テーブルを活用した分析ダッシュボード
  • コンテンツ管理システム: ブログ、CMS、メディア管理
  • 社内システム: 勤怠管理、プロジェクト管理、ドキュメント管理
  • MVP開発: プロトタイプやMVPの迅速な構築

向いていない用途

  • 一般公開向けWebサイト: ランディングページ、コーポレートサイトなど
  • シンプルな静的サイト: オーバースペックでパフォーマンスが低下
  • ユニークなデザインが必要なプロジェクト: 管理画面の典型的なデザインから逸脱が困難
  • リアルタイムアプリケーション: WebSocketやリアルタイム更新が中心のアプリ
  • モバイルファーストのアプリ: ネイティブアプリのUI/UXが必要な場合

総評

AdminLTE v4は、管理画面テンプレートのデファクトスタンダードとしての地位を確立しています。Bootstrap 5への移行、TypeScriptの採用、アクセシビリティへの本格的な取り組みなど、時代の要求に応えた進化を遂げています。

特にv4.0.0-rc3での本番環境デプロイメント問題の解決は、実際のプロジェクトでの使用に大きな一歩となりました。無料で商用利用可能、豊富なコンポーネント、優れたドキュメント、活発なコミュニティという強みを持ち、管理画面を必要とするプロジェクトにとって信頼できる選択肢です。

ただし、ReactやVueなどのモダンフレームワークとの統合を考えている場合は、コミュニティ製のラッパーを使用するか、他の選択肢を検討する必要があるかもしれません。全体として、迅速に高品質な管理画面を構築したいプロジェクトにとって、AdminLTEは依然として優れた選択肢です。