Vue.js: UIコンポーネントライブラリ

最終更新:2026-10-20

UIコンポーネントライブラリを使えば、車輪の再発明を避けることができます。Button、Table、Form、Modalといった一般的なコンポーネントを、わずか数行のコードで利用できます。Vue 3のエコシステムには、5つ以上の主要なUIライブラリ(Element Plus、Naive UI、Vuetify、PrimeVue、Ant Design Vue)が存在し、適切なものを選択することで、開発時間を50%短縮できます。

UIライブラリを選ぶ際には、コンポーネントの豊富さ/TypeScriptのサポート/テーマのカスタマイズ/パッケージサイズ/コミュニティの活発さという5つの重要な要素を考慮する必要があります。このレッスンでは、適切な選択ができるようお手伝いします。

1. 学習内容


2. 「5テーブル」コンポーネントの悪夢が5回繰り返される

(1) 課題:すべてのテーブルを一から作成しなければならないこと

アリスの管理画面には、それぞれ一から作成された5種類のテーブルビューがありました:

5つのテーブル × 200行 = 1,000行の重複コード。1つのスタイルを変更するたびに、5か所の変更を行わなければなりません。

(2) UIコンポーネントライブラリのソリューション:el-tableが1つあり、5か所で再利用されている

VUE
<!-- ✅ Correct Version: Use Element Plus el-table -->
<template>
  <el-table :data="orders" stripe>
    <el-table-column prop="id" label="ID" width="80" />
    <el-table-column prop="user" label="User" />
    <el-table-column prop="total" label="Total" :formatter="formatTotal" />
  </el-table>
</template>

<script setup>
import { ElTable, ElTableColumn } from 'element-plus'

const orders = ref([...])
function formatTotal(row) { return `$${row.total}` }
</script>

1つのelテーブルが5か所で再利用されています。すべてのテーブルは統一されたスタイルと一貫した操作性を備えています。

(3) 収益

Element Plus を使用した後:


3. Vue 3の主要なUIライブラリトップ5の比較

(1) 主要5データベースのクイックリファレンス

ライブラリ スタイル コンポーネント数 パッケージサイズ TypeScript 互換性
Element Plus デスクトップ 80以上 約250KB ✅ 中国で最も人気、バックエンド
Naive UI デスクトップ 80以上 約150KB ✅ モダンなスタイル、Vue 3推奨
Vuetify Material 80以上 約300KB ✅ Material Designアプリ
PrimeVue 複数のスタイル 90以上 約200KB ✅ 多彩なテーマと充実したコンポーネント
Ant Design Vue Ant Design 70以上 約180KB ✅ Ant Designスタイル、エンタープライズグレード

(2) 5つの側面における詳細な比較

側面 Element Plus Naive UI Vuetify PrimeVue Ant Design Vue
GitHub ⭐ 24k+ 16k+ 40k+ 11k+ 20k+
Vue 3: ファーストクラス・シチズン ✅ ✅ ✅ ✅ ✅
TypeScript ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐
テーマのカスタマイズ CSS変数 CSS変数 SCSS SCSS + テーマ LESS + テーマ
バッグのサイズ ミディアム スモール ラージ ミディアム ミディアム
中国語のドキュメント ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
コミュニティ活動 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
習得の難易度 易しい 易しい 中程度 中程度 中程度

(3) 5つの重要な選び方のポイント

シナリオ 推奨事項
国内向けバックオフィスシステム(Eコマース/CRM/ERP) Element Plus ⭐⭐⭐⭐⭐
モダンなスタイルのSaaS 素朴なUI ⭐⭐⭐⭐
マテリアルデザインアプリ Vuetify ⭐⭐⭐⭐
複数のテーマ(ダーク/ライト/高コントラスト) PrimeVue ⭐⭐⭐⭐
Ant Design エコシステム Ant Design Vue ⭐⭐⭐⭐

4. Element Plusの実践

(1) インストール

BASH
npm install element-plus @element-plus/icons-vue

(2) グローバル登録(簡易版)

(3) オンデマンドインポート(推奨;サイズを50%削減)

BASH
npm install -D unplugin-vue-components unplugin-auto-import
TS
// vite.config.ts
import AutoImport from 'unplugin-auto-import'
import Components from 'unplugin-vue-components'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    AutoImport({
      resolvers: [ElementPlusResolver()],
      dts: 'src/auto-imports.d.ts'
    }),
    Components({
      resolvers: [ElementPlusResolver()],
      dts: 'src/components.d.ts'
    })
  ]
})

