hex.infoコマンドを使ってパッケージの最新バージョンをサクッと確認する
erlang、elixirのパッケージマネージャーであるHexにはパッケージの公開や検索を行うためのコマンドが存在します。
mix hex
で利用可能なコマンドの一覧が確認できます。
$ mix hex
Hex v1.0.1
Hex is a package manager for the Erlang ecosystem.
Available tasks:
mix hex.audit # Shows retired Hex deps for the current project
mix hex.build # Builds a new package version locally
mix hex.config # Reads, updates or deletes local Hex config
mix hex.config KEY # Get config value for KEY
mix hex.config KEY --delete # Delete config value for KEY
mix hex.config KEY VALUE # Set config KEY to VALUE
mix hex.docs fetch PACKAGE [VERSION] # Fetch documentation for offline use
mix hex.docs offline PACKAGE [VERSION] # Open a browser window with offline documentation
mix hex.docs online PACKAGE [VERSION] # Open a browser window with online documentation
mix hex.info # Prints Hex information
mix hex.info PACKAGE [VERSION] # Prints package information
mix hex.organization auth ORGANIZATION # Authorize an organization
mix hex.organization deauth ORGANIZATION # Deauthorize and remove organization
mix hex.organization list # List all authorized organizations
mix hex.organization key ORGANIZATION generate # Generate organization key
mix hex.organization key ORGANIZATION revoke KEY_NAME # Revoke key
mix hex.organization key ORGANIZATION revoke --all # Revoke all keys
mix hex.organization key ORGANIZATION list # List keys
mix hex.outdated # Shows outdated Hex deps for the current project
mix hex.outdated [APP] # Shows outdated Hex deps for the given dependency
mix hex.owner add PACKAGE EMAIL_OR_USERNAME # Adds an owner to package
mix hex.owner transfer PACKAGE EMAIL_OR_USERNAME # Transfers ownership of a package to another user or organization
mix hex.owner remove PACKAGE EMAIL_OR_USERNAME # Removes an owner from package
mix hex.owner list PACKAGE # List all owners of a given package
mix hex.owner packages # List all packages owned by the current user
mix hex.package fetch PACKAGE [VERSION] [--unpack] # Fetch the package
mix hex.package diff APP VERSION # Diff dependency against version
mix hex.package diff PACKAGE VERSION1 VERSION2 # Diff package versions
mix hex.package diff PACKAGE VERSION1..VERSION2 # Diff package versions
mix hex.publish # Publishes a new package version
mix hex.publish package # Publish current package
mix hex.publish docs # Publish current docs
mix hex.publish package --revert VERSION # Reverts package on given version
mix hex.publish docs --revert VERSION # Reverts docs on given version
mix hex.publish --revert VERSION # Reverts given version
mix hex.registry build PUBLIC_DIR # Build a local registry
mix hex.repo add NAME URL # Add a repo
mix hex.repo set NAME # Set config for repo
mix hex.repo remove NAME # Remove repo
mix hex.repo show NAME # Show repo config
mix hex.repo list # List all repos
mix hex.retire PACKAGE VERSION REASON # Retires a package version
mix hex.retire PACKAGE VERSION --unretire # Unretires a package
mix hex.search PACKAGE # Searches for package names
mix hex.sponsor # Show Hex packages accepting sponsorships
mix hex.user register # Register a new user
mix hex.user whoami # Prints the current user
mix hex.user auth # Authorize a new user
mix hex.user deauth # Deauthorize the user
mix hex.user key generate # Generate user key
mix hex.user key revoke KEY_NAME # Removes given key from account
mix hex.user key revoke --all # Revoke all keys
mix hex.user key list # Lists all keys associated with your account
mix hex.user reset_password account # Reset user account password
mix hex.user reset_password local # Reset local password
Further information can be found here: https://hex.pm/docs
mix local.hex
でコマンドのインストール、または更新ができます。
$ mix local.hex
これらのコマンドをあまり使ったことはなかったのですが、hex.info
コマンドが地味に使えそうだったため紹介します。
mix hex.info
mix hex.info
で指定したパッケージの情報が取得できます
$ mix hex.info credo
A static code analysis tool with a focus on code consistency and teaching.
Config: {:credo, "~> 1.6"}
Releases: 1.6.4, 1.6.3, 1.6.2, 1.6.1, 1.6.0, 1.6.0-rc.1, 1.6.0-rc.0, 1.5.6, ...
Licenses: MIT
Links:
Changelog: https://github.com/rrrene/credo/blob/master/CHANGELOG.md
GitHub: https://github.com/rrrene/credo
何が嬉しいかというと、 Config
の行にdepsに指定する形式で表示されているため、これをgrepすれば deps
にそのまま使えます。
$ mix hex.info credo | grep Config | cut -d" " -f2-
{:credo, "~> 1.6"}
あとはこれを mix.exs
に貼り付ければ依存の追加ができます。雑にmix projectを作って検証する場合などに便利です。
deps.add
コマンドは公式にサポートされないのか?
余談:「公式で deps.add
コマンドをサポートしないの?」という疑問が湧いてきますが、以下のスレッドがありました。
確かにオフィシャルにあっても良さそうなのですが、依存に関してはjsonやyamlなど決まったフォーマットではなく単なるコードなので、どこに追加すべきか判断がつかないため実装は行わないようです。
たとえばecto_sqlプロジェクトのdepsだと関数を駆使して記述されています。これだと確かに追加しようがないですね。
defp deps do
[
ecto_dep(),
{:telemetry, "~> 0.4.0 or ~> 1.0"},
# Drivers
{:db_connection, "~> 2.5 or ~> 2.4.1"},
postgrex_dep(),
myxql_dep(),
tds_dep(),
# Bring something in for JSON during tests
{:jason, ">= 0.0.0", only: [:test, :docs]},
# Docs
{:ex_doc, "~> 0.21", only: :docs},
# Benchmarks
{:benchee, "~> 0.11.0", only: :bench},
{:benchee_json, "~> 0.4.0", only: :bench}
]
end
defp ecto_dep do
if path = System.get_env("ECTO_PATH") do
{:ecto, path: path}
else
{:ecto, "~> 3.9.0-dev", github: "elixir-ecto/ecto"}
end
end
defp postgrex_dep do
if path = System.get_env("POSTGREX_PATH") do
{:postgrex, path: path}
else
{:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", optional: true}
end
end
defp myxql_dep do
if path = System.get_env("MYXQL_PATH") do
{:myxql, path: path}
else
{:myxql, "~> 0.6.0", optional: true}
end
end
defp tds_dep do
if path = System.get_env("TDS_PATH") do
{:tds, path: path}
else
{:tds, "~> 2.1.1 or ~> 2.2", optional: true}
end
end
過去にPRも上がっていますがCLOSEされており、対応はないでしょう。
更新はかなり古いですが、非公式で deps.add
コマンドを導入するarchiveもあったりします。参考まで。
まとめ
hex.info
コマンドについて紹介してみました。他にも hex.search
でhexからキーワード検索できるなど、色々と知らないコマンドがありました。関心のあるキーワードを入れてみて検索結果を片っ端から見ていくなどしても面白そうですね。興味のある方は試してみてください。
Discussion