タイトル: ERROR: AssertionError: haskey(hashes, uuid)
SEOタイトル: Julia Pkg AssertionError: haskey(hashes, uuid) の原因と対処(Registry 破損リセット)
| この記事の要点 |
|
エラー内容
Julia + Genie で新しいアプリケーションを作成するときに発生することがあるエラーです。
julia> using Genie
julia> Genie.newapp("MyApp")
2026-06-11 18:49:13:INFO:Main: Done! New app created at c:\T\Projects\MyApp
2026-06-11 18:49:13:DEBUG:Main: Installing app dependencies
Updating registry at `C:\Users\tarou\.juliapro\JuliaPro_v1.1.1.1\registries\JuliaPro`
Updating git-repo `https://pkg.juliacomputing.com//registry/JuliaPro`
ERROR: AssertionError: haskey(hashes, uuid)
Stacktrace:
[1] version_data!(::Pkg.Types.Context, ::Array{Pkg.Types.PackageSpec,1})
at ...stdlib\v1.1\Pkg\src\Operations.jl:443
[2] #instantiate#67(::Nothing, ...) at ...Pkg\src\API.jl:466
...
[13] newapp(::String) at ...packages\Genie\wj9rG\src\Genie.jl:73
原因
このエラーは Julia の Pkg (パッケージマネージャ) 内部で発生します。エラーメッセージの haskey(hashes, uuid) は「あるパッケージの UUID に対応するハッシュ値がローカルレジストリに見つからない」という意味です。
| 典型原因 | 頻度 |
|---|---|
| ローカルレジストリのキャッシュが古い / 壊れている | ★★★ |
| JuliaPro 独自レジストリと General レジストリの不整合 | ★★ |
| Julia / Genie / Pkg のバージョン組み合わせ問題 | ★★ |
| Project.toml / Manifest.toml の不整合 | ★ |
| ネットワーク途中切断によるダウンロード破損 | ★ |
影響範囲
「アプリのディレクトリは作成されたが依存ライブラリのインストール中に失敗した」ため、後続フローが途中で止まる状況です:
- アプリディレクトリ作成 — 完了
- Project.toml / Manifest.toml の生成 — 完了
- プロジェクトの有効化 — 完了
- 依存ライブラリのインストール — 失敗ここ
- REPL へのアプリロード — 未実行
- Web サーバー起動 — 未実行
つまりサーバー起動自体はできるが、一部の機能が動かない状態になりがちです。
対処法 1: レジストリを再構築する (推奨)
ローカルレジストリのキャッシュ不整合が原因のことが多いので、まずはレジストリディレクトリを削除して再取得します。
# Windows
rmdir /s /q "%USERPROFILE%\.julia\registries"
# Linux / macOS
rm -rf ~/.julia/registries# Julia REPL で
using Pkg
pkg"registry add General"
Pkg.update()
完了後、改めて Genie.newapp("MyApp") を実行します。
対処法 2: Pkg.gc() + instantiate
レジストリは壊れていないが Manifest.toml と実体が食い違っている場合:
using Pkg
Pkg.gc() # 未使用キャッシュ削除
Pkg.activate(".") # アプリディレクトリで
Pkg.instantiate() # 依存を解決
Pkg.precompile() # プリコンパイル
対処法 3: 公式 Registry のみを使う (JuliaPro ユーザー向け)
このエラーは特にJuliaPro(Julia Computing の有償ディストリビューション)で報告されることが多いです。JuliaPro 独自レジストリと General レジストリの間で UUID が食い違うことが原因。
# 既存の JuliaPro レジストリを削除
using Pkg
pkg"registry rm JuliaPro"
# General レジストリのみを追加
pkg"registry add https://github.com/JuliaRegistries/General.git"
Pkg.update()
対処法 4: Julia を新しいバージョンに上げる
Julia 1.1 / 1.2 の Pkg にはこの種の不整合バグが残っています。Julia 1.6 (LTS) 以降では Pkg がほぼリライトされ同種エラーは大幅減少しました。
# https://julialang.org/downloads/ から最新の LTS 版を取得
# Windows なら juliaup を使うと管理が楽
winget install julia
juliaup add release
juliaup default release
対処法 5: アプリディレクトリは活かしつつ手動で依存解決
エラーが出てもアプリディレクトリ自体は作られているので、そこに手動で依存を入れ直すこともできます。
# アプリディレクトリに移動した後
using Pkg
Pkg.activate(".")
Pkg.add("Genie")
Pkg.add("Logging")
# Project.toml に列挙された依存をひとつずつ
Pkg.instantiate()
FAQ
Q: ~/.julia ごと消しても大丈夫?
A: 全パッケージ + 設定がリセットされる。レジストリだけ消したいなら ~/.julia/registries のみで OK。
Q: 起動はできるが一部機能が動かない
A: 依存ライブラリの一部だけインストールされていない可能性。Pkg.status() で確認して足りないものを Pkg.add()。
Q: Genie 公式に同じ報告はある?
A: GitHub Issue で過去複数報告あり。Julia + Pkg の組み合わせ問題として記録されている。