(4) 5つの主要な構成要素

▶ サンプル:5つの主要な構成要素

VUE
<el-button>Button</el-button>
<el-form>Form</el-form>
<el-table>Table</el-table>
<el-dialog>Dialog</el-dialog>
<el-message>Message</el-message>
▶ 試してみよう

出力:

TEXT
button / form / table / dialog / message の 5 つが表示される
各コンポーネントはテーマ変数の色で描画される
el-message は呼び出し時に画面上部へトースト表示される

5. テーマのカスタマイズ

(1) CSS変数による上書き(推奨)

SCSS
// src/styles/element-plus.scss
:root {
 --el-color-primary: #42b883; // Change the primary color to Vue Green
  --el-color-success: #67c23a;
  --el-color-warning: #e6a23c;
  --el-color-danger: #f56c6c;
  --el-color-info: #909399;
  
  --el-border-radius-base: 8px;      // Increase Corner Radius
  --el-font-size-base: 14px;
}
JS
// main.js
import './styles/element-plus.scss'
import 'element-plus/dist/index.css'

(2) SCSS変数(高度なカスタマイズ)

SCSS
// src/styles/element-plus-vars.scss
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
  $colors: (
    'primary': ('base': #42b883),
    'success': ('base': #67c23a),
    'warning': ('base': #e6a23c),
    'danger':  ('base': #f56c6c),
    'info':    ('base': #909399)
  )
);
JS
// main.js
import './styles/element-plus-vars.scss'
import 'element-plus/dist/index.css'

(3) ダークモード

SCSS
// Dark Theme
:root {
  --el-color-primary: #42b883;
  --el-bg-color: #1a1a1a;
  --el-text-color-primary: #ffffff;
}

html.dark {
  --el-bg-color: #1a1a1a;
  --el-text-color-primary: #ffffff;
}

6. 部品の二次包装

(1) ビジネスコンポーネントの例

VUE
<!-- Usage:3 All set 1 A table -->
<BusinessTable :data="orders" :columns="orderColumns" :total="100" />

(2) カプセル化の5つの主な利点


7. アイコンライブラリの統合

(1) インストール

BASH
npm install -D unplugin-icons @iconify-json/carbon

(2) 設定

TS
// vite.config.ts
import Icons from 'unplugin-icons/vite'
import { FileSystemIconLoader } from 'unplugin-icons/dist/loader'

export default defineConfig({
  plugins: [
    Icons({
      compiler: 'vue3',
      autoInstall: true,  // Automatically Install Icon Sets
      collections: {
        carbon: () => import('@iconify-json/carbon/icons.json').then(i => i.default)
      }
    })
  ]
})

(3) 使い方

(4) 主要なアイコンライブラリ5選の比較

ライブラリ アイコン数 読み込み方法 パッケージサイズ
Iconify 200,000以上 オンデマンド(推奨) 0
要素アイコン 300以上 すべて / オンデマンド 100KB
Material Icons 2,000以上 すべて / オンデマンド 300KB
Font Awesome 7,000以上 すべて 1MB以上
Heroicons 300以上 オンデマンド 50KB

8. 総合演習:テーマのカスタマイズ5選

▶ サンプル:5つの主要テーマのカスタマイズ

SCSS
// 1. CSS Variable
:root { --el-color-primary: #42b883; }

// 2. SCSS Variable
@forward 'var.scss' with ($colors: ...);

// 3. Dark Mode
:root.dark { --el-bg-color: #1a1a1a; }

// 4. Custom Themes
@import 'element-plus/theme-chalk/dark/css-vars.css';

// 5. Change Theme(Runtime)
document.documentElement.classList.toggle('dark')
▶ 試してみよう

出力:

TEXT
:root の --el-color-primary を #42b883 に変えるとボタンが緑になる
.dark クラスを付けると背景が #1a1a1a に切り替わる
実行時に classList.toggle で即座にテーマが入れ替わる

(1) 📊 主要なUIライブラリトップ5の比較

ライブラリ ⭐ パッケージサイズ スタイル
Element Plus 24k ミディアム デスクトップ
シンプルなUI 16k コンパクト モダン
Vuetify 40k Large Material
PrimeVue 11k ミディアム 複数のスタイル
Ant Design Vue 20k Medium Ant Design

(2) 📊 主要なアイコンライブラリ5選

ライブラリ アイコンの数
Iconify 200,000以上
要素アイコン 300以上
素材 2,000以上
Font Awesome 7,000以上
ヒーローアイコン 300以上

(3) 📊 よくある5つの間違いに関するクイックリファレンス

エラー 症状 解決策
Baoda パッケージ全体をインポート バンドルサイズ 500KB 必要に応じて unplugin-vue-components を使用
テーマの色を変更できない SCSSの使用 CSS変数に切り替える
アイコンが表示されない フォントの読み込みに失敗しました unplugin-icons SVG を使用する
TS 型エラー インポートで型が指定されていません @types パッケージをインストールしてください
国際化の失敗 ロケールの不一致 i18nの設定

▶ サンプル:ネイティブ CSS で「コンポーネントライブラリ風」ボタンとカードを作る

💡 ブラウザで動く等価デモです。Element Plus は読み込まず、props + slot + CSS クラスだけでボタンとカードを再現し、「コンポーネントライブラリの本質は統一 API + 統一ビジュアル」だと確認します。

▶ 実行例を展開(78 行)
▶ 試してみよう

出力:

TEXT
Default / Primary / Delete の 3 種類のボタンが並ぶ
Delete をクリックすると 800ms のローディング後、メッセージが「削除しました」に変わる
カードには「Order #1024」ヘッダーと 3 items, total ¥267 + Pay now ボタンが表示される



❓ よくある質問

Q トップ5のUIライブラリのうち、どれを選ぶべきですか?
A 国内向けのバックエンドや管理画面には → Element Plus(最も人気があります)。モダンなSaaSには → Naive UI(コンパクトで洗練されています)。Materialスタイルのアプリには → Vuetify。Ant Designエコシステムには → Ant Design Vue。
Q フルインポートとオンデマンドインポート、どちらが良いですか?
A フルインポートは簡単ですが、バンドルサイズが大きくなります(500KB)。サイズを50%削減できるオンデマンドインポート(unplugin-vue-components)をお勧めします。
Q Element Plusのテーマカラーを変更するにはどうすればよいですか?
A CSS変数--el-color-primaryを上書きしてください。SCSS変数をカスタマイズするには、unplugin-element-plusプラグインを使用してテーマをコンパイルする必要があります。
Q Element Plus は TypeScript を完全にサポートしていますか?
A はい。Element Plus 2.x は TypeScript で完全に書き直されており、完全な型推論を提供しています。
Q UIライブラリを組み合わせて使用することはできますか(例:Element Plus + Naive UI)?
A 技術的には可能ですが、スタイルの競合を解決するのは難しい場合があります。組み合わせることはお勧めしません。代わりに、メインのライブラリを1つと、軽量なライブラリを1つ選ぶことをお勧めします(例:Element Plus + Headless UI)。
Q unplugin-vue-components とグローバル登録の違いは?
A unplugin は必要に応じてコンポーネントを自動的にインポートするため、バンドルサイズが 50% 小さくなります。グローバル登録は簡単ですが、バンドルサイズが大きくなってしまいます。オンデマンドでの読み込みをお勧めします。
Q アイコンライブラリはどのように選べばいいですか?
A Iconify(複数のセットにまたがる20万個以上のアイコン)+必要に応じてunplugin-iconsを使用します。実行時のオーバーヘッドはゼロです。

📖 まとめ


📝 練習問題

  1. 基礎問題(難易度:⭐)

    Element Plus を Vue 3 プロジェクトに組み込む方法:

    • オンデマンドでのインストールとインポート
    • 5つの主要コンポーネント(ボタン/フォーム/テーブル/ダイアログ/メッセージ)
    • テーマの色をプロジェクトのメインカラーに変更する
  2. 上級問題(難易度:⭐⭐)

    Element Plusとの完全な統合を実施する:

    • 5つのコンポーネントの統合(ボタン/フォーム/テーブル/ダイアログ/メッセージ)
    • ダークモードの切り替え
    • アイコンのアイコン化(10種類のアイコン)
    • BusinessTable コンポーネントを再ラップする
  3. チャレンジ問題(難易度:⭐⭐⭐)

    完全な「エンタープライズレベルのUIライブラリ統合」を実現する:

    1. Element Plus と Naive UI の組み合わせ(プライマリ + セカンダリ)
    2. 5つの主要な色(基本色/補助色/成功/注意/危険)
    3. ダークモード + 自動フォロー機能
    4. 二次包装用のビジネスコンポーネント10以上
    5. 20万個以上のアイコンをアイコン化
    6. TypeScriptの厳格な型付け
    7. パフォーマンスの最適化(オンデマンド + ツリーシェーキング + CDN)
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%