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
This commit is contained in:
2025-11-29 11:40:08 +09:00
parent 691ac566e2
commit ecfa21d56c
4 changed files with 293 additions and 12 deletions

View File

@@ -112,8 +112,18 @@ docker exec kb_php npm run build
# マイグレーション # マイグレーション
docker exec kb_php php artisan migrate 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=UserSeeder
# 初期ドキュメントのみ
docker exec kb_php php artisan db:seed --class=DocumentSeeder
``` ```
### 6. 管理者の設定 ### 6. 管理者の設定
@@ -134,11 +144,26 @@ docker exec kb_php php artisan user:set-admin admin@example.com --remove
| phpMyAdmin | http://localhost:9701 | | phpMyAdmin | http://localhost:9701 |
| MailHog | http://localhost:9725 | | MailHog | http://localhost:9725 |
## 初期アカウント ## 初期データ
### 初期アカウント
UserSeederを実行した場合 UserSeederを実行した場合
- **Email**: admin@example.com - **Email**: admin@example.com
- **Password**: password - **Password**: password
- **権限**: 管理者
### 初期ドキュメント
DocumentSeederを実行すると以下のドキュメントが作成されます
| ドキュメント | 内容 |
|------------|------|
| Home | ホームページ(ウェルカムメッセージ、機能紹介) |
| Getting Started | 使い方ガイドドキュメント作成、Wikiリンク、ショートカット |
| Markdown Guide | Markdown記法ガイド見出し、リスト、コード、テーブル等 |
※ 既存のドキュメントがある場合、DocumentSeederはスキップされます。
## よく使うコマンド ## よく使うコマンド

View File

@@ -2,24 +2,18 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder class DatabaseSeeder extends Seeder
{ {
use WithoutModelEvents;
/** /**
* Seed the application's database. * Seed the application's database.
*/ */
public function run(): void public function run(): void
{ {
// User::factory(10)->create(); $this->call([
UserSeeder::class,
User::factory()->create([ DocumentSeeder::class,
'name' => 'Test User',
'email' => 'test@example.com',
]); ]);
} }
} }

View File

@@ -0,0 +1,258 @@
<?php
namespace Database\Seeders;
use App\Models\Document;
use Illuminate\Database\Seeder;
class DocumentSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// 既存のドキュメントがある場合はスキップ
if (Document::count() > 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
<?php
echo "Hello, World!";
```
````
```php
<?php
echo "Hello, World!";
```
## テーブル
```markdown
| 列1 | 列2 | 列3 |
|-----|-----|-----|
| A | B | C |
| D | E | F |
```
| 列1 | 列2 | 列3 |
|-----|-----|-----|
| A | B | C |
| D | E | F |
## 引用
```markdown
> これは引用です。
> 複数行にまたがることもできます。
```
> これは引用です。
> 複数行にまたがることもできます。
## リンク
```markdown
[外部リンク](https://example.com)
[[Wikiリンク]]
[[Getting Started]]
```
## 画像
```markdown
![代替テキスト](https://example.com/image.png)
```
## 水平線
```markdown
---
```
---
## 関連ページ
- [[Getting Started]] - 基本的な使い方
- [[Home]] - ホームに戻る
MARKDOWN;
}
}

View File

@@ -19,13 +19,17 @@ public function run(): void
'name' => 'Admin User', 'name' => 'Admin User',
'email' => 'admin@example.com', 'email' => 'admin@example.com',
'password' => Hash::make('password'), 'password' => Hash::make('password'),
'is_admin' => true,
]); ]);
$this->command->info('Admin user created!'); $this->command->info('Admin user created!');
$this->command->info('Email: admin@example.com'); $this->command->info('Email: admin@example.com');
$this->command->info('Password: password'); $this->command->info('Password: password');
$this->command->info('Role: Administrator');
} else { } 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.');
} }
} }
} }