はじめに
研究用の計算サーバーやHPC(高性能コンピューティング)環境で作業する際、「Aのツールを使いたいのに、Bのライブラリとバージョンが衝突してしまう…」といった悩みに直面したことはありませんか?
特にバイオインフォマティクス分野では、日々増え続ける無数のツールを適切に使い分ける必要があり、環境管理は非常に複雑になりがちです。
そんな環境の悩みをスマートに解決してくれるのが「Environment Modules」システムです。
この記事では、Environment Modulesの概要とインストール方法、moduleコマンドの基本的な使い方、さらにmamba/biocondaでインストールしたツール群をmoduleコマンドで統一的に呼び出す方法まで、幅広くご紹介します。
Environment Modulesとは?
Environment Modulesは、ユーザーのシェル環境(PATHやLD_LIBRARY_PATHなどの環境変数)を動的に変更するためのツールです。
modulefileと呼ばれる設定ファイルを通じて、特定のアプリケーション(例:star/2.7.10a)を利用するために必要な環境設定を、module loadという1つのコマンドで完結させてくれます。
これにより、異なるバージョンや互換性のないソフトウェア群を、必要な時だけロード/アンロードし、クリーンな作業環境を保つことができます。
Environment Modulesのインストール
Environment Modulesは、HPC環境などでは既にインストールされていることが多いですが、個人のLinux/Macマシンにも導入が可能です。
Linux (Ubuntu) の場合
sudo apt install environment-modules
Macの場合
brew install modules
moduleコマンドの基本的な使い方
moduleコマンドの操作は非常にシンプルです。ここでは、日常的によく使う5つの基本コマンドを紹介します。
1. 利用可能なモジュールを探す: module avail
その環境でどんなソフトウェアが利用可能かを確認します。
module avail
2. モジュールをロードする: module load <モジュール名>
使いたいソフトウェア(例:star/2.7.10a)を環境に読み込みます。
module load star/2.7.10a
実行後、which starなどでパスが通り、コマンドが実行可能になったことを確認できます。
3. ロード中のモジュールを確認する: module list
現在どのモジュールがロードされているかを確認します。
module list
4. モジュールをアンロードする: module unload <モジュール名>
使い終わったモジュールを環境から削除(アンロード)します。
module unload star/2.7.10a
5. モジュールを切り替える: module swap <旧> <新>
バージョンを一度に切り替えます。unloadとloadを個別に実行するのと同じですが、よりスマートです。
# star/2.7.10a から star/2.7.11b へ切り替え module swap star/2.7.10a star/2.7.11b
(おまけ) 環境をリセットする: module purge
ロードしたモジュールをすべてアンロードし、環境を初期状態(ログイン時)に戻します。
module purge
応用編:mamba/conda環境をmoduleとして登録する
バイオインフォマティクス分野では、biocondaチャンネルと高速なパッケージマネージャmamba(またはconda)を使ってツールをインストールするのが一般的です。
通常、これらの環境は conda activate my_env のように呼び出しますが、module load で統一的に管理できると非常に便利です。ここでは、その連携方法を解説します。
ステップ1: mamba/condaでツールをインストール
例として、mambaを使って「star」を専用のconda環境にインストールします。
# 'star_2.7.10a' という名前のConda環境にstarをインストール # (注:環境名は後のmodulefileと合わせるため、ハイフン(-)ではなくアンダースコア(_)などを推奨) mamba create -n star_2.7.10a -c bioconda star=2.7.10a
ステップ2: mamba/conda環境のパスを確認
インストールされた環境のフルパスを調べ、控えておきます。
mamba env list # active environment : None # ... # star_2.7.10a /path/to/your/miniforge/envs/star_2.7.10a
ステップ3: modulefileの作成
Environment Modulesが読み込むための「modulefile」(Tclスクリプト)を作成します。
MODULEPATH環境変数で指定されたディレクトリ(例:/usr/local/modules/bioinfo)に、star/2.7.10aというファイル名で作成します。
# modulefileを配置するディレクトリを作成(パスは環境によります) sudo mkdir -p /usr/local/modules/bioinfo/star # modulefileを編集(例: /usr/local/modules/bioinfo/star/2.7.10a) sudo vi /usr/local/modules/bioinfo/star/2.7.10a
▼ 2.7.10a ファイルの中身 (Tclスクリプト)
#%Module1.0 # # star/2.7.10a modulefile # # モジュールの説明 proc ModulesHelp { } { puts stderr "Loads star-2.7.10a (installed via bioconda)" } # モジュールの概要(module avail時に表示) whatis "star 2.7.10a (conda env: star_2.7.10a)" # コンフリクト設定(他のstarがロードされていればエラーにする) conflict star # ステップ2で確認したConda環境のパスを設定 set conda_env_path /path/to/your/miniforge/envs/star_2.7.10a # PATH環境変数の先頭に、Conda環境のbinディレクトリを追加 prepend-path PATH $conda_env_path/bin # 必要に応じてライブラリパスなども追加 prepend-path LD_LIBRARY_PATH $conda_env_path/lib prepend-path CPATH $conda_env_path/include
ステップ4: 動作確認
module loadでConda環境を呼び出せるか確認します。
# 新しいモジュールが見えるか確認 module avail star # --- /usr/local/modules/bioinfo --- # star/2.7.10a # Moduleをロード module load star/2.7.10a # パスが通っているか確認 which star # /path/to/your/miniforge/envs/star-2.7.10a/bin/star
これで、mamba/condaによる環境構築の容易さと、Environment Modulesによる統一的な環境管理の利便性を両立できました。
まとめ
Environment Modulesは、load, unload, swap といった簡単なコマンドで、複雑になりがちなソフトウェア環境をクリーンに管理できる強力なツールです。
mamba/biocondaと連携させることで、バイオインフォマティクス研究のように多種多様なツールを扱う現場でも、再現性と利便性の高い環境を構築できます。
moduleコマンドを活用して、快適な研究・開発ライフを送りましょう!