Data_megane

日々の記録

Environment Modules:研究・開発環境をクリーンに保つ「module」コマンド

はじめに

研究用の計算サーバーやHPC(高性能コンピューティング)環境で作業する際、「Aのツールを使いたいのに、Bのライブラリとバージョンが衝突してしまう…」といった悩みに直面したことはありませんか?
特にバイオインフォマティクス分野では、日々増え続ける無数のツールを適切に使い分ける必要があり、環境管理は非常に複雑になりがちです。
そんな環境の悩みをスマートに解決してくれるのが「Environment Modules」システムです。
この記事では、Environment Modulesの概要とインストール方法、moduleコマンドの基本的な使い方、さらにmamba/biocondaでインストールしたツール群をmoduleコマンドで統一的に呼び出す方法まで、幅広くご紹介します。

Environment Modulesとは?

Environment Modulesは、ユーザーのシェル環境(PATHLD_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 <旧> <新>

バージョンを一度に切り替えます。unloadloadを個別に実行するのと同じですが、よりスマートです。

# 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コマンドを活用して、快適な研究・開発ライフを送りましょう!