cellar について
cellar は JVM プロジェクト向けのコマンドラインスキルで、JAR を手作業で調べずに依存ライブラリや Maven アーティファクトの API を検索できます。Mill、sbt、scala-cli を検出し、座標を指定した外部アーティファクトの照会にも対応します。
主な機能
- 01シグネチャ・メンバー・ドキュメントの取得
- 02パッケージやクラスのシンボル一覧・検索
- 03Mill・sbt・scala-cli のプロジェクト検出
- 04Maven 座標による外部アーティファクト照会
- 05ソースコードと依存ツリーの取得
活用シーン
- 01コーディング前に依存 API を確認
- 02パッケージやクラスで利用可能なシンボルを検索
- 03プロジェクトをインポートせず Maven アーティファクトを調査
- 04依存元のソースや依存ツリーを確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ virtuslab/ cellar --skill cellarインストール後、Claude Code で/cellarを入力して読み込まれたか確認します。
詳細
Cellar
推測したり、JAR ファイルを手動でダウンロード、展開、検索して型シグネチャを調べたりする代わりに、cellar を使って JVM 依存関係の API を検索できます。
前提条件
cellar --version を実行して、cellar が PATH にあることを確認します。見つからない場合は、インストールが必要です:https://github.com/VirtusLab/cellar#installation
プロジェクトを認識するコマンド(プロジェクトのルートから実行)
現在のプロジェクトのコードとすべての依存関係を検索します。Cellar はビルドツール(Mill、sbt、scala-cli)を自動検出します。
cellar get [--module <name>] <fqn> # 単一のシンボル(シグネチャ、メンバー、ドキュメント)
cellar list [--module <name>] <package> # パッケージまたはクラス内のシンボルを一覧表示
cellar search [--module <name>] <query> # 大文字と小文字を区別しない部分一致検索
- Mill/sbt プロジェクト:
--moduleが必要です(例:--module lib、--module core) - scala-cli プロジェクト:
--moduleは省略します --test:テストスコープのクラスパスを検索します(sbt/scala-cli の場合。Mill では、--module foo.testのようにテストモジュールを直接指定します)--no-cache:クラスパスのキャッシュをスキップし、ビルドツールから再抽出します--java-home <path>:JRE クラスパスを上書きします-l、--limit <N>:list/searchの最大結果数(デフォルト:50)--hide-inherited:型自体で宣言されたメンバーのみを表示します(getコマンド)--group-inherited:宣言元の型ごとにセクション見出しでメンバーをグループ化します(getコマンド)-v、--verbose/--debug:診断情報を stderr に出力します。想定したシンボルが見つからないと報告された場合に使用します。getコマンドで--verboseを指定すると、試した検索方法が表示されます。--debugを指定すると、どのコマンドでも解決されたクラスパスとビルドツールの検出情報が追加されます。
外部コマンド(任意の Maven 座標を検索)
明示的な座標(group:artifact:version)を指定して、公開済みの任意のアーティファクトを検索します。
cellar get-external <coordinate> <fqn> # 単一のシンボル
cellar list-external <coordinate> <package> # シンボルを一覧表示
cellar search-external <coordinate> <query> # 名前で検索
cellar get-source <coordinate> <fqn> # ソースコードを取得
cellar deps <coordinate> # 依存関係ツリー
- 座標は明示的に指定する必要があります:
group:artifact_3:version(::省略形は使えません) - sbt プラグインでは、Scala と sbt の完全なサフィックスを使用します:
group:artifact_2.12_1.0:version(例:org.scala-native:sbt-scala-native_2.12_1.0:latest) - コンパイラープラグインや、Scala の完全なバージョンサフィックスを持つその他のアーティファクトでは、完全なバージョンを使用します:
group:artifact_3.3.8:version - 最新リリースを解決するには、バージョンとして
latestを使用します -r、--repository <url>:追加の Maven リポジトリ(繰り返し指定可能)。~/.cellar/cellar.confまたは.cellar/cellar.confのmaven.repositoriesで設定されたリポジトリに追加されます
ワークフロー
- パッケージがわからない場合 →
cellar search/cellar search-external - パッケージはわかるが、型がわからない場合 →
cellar list/cellar list-external - 型がわかっている場合 →
cellar get/cellar get-external - 実装が必要な場合 →
cellar get-source
例
# Look up a Scala 3 trait
cellar get-external org.typelevel:cats-core_3:2.10.0 cats.Monad
# Look up a Java class
cellar get-external org.apache.commons:commons-lang3:3.14.0 org.apache.commons.lang3.StringUtils
# List a package
cellar list-external io.circe:circe-core_3:0.14.6 io.circe
# Search for a method
cellar search-external org.typelevel:cats-core_3:2.10.0 flatMap
# Get source code
cellar get-source org.typelevel:cats-core_3:2.10.0 cats.Monad
# Dependency tree
cellar deps org.typelevel:cats-effect_3:3.5.4
# sbt plugin (use full Scala + sbt suffix)
cellar deps org.scala-native:sbt-scala-native_2.12_1.0:latest
# Project-aware (from a Mill project root)
cellar get --module lib cats.Monad
cellar list --module core cats
cellar search --module lib flatMap
出力例
cellar get-external --hide-inherited org.typelevel:cats-core_3:2.10.0 cats.Monad
## cats.Monad
```scala
trait Monad[F[_]] extends FlatMap[F] with Applicative[F]
```
**Supertypes:** cats.Applicative, cats.InvariantMonoidal, cats.FlatMap, cats.FlatMapArityFunctions, cats.Apply, cats.ApplyArityFunctions, cats.InvariantSemigroupal, cats.Semigroupal, cats.Functor, cats.Invariant, java.io.Serializable
Monad.
Allows composition of dependent effectful functions.
See: [[http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf Monads for functional programming]]
Must obey the laws defined in cats.laws.MonadLaws.
**Origin:** cats.Monad
**Members:**
```scala
def iterateWhile[A](f: F[A])(p: A => Boolean): F[A]
def untilM[G[_], A](f: F[A])(cond: => F[Boolean])(implicit G: Alternative[G]): F[G[A]]
def ifElseM[A](branches: (F[Boolean], F[A])*)(els: F[A]): F[A]
def iterateUntilM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A]
def map[A, B](fa: F[A])(f: A => B): F[B]
def whileM_[A](p: F[Boolean])(body: => F[A]): F[Unit]
def whileM[G[_], A](p: F[Boolean])(body: => F[A])(implicit G: Alternative[G]): F[G[A]]
def untilM_[A](f: F[A])(cond: => F[Boolean]): F[Unit]
def iterateUntil[A](f: F[A])(p: A => Boolean): F[A]
def iterateWhileM[A](init: A)(f: A => F[A])(p: A => Boolean): F[A]
```
**Companion members:**
```scala
trait Ops[F[_], A] extends Serializable
object ops
def apply[F[_]](implicit instance: Monad[F]): Monad[F]
trait ToMonadOps extends Serializable
object nonInheritedOps extends ToMonadOps
trait AllOps[F[_], A] extends Ops[F, A] with FlatMap.AllOps[F, A] with Applicative.AllOps[F, A]
```
**Supertypes:** には、線形化順序(メンバー検索で使われる順序)に並んだすべての祖先が表示されます。
メンバー出力の選択
- デフォルト:継承されたものを含め、その型で呼び出せるすべてのメンバーを表示します。呼び出せるメンバーを探すときに使用します。
--hide-inherited:型自体が宣言するメンバーのみを表示します。サブタイプで追加されたメンバーを調べる場合や、出力全体が大きすぎる場合に使用します。--group-inherited:// Declared on/// Inherited fromの見出しの下にメンバーを表示します。ドキュメントを読んだり、オーバーライド対象を探したりするために、宣言元の親型を知りたい場合に使用します。
Metals MCP も利用できる場合
外部依存関係の API の検索にのみcellar を優先してください(cellar の get-external と Metals の inspect/get-docs の比較):cellar はプロジェクトのインポートが不要で、公開されている任意の Maven 座標で動作します。それ以外のすべてのタスク(定義へ移動、参照の検索、名前変更、診断、コンパイル)には Metals を使用してください。
出力
- stdout:Markdown — そのまま利用できます
- stderr:診断情報(警告、切り詰めに関する通知)
- 終了コード 0:成功、終了コード 1:エラー