perlbrew

Perlバージョン管理cpanmlocal::libCPANUnixBash

GitHub概要

gugod/App-perlbrew

Manage perl installations in your $HOME

スター728
ウォッチ36
フォーク219
作成日:2010年2月27日
言語:Perl
ライセンス:Other

トピックス

なし

スター履歴

gugod/App-perlbrew Star History
データ取得日時: 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]       # 特定バージョン指定