ReproZipは、ユーザのプロジェクトを可能な限り完全に再現可能な形で保存・再実行することを支援するオープンソースツールです。スクリプトや各種プログラミング言語で書かれたソフトウェアなど、多様なアプリケーションの実行環境を再現するために使用できます。
ReproZipのドキュメントは、以下のリンクからアクセスできます。
概要
ReproZipは、基本的にreprozipでパッキングをして、reprounzipでアンパッキングすることで、パッキングした実験を再現します。Linux ではreprozipおよびreprounzipの両方が利用できますが、macOS および Windows ではreprounzipのみが利用可能です。reprounzip-dockerを利用するとDockerコンテナで、reprounzip-vagrantを利用するとVagrantのVMでそれぞれアンパッキングできます。reprounzip-vistrailsは、実験を再現するVisTrailsのワークフローを作成します。
詳しくは、以下を参照すると良いかと思います。
実験の概要
今回は、以下に示すパッキングの環境とアンパッキングの環境を用意し、単にHello, Worldを表示するRustのプログラムを パッキング / アンパッキング の対象にして、実験してみました。
実験の環境
- パッキングする環境
Incusで以下のImageを使用してVMを作成しました。
Ubuntu noble amd64 (20260117_07:42)
VMの作成コマンドは、以下の通りです。
$ incus create images:ubuntu/noble packing-env --vm
- アンパッキングする環境
Windows 11 Pro 25H2
パッキング (Ubuntu環境)
今回は、Ubuntu環境なので、Ubuntu環境でのパッキング方法を記述します。
環境構築
reprozipを動作させるための環境構築をしていきます。
ドキュメントでは、pipでreprozipを入れるように説明されていますが、今回はaptで直接reprozipを入れることにします。
※GitHubのレポジトリを経由して Ubuntu環境と Windows環境を共有するため、gitも入れています。また、ファイルの内容を編集するため、nanoも入れています。
$ apt update
$ apt install reprozip
$ apt install git nano
記事を書いている時点では、aptで直接reprozipを入れると、バージョン 1.3 がインストールされました。
Ubuntu環境へのインストール方法は、以下を参照すると良いかと思います。
パッキング対象のプログラムを作成する
まずは、Rustが実行できる環境を構築します。
$ apt install curl
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
$ apt install build-essential
次に、Hello, Worldを表示するだけのRustのプロジェクトを作成します。
※cloneしておいたレポジトリの中で、Rustのプロジェクトを作成しました。
$ cargo new simple
Rustのプログラムは、以下のmain.rsのみです。
fn main() {
println!("Hello, world!");
}
cargo runした結果は、以下の通りです。
$ cargo run
Compiling simple v0.1.0 (/root/reprozip-mytutorial/simple)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.17s
Running `target/debug/simple`
Hello, world!
今回の実験では、このsampleプロジェクトをcargo runする実験をパッキングします。
パッキング
以下のコマンドで、simpleプロジェクトをcargo runする実験をトレースさせます。
$ reprozip trace cargo run
上記のコマンドを実行すると、コマンドを実行したディレクトリに、.reprozip-traceというディレクトリが生成されました。
.reprozip-trace/config.ymlが設定ファイルになっており、色々と編集できるようですが今回は編集せずにパッキング作業へ移行します。
実験のトレースが完了したら、同一ディレクトリでバンドルを作成してパッキング作業を完了します。
$ reprozip pack simple-pack
すると、上記コマンドを実行したディレクトリに、simple-pack.rpzというパッキングされた成果物が生成されました。
トレースやバンドルした際に、秘匿情報が含まれている可能性があります。十分注意して成果物を共有するようにしてください。(今回の実験の結果には、秘匿情報が紛れている可能性があったため、プライベートレポジトリにしています。)
詳しくは、以下を参照すると良いかと思います。
パッキングした環境で、アンパッキングできるかを確認する
アンパッキングするためには、reprounzipが必要なので、今回はaptで直接reprounzipを入れることにします。
$ apt install reprounzip
記事を書いている時点では、aptで直接reprounzipを入れると、バージョン 1.3 がインストールされました。
まずは、先程生成したsimple-pack.rpzのバンドル情報を表示してみました。
- Pack information
パッキングされた対象の基本情報を見ることができます。
- Metadata
依存関係、パッケージング環境のマシンアーキテクチャ、およびその他実行に関する情報を見ることができます。アーキテクチャとディストリビューションについては、実験がパッキングされた環境と実験がアンパッキングされる環境の両方に関する情報が表示されています。
- Unpackers
Compatibleでは現在の環境で使えるアンパッカーが、Incompatibleでは現在の環境でサポートされていないアンパッカーが一覧表示されています。
$ reprounzip info simple-pack.rpz
Pack file: simple-pack.rpz
----- Pack information -----
Compressed size: 24.96 MB
----- Metadata -----
Total software packages: 3
Packed software packages: 3
Architecture: x86_64 (current: x86_64)
Distribution: ubuntu 24.04 (current: ubuntu 24.04)
Runs (1):
cargo run
(中略)
----- Unpackers -----
Compatible (5):
chroot
directory
graph
installpkgs
provviewer
(後略)
次に、simple-pack.rpzの入力および出力ファイルの表示をしてみました。
Hello, Worldを表示するだけの実験なので、Output files が none になっていることが確認できます。
$ reprounzip showfiles simple-pack.rpz
Input files:
Cargo.lock
Cargo.toml
bin-simple
(中略)
Output files: none
(後略)
最後に、simple-pack.rpzをアンパッキングしてみました。
バンドル情報によれば、複数のアンパッキング方法が使えそうですが、今回はdirectory Unpackerを試してみました。
正常にHello, Worldが実行されたことを確認できました。
$ reprounzip directory setup simple-pack.rpz simple-pack
$ reprounzip directory run simple-pack/
[REPROUNZIP] 11:24:06.649 WARNING: Rewrote command-line as: /root/reprozip-mytutorial/simple/simple-pack/root/root/.cargo/bin/cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/simple`
Hello, world!
*** Command finished, status: 0
(後略)
詳しくは、以下を参照すると良いかと思います。
次に、Windows環境でも正常にアンパッキングできるかを試してみました。
アンパッキング (Windows環境)
今回は、Windows環境なので、Windows環境でのアンパッキング方法を記述します。
先に結論を延べると、Ubuntu環境でパッキングしたものをWindows環境でアンパッキングすることはできませんでした...。しかし、Windows環境でreprounzipを利用する方法の紹介は意味があると考えたため、説明を続けています。
(WSL2上のUbuntu環境でのアンパッキングも試してみましたが、この記事でパッキングした実験については、私が試した範囲ではうまく動作しませんでした。)
環境構築
reprozipを動作させるための環境構築をしていきます。
まずは、reprounzipをpipを利用してインストールします。
Pythonとpipのバージョンは、以下の通りです。
- Python 3.14.2
- pip 25.3
python -m pip install reprounzip
python -m pip install --upgrade setuptools
次の作業が少し大変です。
reprounzip.exeの場所を特定しなければいけません。私の場合、C:\Users\<ユーザ名>\AppData\Local\Python\pythoncore-3.14-64\Scripts\reprounzip.exeにありました。
このexeファイルを直接実行していくので、以下reprounzipというコマンドは、
全てC:\Users\<ユーザ名>\AppData\Local\Python\pythoncore-3.14-64\Scripts\reprounzip.exeに読み変えてください。
Windows環境へのインストール方法は、以下を参照すると良いかと思います。
まずは、simple-pack.rpzのバンドル情報を表示してみました。
Distribution の current が、not Linux になっていることが確認できます。
Unpackers の Compatible を確認する限り、実験を再現することはできなさそうなので、dot言語で書かれたファイルの生成を試してみることにしました。
$ reprounzip info simple-pack.rpz
(中略)
Pack file: simple-pack.rpz
----- Pack information -----
Compressed size: 24.96 MB
----- Metadata -----
Total software packages: 3
Packed software packages: 3
Architecture: x86_64 (current: amd64)
Distribution: ubuntu 24.04 (current: (not Linux))
Runs (1):
cargo run
(中略)
----- Unpackers -----
Compatible (2):
graph
provviewer
(後略)
今回はdot言語で書かれたファイルの生成を試してみました。
reprounzip graph result.dot simple-pack.rpz
すると、result.dotというファイルが生成されました。このファイルは、Graphvizを利用して画像ファイルに変換できます。
詳しくは、以下を参照すると良いかと思います。
使ってみた感想
やはり、Ubuntu環境でパッキングしたものをWindows環境でアンパッキングすることは、できないようでした。しかし、バンドル情報から、どのような環境で対象の実験が動作したかを確認することはできます。科学技術分野での再現性の向上目的での利用であれば、実験結果のできる限りの完全な再現という、非常に意味のあることを達成するための一助になるのではないでしょうか。
参考サイト