Juliaのパッケージ公開はREPLからできる #JuliaAC #julialang

この記事は、Julia Advent Calendarの11日目の記事です。 10日目は夜道先生のNumericExtensions.jl の話でした。

Juliaのパッケージを作っても、野良パッケージを作るだけでは多くの人に使ってもらえません。 RでいうCRAN、Rubyでいうgemのように、JuliaではMETADATA.jlというエコシステムでパッケージが管理されています。 パッケージはすべてgithub上ですべてホスティングされています。(だから、先日のロシアのgithubアクセス禁止騒ぎみたいなのに巻き込まれると何も出来ません…) METADATA.jlもPull Requestベースで管理されているのですが、中身について議論されることはあまりなく、基本的に1日程度でどんどん取り込まれます。(CRANは厳正な審査がいるそうですね!)

また、パッケージをMETADATA.jlに登録するとパッケージ検索ができるようになります。ちなみに、デイリーでstableとnightlyバージョンでテストがこけると自動で斧が投げられる仕組みとかがあります。

さて、パッケージの作り方は@bicycle1885さんの下記のJuliaTokyo #1のスライドが詳しいです。

Juliaのパッケージをつくろう! from Kenta Sato

Juliaのパッケージをつくろう!

今日は、そこで検証されていなかったPkg.publish()についてご紹介したいと思います。 そもそも、この発表の段階ではGithubの2 factor authに対応されていなかったのですが、少し前にできるようになりました

julia> Pkg.update()
INFO: Updating METADATA...
...snip...
INFO: Building Homebrew
remote: Counting objects: 818, done.
remote: Compressing objects: 100% (232/232), done.
remote: Total 818 (delta 644), reused 759 (delta 585)
Receiving objects: 100% (818/818), 92.06 KiB | 0 bytes/s, done.
Resolving deltas: 100% (644/644), completed with 144 local objects.
From https://github.com/Homebrew/homebrew
653dc2e..aad426f master -> origin/master
HEAD is now at aad426f CurlDownloadStrategy: initialize attributes in initializer
HEAD is now at 0ff29b6 Add xz as a dependency for imagemagick
INFO: Building Cairo
julia> Pkg.tag("MeCab")
INFO: Tagging MeCab v0.1.2
INFO: Committing METADATA for MeCab
julia> Pkg.publish()
INFO: Validating METADATA
INFO: Pushing MeCab permanent tags: v0.1.2
INFO: Submitting METADATA changes
INFO: Forking JuliaLang/METADATA.jl to chezou
INFO: Pushing changes as branch pull-request/9edd153f
view raw gistfile1.jl hosted with ❤ by GitHub

gistc578aed2d97ed2634b5b

Pkg.update()して(この場合は更新なので)Pkg.tag("PackageName")して、Pkg.publish()するだけです。 初回はパスワードの入力とアクセストークンの入力が求められるので、githubでtokenを生成してREPLに入力をしましょう。

すると、自分のMETADATA.jlがbranch切られてpushされて、ブラウザが開いてPull Requestが作られます。(自分が試した時はChromeがちょうどクラッシュしたので、手でPR作りなおしたのでもしかするとMETADATA.jlのページが開くだけだったかもしれません)

最高便利!

明日はbicycle1885さんの「PythonistaのためのJulia100問100答」です。

Aki Ariga
Aki Ariga
Principal Software Engineer

Interested in Machine Learning, ML Ops, and Data driven business. If you like my blog post, I’m glad if you can buy me a tea 😉

  Gift a cup of Tea

Related