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/actions の ansible-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

終了したサブスクリプションを持つテナントを対象に、次のように処理します。スケジューラーから毎日実行してください。

サブスクリプション対象になる時期処理
更新する(renews = true)前月以前に終わったもの(月初)当月1日〜末日のサブスクリプションを新たに作り、Senter の利用を更新する
更新しない(renews = false。トライアルなど)昨日までに終わったものテナントの現在のサブスクリプションを外す

トライアルは新規登録の日からちょうど1か月(翌月の応当日の前日まで。応当日が無い月は末日まで)で、月の途中で終わります。毎月1日にだけ実行すると、終わったトライアルが翌月1日まで使えてしまいます。

php
$schedule->command(RenewSubscriptions::class)
    ->dailyAt('00:01')
    ->withoutOverlapping()
    ->onOneServer();

lase:tenant:suspend ​

テナントを緊急停止します。管理画面が使えない状況でも止められるようにするためのコマンドです。

bash
php artisan lase:tenant:suspend acme --reason="不正アクセスの調査"
引数・オプション説明
codeテナントコード
--reason=停止の理由。省略した場合は対話で入力を求めます

停止するとテナント画面・API・MCP へアクセスできなくなります。契約は維持されるため、サブスクリプションの更新は通常どおり行われます。コンソールからの実行は操作者を特定できないため、アクティビティログには残りません(アプリケーションログには出力されます)。

lase:tenant:resume ​

テナントの緊急停止を解除します。

bash
php artisan lase:tenant:resume acme
引数説明
codeテナントコード