Juliaのパッケージ名が利用可能か確認する

に公開

Juliaの新しいパッケージをGeneralレジストリに登録する(]add PkgNameでインストールできるようにする)とき、パッケージの命名はRegistryCI.jlのガイドラインに従う必要があります。似た名前のパッケージがあると公式レジストリに登録できない(できなかった例)のですが、これを事前に確認する方法が分からず困っていました。最近、GPT-5.3-Codexの力を借りて綺麗に解決したので共有します。

環境

今回のコードを実行した環境は下記の通りです。

julia> versioninfo()
Julia Version 1.10.10
Commit 95f30e51f4 (2025-06-27 09:51 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 8 × 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, tigerlake)
Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores)

パッケージ

下記のRegistryCI.jlRegistryInstances.jlをインストールしましょう。

import Pkg
Pkg.add("RegistryCI")
Pkg.add("RegistryInstances")

判定する関数

下記の関数で判定できます。

using RegistryCI.AutoMerge
using RegistryInstances

path_to_registry = joinpath(DEPOT_PATH[1], "registries", "General.toml")
all_pkg_names = AutoMerge.get_all_non_jll_package_names(RegistryInstances.RegistryInstance(path_to_registry))

function verify_package_name(pkg_name; all_pkg_names=all_pkg_names)
  # 既存のパッケージ名と一致しないか確認
  ok_match, msg_match = AutoMerge.meets_name_match_check(pkg_name, all_pkg_names)
  ok_match || return false, "✗ $msg_match"
  # 近いパッケージ名が無いか確認
  ok_dist,  msg_dist  = AutoMerge.meets_distance_check(pkg_name, all_pkg_names)
  ok_dist || return false, "✗ $msg_dist"
  # 問題ない場合
  return true, "✓ Package name is available."
end

実例

以下のように判定を行うことができます。

julia> verify_package_name("Antique")
(false, "✗ Package name already exists in the registry.")

julia> verify_package_name("Antique2")
(false, "✗ Package name similar to 1 existing package.\n  1. Similar to Antique. Damerau-Levenshtein distance 1 is at or below cutoff of 2. Damerau-Levenshtein distance 1 between lowercased names is at or below cutoff of 1.")

julia> verify_package_name("AntiqueShop")
(true, "✓ Package name is available.")

ここでは私が開発・公開しているAntique.jlを例に挙げました。Antiqueは既に使われているので利用できません。Antique2についてもDamerau–Levenshtein距離が近すぎるので利用できません。一方、AntiqueShopは利用可能です。

ノートブック

Google Colab上で実際に動かせる例を用意しました。パッケージの公開を考えている方はぜひ動かしてみてください。

https://colab.research.google.com/drive/18MywkpT06PNQ8Ry1vEud-tNZXOD2QVZs?usp=sharing

Discussion