この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:T
更新日時:2026-06-11 07:10:02

タイトル: アプリケーションのロード
SEOタイトル: Genie アプリのロード方法(Genie.loadapp() / activate / コントローラ作成手順)

この記事の要点
  • Genie アプリ依存のコマンド(コントローラ作成等)を実行する前に 事前ロードが必要
  • ロード手順: (1) using Pkg → (2) pkg"activate ." → (3) Genie.loadapp()
  • ロード前に呼ぶと UndefVarError: MyApp not defined エラーになる
  • 前提: アプリディレクトリに cd してから Julia を起動すること
  • 一度ロードすれば MyApp.newcontroller()routes() が REPL から呼べる
  • ファイル変更後は Revise.jl を使うと自動リロードできる

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 definedGenie.loadapp() 前に MyApp.xxx を呼んだ。先にロードする
Project.toml not foundアプリディレクトリに cd していない
サーバー起動中にもう一度 up()ポート競合。up(port=8001) で別ポート指定
変更が反映されないRevise を導入するか REPL を再起動

FAQ

Q: using MyAppGenie.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.jlURL → コントローラのマッピング定義
config/initializers/DB接続 / ロガー / 認証等の初期化
config/env/dev.jl環境別設定(ポート / ログレベル / DB URL)
app/resources/コントローラ / モデル / ビューの本体