タイトル: ERROR: UndefVarError: Genie not defined
SEOタイトル: Julia Genie.jl UndefVarError の原因と対処
| この記事の要点 |
|
エラー内容
julia> Genie.run()
ERROR: UndefVarError: Genie not defined
Stacktrace:
[1] top-level scope
@ REPL[1]:1
julia> using Genie
ERROR: ArgumentError: Package Genie not found in current path.
- Run `import Pkg; Pkg.add("Genie")` to install the Genie package.
UndefVarError は Julia の基本的なエラーで、「その名前の変数 / モジュール / 関数が見つからない」という意味です。Genie の場合、Web フレームワーク Genie.jl パッケージのロードに失敗しています。
原因の切り分け
| 原因 | 確認 | 対処 |
|---|---|---|
| using Genie 忘れ | REPL で実行履歴確認 | using Genie 実行 |
| Genie 未インストール | Pkg.status() | Pkg.add("Genie") |
| 別環境がアクティブ | Pkg.status() の Activate 行 | 正しい環境を activate |
| Julia バージョン不一致 | versioninfo() | juliaup で切替 |
| script.jl で using なし | ファイル先頭を確認 | 1 行目に追加 |
| 環境変数の汚染 | JULIA_DEPOT_PATH | unset または再設定 |
対処1: パッケージのインストールと読込
# Julia REPL を起動
julia
# Pkg モードに入る(] キー)
julia> ]
(@v1.10) pkg> add Genie
(@v1.10) pkg> status # インストール一覧確認
(@v1.10) pkg> # Backspace で通常モードに戻る
julia> using Genie
julia> Genie.run()
[ Info: Listening on http://127.0.0.1:8000
対処2: プロジェクト環境を activate
Julia のプロジェクト環境を使っている場合、その環境に Genie が入っていないと当然エラーになります。
# 現在のディレクトリに Project.toml / Manifest.toml がある前提
$ cd my_genie_app
$ julia --project=.
julia> using Pkg
julia> Pkg.status()
Status `~/my_genie_app/Project.toml`
[c43c736e] Genie v5.x.x ← これがあれば OK
julia> using Genie
# あるいは REPL 中で activate
julia> ]
(@v1.10) pkg> activate .
(MyGenieApp) pkg> status
(MyGenieApp) pkg> add Genie # ← まだなら追加
対処3: Project.toml / Manifest.toml の確認
Genie アプリのプロジェクトディレクトリには必ず Project.toml(依存関係宣言)と Manifest.toml(具体的なバージョン固定)が必要です。
# Project.toml
name = "MyGenieApp"
uuid = "12345678-1234-1234-1234-123456789012"
authors = ["Your Name "]
version = "0.1.0"
[deps]
Genie = "c43c736e-a2d1-11e8-161f-af95117fbd1e"
HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"
[compat]
julia = "1.9"
Genie = "5"
Manifest.toml が壊れている / バージョン不一致の場合:
julia> ]
(MyGenieApp) pkg> instantiate # Manifest.toml に従って再インストール
(MyGenieApp) pkg> resolve # 依存関係を再解決
(MyGenieApp) pkg> update # 最新化(注意: バージョン変わる)
# それでもダメなら Manifest.toml を削除して再生成
$ rm Manifest.toml
$ julia --project=. -e 'using Pkg; Pkg.instantiate()'
対処4: Julia 複数バージョンの問題
Julia は juliaup(公式ランチャー)で複数バージョンを同時に管理できます。間違ったバージョンで起動すると別環境を参照してしまいます。
# インストール済バージョン
$ juliaup list
Channel Version
1.10 1.10.0+0.x64.linux.gnu (default)
1.9 1.9.4+0.x64.linux.gnu
# デフォルト切替
$ juliaup default 1.10
# 特定バージョンで起動
$ julia +1.10 --project=.
# 環境を確認
julia> versioninfo()
Julia Version 1.10.0
Commit ...
対処5: REPL 再起動と startup.jl
Genie をインストールした直後でも、既に開いている REPL では反映されないことがあります。
# REPL を一度終了して再起動
julia> exit()
$ julia --project=.
julia> using Genie # 今度は通る
# ~/.julia/config/startup.jl で起動時に自動 using
# 例:
using Revise # ソース変更の自動反映
using Pkg
対処6: VS Code Julia 拡張使用時
VS Code で Julia 拡張を使っている場合、設定の Julia: Environment Path が現在のワークスペースを向いていないとエラーになります。
// .vscode/settings.json
{
"julia.environmentPath": "${workspaceFolder}",
"julia.executablePath": "/usr/local/bin/julia",
"julia.NumThreads": "auto"
}
コマンドパレットで 「Julia: Change Current Environment」 → ワークスペースを選択。
Genie アプリのテンプレート生成
ゼロから始める場合は Genie 同梱のジェネレータを使うと Project.toml も自動生成されます。
julia> using Genie
julia> Genie.Generator.newapp("MyApp")
# → MyApp/ ディレクトリ作成、Project.toml 生成、依存追加
$ cd MyApp
$ julia --project=. -e 'using Genie; Genie.loadapp(); up()'
# http://127.0.0.1:8000 でアクセス可能
同種の UndefVarError(他パッケージ)
原因と対処はすべて同じパターンです:
UndefVarError: DataFrames not defined→Pkg.add("DataFrames"); using DataFramesUndefVarError: Plots not defined→Pkg.add("Plots"); using PlotsUndefVarError: HTTP not defined→Pkg.add("HTTP"); using HTTPUndefVarError: x not defined(変数)→ スコープか typo
FAQ
Q: Pkg.add しても add で固まる
A: General Registry のダウンロードに時間がかかっている可能性。Pkg.Registry.update() を試すか、JULIA_PKG_SERVER=https://pkg.julialang.org を設定。
Q: いつのまにかパッケージが消えた
A: 別環境の REPL から Pkg.rm したか、Project.toml を変更した可能性。Pkg.status で現状確認、Pkg.add で復元。
Q: 開発版 (master) の Genie を使いたい
A: Pkg.add(PackageSpec(name="Genie", rev="master")) または Pkg.develop(path="./Genie") でローカルチェックアウト。