perlbrew
GitHub概要
gugod/App-perlbrew
Manage perl installations in your $HOME
スター728
ウォッチ36
フォーク219
作成日:2010年2月27日
言語:Perl
ライセンス:Other
トピックス
なし
スター履歴
データ取得日時: 2025/7/20 03:51
言語バージョン管理ツール
perlbrew
概要
perlbrewは、ユーザーのホームディレクトリでPerlの複数バージョンを管理する管理者権限不要のツールです。システムのPerlや他のインストール間で完全に独立したPerl環境を提供し、バージョン間に一切の関係を持ちません。cpanmとの統合により、CPANモジュールの管理も簡素化され、local::libライブラリの管理機能も備えています。Perlコミュニティの標準ツールとして長年愛用され、開発者やシステム管理者にとって必須のツールです。
詳細
主な特徴
- 管理者権限不要: ユーザーディレクトリでの完全なPerl管理
- 完全隔離: システムPerlや他バージョン間の独立性保証
- cpanm統合: CPAN Minusとの seamless な連携
- local::lib対応: プロジェクト固有のライブラリ環境管理
- バージョン切り替え: 一時的・永続的な環境切り替え
- クローン機能: 既存環境からのモジュール複製
- 最小要件: Perl 5.8.0以上での動作保証
アーキテクチャ
perlbrewは、~/perl5/perlbrew/以下に各Perlバージョンを独立してインストールし、シェル環境変数の操作によりバージョン切り替えを実現します。cpanmやpatchperlなどの補助ツールは共通のbinディレクトリに配置され、すべてのPerl環境で利用可能です。
CPAN統合の利点
perlbrewは現代的なCPANモジュール管理を重視し、cpanminus(cpanm)との密接な統合を提供します。従来のCPANシェルの設定不要で、質問応答なしに動作する「Just works」アプローチを採用しています。
メリット・デメリット
メリット
- 標準的地位: Perlコミュニティの事実上の標準ツール
- 管理権限不要: sudo不要でのユーザー環境完結
- 環境隔離: プロジェクト間の完全な依存関係分離
- 簡単切り替え: 直感的なバージョン切り替えコマンド
- cpanm統合: モダンなCPANモジュール管理
- 実証された安定性: 長年の運用実績
- 豊富な機能: バージョン間のモジュール複製機能
デメリット
- Unix系限定: WindowsネイティブサポートなしでWSLが必要
- 初期設定: シェル設定ファイルの手動編集が必要
- Perl専用: 他言語との統一管理は不可
- ディスク使用: 複数バージョンの並行保存
- コンパイル時間: ソースからのビルドによる待機時間
- PATH管理: 複雑なPATH設定の理解が必要
参考ページ
書き方の例
インストール
# クイックインストール(推奨)
curl -L https://install.perlbrew.pl | bash
# 手動ダウンロード
curl -L https://cpanmin.us | perl - App::perlbrew
~/perl5/perlbrew/bin/perlbrew install
# パッケージマネージャー経由(一部OS)
# Ubuntu/Debian
sudo apt-get install perlbrew
# macOS (Homebrew)
brew install perlbrew
環境設定
# Bashの場合(~/.bashrcに追加)
echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.bashrc
source ~/.bashrc
# Zshの場合(~/.zshrcに追加)
echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.zshrc
source ~/.zshrc
# 設定確認
perlbrew version
# 初期化
perlbrew init
基本的な使い方
# 利用可能なPerlバージョンの表示
perlbrew available
# 最新安定版のインストール
perlbrew install perl-5.38.2
# 開発版のインストール
perlbrew install perl-5.39.5
# 特定バージョンのインストール(スレッド対応)
perlbrew install perl-5.38.2 -Dusethreads
# インストール済みバージョンの表示
perlbrew list
# バージョンの永続的な切り替え
perlbrew switch perl-5.38.2
# バージョンの一時的な使用(現セッションのみ)
perlbrew use perl-5.38.2
# システムPerlに戻す
perlbrew off
perlbrew switch-off
cpanmの統合
# cpanmのインストール
perlbrew install-cpanm
# cpanmでモジュールをインストール
cpanm DBI
cpanm Mojolicious
cpanm Plack
# 複数モジュールの一括インストール
cpanm DBI DBD::SQLite Mojolicious Dancer2
# requirementsファイルからのインストール
cpanm --installdeps .
# 開発依存関係も含めてインストール
cpanm --with-develop --installdeps .
# Force install(依存関係エラーを無視)
cpanm --force problematic-module
# ローカルファイルからのインストール
cpanm ./local-module-1.0.tar.gz
local::libライブラリ管理
# ライブラリ環境の作成
perlbrew lib create perl-5.38.2@myproject
perlbrew lib create perl-5.38.2@testing
# ライブラリ環境の一覧表示
perlbrew lib list
# ライブラリ環境への切り替え
perlbrew switch perl-5.38.2@myproject
# 一時的なライブラリ環境の使用
perlbrew use perl-5.38.2@testing
# ライブラリ環境の削除
perlbrew lib delete perl-5.38.2@testing
# 現在の環境確認
perlbrew list
バージョン間のモジュール複製
# 既存バージョンから新バージョンへのモジュール複製
perlbrew clone-modules perl-5.36.3 perl-5.38.2
# 特定のモジュールリストを別バージョンに再インストール
perlbrew list-modules | perlbrew exec --with perl-5.38.2 cpanm
# ライブラリ環境間での複製
perlbrew clone-modules perl-5.38.2@source perl-5.38.2@target
カスタムビルドオプション
# スレッド対応でビルド
perlbrew install perl-5.38.2 -Dusethreads
# デバッグシンボル付きでビルド
perlbrew install perl-5.38.2 -DDEBUGGING
# 64bit整数対応
perlbrew install perl-5.38.2 -Duse64bitint
# カスタムプレフィックス
perlbrew install perl-5.38.2 -Dprefix=/custom/path
# 複数オプション組み合わせ
perlbrew install perl-5.38.2 -Dusethreads -Duse64bitall -DDEBUGGING
# ビルド進行状況の確認
perlbrew install-progress
プロジェクトでの活用
# プロジェクトセットアップスクリプト
#!/bin/bash
# setup-perl.sh
PROJECT_NAME="myapp"
PERL_VERSION="perl-5.38.2"
LIB_NAME="${PERL_VERSION}@${PROJECT_NAME}"
# プロジェクト固有のPerl環境作成
if ! perlbrew lib list | grep -q "$LIB_NAME"; then
echo "Creating Perl library: $LIB_NAME"
perlbrew lib create "$LIB_NAME"
fi
# 環境の切り替え
perlbrew switch "$LIB_NAME"
# 依存関係のインストール
if [ -f "cpanfile" ]; then
echo "Installing dependencies from cpanfile..."
cpanm --installdeps .
fi
echo "Perl environment ready: $(perl -v | head -2 | tail -1)"
echo "Library: $LIB_NAME"
cpanfileを使った依存関係管理
# cpanfile
requires 'Mojolicious', '9.36';
requires 'DBI', '1.643';
requires 'DBD::SQLite', '1.72';
on 'develop' => sub {
requires 'Test::More', '1.302194';
requires 'Test::Exception', '0.43';
requires 'Perl::Tidy', '20230309';
};
on 'test' => sub {
requires 'Test::Pod', '1.52';
requires 'Test::Pod::Coverage', '1.10';
};
# cpanfileを使った依存関係インストール
cpanm --installdeps . # 基本依存関係
cpanm --installdeps --with-develop . # 開発依存関係込み
cpanm --installdeps --with-all-features . # 全機能込み
CI/CDでの活用
# GitHub Actions例
name: Perl CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
perl: ['5.36.3', '5.38.2', '5.39.5']
steps:
- uses: actions/checkout@v4
- name: Install perlbrew
run: |
curl -L https://install.perlbrew.pl | bash
source ~/perl5/perlbrew/etc/bashrc
echo 'source ~/perl5/perlbrew/etc/bashrc' >> $GITHUB_ENV
- name: Install Perl
run: |
source ~/perl5/perlbrew/etc/bashrc
perlbrew install perl-${{ matrix.perl }} --notest
perlbrew switch perl-${{ matrix.perl }}
perlbrew install-cpanm
- name: Install dependencies
run: |
source ~/perl5/perlbrew/etc/bashrc
perlbrew use perl-${{ matrix.perl }}
cpanm --installdeps --with-develop .
- name: Run tests
run: |
source ~/perl5/perlbrew/etc/bashrc
perlbrew use perl-${{ matrix.perl }}
prove -l t/
Docker統合
# Dockerfile例
FROM ubuntu:22.04
# システム依存関係のインストール
RUN apt-get update && apt-get install -y \
curl \
build-essential \
&& rm -rf /var/lib/apt/lists/*
# ユーザーの作成
RUN useradd -m perluser
USER perluser
WORKDIR /home/perluser
# perlbrewのインストール
RUN curl -L https://install.perlbrew.pl | bash
RUN echo 'source ~/perl5/perlbrew/etc/bashrc' >> ~/.bashrc
# Perlのインストール
RUN /bin/bash -c "source ~/perl5/perlbrew/etc/bashrc && \
perlbrew install perl-5.38.2 --notest && \
perlbrew switch perl-5.38.2 && \
perlbrew install-cpanm"
# 作業ディレクトリの設定
WORKDIR /app
# プロジェクトファイルのコピー
COPY --chown=perluser:perluser . .
# 依存関係のインストール
RUN /bin/bash -c "source ~/perl5/perlbrew/etc/bashrc && \
perlbrew use perl-5.38.2 && \
cpanm --installdeps ."
# アプリケーションの起動
CMD ["/bin/bash", "-c", "source ~/perl5/perlbrew/etc/bashrc && perlbrew use perl-5.38.2 && perl app.pl"]
デバッグとトラブルシューティング
# インストール状況の詳細確認
perlbrew info
# 現在の環境変数表示
perlbrew env
# 特定バージョンでコマンド実行
perlbrew exec --with perl-5.38.2 perl -v
# 全バージョンでコマンド実行
perlbrew exec perl -E 'say $^V'
# ビルドエラーのログ確認
cat ~/perl5/perlbrew/build.log
# 設定の初期化
perlbrew self-upgrade
perlbrew clean
# 環境の完全リセット
rm -rf ~/perl5/perlbrew
curl -L https://install.perlbrew.pl | bash
高度な使用例
# 並列ビルドの有効化
export PERLBREW_CONFIGURE_FLAGS='-j 8'
perlbrew install perl-5.38.2
# カスタムインストールディレクトリ
export PERLBREW_ROOT=$HOME/custom-perl
curl -L https://install.perlbrew.pl | bash
# プロキシ環境での使用
export http_proxy=http://proxy.company.com:8080
export https_proxy=http://proxy.company.com:8080
perlbrew install perl-5.38.2
# ミラーサーバーの指定
export PERLBREW_CPAN_MIRROR=http://cpan.cpantesters.org/
perlbrew install perl-5.38.2
自動化とスクリプト活用
# バージョン管理自動化スクリプト
#!/bin/bash
# perl-env-manager.sh
VERSIONS=("5.36.3" "5.38.2" "5.39.5")
COMMON_MODULES=("DBI" "Mojolicious" "Plack" "Test::More")
for VERSION in "${VERSIONS[@]}"; do
PERL_NAME="perl-$VERSION"
if ! perlbrew list | grep -q "$PERL_NAME"; then
echo "Installing $PERL_NAME..."
perlbrew install "$PERL_NAME" --notest
fi
echo "Setting up common modules for $PERL_NAME..."
perlbrew use "$PERL_NAME"
for MODULE in "${COMMON_MODULES[@]}"; do
cpanm "$MODULE"
done
done
echo "All Perl versions and modules installed successfully!"
レガシーPerl対応
# 古いバージョンのPerl(5.8.x系)
perlbrew install perl-5.8.9
# 古いPerlでの制限事項対応
perlbrew use perl-5.8.9
cpanm --notest Module::Build # テストスキップが必要な場合
# 古いCPANモジュールの固定バージョンインストール
cpanm Module::[email protected] # 特定バージョン指定