The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

名前

Enbld - 開発環境構築のための、もう一つのパッケージマネージャー

概要

インストール

  $ curl -L http://goo.gl/MrbDDB | perl

コンディション(条件)スクリプトの準備

  $ cat conf_for_build.pl
  #!/usr/bin/perl

  use strict;
  use warnings;

  use lib "$ENV{HOME}/.enbld/extlib/lib/perl5/";

  use Enbld;

  enbld 'mydevenv' => build {

      # 最新バージョンをインストール
      target 'git' => define {
          version 'latest';
      };

      # 指定バージョンをインストール
      target 'perl' => define {
          version '5.18.1';
      };

  };

perlのスクリプトとして実行

  $ chmod +x conf_for_build.pl
  $ ./conf_for_build.pl 

  -> スクリプトに定義された条件に従ってソフトウェアをインストールします。

説明

Enbldは、開発環境構築のための、もう一つのパッケージマネージャーです。

ソフトウェアインストールの条件(バージョン - 最新か指定のバージョン、テストは実行するか 等)をコンディション(条件)スクリプトに記述し、perlのスクリプトとして実行します。

Enbldはスクリプトの定義された条件に従って、ソフトウェアをインストールします。

特徴

1. インストール条件は、perlベースのDSLで定義

一度コンディションスクリプトを書けば、同じ環境を簡単に再現できます。

2. 指定したバージョンのインストールが可能

他のパッケージマネジメントシステム(Homebrew, MacPorts, APT, RPM, Yum など)と違い、Enbldはバージョンを固定しません。

インストールするバージョンは自由に指定できます。

また、バージョンを'latest'(最新)と指定することも可能です。この場合、自動的に最新バージョンを特定し、そのバージョンをインストールします。

3. 新しいバージョンのリリースをチェック可能

バージョンを'latest'(最新)と指定したソフトウェアは、より新しいバージョンがリリースされたか、チェックできます。

これにより、頻繁にアップデートされるソフトウェア(vim, git など)でも、常に最新バージョンを使うことができます。

4. 全てのソフトウェアは、ホームディレクトリにインストール

インストールにsudoコマンドは必要ありません。

バックアップや削除は、簡単にできます。

5. 全てのプログラミング言語に同一のインストールインタフェースを提供

他のプログラミング言語のバージョンマネージャーと違い、全てのプログラミング言語に同一のインストールインタフェースを提供します。

プログラミング言語ごとに異なる方法を習得する必要は有りません。

やらないこと

1. Enbldは完全なパッケージマネージャーは目指しません

Enbldがサポートするソフトウェアの基準は以下の通りです。

  • 頻繁にアップデートされる開発作業用のソフトウェア

    例: vim, git

  • プロジェクトによって特定のバージョンが指定されるソフトウェア

    例:

    プログラミング言語(perl, ruby, nodejs, scala 等)

    ウェブサーバ (apache, nginx 等)

    データベース (MySQL 等)

  • 開発には必要だけど、OS Xではインストールされていないソフトウェア

    例: tmux

上記の基準に該当しないソフトウェアはサポートしません。

2. Enbldは、プログラミング言語が提供するモジュールインストール機能と重複する機能は提供しません。

モジュールのインストールには、CPANや、Rubygemなど、プログラミング言語が提供する機能を使って下さい。

注意事項

Enbldは、全てのバージョンのビルドを保証するわけではありません。

ビルドが失敗した時にはログファイルが表示されますので、どうか解析してレポートを送って下さい :)

インストール方法

サポートするプラットフォーム

Enbldは、OS X Mavericksで動作検証を行っています。

ひょっとすると、Linux (Debian, Ubuntu など)でも動作するかもしれません。動かない時は、レポートをお待ちしております :)

動作環境

  • perl 5.10.1以上

    注:Enbldは必ずsystem perl (/usr/bin/perl)を使います。

  • GNU Make

  • コンパイラ (gccか、clang)

  • その他、ターゲットのソフトウェアごとに必要なもの(例:scalaにはJREが必要)

インストール

 $ curl -L http://goo.gl/MrbDDB | perl

Enbldは全てのコンポーネントを「$HOME/.enbld」ディレクトリにインストールします。そのため、EnbldがインストールしたソフトウェアのためにPATHを設定する必要があります。

PATHの設定

.bashrcか、.bash_profileに下記の設定を追加して下さい。

 export PATH=$HOME/.enbld/bin:$HOME/.enbld/extlib/bin:$PATH
 export MANPATH=$HOME/.enbld/share/man:$HOME/.enbld/man:$MANPATH

Enbldを始める

最新バージョンのインストール

コンディションスクリプトの準備

 $ cat samples/git_install.pl
 #!/usr/bin/perl

 use strict;
 use warnings;

 use lib "$ENV{HOME}/.enbld/extlib/lib/perl5/";

 use Enbld;

 enbld 'mydevenv' => build {

     target 'git' => define {
         version 'latest';
     };
 }

