1.

Julia Genie.jl UndefVarError の原因と対処

編集
この記事の要点
  • ERROR: UndefVarError: Genie not defined は Julia で Genie モジュールが見えない状態
  • 主原因: using Genie 忘れ / Pkg.add していない / 別環境
  • 対処: using Pkg; Pkg.add("Genie")using GenieGenie.run()
  • Project.toml / Manifest.toml が現在のディレクトリにあるか確認
  • Julia 複数バージョン併用時は juliaup でデフォルト切替

エラー内容

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_PATHunset または再設定

対処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 <you@example.com>"]
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 definedPkg.add("DataFrames"); using DataFrames
  • UndefVarError: Plots not definedPkg.add("Plots"); using Plots
  • UndefVarError: HTTP not definedPkg.add("HTTP"); using HTTP
  • UndefVarError: 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") でローカルチェックアウト。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ERROR: UndefVarError: Genie not defined
  2. ERROR: AssertionError: haskey(hashes, uuid)
  3. ERROR: LoadError: LoadError: invalid redefinition of constant UserApp

最近更新/作成されたページ