From ecfa21d56ce0d4b905cc44e954ff7a9f2f4af1f5 Mon Sep 17 00:00:00 2001 From: Yutaka Kurosaki Date: Sat, 29 Nov 2025 11:40:08 +0900 Subject: [PATCH] feat: Add DocumentSeeder with initial documents - Add DocumentSeeder with Home, Getting Started, and Markdown Guide - Update DatabaseSeeder to call UserSeeder and DocumentSeeder - Update UserSeeder to set is_admin flag - Update README with seeder documentation --- README.md | 29 ++- src/database/seeders/DatabaseSeeder.php | 12 +- src/database/seeders/DocumentSeeder.php | 258 ++++++++++++++++++++++++ src/database/seeders/UserSeeder.php | 6 +- 4 files changed, 293 insertions(+), 12 deletions(-) create mode 100644 src/database/seeders/DocumentSeeder.php diff --git a/README.md b/README.md index 7a9de9e..948b543 100644 --- a/README.md +++ b/README.md @@ -112,8 +112,18 @@ docker exec kb_php npm run build # マイグレーション docker exec kb_php php artisan migrate -# 初期ユーザーの作成(オプション) +# 初期データの投入(管理者ユーザー + 初期ドキュメント) +docker exec kb_php php artisan db:seed +``` + +個別にシーダーを実行する場合: + +```bash +# 管理者ユーザーのみ docker exec kb_php php artisan db:seed --class=UserSeeder + +# 初期ドキュメントのみ +docker exec kb_php php artisan db:seed --class=DocumentSeeder ``` ### 6. 管理者の設定 @@ -134,11 +144,26 @@ docker exec kb_php php artisan user:set-admin admin@example.com --remove | phpMyAdmin | http://localhost:9701 | | MailHog | http://localhost:9725 | -## 初期アカウント +## 初期データ + +### 初期アカウント UserSeederを実行した場合: - **Email**: admin@example.com - **Password**: password +- **権限**: 管理者 + +### 初期ドキュメント + +DocumentSeederを実行すると以下のドキュメントが作成されます: + +| ドキュメント | 内容 | +|------------|------| +| Home | ホームページ(ウェルカムメッセージ、機能紹介) | +| Getting Started | 使い方ガイド(ドキュメント作成、Wikiリンク、ショートカット) | +| Markdown Guide | Markdown記法ガイド(見出し、リスト、コード、テーブル等) | + +※ 既存のドキュメントがある場合、DocumentSeederはスキップされます。 ## よく使うコマンド diff --git a/src/database/seeders/DatabaseSeeder.php b/src/database/seeders/DatabaseSeeder.php index 6b901f8..5e64ca5 100644 --- a/src/database/seeders/DatabaseSeeder.php +++ b/src/database/seeders/DatabaseSeeder.php @@ -2,24 +2,18 @@ namespace Database\Seeders; -use App\Models\User; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { - use WithoutModelEvents; - /** * Seed the application's database. */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', + $this->call([ + UserSeeder::class, + DocumentSeeder::class, ]); } } diff --git a/src/database/seeders/DocumentSeeder.php b/src/database/seeders/DocumentSeeder.php new file mode 100644 index 0000000..e7d3ca4 --- /dev/null +++ b/src/database/seeders/DocumentSeeder.php @@ -0,0 +1,258 @@ + 0) { + $this->command->info('Documents already exist. Skipping...'); + return; + } + + $documents = [ + [ + 'title' => 'Home', + 'path' => 'Home.md', + 'slug' => 'home', + 'content' => $this->getHomeContent(), + ], + [ + 'title' => 'Getting Started', + 'path' => 'Getting Started.md', + 'slug' => 'getting-started', + 'content' => $this->getGettingStartedContent(), + ], + [ + 'title' => 'Markdown Guide', + 'path' => 'Markdown Guide.md', + 'slug' => 'markdown-guide', + 'content' => $this->getMarkdownGuideContent(), + ], + ]; + + foreach ($documents as $doc) { + Document::create([ + 'title' => $doc['title'], + 'path' => $doc['path'], + 'slug' => $doc['slug'], + 'content' => $doc['content'], + 'rendered_html' => Document::renderMarkdown($doc['content']), + ]); + + $this->command->info("Created: {$doc['title']}"); + } + + $this->command->info('Initial documents created successfully!'); + } + + private function getHomeContent(): string + { + return <<<'MARKDOWN' +# Welcome to Knowledge Base + +ナレッジベースへようこそ!このアプリケーションは、Markdownで知識を整理・共有するためのツールです。 + +## 🚀 クイックスタート + +- **Ctrl+K** (Mac: **Cmd+K**) でクイックスイッチャーを開く +- サイドバーの「New Document」で新規ドキュメント作成 +- `[[ページ名]]` でWikiリンクを作成 + +## 📚 ドキュメント + +- [[Getting Started]] - 基本的な使い方 +- [[Markdown Guide]] - Markdown記法ガイド + +## ✨ 機能 + +| 機能 | 説明 | +|------|------| +| Wikiリンク | `[[ページ名]]` で簡単リンク | +| 階層構造 | タイトルに `/` を含めて整理 | +| 全文検索 | クイックスイッチャーで高速検索 | +| シンタックスハイライト | コードブロックを美しく表示 | + +## 🔗 便利なリンク + +- [Laravel Documentation](https://laravel.com/docs) +- [Markdown Cheatsheet](https://www.markdownguide.org/cheat-sheet/) +MARKDOWN; + } + + private function getGettingStartedContent(): string + { + return <<<'MARKDOWN' +# Getting Started + +このガイドでは、ナレッジベースの基本的な使い方を説明します。 + +## ドキュメントの作成 + +1. サイドバーの「**New Document**」ボタンをクリック +2. タイトルを入力(`/` を含めると階層化されます) +3. Markdownでコンテンツを記述 +4. 「Save」で保存 + +### 階層構造の例 + +タイトルに `/` を含めると自動的にフォルダ構造が作成されます: + +- `Laravel/Eloquent/Relationships` → Laravel > Eloquent フォルダ内 +- `プロジェクト/2024/メモ` → プロジェクト > 2024 フォルダ内 + +## Wikiリンク + +他のドキュメントへのリンクは `[[ページ名]]` 記法で作成できます: + +```markdown +詳細は [[Markdown Guide]] を参照してください。 +[[Home]] に戻る +``` + +存在しないページへのリンクをクリックすると、新規作成画面が開きます。 + +## キーボードショートカット + +| ショートカット | 機能 | +|--------------|------| +| Ctrl+K / Cmd+K | クイックスイッチャーを開く | +| Esc | モーダルを閉じる | +| ↑ / ↓ | 検索結果をナビゲート | +| Enter | 選択したドキュメントを開く | + +## 次のステップ + +- [[Markdown Guide]] でMarkdown記法を学ぶ +- [[Home]] に戻る +MARKDOWN; + } + + private function getMarkdownGuideContent(): string + { + return <<<'MARKDOWN' +# Markdown Guide + +このページでは、使用できるMarkdown記法を紹介します。 + +## 見出し + +```markdown +# 見出し1 +## 見出し2 +### 見出し3 +``` + +## テキスト装飾 + +```markdown +**太字** +*イタリック* +~~取り消し線~~ +`インラインコード` +``` + +**太字** / *イタリック* / ~~取り消し線~~ / `インラインコード` + +## リスト + +### 順序なしリスト + +```markdown +- 項目1 +- 項目2 + - ネスト項目 +``` + +- 項目1 +- 項目2 + - ネスト項目 + +### 順序付きリスト + +```markdown +1. 最初 +2. 次 +3. 最後 +``` + +1. 最初 +2. 次 +3. 最後 + +## コードブロック + +````markdown +```php + これは引用です。 +> 複数行にまたがることもできます。 +``` + +> これは引用です。 +> 複数行にまたがることもできます。 + +## リンク + +```markdown +[外部リンク](https://example.com) +[[Wikiリンク]] +[[Getting Started]] +``` + +## 画像 + +```markdown +![代替テキスト](https://example.com/image.png) +``` + +## 水平線 + +```markdown +--- +``` + +--- + +## 関連ページ + +- [[Getting Started]] - 基本的な使い方 +- [[Home]] - ホームに戻る +MARKDOWN; + } +} + diff --git a/src/database/seeders/UserSeeder.php b/src/database/seeders/UserSeeder.php index d8293bd..8e84b9b 100644 --- a/src/database/seeders/UserSeeder.php +++ b/src/database/seeders/UserSeeder.php @@ -19,13 +19,17 @@ public function run(): void 'name' => 'Admin User', 'email' => 'admin@example.com', 'password' => Hash::make('password'), + 'is_admin' => true, ]); $this->command->info('Admin user created!'); $this->command->info('Email: admin@example.com'); $this->command->info('Password: password'); + $this->command->info('Role: Administrator'); } else { - $this->command->info('Admin user already exists.'); + // 既存ユーザーを管理者に更新 + User::where('email', 'admin@example.com')->update(['is_admin' => true]); + $this->command->info('Admin user already exists. Updated to administrator.'); } } }