perlスクリプトとして実行

 $ ./samples/git_install.pl

インストール完了

 $ git --version
 git version [latest version]

アップグレード

その後、より新しいバージョンがリリースされたら、もう一度スクリプトを実行して下さい。

 $ ./samples/git_install.pl

最新バージョンがインストールされます。

指定バージョンのインストール

バージョンの指定は、コンディションスクリプトの中で行います。 -> version '5.18.1';

 $ cat samples/specific_version_install.pl
 #!/usr/bin/perl
    
 use strict;
 use warnings;
    
 use lib "$ENV{HOME}/.enbld/extlib/lib/perl5/";
    
 use Enbld;
    
 enbld 'mydevenv' => build {
    
     target 'perl' => define {
         version '5.18.1';
     };
    
 };

'perl 5.18.1'がインストールされました。

 $ perl -v

 This is perl 5, version 18, subversion 1 (v5.18.1) built for ...

引数の追加

'arguments'関数は、'configure'スクリプトに引数を追加します。

 target 'perl' => define {
     version '5.18.1';
     arguments '-Dusethreads';
 };

perl 5.18.1は、スレッド付きでビルドされました。

 $ perl -v
    
 This is perl 5, version 18, subversion 1 (v5.18.1) built for darwin-thread-multi-2level

依存するソフトウェアのインストール

OS XでEnbldを使う場合、ソフトウェア間の依存関係も自動的に解決します。

例えば、wgetにはlibidnライブラリが必要ですが、Enbldはwgetをインストールする際、自動的にlibidnもインストールします。

  $ enblder install wget
  =====> Start building target 'wget'.
  =====> Found dependencies.
  --> Dependency 'libidn'.
  --> libidn is not installed yet.
  =====> Start building target 'libidn'.

OS X以外の、Linuxや、BSDといったOSでは依存関係の解決パターンが多いので、必要なソフトウェアは、OSのパッケージ管理マネージャーを使って解決して下さい。

ユーティリティコマンド'enblder'

'enblder'は、Enbldの使い勝手を良くするためのユーティリティコマンドです。

主なコマンドを以下に示します。

全てのコマンドの解説は、perldoc enblderで表示されます。

入手可能なソフトウェアの表示

サブコマンド'available'は、Enbldがインストールできるソフトウェアの一覧を表示します。

 $ enblder available

コンディションスクリプトに指定するソフトウェアの名称は、この一覧に表示される名称を使います。

ソフトウェアのインストール

サブコマンド'install'は、指定したソフトウェアの最新バージョンをインストールします。

 $ enblder install git

コンディションスクリプトを書かずに、ソフトウェアをインストールしたい時に使います。その後で'freeze'サブコマンドを使うと、そのインストールを反映したコンディションスクリプトを表示することができます。

インストール済みのソフトウェアの表示

サブコマンド'list'は、インストール済みのソフトウェアの一覧と、バージョンを表示します。

 $ enblder list

コンディションスクリプトの表示

サブコマンド'freeze'は、インストール済みのソフトウェアを再現するコンディションスクリプトを表示します。

 $ enblder freeze

表示された内容をテキストファイルにリダイレクトすれば、そのまま実行可能なperlのスクリプトになります。

 $ enblder freeze > conditions.pl
 $ chmod +x conditions.pl
 $ ./conditions.pl

旧バージョンのソフトウェアの表示

サブコマンド'outdated'は、旧バージョンのソフトウェアの一覧を表示します。

 $ enblder outdated

旧バージョンのソフトウェアをアップデート

サブコマンド'upgrade'は、旧バージョンになったソフトウェアをアップデートします。

 $ enblder upgrade git

Enbldのお勧めの使い方

最後に、Enbldのお勧めの使い方を紹介します。

1 Enbldをインストールする。
  $ curl -L http://goo.gl/MrbDDB | perl
2 利用可能なソフトウェアの一覧を表示する。
  $ enblder available
3 常に最新バージョンを使いたいソフトウェアをインストールする。
  $ enblder install git
4 コンディションスクリプトを作成する。
  $ enblder freeze > my_conditions.pl
  $ chmod +x my_conditions.pl
5 指定したバージョンを使いたいソフトウェアを加える。
  target 'perl' => define {
      version '5.18.1';
  }
6 コンディションスクリプトを実行する。
  $ ./conditions.pl
7 時々、より新しいバージョンのリリースをチェックする。
  $ enblder outdated
8 古くなったソフトウェアをアップグレードする。
  $ enblder upgrade git
9 きっとどこかでトラブルに遭遇するので、レポートか、パッチを送る :)

https://github.com/magnolia-k/Enbld/issues

10 7から10を繰り返す

更なる情報

Enbld::Tutorial

enblder

ウェブサイト

https://github.com/magnolia-k/Enbld

http://code-stylistics.net/enbld

問題のレポート

https://github.com/magnolia-k/Enbld/issues

コピーライト

copyright 2013- Magnolia <magnolia.k@me.com>.

LICENSE

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.