Skip to content

Artisan コマンド

Lase が提供する Artisan コマンドの一覧です。

lase:reseed

migrations テーブル以外のすべてのテーブルを truncate してからシーダーを実行します。データベースをシーダーの初期状態にリセットしたい場合に使用します。

bash
php artisan lase:reseed
オプション説明
--force確認プロンプトをスキップして実行する

DANGER

このコマンドはローカル環境(APP_ENV=local)でのみ実行可能です。すべてのテーブルデータが削除されます。

lase:index-docs

docs/ ディレクトリの Markdown をチャンク分割・Embedding 化して DB に保存します。AI チャットの RAG(検索拡張生成)に使用されます。

bash
php artisan lase:index-docs
オプション説明
--force変更がないファイルも再インデックスする
--source=対象を相対パスで絞り込む(例: --source=auth/login.md)。複数指定可。指定時は孤立チャンクの削除を行わない
--no-prune参照されなくなったチャンクを削除しない

ファイル内容の MD5 が一致する場合はスキップされるため、変更が無ければ Embeddings API は呼ばれません。実行のたびに、削除・リネームされたドキュメントの孤立チャンクも掃除されます。

.vitepress/ 配下は除外されますが、index.md は YAML フロントマターを除去した本文が取り込まれます。

config('lase.ai.embedding_model')embedding_dimensions を変更した場合は、--force を付けなくても自動的に再インデックスされます(各行に生成時のモデル・次元数を保持しているため)。古いモデルのチャンクは検索対象から除外され、再インデックス時に置き換わります。

失敗時の挙動

デプロイをブロックしないよう、無駄な待ち時間が発生しない設計にしています。

状況挙動
OPENAI_API_KEY 未設定Embedding が必要になった時点で即終了(API を呼ばない)。変更が無くスキップだけで終わる場合はキー不要なので成功する
認証エラー・リクエスト不備(4xx)再試行しても結果が変わらないため 1 回で打ち切る
レート制限(429)・サーバエラー(5xx)・通信障害200ms 間隔で最大 3 回まで再試行する
連続 3 ファイル失敗残りを処理せず中断する(API 障害が疑われるため)。中断時は孤立チャンクの削除も行わない

実行タイミング

デプロイ時と日次スケジューラーの二重で実行します。

1. デプロイ時codebase-jp/actionsansible-deploy に組み込み済み)

app-deploy.yml で、Blue-Green のトラフィック切り替え後に実行されます。

yaml
- name: Build AI chat document index (RAG)
  ansible.builtin.shell: |
    docker exec "app-{{ _next_color }}" sh -lc 'cd /var/www/app && timeout 300 php artisan lase:index-docs'
  register: _index_docs
  changed_when: false
  failed_when: false
  when: "app_role == 'PRIMARY'"

意図的に以下の設計にしています。

設計理由
切り替えに実行インデックス生成の待ち時間をユーザーに見せない
failed_when: falseEmbeddings API 障害でデプロイを失敗させない(スケジューラーがリトライする)
timeout 300API 全滅時に長時間ハングさせない
app_role == 'PRIMARY'DB を共有するため、複数の app ノードから同時に書き込まない

2. 日次スケジューラー(デプロイ時に失敗した場合の保険)

php
$schedule->command(IndexDocs::class)->dailyAt('03:00')->withoutOverlapping();

TIP

ハッシュ一致でスキップされるため、docs を変更していないデプロイでは Embeddings API を呼ばず 1 秒未満で完了します。33 ファイル / 265 チャンク規模の全件生成でもコストは 0.1 円程度、所要時間は 3〜10 秒です。

lase:send-admin-mails

管理者メールの送信を実行します。スケジューラーから定期実行されることを想定しています。

bash
php artisan lase:send-admin-mails

lase:renew-subscriptions

サブスクリプションの更新処理を実行します。スケジューラーから定期実行されることを想定しています。

bash
php artisan lase:renew-subscriptions