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

タイトル: ERROR: AssertionError: haskey(hashes, uuid)
SEOタイトル: Julia Pkg AssertionError: haskey(hashes, uuid) の原因と対処(Registry 破損リセット)

この記事の要点
  • Genie の Genie.newapp("MyApp") 実行中、依存ライブラリ取得フェーズで発生
  • 根本原因: ローカルの パッケージレジストリのキャッシュ不整合(UUID とハッシュ表の対応が壊れている)
  • 対処 1: ~/.julia/registries を削除して Pkg.update() でレジストリ再構築
  • 対処 2: Pkg.gc() でゴミ掃除、Pkg.instantiate() で再解決
  • 回避策: 公式 Registry 直リン (using Pkg; pkg"registry add General") で JuliaPro 独自レジストリを避ける
  • アプリディレクトリ自体は作成されているので、手動で依存解決すれば続行可能

エラー内容

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 の組み合わせ問題として記録されている。