FAQ とトラブルシューティング
本ドキュメントは Antdv Next Admin プロジェクトでよくある質問と解決策をまとめています。
目次
依存関係のインストール問題
Q: 依存関係のインストール時に停止またはタイムアウト
解決策:
bash
# 国内ミラーを使用
npm config set registry https://registry.npmmirror.com
# または pnpm を使用
pnpm installQ: 依存関係の競合警告
解決策:
bash
# node_modules を削除して再インストール
rm -rf node_modules
rm package-lock.json
npm install開発環境の問題
Q: 開発サーバー起動後に白画面
考えられる原因と解決策:
- ポートが使用中
bash
# ポートを変更
npm run dev -- --port 3001- 環境変数が有効でない
bash
# 開発サーバーを再起動
# .env ファイルを変更した後は再起動が必要- ブラウザキャッシュ
bash
# 強制リフレッシュ:Cmd/Ctrl + Shift + R
# またはブラウザキャッシュをクリアQ: ホットリロード(HMR)が機能しない
解決策:
bash
# 1. Vite 設定を確認
# vite.config.ts で hmr 設定が正しいことを確認
server: {
hmr: {
overlay: true,
},
}
# 2. 開発サーバーを再起動
# 3. ブラウザコンソールで WebSocket 接続エラーがないか確認Q: ログイン後に空白ページに遷移
考えられる原因:
- 権限ルートが正しく生成されていない
- KeepAlive キャッシュの問題
解決策:
typescript
// permission store がルートを正しく生成しているか確認
const permissionStore = usePermissionStore()
await permissionStore.generateRoutes()
// キャッシュをクリアして再試行
localStorage.clear()
location.reload()ルーティング問題
Q: ページリフレッシュで 404
原因: フロントエンドルーティングモードが history の場合、サーバー設定が必要
解決策:
Nginx 設定:
nginx
location / {
try_files $uri $uri/ /index.html;
}Vercel:
json
// vercel.json
{
"rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
}Q: 新しいページを追加後にメニューが表示されない
チェックリスト:
- ルートが
routes.tsに正しく追加されているか - ルート meta に
titleが設定されているか - そのルートへのアクセス権限があるか
- 再ログイン(権限ルートは再生成が必要)
Q: KeepAlive キャッシュが機能しない
考えられる原因:
typescript
// 1. ルート設定を確認
{
meta: {
keepAlive: true, // true に設定されていることを確認
title: 'ページタイトル' // title の設定が必須
}
}
// 2. コンポーネント名がルート名と一致しているか確認
export default {
name: 'Dashboard', // ルート名と一致する必要あり
}
// 3. キャッシュリストを確認
tabsStore.cachedViews.includes('Dashboard')権限の問題
Q: ボタン権限ディレクティブが機能しない
調査手順:
typescript
// 1. 権限コードが正しいか確認
<a-button v-permission="'user.create'">新規</a-button>
// 2. ユーザーがその権限を持っているか確認
const authStore = useAuthStore()
console.log(authStore.userPermissions) // ユーザー権限リストを表示
// 3. ユーザーがログインしているか確認
console.log(authStore.isLoggedIn)Q: ルートガードが無限ループ
原因: ルートガード内のロジックエラーによる循環遷移
解決策:
typescript
// ルートガード内で正しく判定
router.beforeEach((to, from, next) => {
const authStore = useAuthStore()
// ✅ 正しい:ログイン状態を先に判定
if (!authStore.isLoggedIn && to.path !== '/login') {
next('/login')
return
}
// ✅ 正しい:ログイン済みでログインページにアクセス時はホームへ
if (authStore.isLoggedIn && to.path === '/login') {
next('/')
return
}
next()
})Mock データの問題
Q: Mock インターフェースが機能しない
調査手順:
- 環境変数を確認
bash
# .env.development
VITE_USE_MOCK=true- インターフェースアドレスを確認
typescript
// /api で始まる必要あり
request.get('/api/users') // ✅ 正しい
request.get('/users') // ❌ 誤り- Mock ファイルを確認
typescript
// mock/handlers/*.mock.ts
export default defineMock([
{
url: '/api/users', // /api で始まる必要あり
method: 'GET',
// ...
}
])- 開発サーバーを再起動
Q: Mock データ変更後に反映されない
解決策:
Mock サーバーはホットリロードをサポートしていますが、時々再起動が必要です:
bash
# 開発サーバーを再起動
npm run devビルド・デプロイ問題
Q: ビルド失敗
よくあるエラーと解決策:
- TypeScript エラー
bash
# 型チェックを実行して具体的なエラーを確認
npm run type-check
# 型エラーを修正- メモリ不足
bash
# Node メモリ制限を増やす
export NODE_OPTIONS=--max-old-space-size=4096
npm run build- パスエラー
typescript
// vite.config.ts で base 設定を確認
export default {
base: '/', // デプロイ環境に応じて調整
}Q: デプロイ後にリソースが 404
考えられる原因:
- Base パス設定エラー
typescript
// サブディレクトリにデプロイする場合
export default {
base: '/admin/', // サブディレクトリパス
}- サーバー設定の問題
- 静的リソースディレクトリ設定が正しいか確認
- ファイルパーミッションを確認
Q: デプロイ後に白画面
調査手順:
- ブラウザコンソールのエラーを確認
- ネットワークリクエストが成功しているか確認
- 環境変数が正しいか確認
bash
# .env.production
VITE_API_BASE_URL=https://api.example.comTypeScript の問題
Q: 型エラー:Cannot find module '@/components/xxx'
解決策:
json
// tsconfig.json で paths 設定が正しいか確認
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}VS Code または TypeScript サービスを再起動
Q: Vue ファイルの型エラー
解決策:
typescript
// Vue 型がインストールされているか確認
npm install -D vue-tsc
// tsconfig.json に Vue ファイルを含める
{
"include": ["src/**/*.ts", "src/**/*.vue"]
}Q: Ref 型推論エラー
解決策:
typescript
// ✅ 正しい:型を明示的に指定
const count = ref<number>(0)
const user = ref<User | null>(null)
// ✅ 正しい:初期値から推論
const count = ref(0) // Ref<number> と推論パフォーマンス最適化の推奨事項
1. 初回ロード最適化
typescript
// vite.config.ts
export default {
build: {
rollupOptions: {
output: {
manualChunks: {
// パッケージ分割ロード
'vendor': ['vue', 'vue-router', 'pinia'],
'antdv': ['antdv-next'],
},
},
},
},
}2. コンポーネント遅延ロード
typescript
const Dashboard = () => import('@/views/dashboard/index.vue')3. 画像最適化
vue
<!-- WebP 形式を使用 -->
<img src="@/assets/logo.webp" alt="logo">
<!-- または遅延ロード -->
<img v-lazy="imageSrc" alt="image">4. メモリリークを避ける
typescript
// タイマーをクリア
onUnmounted(() => {
clearInterval(timer)
})
// イベントリスナーをクリア
onUnmounted(() => {
window.removeEventListener('resize', handleResize)
})
// Store 購読をクリア
const unsubscribe = store.$subscribe(() => {})
onUnmounted(() => {
unsubscribe()
})ヘルプの取得方法
- ドキュメントを確認:対応する機能モジュールのドキュメントを注意深く読む
- サンプルを確認:
src/views/examples/のサンプルコードを参照 - Issue を検索:GitHub Issues で類似の問題を検索
- Issue を提出:問題が解決しない場合は Issue を提出し、以下を添付:
- 問題の説明
- 再現手順
- エラーのスクリーンショットまたはログ
- 環境情報(Node バージョン、OS など)
デバッグテクニック集
Vue DevTools
- Vue DevTools ブラウザ拡張をインストール
- コンポーネントツリーと Props を表示
- Pinia Store の状態を確認
- ルート情報を表示
コンソールデバッグ
typescript
// ルート情報を出力
console.log('Current route:', router.currentRoute.value)
// Store 状態を出力
console.log('Auth store:', authStore.$state)
// 環境変数を出力
console.log('Env:', import.meta.env)Network パネル
- API リクエストが成功しているか確認
- リクエストパラメータとレスポンスデータを表示
- CORS エラーがないか確認
