clails コマンドは、clails アプリケーションの開発を支援するコマンドラインツールです。 プロジェクトの作成、コード生成、データベース管理、サーバーの起動など、開発に必要な機能を提供します。
- clails コマンドは
roswell/clails.rosで定義されています - 各コマンドは
src/cmd.lispの関数を呼び出します - Roswell スクリプトとして実装されており、どこからでも実行できます
- プロジェクト固有のコマンド(generate, server など)はプロジェクトルートで実行します
clails を使用するには、まず Roswell をインストールする必要があります。
# macOS (Homebrew)
brew install roswell
# Linux (手動インストール)
# https://github.com/roswell/roswell/wiki/Installation を参照ros install fukamachi/cl-dbi
ros install tamurashingo/cl-dbi-connection-pool
ros install tamurashingo/cl-batis
ros install tamurashingo/getcmdros install tamurashingo/clails特定のブランチやタグを指定する場合は / を付けて指定します。
# branch
ros install tamurashingo/clails/release/0.0.2
# tag
ros install tamurashingo/clails/v0.0.2clails --help| コマンド | 説明 |
|---|---|
clails new |
新しいプロジェクトを作成 |
clails server |
Web サーバーを起動 |
clails stop |
Web サーバーを停止 |
| コマンド | 説明 |
|---|---|
clails generate:model |
Model ファイルを生成 |
clails generate:migration |
Migration ファイルを生成 |
clails generate:view |
View ファイルを生成 |
clails generate:controller |
Controller ファイルを生成 |
clails generate:scaffold |
Model、View、Controller を一括生成 |
clails generate:task |
Task ファイルを生成 |
| コマンド | 説明 |
|---|---|
clails db:create |
データベースを作成 |
clails db:migrate |
Migration を実行 |
clails db:migrate:up |
指定したバージョンの Migration を実行 |
clails db:migrate:down |
指定したバージョンの Migration をロールバック |
clails db:rollback |
Migration をロールバック |
clails db:seed |
データベースにシードデータを投入 |
clails db:status |
Migration の状態を表示 |
| コマンド | 説明 |
|---|---|
clails task |
カスタムタスクを実行 |
| コマンド | 説明 |
|---|---|
clails test |
テストを実行 |
新しい clails プロジェクトを作成します。
clails new PROJECT_NAME [OPTIONS]| オプション | 短縮形 | デフォルト | 説明 |
|---|---|---|---|
--path PATH |
-p PATH |
カレントディレクトリ | プロジェクトを作成するディレクトリ |
--database DB |
-d DB |
sqlite3 |
使用するデータベース(sqlite3, mysql, postgresql) |
# デフォルト(SQLite3)でプロジェクト作成
clails new myapp
# MySQL を使用するプロジェクト作成
clails new myapp -d mysql
# 特定のディレクトリにプロジェクト作成
clails new myapp -p /path/to/projects
# PostgreSQL を使用
clails new myapp --database postgresqlmyapp/
├── app/
│ ├── application.lisp
│ ├── controllers/
│ ├── models/
│ └── views/
├── config/
│ ├── database.lisp
│ └── routes.lisp
├── db/
│ └── migrate/
├── clails.boot
├── myapp.asd
└── README.md
開発用 Web サーバーを起動します。
clails server [OPTIONS]| オプション | 短縮形 | デフォルト | 説明 |
|---|---|---|---|
--port PORT |
-p PORT |
5000 |
サーバーのポート番号 |
--bind ADDRESS |
-b ADDRESS |
127.0.0.1 |
バインドするIPアドレス |
--swank |
-s |
なし | Swankサーバーを起動(127.0.0.1:4005) |
--swank-address ADDRESS |
なし | 127.0.0.1 |
Swankサーバーのバインドアドレス |
--swank-port PORT |
なし | 4005 |
Swankサーバーのポート番号 |
# デフォルト(localhost:5000)でサーバー起動
clails server
# ポート番号を指定
clails server -p 8080
# すべてのインターフェースでリッスン
clails server -b 0.0.0.0
# ポートとアドレスを両方指定
clails server -p 8080 -b 0.0.0.0
# Swankサーバーも同時に起動(REPL接続用)
clails server --swank
# Swankサーバーのアドレスとポートを指定
clails server --swank --swank-address 0.0.0.0 --swank-port 4006- ルーティングテーブルの初期化
- ミドルウェアスタックの構築
- Clack サーバーの起動
- スタートアップフックの実行
# 別のターミナルで
clails stop
# または Ctrl+C実行中の Web サーバーを停止します。
clails stopclails stopModel ファイルと、オプションで Migration ファイルを生成します。
clails generate:model MODEL_NAME [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--no-overwrite |
なし | 既存ファイルを上書きしない(デフォルト:有効) |
--no-migration |
-n |
Migration ファイルを生成しない |
# Model と Migration を生成
clails generate:model user
# Migration なしで Model のみ生成
clails generate:model user -n
# 既存ファイルを上書きして生成
clails generate:model user --no-overwrite=falseapp/models/user.lisp # Model ファイル
db/migrate/YYYYMMDD-HHMMSS-user.lisp # Migration ファイル(-n なしの場合)
(in-package #:cl-user)
(defpackage #:myapp/models/user
(:use #:cl)
(:import-from #:clails/model/base-model
#:<base-model>
#:defmodel))
(in-package #:myapp/models/user)
(defmodel <user> (<base-model>)
(:table "users"))データベース Migration ファイルを生成します。
clails generate:migration MIGRATION_NAME# テーブル作成用 Migration
clails generate:migration create-users-table
# カラム追加用 Migration
clails generate:migration add-email-to-users
# インデックス追加用 Migration
clails generate:migration add-index-to-users-emaildb/migrate/YYYYMMDD-HHMMSS-MIGRATION_NAME.lisp
例:db/migrate/20241022-143000-create-users-table.lisp
(in-package #:myapp/db/migrate)
(defmigration "20241022-143000-create-users-table"
(:up #'(lambda (conn)
;; ここにテーブル作成処理を記述
))
(:down #'(lambda (conn)
;; ここにロールバック処理を記述
)))View テンプレートファイルと package.lisp を生成します。
clails generate:view VIEW_NAME [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--no-overwrite |
なし | 既存ファイルを上書きしない(デフォルト:有効) |
# トップレベルの View を生成
clails generate:view index
# ネストした View を生成
clails generate:view users/index
# 複数階層の View を生成
clails generate:view admin/users/listapp/views/VIEW_NAME.html # View テンプレート
app/views/package.lisp # パッケージ定義(トップレベル)
app/views/DIRECTORY/package.lisp # パッケージ定義(ディレクトリごと)
app/views/users/index.html:
<!DOCTYPE html>
<html>
<head>
<title>Users Index</title>
</head>
<body>
<h1>Users Index</h1>
</body>
</html>app/views/users/package.lisp:
(in-package #:cl-user)
(defpackage #:myapp/views/users/package
(:use #:cl)
(:import-from #:clails/view/view-helper
#:*view-context*
#:view))
(in-package #:myapp/views/users/package)Controller ファイルを生成します。
clails generate:controller CONTROLLER_NAME [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--no-overwrite |
なし | 既存ファイルを上書きしない(デフォルト:有効) |
# Controller を生成
clails generate:controller users
# ネストした Controller を生成
clails generate:controller admin/usersapp/controllers/CONTROLLER_NAME_controller.lisp
(in-package #:cl-user)
(defpackage #:myapp/controllers/users-controller
(:use #:cl)
(:import-from #:clails/controller/base-controller
#:<web-controller>
#:do-get
#:do-post
#:do-put
#:do-delete
#:set-view
#:set-redirect
#:param))
(in-package #:myapp/controllers/users-controller)
(defclass <users-controller> (<web-controller>)
()
(:documentation "Users controller"))
(defmethod do-get ((controller <users-controller>))
;; GET リクエストの処理
(set-view controller "users/index.html" '()))
(defmethod do-post ((controller <users-controller>))
;; POST リクエストの処理
(set-redirect controller "/users"))タスクファイルを生成します。
clails generate:task TASK_NAME [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--namespace NS |
-ns NS |
タスクの名前空間を指定 |
--no-overwrite |
なし | 既存ファイルを上書きしない(デフォルト:有効) |
# タスクを生成
clails generate:task cleanup
# 名前空間を指定してタスクを生成
clails generate:task import --namespace data
# 短縮形で名前空間を指定
clails generate:task cleanup -ns maintenanceapp/tasks/NAMESPACE/TASK_NAME.lisp
例:app/tasks/maintenance/cleanup.lisp
(in-package #:cl-user)
(defpackage #:myapp/tasks/maintenance/cleanup
(:use #:cl)
(:import-from #:clails/task
#:deftask))
(in-package #:myapp/tasks/maintenance/cleanup)
(deftask "maintenance:cleanup"
:description "Task description here"
:function #'(lambda (&rest args)
;; Task implementation here
))Model、View、Controller を一括で生成します。
clails generate:scaffold NAME [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--no-overwrite |
なし | 既存ファイルを上書きしない(デフォルト:有効) |
# User の scaffold を生成
clails generate:scaffold userapp/models/NAME.lisp
app/controllers/NAME_controller.lisp
app/views/NAME/index.html
app/views/NAME/show.html
app/views/NAME/new.html
app/views/NAME/edit.html
app/views/NAME/package.lisp
db/migrate/YYYYMMDD-HHMMSS-NAME.lisp
設定ファイルに基づいてデータベースを作成します。
clails db:createclails db:create
# => Creating database...
# => Database created successfullyconfig/database.lisp の設定に基づいて、以下のデータベースを作成します:
- SQLite3: データベースファイルを作成
- MySQL:
CREATE DATABASEを実行 - PostgreSQL:
CREATE DATABASEを実行
未実行の Migration を実行します。
clails db:migrate [OPTIONS]| オプション | 説明 |
|---|---|
--version VERSION |
指定したバージョンまでの Migration を実行 |
# すべての未実行 Migration を実行
clails db:migrate
# 特定のバージョンまで Migration を実行
clails db:migrate --version 20241022143000db/migrate/ディレクトリの Migration ファイルをスキャン- 未実行の Migration を実行順にソート
- 各 Migration の
:up関数を実行 - Migration テーブルに実行記録を保存
指定したバージョンの Migration を実行します。
clails db:migrate:up VERSIONclails db:migrate:up 20241022143000指定したバージョンの Migration をロールバックします。
clails db:migrate:down VERSIONclails db:migrate:down 20241022143000最新の Migration をロールバックします。
clails db:rollback [OPTIONS]| オプション | デフォルト | 説明 |
|---|---|---|
--step N |
1 |
ロールバックする Migration の数 |
# 最新の Migration を1つロールバック
clails db:rollback
# 最新の Migration を3つロールバック
clails db:rollback --step 3データベースにシードデータを投入します。
clails db:seedclails db:seed
# => Seeding database...
# => Seed completed successfullydb/seed.lisp に定義されたシード処理を実行します。
Migration の実行状態を表示します。
clails db:statusclails db:status
# => Migration Status:
# => [X] 20241022-143000-create-users-table
# => [X] 20241022-144500-add-email-to-users
# => [ ] 20241022-150000-add-index-to-users-email[X]- 実行済み[ ]- 未実行
カスタムタスクを実行します。
clails task [TASK] [OPTIONS]| オプション | 短縮形 | 説明 |
|---|---|---|
--list [NAMESPACE] |
-l [NAMESPACE] |
利用可能なタスクを一覧表示(名前空間でフィルタ可能) |
--info <task> |
なし | タスクの詳細情報を表示 |
# すべてのタスクを一覧表示
clails task --list
# 特定の名前空間のタスクを一覧表示
clails task --list db
# タスクの詳細情報を表示
clails task --info maintenance:cleanup
# カスタムタスクを実行
clails task maintenance:cleanupテストを実行します。
clails test [PACKAGES...] [OPTIONS]| オプション | 説明 |
|---|---|
--tag TAG |
指定したタグのテストを実行(複数指定可能) |
--exclude TAG |
指定したタグのテストを除外(複数指定可能) |
--list-tags |
利用可能なタグを一覧表示 |
--list-packages |
利用可能なパッケージを一覧表示 |
--list-tests-tag TAG |
特定のタグを持つテストを一覧表示 |
--list-tests-pkg PKG |
特定のパッケージのテストを一覧表示 |
# すべてのテストを実行
clails test
# 特定のパッケージのテストを実行
clails test pkg1 pkg2
# 特定のタグのテストを実行
clails test --tag model
# 複数のタグのテストを実行
clails test --tag model --tag sqlite3
# 特定のタグを除外してテストを実行
clails test --exclude slow
# 利用可能なタグを一覧表示
clails test --list-tags
# 特定のパッケージのテストを実行
clails test todoapp/models/user# 1. プロジェクト作成
clails new myapp -d postgresql
cd myapp
# 2. データベース作成
clails db:create
# 3. 初期 Migration 実行
clails db:migrate
# 4. サーバー起動
clails server# 1. Model と Migration を生成
clails generate:model user
# 2. Migration ファイルを編集してカラムを定義
# db/migrate/YYYYMMDD-HHMMSS-user.lisp を編集
# 3. Migration を実行
clails db:migrate
# 4. Model を使ったコードを実装# 1. Controller を生成
clails generate:controller api/users
# 2. Controller に REST API のロジックを実装
# app/controllers/api/users_controller.lisp を編集
# 3. ルーティングを設定
# config/routes.lisp を編集
# 4. サーバーを起動してテスト
clails server# 1. Scaffold を生成
clails generate:scaffold post
# 2. Migration を実行
clails db:migrate
# 3. 生成されたファイルをカスタマイズ
# app/models/post.lisp
# app/controllers/post_controller.lisp
# app/views/post/*.html
# 4. サーバーを起動
clails server# 1. タスクを生成
clails generate:task cleanup --namespace maintenance
# 2. タスクの実装
# app/tasks/maintenance/cleanup.lisp を編集
# 3. タスクを実行
clails task maintenance:cleanup
# 4. 利用可能なタスクを確認
clails task --list# すべてのテストを実行
clails test
# 特定のパッケージのテストを実行
clails test myapp/models/user
# タグでテストをフィルタ
clails test --tag model --exclude slow多くのコマンドで共通して使用できるオプションです。
既存のファイルを上書きしないようにします。デフォルトで有効です。
# 既存ファイルがあっても上書きしない(デフォルト)
clails generate:model user
# 明示的に指定
clails generate:model user --no-overwrite
# 上書きを許可する場合(注意: データが失われる可能性があります)
# 現在、上書きを強制するオプションはありません# clails コマンドが見つからない場合
# PATH に ~/.roswell/bin が設定されていることの確認
echo $PATH
# Roswell のインストール先を確認
which ros
# clails を再インストール
ros install tamurashingo/clails# プロジェクトルートにいることを確認
pwd
# clails.boot ファイルがあることを確認
ls clails.boot# データベース接続を確認
# config/database.lisp の設定を確認
# データベースが作成されているか確認
clails db:create
# Migration ファイルの構文エラーを確認
# db/migrate/*.lisp のファイルを確認# ポートが使用中でないか確認
lsof -i :5000
# 別のポートで起動
clails server -p 8080
# エラーログを確認
# ターミナルに出力されるエラーメッセージを確認サーバー起動時・停止時に任意の処理を実行できます。
;; config/environment.lisp などで定義
(setf clails/environment:*startup-hooks*
(list #'(lambda ()
(format t "Server starting...~%"))))
(setf clails/environment:*shutdown-hooks*
(list #'(lambda ()
(format t "Server stopping...~%"))))Swankサーバーを起動することで、Emacs/SLIMEやVim/SLIMVなどからREPL経由でアプリケーションに接続できます。
# Swankサーバーを起動してWebサーバーを起動
clails server --swank
# Emacsから接続
M-x slime-connect RET 127.0.0.1 RET 4005 RET
# 別のアドレス・ポートで起動
clails server --swank --swank-address 0.0.0.0 --swank-port 4006clails コマンドは以下の特徴を持ちます:
- 統一されたインターフェース: すべての操作を
clailsコマンドで実行 - 自動生成: Model、View、Controller、Taskなどのコードを自動生成
- データベース管理: Migration によるスキーマのバージョン管理とロールバック機能
- 開発サーバー: 組み込みの Web サーバーで即座に動作確認
- Swankサーバー: REPL経由でのライブコーディングをサポート
- タスクシステム: カスタムタスクによるバッチ処理の実行
- テストフレームワーク: タグやパッケージでフィルタ可能なテスト実行
- 拡張性: カスタムコマンドやフックによる拡張が可能
詳細な API リファレンスについては、各コマンドの実装(src/cmd.lisp)を参照してください。