Pkg

Pkg は Julia 組み込みのパッケージマネージャです。パッケージのインストール・更新・削除といった処理を行います。

情報

ここにあるのは Pkg の非常に簡単な紹介です。Project.tomlManifest.toml・パッケージバージョンの互換性 ([compat])・環境・レジストリなどに関する詳しい情報は https://julialang.github.io/Pkg.jl/v1/ にある完全なマニュアルを参照してください。

ここにあるのは Julia のパッケージマネージャ Pkg の手短な概観です。Julia を使い始めたユーザーが Pkg の基本的な機能に慣れるのに役立つはずです。

Pkg には REPL が付属します。Julia REPL で ] をタイプすると Pkg REPL に入ることができます。Julia REPL に戻るにはバックスペースまたは ^C をタイプしてください。

情報

このガイドは Pkg コマンドを実行するのに Pkg REPL を使います。対話的でない利用には Pkg API を推奨します。Pkg API はドキュメントの API リファレンスの節に完全にドキュメントされています。

Pkg REPL に入ると、次のようなプロンプトが表示されるはずです:

(v1.1) pkg>

パッケージの追加は add で行います:

(v1.1) pkg> add Example
情報

ガイドが散漫にならないよう、ここでは Pkg REPL の出力を省略します。詳しい情報が必要な場合は次の節か Pkg のマニュアルを参照してください。

複数のパッケージをまとめて指定することもできます:

(v1.1) pkg> add JSON StaticArrays

パッケージの削除は rm で行います:

(v1.1) pkg> rm JSON StaticArrays

ここまでに扱ったパッケージは登録されたパッケージでした。Pkg には登録されていないパッケージを扱う機能もあります。登録されていないパッケージを追加するには、URL を指定します:

(v1.1) pkg> add https://github.com/JuliaLang/Example.jl

このパッケージを削除するには rm を使います:

(v1.1) pkg> rm Example

インストールされたパッケージを更新するには update を使います:

(v1.1) pkg> update Example

インストールされたパッケージを全て更新するには、引数を付けずに update を実行します:

(v1.1) pkg> update

これでパッケージの追加・更新・削除というパッケージ管理の基本処理が説明できました。他のパッケージマネージャを使ったことがあれば、こういった処理はすぐに理解できるはずです。伝統的なパッケージマネージャと比べたときに Pkg が持つ大きな強みは、依存関係の管理に環境を使う方式です。

Pkg REPL プロンプトの (v1.1) に気が付いたかもしれません。これはアクティブ環境v1.1 であることを意味します。アクティブ環境とは add, rm, update といった Pkg コマンドが改変する環境のことです。

実験用に新しい環境を設定してみましょう。アクティブ環境を設定するには activate を使います:

(v1.1) pkg> activate tutorial
[ Info: activating new environment at `/tmp/tutorial/Project.toml`.

Pkg からの出力は新しい環境が /tmp/tutorial に作られたことを示しています。

新しいアクティブ環境に移ったことを受けて Pkg は REPL プロンプトを更新します:

(tutorial) pkg>

アクティブ環境に関する情報を取得するには status を使います:

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
   (empty environment)

/tmp/tutorial/Project.toml がアクティブ環境のプロジェクトファイルの位置です。プロジェクトファイルとは Pkg が環境のメタデータを保存する場所です。新しい環境が空であることに注目してください。パッケージを追加して何が起こるかを見ましょう:

(tutorial) pkg> add Example
...

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
  [7876af07] Example v0.5.1

環境 tutorial に依存プロジェクト Example が追加されたことが分かります。

この後 Example を使っていくうちに、Example に新しい機能を追加したくなったとします。どうすればソースコードを変更できるでしょうか? develop コマンドを使えば、Example パッケージを git clone できます:

(tutorial) pkg> develop --local Example
...

(tutorial) pkg> status
    Status `/tmp/tutorial/Project.toml`
  [7876af07] Example v0.5.1+ [`dev/Example`]

status の結果が変わりました。dev/Example は新しくクローンされた Example の位置を指しています。/tmp/tutorial ディレクトリを確認すれば、次のファイルがあることが分かるでしょう:

tutorial
├── dev
│   └── Example
├── Manifest.toml
└── Project.toml

この後 Julia は登録されたバージョンの Example ではなく tutorial/dev/Example に保存されたバージョンを利用します。

これを試してみましょう。まずファイル tutorial/dev/Example/src/Example.jl を変更し、簡単な関数を加えます:

plusone(x::Int) = x + 1

Julia REPL に戻って、このパッケージを読み込みます:

julia> import Example
注意

パッケージを読み込めるのは Julia セッション中に一度だけです。現在の Julia セッション で import Example を実行していた場合には、Julia を再起動して activate tutorial を Pkg REPL から実行し直す必要があります。このプロセスは Revise.jl を使うと大幅に簡略化できますが、そのセットアップはこのガイドの範囲を超えます。

これで Julia は新しいコードを読み込むはずです。試してみましょう:

julia> Example.plusone(1)
2

ここで考えが変わって、斯く美しきコードはこの世界に相応しくないと判断したとします。そのときはローカルにあるクローンの利用を停止し登録されたバージョンを使うよう Pkg に伝えます。この処理を行うのは free コマンドです:

(tutorial) pkg> free Example

tutorial での実験が終わったときは、引数を付けずに activate を呼べばデフォルト環境に戻れます:

(tutorial) pkg> activate

(v1.1) pkg>

よく分からなくなったときは Pkg のヘルプを使ってください:

(v1.1) pkg> ?

利用可能なコマンドとその簡単な説明のリストが表示されるでしょう。コマンド名を続ければ詳細なヘルプを閲覧できます:

(v1.1) pkg> ?develop

このガイドでは Pkg を使い始める最初の一歩を紹介しました。Pkg は他にも強力なパッケージ管理機能を備えています。マニュアルを読んでみてください!