Artisan CLI Guide - bpmbox/fastapi_django_main_lives GitHub Wiki
🎨 Artisan CLI ツール完全ガイド
🎯 Artisan とは?
Artisan は、Laravel Framework で愛用される強力なコマンドラインツールのPython版実装です。開発効率を劇的に向上させる多彩なコマンドを提供します。
🚀 基本的な使用方法
📋 利用可能コマンド一覧
# Artisan のヘルプ表示
./artisan --help
# 利用可能なコマンド一覧
./artisan list
🏗️ 生成系コマンド (make:*)
📄 コントローラー作成
# 基本的なコントローラー作成
./artisan make:controller UserController
# RESTfulリソースコントローラー作成
./artisan make:controller BlogController --resource
# API専用コントローラー作成
./artisan make:controller ApiController --api
生成されるファイル例:
# app/Http/Controllers/UserController.py
"""
UserController
==============
Generated by Artisan on 2025-06-14 12:34:56
"""
from fastapi import APIRouter, Request, HTTPException
from typing import Dict, Any
router = APIRouter()
class UserController:
"""
UserController
Handle HTTP requests for user related operations
"""
def index(self, request: Request) -> Dict[str, Any]:
"""Display a listing of users"""
return {"users": []}
def store(self, request: Request) -> Dict[str, Any]:
"""Store a newly created user"""
pass
def show(self, request: Request, id: int) -> Dict[str, Any]:
"""Display the specified user"""
pass
def update(self, request: Request, id: int) -> Dict[str, Any]:
"""Update the specified user"""
pass
def destroy(self, request: Request, id: int) -> Dict[str, Any]:
"""Remove the specified user"""
pass
# FastAPI ルーター設定
@router.get("/users")
async def users_index(request: Request):
return UserController().index(request)
@router.post("/users")
async def users_store(request: Request):
return UserController().store(request)
@router.get("/users/{id}")
async def users_show(request: Request, id: int):
return UserController().show(request, id)
@router.put("/users/{id}")
async def users_update(request: Request, id: int):
return UserController().update(request, id)
@router.delete("/users/{id}")
async def users_destroy(request: Request, id: int):
return UserController().destroy(request, id)
🎨 Gradio インターフェース作成
# Gradio UI作成
./artisan make:gradio ChatInterface
# AI機能付きインターフェース
./artisan make:gradio ImageAnalyzer --ai
生成されるファイル例:
# controllers/chat_interface/gradio_interface
"""
ChatInterface Gradio UI
=======================
Generated by Artisan on 2025-06-14 12:34:56
"""
import gradio as gr
from typing import Any
def create_chat_interface():
"""ChatInterface Gradio インターフェース作成"""
with gr.Blocks(title="Chat Interface") as interface:
gr.Markdown("# 💬 Chat Interface")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="メッセージを入力",
placeholder="何か話しかけてください..."
)
submit_btn = gr.Button("送信", variant="primary")
with gr.Column():
output_text = gr.Textbox(
label="応答",
interactive=False
)
def process_message(message: str) -> str:
"""メッセージ処理(ここに実際の処理を実装)"""
return f"受信: {message}"
submit_btn.click(
fn=process_message,
inputs=[input_text],
outputs=[output_text]
)
return interface
# 自動統合のため、この名前の関数を定義
gradio_interface = create_chat_interface()
🗄️ モデル作成
# データモデル作成
./artisan make:model User
# マイグレーション付きモデル作成
./artisan make:model Blog --migration
# 完全なCRUD機能付き
./artisan make:model Product --all
生成されるファイル例:
# app/Models/User.py
"""
User Model
==========
Generated by Artisan on 2025-06-14 12:34:56
"""
from django.db import models
from datetime import datetime
class User(models.Model):
"""User データモデル"""
# フィールド定義
name = models.CharField(max_length=100, verbose_name="名前")
email = models.EmailField(unique=True, verbose_name="メールアドレス")
password = models.CharField(max_length=255, verbose_name="パスワード")
created_at = models.DateTimeField(auto_now_add=True, verbose_name="作成日時")
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新日時")
class Meta:
db_table = 'users'
verbose_name = 'ユーザー'
verbose_name_plural = 'ユーザー'
def __str__(self):
return self.name
# Laravel風 Eloquent ライクなメソッド
@classmethod
def where(cls, **kwargs):
"""条件検索(Laravel風)"""
return cls.objects.filter(**kwargs)
@classmethod
def create(cls, **kwargs):
"""新規作成(Laravel風)"""
return cls.objects.create(**kwargs)
def update_attributes(self, **kwargs):
"""属性更新(Laravel風)"""
for key, value in kwargs.items():
setattr(self, key, value)
self.save()
return self
🔄 マイグレーション作成
# マイグレーション作成
./artisan make:migration create_users_table
# テーブル変更用マイグレーション
./artisan make:migration add_column_to_users_table --table=users
🖥️ サーバー・環境コマンド
🚀 開発サーバー起動
# 開発サーバー起動
./artisan serve
# ポート指定で起動
./artisan serve --port=8080
# ホスト指定で起動
./artisan serve --host=0.0.0.0 --port=8000
# デバッグモードで起動
./artisan serve --debug
🔧 環境管理
# 環境確認
./artisan env
# キャッシュクリア
./artisan cache:clear
# ログクリア
./artisan logs:clear
# 依存関係インストール
./artisan install
# アプリケーション初期化
./artisan fresh
🗄️ データベースコマンド
📊 マイグレーション実行
# マイグレーション実行
./artisan migrate
# マイグレーション状態確認
./artisan migrate:status
# マイグレーションロールバック
./artisan migrate:rollback
# データベースリセット
./artisan migrate:reset
# データベース再構築
./artisan migrate:fresh
🌱 シーダー(初期データ)
# シーダー作成
./artisan make:seeder UserSeeder
# シーダー実行
./artisan db:seed
# 特定のシーダー実行
./artisan db:seed --class=UserSeeder
🧪 開発・テストコマンド
🔍 インタラクティブシェル
# Python対話シェル起動(Laravel tinker相当)
./artisan tinker
# Django シェル起動
./artisan shell
# IPython シェル起動
./artisan ipython
✅ テスト実行
# テスト実行
./artisan test
# 特定のテストファイル実行
./artisan test tests/test_user.py
# カバレッジ付きテスト
./artisan test --coverage
🔧 カスタムコマンド作成
📝 新しいコマンドの追加
# artisan ファイル内にコマンド追加例
class CustomCommand(ArtisanCommand):
"""カスタムコマンドの実装例"""
def handle(self, *args, **kwargs):
"""カスタム処理の実装"""
print("🚀 カスタムコマンドが実行されました!")
# 実際の処理をここに実装
self.process_data()
print("✅ 処理が完了しました")
def process_data(self):
"""具体的な処理"""
# データ処理ロジック
pass
# コマンド登録
def register_commands():
commands = {
'custom': CustomCommand,
'make:controller': MakeControllerCommand,
'make:gradio': MakeGradioCommand,
'make:model': MakeModelCommand,
'serve': ServeCommand,
'migrate': MigrateCommand,
'tinker': TinkerCommand,
}
return commands
🎯 実践的な使用例
📝 ブログシステム作成例
# 1. ブログモデル作成
./artisan make:model Blog --migration
# 2. ブログコントローラー作成
./artisan make:controller BlogController --resource
# 3. Gradio管理画面作成
./artisan make:gradio BlogAdmin
# 4. マイグレーション実行
./artisan migrate
# 5. 初期データ投入
./artisan make:seeder BlogSeeder
./artisan db:seed --class=BlogSeeder
# 6. サーバー起動
./artisan serve
🤖 AI機能統合例
# 1. AI画像分析機能作成
./artisan make:gradio ImageAnalyzer --ai
# 2. AI APIコントローラー作成
./artisan make:controller AIController --api
# 3. 画像処理サービス作成
./artisan make:service ImageProcessingService
# 4. テスト作成
./artisan make:test ImageAnalyzerTest
# 5. テスト実行
./artisan test tests/test_image_analyzer.py
🏆 Artisan の強力な機能
⚡ 自動統合システム
- controllers/ 配下に配置されたファイルを自動検出
- gradio_interface 関数があれば自動統合
- router オブジェクトがあれば自動ルーティング
🎨 Laravel風命名規則
- RESTful規則: index, create, store, show, edit, update, destroy
- ファイル命名: PascalCase コントローラー、snake_case ファイル
- ディレクトリ構造: app/Http/Controllers/, database/migrations/
🔄 開発フロー最適化
- 設計:
./artisan make:model
でデータ構造定義 - 実装:
./artisan make:controller
でビジネスロジック - UI作成:
./artisan make:gradio
でインターフェース - テスト:
./artisan make:test
でテスト作成 - 実行:
./artisan serve
で即座に確認
🚀 今後の拡張予定
🔮 計画中の新機能
./artisan make:api
- OpenAPI仕様自動生成./artisan make:component
- 再利用可能UIコンポーネント./artisan deploy
- 本番環境デプロイ自動化./artisan backup
- データベース・ファイルバックアップ./artisan optimize
- パフォーマンス最適化
Artisan を使用することで、Laravel の優れた開発体験をPython プロジェクトで実現できます。効率的で直感的な開発フローをお楽しみください! 🚀