タイトル: アプリケーションのロード
SEOタイトル: Genie アプリのロード方法(Genie.loadapp() / activate / コントローラ作成手順)
| この記事の要点 |
|
Genie アプリケーションをロードする
Genie で開発しているとき、コントローラの新規作成・ルート定義の確認・REPL からのモデル操作などを行うには、アプリケーションを REPL にロードしておく必要があります。本記事ではロード手順とつまずきポイントを整理します。
ロードしないと起こるエラー
アプリ依存のコマンドをロードせずに実行すると以下のエラーが出ます。
julia> MyApp.newcontroller("Books")
ERROR: UndefVarError: MyApp not defined
Stacktrace:
[1] top-level scope at none:0
これは MyApp モジュールがまだ Julia の名前空間に読み込まれていないため。
正しいロード手順
1. アプリディレクトリに移動して Julia を起動
重要: Julia を起動するのは必ずアプリディレクトリに cd してからです。これを忘れると Project.toml が読まれず以降の手順が機能しません。
# 例: c:\T\Projects\MyApp に移動
cd c:\T\Projects\MyApp
# Julia 起動
julia
2. Pkg を使ってアプリプロジェクトを有効化
julia> using Pkg
julia> pkg"activate ."
# 別の書き方
julia> Pkg.activate(".")
これで Project.toml に定義された依存パッケージが解決され、Manifest.toml で確定されます。
3. Genie.loadapp() でアプリをロード
julia> using Genie
julia> Genie.loadapp()
_____ _
| __|___ ___|_|___
| | | -_| | | -_|
|_____|___|_|_|_|___|
┌ Info:
│ Starting Genie in >> DEV << mode
└
[ Info: Logging to file at c:\T\Projects\MyApp\log\dev.log
これでアプリのモジュール(MyApp)が REPL に登録され、アプリ依存のコマンドが使えるようになります。
4. コントローラを作成
julia> MyApp.newcontroller("Books")
2026-06-11 14:24:53:DEBUG:Main: New controller created at app\resources\books\BooksController.jl
ロード後に使えるコマンド
| コマンド | 意味 |
|---|---|
MyApp.newcontroller("Users") | コントローラ作成 |
MyApp.newresource("Books") | リソース一式(コントローラ + ビュー + モデル)作成 |
MyApp.newmodel("Book") | SearchLight モデル作成 |
MyApp.newmigration("create_books") | DB マイグレーション作成 |
up() | HTTP サーバー起動 |
down() | サーバー停止 |
routes() | 登録されたルート一覧 |
サーバーまで一気に起動したい場合
Genie.loadapp() でロード後すぐにサーバーを起動するには:
julia> Genie.loadapp(); up()
またはシェルから一発で:
# bin/server (Genie 自動生成) を使う
./bin/server # Linux / macOS
bin\server.bat # Windows
Revise.jl で自動リロード
ファイルを編集するたびに REPL を再起動するのは面倒なので、Revise.jl で自動再読み込みを設定しておくと開発体験が良くなります。
# ~/.julia/config/startup.jl
using Revise# REPL を起動するたびに Revise が読まれる
julia> using Revise
julia> Genie.loadapp()
# ↓ ここでコントローラを編集すると保存と同時に反映
julia> ↑↑↑ も自動で取り込まれる
よくあるトラブル
| 症状 | 原因 / 対処 |
|---|---|
UndefVarError: MyApp not defined | Genie.loadapp() 前に MyApp.xxx を呼んだ。先にロードする |
| Project.toml not found | アプリディレクトリに cd していない |
サーバー起動中にもう一度 up() | ポート競合。up(port=8001) で別ポート指定 |
| 変更が反映されない | Revise を導入するか REPL を再起動 |
FAQ
Q: using MyApp と Genie.loadapp() の違い
A: Genie.loadapp() は Genie のロガー初期化やルーティングテーブル構築も含む。素の using ではこれらが行われない。
Q: VS Code から実行するには
A: julia.environmentPath をアプリディレクトリに設定し、Julia REPL を起動 → Genie.loadapp()。Julia 拡張機能の Terminal が同じ流れを補助。
Q: テスト時はどうロードする
A: test/runtests.jl の冒頭で using Pkg; Pkg.activate(joinpath(@__DIR__, "..")) と Genie.loadapp(@__DIR__) を呼ぶのが定型。
環境変数で挙動を切り替える
Genie は GENIE_ENV 環境変数でdev / prod / test 設定を切り替えます。各環境ファイルは config/env/ 配下に置かれます。
# 本番モードで起動
GENIE_ENV=prod julia --project=. -e "using Genie; Genie.loadapp(); up()"
# テストモード
GENIE_ENV=test julia --project=. -e 'include("test/runtests.jl")'
bootstrap.jl の中身を理解する
Genie アプリの起動時には bootstrap.jl が読まれます。Genie.loadapp() は内部でこのファイルを読み込み、ルート定義・初期化処理を一括で実行します。
| ファイル | 役割 |
|---|---|
| bootstrap.jl | 環境変数読み込み + Pkg activate + ルート登録 |
| config/routes.jl | URL → コントローラのマッピング定義 |
| config/initializers/ | DB接続 / ロガー / 認証等の初期化 |
| config/env/dev.jl | 環境別設定(ポート / ログレベル / DB URL) |
| app/resources/ | コントローラ / モデル / ビューの本体 |