Linuxbrew 若しくは Homebrew を用いた野良ビルドパッケージの管理手法

# はじめに

[Homebrew][HBRW] とは、 Mac OS X 上における、ソースコードの取得及びビルドに基づいたパッケージ管理システムです。そして、 [Homebrew][HBRW] を Linux の各ディストリビューション向けに移植したものが [Linuxbrew][BREW] です。
[Homebrew][HBRW] 及び [Linuxbrew][BREW] の使用により、ソースコードからのビルドに基づいたソフトウェアの導入を単純かつ容易に行うことが出来ます。

現在、 [Homebrew][HBRW] 及び [Linuxbrew][BREW] には多くのパッケージが含まれており、多様なパッケージを容易にインストールすることが可能ですが、幾つかのソフトウェアに関しては [Homebrew][HBRW] 及び [Linuxbrew][BREW] のパッケージに含まれず、また、システム側のパッケージに含まれないものが存在します。

このような場合、パッケージとして提供されていないソフトウェアのソースコードを手動でダウンロードした上でビルドし、 ```/usr/local``` のような適当なディレクトリにインストールする手法が取られますが、そのまま適当なディレクトリにソフトウェアをインストールすると、ソフトウェアをアップグレードしたりアンインストールする場合に作業が非常に煩雑になる問題が発生します。

そこで、パッケージとして提供されていないソフトウェアをパッケージとしてインストールし、パッケージのアップグレード及びアンインストールを容易にするための手法として [xstow][XSTO] 及び [porg][PORG] なるソフトウェアを用いる手法があります。

しかし、ここで Mac OS X 及び Linux の各ディストリビューションに [Homebrew][HBRW] 及び [Linuxbrew][BREW] が導入されている場合は、 ```brew diy```, ```brew --cellar``` , ```brew link```, ```brew unlink``` 及び ```brew switch``` コマンドを用いることにより、 [Homebrew][HBRW] 及び [Linuxbrew][BREW] と統合的に各種パッケージとして提供されていないソフトウェアをパッケージとして管理することが可能になります。

本稿では、 [Homebrew][HBRW] 及び [Linuxbrew][BREW] を用いて、システム及び [Homebrew][HBRW], [Linuxbrew][BREW] のパッケージとして提供されていないソフトウェアをソースコードからビルドしてインストールし、パッケージとして管理する手法について述べます。

本稿では最初に、 "[各種 ```brew``` コマンドの概要][CHAP01]" の章において、 [Homebrew][HBRW] 及び [Linuxbrew][BREW] においてソースコードからビルドされたソフトウェアをパッケージとしてインストールし管理するために有用なコマンドである各種 ```brew``` コマンドの概要について述べます。

次に、"[実際のパッケージの管理手法][CHAP02]" の章において、 [Homebrew][HBRW] 及び [Linuxbrew][BREW] 上でソースコードからビルドしたソフトウェアをパッケージとして管理する手法について述べます。

最後に、"[結論][CHAP03]" の章において、本稿の結論について述べます。

なお、以降においては特に断りのない限り、パッケージのインストール環境は Linux の各ディストリビューションに [Linuxbrew][BREW] をディレクトリ ```/home/user/.linuxbrew``` 以下に導入した環境を前提とし、 [Homebrew][HBRW] に関しては本稿での言及を省略します。
また、パッケージとしてインストールするためのソフトウェアのソースコードが ```foobar-0.0.1``` ディレクトリ以下に展開されているものとして、本稿を記述します。

# 各種 ```brew``` コマンドの概要

本章では、 [Linuxbrew][BREW] においてソースコードからビルドされたソフトウェアをパッケージとしてインストールし管理するために有用なコマンドである ```brew diy```, ```brew --cellar``` , ```brew link``` 及び ```brew unlink``` コマンドの概要について述べます。

最初に、 "[```brew diy``` コマンド][SEC0101]" の節において、ソフトウェアをソースコードからビルドする際に使用する configure スクリプト及び cmake コマンドにソフトウェアのインストール先を示す引数を渡すための適切なオプションを標準出力に返すコマンドである ```brew diy``` コマンドの概要について述べます。

次に、 "[```brew --cellar``` コマンド][SEC0102]" の節において、 [Linuxbrew][BREW] が管理するパッケージの実体が置かれるディレクトリを標準出力に返すコマンドである ```brew --cellar``` コマンドの概要について述べ、"[```brew link```, ```brew unlink``` コマンド][SEC0103]" の節において、 [Linuxbrew][BREW] が管理するパッケージの実体から [Linuxbrew][BREW] の導入先のディレクトリ以下へのシンボリックリンクを作成するコマンドである ```brew link``` コマンド及び ```brew link``` によって作成されたシンボリックリンクを削除するコマンドである ```brew unlink``` コマンドの概要について述べます。

最後に、"[```brew switch``` コマンド][SEC0104]" の節において、 [Linuxbrew][BREW] が管理するパッケージの実体から [Linuxbrew][BREW] の導入先のディレクトリ以下へのシンボリックリンクを特定のバージョンの実体からのシンボリックリンクに切り替えるコマンドである ```brew switch``` コマンドについて述べます。

## ```brew diy``` コマンド

```brew diy``` コマンドとは、カレントディレクトリにソフトウェアのビルドで使用する ```configure``` スクリプト若しくは ```cmake``` コマンドで使用する ```CMakeLists.txt``` ファイルが存在し、かつ、カレントディレクトリの basename が ```name-x.y.z``` (ここで、 x, y, z はバージョン番号を表す整数) のような形式である場合に、 ```configure``` スクリプト及び ```cmake``` コマンドにソフトウェアのインストール先を示す引数を渡すのに適切なオプションを標準出力に返すコマンドです。

例えば、 ```foobar-0.0.1``` ディレクトリ以下に ```configure``` スクリプトファイルが存在する場合に、カレントディレクトリを ```foobar-0.0.1``` に移動して ```brew diy``` コマンドを実行すると、以下のように ```configure``` スクリプトに渡す ```--prefix``` オプションを標準出力に返します。

```shell-session
 $ cd foobar-0.0.1
 $ ls
 ...(略)...
 configure
 ...(略)...
 $ brew diy
 --prefix=/home/user/.linuxbrew/Cellar/foobar/0.0.1
 $
```
また、 ```foobar-0.0.1``` ディレクトリ以下に ```CMakeLists.txt``` ファイルが存在する場合に、カレントディレクトリを ```foobar-0.0.1``` に移動して ```brew diy``` コマンドを実行すると、以下のように ```cmake``` コマンドに渡す ```-DCMAKE_INSTALL_PREFIX``` オプションを標準出力に返します。

```shell-session
 $ cd foobar-0.0.1
 $ ls
 ...(略)...
 CMakeLists.txt
 ...(略)...
 $ brew diy
 -DCMAKE_INSTALL_PREFIX=/home/user/.linuxbrew/Cellar/foobar/0.0.1
 $
```

ここで、ソフトウェアのソースコードが展開されているディレクトリが ```name-x.y.z``` の形式ではない場合は、 ```brew diy``` はエラーを返します。

このような場合や、パッケージのバージョン番号を明示的に指定したい場合は ```brew diy``` のオプションに ```--version``` を指定します。また、パッケージ名を明示的に指定したい場合は、 ```brew diy``` のオプションに ```--name``` を指定します。

以下では、ソフトウェアのソースコードが ```foobar``` 以下に展開されている場合を例に示します。

```shell-session
 $ cd foobar
 $ ls
 ...(略)...
 configure
 ...(略)... 
 $ brew diy
 Error: Couldn't determine version, set it with --version=<version>
 # バージョン番号に 0.0.0.1 を明示的に指定する場合。
 $ brew diy --version=0.0.0.1
 --prefix=/home/user/.linuxbrew/Cellar/foobar/0.0.0.1
 # 更にパッケージ名に barbaz を明示的に指定する場合。
 $ brew diy --name=barbaz --version=0.0.0.1
 --prefix=/home/user/.linuxbrew/Cellar/barbaz/0.0.0.1
 $
```
## ```brew --cellar``` コマンド

```brew --cellar``` コマンドとは、 ```brew install``` コマンドを用いてインストールされたパッケージ等、 [Linuxbrew][BREW] によって管理されるパッケージの実体が置かれるディレクトリを標準出力に返すコマンドです。

例えば、 [Linuxbrew][BREW] の導入先のディレクトリが ```/home/user/.linuxbrew``` である場合は、通常では ```brew --cellar``` コマンドの標準出力の結果は以下の通りとなります。

```shell-session
 $ brew --cellar
 /home/user/.linuxbrew/Cellar
 $
```

## ```brew link```, ```brew unlink``` コマンド

```brew link``` とは、 ```brew install``` コマンドを用いてインストールされたパッケージ等、 [Linuxbrew][BREW] によって管理されるパッケージの実体が置かれているディレクトリ以下の各ファイルから、 [Linuxbrew][BREW] の導入先のディレクトリ以下にシンボリックリンクを作成するためのコマンドです。

```brew link``` コマンドに続く引数には、シンボリックリンクを作成するパッケージ名を指定します。 ```brew link``` コマンドの実行により、引数で指定したパッケージがインストールされているディレクトリ以下の各ファイルを対象にしてシンボリックリンクを作成します。

```shell-session
 $ brew link foobar
 Linking /home/user/.linuxbrew/Cellar/foobar/0.0.1... 30 symlinks created
 $
```

また、 ```brew unlink``` とは、 ```brew link``` によって作成された [Linuxbrew][BREW] の導入先のディレクトリ以下のシンボリックリンクを削除するコマンドです。

```brew unlink``` コマンドに続く引数には、シンボリックリンクを削除するパッケージ名を指定します。 ```brew unlink``` コマンドの実行により、引数で指定したパッケージから [Linuxbrew][BREW] の導入先のディレクトリ以下に作成されたシンボリックリンクを削除します。

```shell-session
 $ brew unlink foobar
 Unlinking /home/user/.linuxbrew/Cellar/foobar/0.0.1... 30 symlinks removed
 $
```

## ```brew switch``` コマンド

```brew switch``` コマンドとは、 ```brew link``` コマンド及び ```brew install``` コマンド等によってインストールされたパッケージにおいて、これらのパッケージの新たなバージョンをインストールした場合に、これらのパッケージの [Linuxbrew][BREW] の導入先のディレクトリ以下のシンボリックリンクを完全に削除し、 ```brew switch``` コマンドによって指定したパッケージ及びバージョンの実体が置かれているディレクトリ以下の各ファイルから、 [Linuxbrew][BREW] の導入先のディレクトリ以下にシンボリックリンクを作成し直すためのコマンドです。

```brew link``` コマンドによってインストールされたパッケージに対して、新たなバージョンへのアップグレードを行う場合は、 ```brew unlink && brew link``` コマンドでは無く ```brew switch``` を使用する必要があります。

例えば、既に ```brew link``` コマンドによって、バージョン番号が 0.0.1 であるパッケージ ```foobar``` がインストールされており、その後パッケージ ```foobar``` のバージョン番号を 0.0.2 にアップグレードする場合、新しいバージョンのパッケージの実体を ```/home/user/.linuxbrew/Cellar/foobar/0.0.2``` に置き、 ```brew switch``` コマンドの第１引数にパッケージ名 ```foobar``` を、第２引数にバージョン番号 0.0.2 を指定して以下のように実行します。

```shell-session
 $ brew switch foobar 0.0.2
 Cleaning /home/user/.linuxbrew/Cellar/foobar/0.0.1
 Cleaning /home/user/.linuxbrew/Cellar/foobar/0.0.2
 30 links created for /home/user/.linuxbrew/Cellar/0.0.2
 $
```

```brew switch``` コマンドの実行により、引数で指定したパッケージのバージョンを任意の新しいものに切り替えることが出来ます。

# 実際のパッケージの管理手法

本章では、 [Linuxbrew][BREW] 上において、 [```brew diy```][SEC0101], [```brew --cellar```][SEC0102], [```brew link```, ```brew unlink``` コマンド][SEC0103]及び [```brew switch``` コマンド][SEC0104]を用いて、実際にソースコードからビルドしたソフトウェアをパッケージとしてインストールし管理する手法について具体的に述べます。

最初に、 "[configure スクリプトによるインストールが可能である場合][SEC0201]" の節において、ソースコードからのソフトウェアのビルドの際に configure スクリプトを使用する場合におけるパッケージの管理の手法について述べます。

次に、 "[cmake によるインストールが可能である場合][SEC0202]" の節において、ソースコードからのソフトウェアのビルドの際に cmake コマンドを使用する場合におけるパッケージの管理の手法について述べます。

最後に、 "[その他の場合][SEC0203]" の節において、 configure スクリプト及び cmake コマンドの何れの手法にもよらずにソースコードからのソフトウェアのビルドを行う場合におけるパッケージの管理の手法について述べます。

なお以降においては、ソースコードからビルドするソフトウェアと依存関係にある各種ライブラリ等は事前に ```brew install``` コマンド及びシステム側のパッケージ管理コマンド等によって依存関係の解決が完了している事を前提として本章を記述します。

## configure スクリプトによるインストールが可能である場合

本節では、 [```brew diy```][SEC0101] , [```brew link```, ```brew unlink``` コマンド][SEC0103]及び [```brew switch``` コマンド][SEC0104]を用いて、configure スクリプトによるインストールが可能なソフトウェアのビルド及びパッケージの管理の手法について述べます。

最初に、 ```configure``` スクリプトを起動する際に、 ```configure``` スクリプトの引数として [```brew diy``` コマンド][SEC0101]をバッククォートで括ったものを渡します。これにより、 ```configure``` スクリプトに [```brew diy``` コマンド][SEC0101]の標準出力の結果である ```--prefix=/home/user/.linuxbrew/Cellar/foobar/0.0.1``` が引数として渡ります。

```shell-session
 $ cd foobar-0.0.1
 $ ./configure `brew diy`
```

また、ソースコードからのソフトウェアのビルドにおいて他に必要なオプションがあれば、以下のように ```configure``` スクリプトに適切なオプションを追加します。

```shell-session
 $ ./confiure --enable-ssl --enable-static `brew diy`
```

```configure``` スクリプトが正常に終了した後は、通常のソフトウェアのビルドと同様に ```make``` 及び ```make install``` コマンドを実行し、ソフトウェアをディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.1``` 以下にインストールします。

```shell-session
 $ make
 $ make install
```

最後に、 ```make``` 及び ```make install``` コマンドが正常に終了した後は、 [```brew link``` コマンド][SEC0103]を用いて、ディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.1``` 以下にあるパッケージの各ファイルをディレクトリ ```/home/user/.linuxbrew``` 以下にシンボリックリンクを張り、 [Linuxbrew][BREW] にパッケージをインストールします。

```shell-session
 $ brew link foobar
```

なお、ここで、 [```brew link``` コマンド][SEC0103]によってパッケージ ```foobar``` が既にインストールされており、その後パッケージ ```foobar``` のバージョン番号を 0.0.2 にアップグレードするような場合は、 [```brew link``` コマンド][SEC0103]の代わりに [```brew switch``` コマンド][SEC0104]を用いて、ディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.2``` 以下にあるパッケージの各ファイルをディレクトリ ```/home/user/.linuxbrew``` 以下にシンボリックリンクを作成し直します。

```shell-session
 $ brew switch foobar 0.0.2
```

そして、以上の手法によって [Linuxbrew][BREW] にインストールしたパッケージをアンインストールする場合は、 [```brew unlink``` コマンド][SEC0103]を用いて、パッケージからディレクトリ ```/home/user/.linuxbrew``` 以下に張られたシンボリックリンクを削除した後に、パッケージの実体が置かれるディレクトリを削除します。

```shell-session
 $ brew unlink foobar
 $ rm -rf `brew --cellar`/foobar/0.0.1
```

## cmake によるインストールが可能である場合

本節では、 [```brew diy```][SEC0101] , [```brew link```, ```brew unlink``` コマンド][SEC0103]及び [```brew switch``` コマンド][SEC0104]を用いて、cmake コマンドによるインストールが可能なソフトウェアのビルド及びパッケージの管理の手法について述べます。

最初に、[前節][SEC0201]の場合と同様に ```cmake``` コマンドを起動する際に、 ```cmake``` コマンドの引数として、 [```brew diy``` コマンド][SEC0101]をバッククォートで括ったものを渡します。これにより、 ```cmake``` コマンドには [```brew diy``` コマンド][SEC0101]の標準出力の結果である ```-DCMAKE_INSTALL_PREFIX=/home/user/.linuxbrew/Cellar/foobar/0.0.1``` が ```cmake``` コマンドの引数として渡ります。

しかし、 ```CMakeLists.txt``` ファイルが置かれたディレクトリ上において、 ```cmake``` コマンドを実行すると、ソースコードが置かれているディレクトリに ```cmake``` コマンドが生成する中間ファイルが大量に置かれることになり、ソースコードのビルド完了後の中間ファイルの削除作業が非常に煩雑になります。

そこで、 ```cmake``` コマンドによるビルドを実行する際は、 ```CMakeLists.txt``` ファイルが存在するディレクトリの直下に適当なワークディレクトリを作成して、カレントディレクトリをワークディレクトリに移動した後に ```cmake``` コマンドを実行するようにします。この場合は、 ```cmake``` コマンドの引数には ```cd ..; brew diy``` をバッククォートで括って渡すようにします。

```shell-session
 $ cd foobar-0.0.1
 $ mkdir build
 $ cd build
 $ cmake .. `cd ..; brew diy`
```

また、ソースコードからのソフトウェアのビルドにおいて他に必要な引数があれば、以下のように ```cmake``` コマンドに適切な引数を追加します。

```shell-session
 $ cmake .. -DENABLE_SHARED_LIBS=OFF `cd ..; brew diy`
```

```cmake``` コマンドが正常に終了した後は、通常のソフトウェアのビルドと同様に ```make``` 及び ```make install``` コマンドを実行し、ソフトウェアをディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.1``` 以下にインストールします。

```shell-session
 $ make
 $ make install
```

最後に、 ```make``` 及び ```make install``` コマンドが正常に終了した後は、[前節の手法][SEC0201]と同様に [```brew link``` コマンド][SEC0103]を実行してパッケージを [Linuxbrew][BREW] にインストールします。

```shell-session
 $ brew link foobar
```

なお、ここで、 [```brew link``` コマンド][SEC0103]によってパッケージ ```foobar``` が既にインストールされており、その後パッケージ ```foobar``` のバージョン番号を 0.0.2 にアップグレードするような場合は、[前節の手法][SEC0201]と同様に [```brew link``` コマンド][SEC0103]の代わりに [```brew switch``` コマンド][SEC0104]を実行して、ディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.2``` 以下にあるパッケージの各ファイルをディレクトリ ```/home/user/.linuxbrew``` 以下にシンボリックリンクを作成し直します。

```shell-session
 $ brew switch foobar 0.0.2
```

以上の手法によって [Linuxbrew][BREW] にインストールしたパッケージをアンインストールする場合は、[前節の手法][SEC0201]と同様に [```brew unlink``` コマンド][SEC0103]を実行した後に、パッケージの実体が置かれるディレクトリを削除します。

```shell-session
 $ brew unlink foobar
 $ rm -rf `brew --cellar`/foobar/0.0.1
```

## その他の場合

本節では、 [```brew --cellar```][SEC0102], [```brew link``` 及び ```brew unlink``` コマンド][SEC0103]を用いて、 configure スクリプト及び cmake コマンドの何れの手法にもよらずにソースコードからソフトウェアのビルドを行う場合におけるパッケージの管理の手法について述べます。

ソースコードが展開されているディレクトリに configure スクリプト及び CMakeLists.txt が存在しない場合は、 configure スクリプトや cmake コマンドによるソースコードからのソフトウェアのビルドが行えないため、[前々節][SEC0201]及び[前節][SEC0202]で述べた [```brew diy``` コマンド][SEC0101]を使用することが出来ません。

しかし、ソースコードからビルドしたソフトウェアのインストール先のディレクトリを ```{brew --cellar コマンドの標準出力の結果}/name/x.y.z``` (ここに、 name はパッケージ名、 x, y, z はバージョン番号を表す整数) とすることにより、 [Linuxbrew][BREW] によるパッケージ管理が可能になります。

ここでは一例として、ディレクトリ ```foobar-0.0.1``` 以下に展開されたソースコードにファイル ```Makefile``` が存在し、ソフトウェアのインストール先が ```Makefile``` ファイル内の変数 ```PREFIX``` によって指定される場合について考えます。
また、以降においては ```brew --cellar``` コマンドの出力結果は ```/home/user/.linuxbrew/Cellar``` であり、インストールするパッケージ名は foobar で、バージョン番号は 0.0.1 である事を前提として本節を記述します。

まず、カレントディレクトリを ```foobar-0.0.1``` に移動します。

```shell-session
 $ cd foobar-0.0.1
```

そして、ファイル ```Makefile``` 内の変数 ```PREFIX``` の値を以下のように変更します。これにより、ソフトウェアのインストール先を ```/home/user/.linuxbrew/Cellar/foobar/0.0.1``` に指定することが出来ます。

```mf:Makefile
...
# Edit PREFIX etc.
# PREFIX=/usr/local
PREFIX=$(shell brew --cellar)/foobar/0.0.1
CC=gcc
LD=ld
...
```

ファイル ```Makefile``` の修正後は ```make``` 及び ```make install``` コマンドの実行により、ソフトウェアをディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.1``` 以下にインストールします。

```shell-session
 $ make
 $ make install
```

最後に、 ```make``` 及び ```make install``` コマンドが正常に終了した後は、[前々節の手法][SEC0201]と同様に [```brew link``` コマンド][SEC0103]を実行してパッケージを [Linuxbrew][BREW] にインストールします。

```shell-session
 $ brew link foobar
```

なお、ここで、 [```brew link``` コマンド][SEC0103]によってパッケージ ```foobar``` が既にインストールされており、その後パッケージ ```foobar``` のバージョン番号を 0.0.2 にアップグレードするような場合は、[前々節の手法][SEC0201]と同様に [```brew link``` コマンド][SEC0103]の代わりに [```brew switch``` コマンド][SEC0104]を用いて、ディレクトリ ```/home/user/.linuxbrew/Cellar/foobar/0.0.2``` 以下にあるパッケージの各ファイルをディレクトリ ```/home/user/.linuxbrew``` 以下にシンボリックリンクを作成し直します。

```shell-session
 $ brew switch foobar 0.0.2
```

以上の手法によって [Linuxbrew][BREW] にインストールしたパッケージをアンインストールする場合は、[前々節の手法][SEC0201]と同様に [```brew unlink``` コマンド][SEC0103]を実行した後に、パッケージの実体が置かれるディレクトリを削除します。

```shell-session
 $ brew unlink foobar
 $ rm -rf `brew --cellar`/foobar/0.0.1
```

# 結論

本稿では、[前々章][CHAP01]において、システム及び [Linuxbrew][BREW], [Homebrew][HBRW] においてパッケージが提供されていないソフトウェアを [Linuxbrew][BREW] 及び [Homebrew][HBRW] のパッケージとして管理するために有用な [```brew diy```][SEC0101] , [```brew link```, ```brew unlink``` コマンド][SEC0103]及び [```brew switch``` コマンド][SEC0104]の概要について述べました。

次に、[前章][CHAP02]において、 configure スクリプト及び cmake コマンドを用いてソースコードからのビルドが可能であるソフトウェアにおいて、 [```brew diy``` コマンド][SEC0101]の標準出力の結果を configure スクリプト及び cmake コマンドに渡してソースコードをビルドし、 [```brew link``` コマンド][SEC0103]によってソフトウェアのインストール先を [Linuxbrew][BREW] の導入先にシンボリックリンクを作成することによって、ソフトウェアを [Linuxbrew][BREW] にインストールする事が可能である事を述べました。

また、 configure スクリプト及び cmake コマンドの何れの手法にもよらずにソースコードからビルドを行うソフトウェアにおいても、ソフトウェアのインストール先のディレクトリを [```brew --cellar``` コマンド][SEC0102]の標準出力の結果に基づき適切に設定した上でソースコードをビルドし、 [```brew link``` コマンド][SEC0103]によってソフトウェアのインストール先を [Linuxbrew][BREW] の導入先にシンボリックリンクを作成することによって、ソフトウェアを [Linuxbrew][BREW] にインストールする事が可能であることを述べました。

以上より、 [```brew diy```][SEC0101] , [```brew link```, ```brew unlink``` コマンド][SEC0103]及び [```brew switch``` コマンド][SEC0104]を用いることにより、システム及び [Linuxbrew][BREW], [Homebrew][HBRW] においてパッケージが提供されていないソフトウェアを [Linuxbrew][BREW] 及び [Homebrew][HBRW] と統合的に管理することが可能であることを示しました。

しかし、システム及び [Linuxbrew][BREW], [Homebrew][HBRW] においてパッケージが提供されていないソフトウェアを [Linuxbrew][BREW] 及び [Homebrew][HBRW] にパッケージとしてインストールする手法は、**飽くまでも暫定的な手法として留めておくべきです。**

もし、インストールしたパッケージを今後継続的にアップデートする予定が有り、 Ruby によるプログラミングのスキルを有していて、時間的な余裕が有るのであれば、 **[Formula Cookbook][FORM] を参照した上で、ソフトウェアをパッケージとして管理するための Formula スクリプトを記述することを強く御勧め致します。**

# 謝辞

本稿の記述に当たって、最初に、当方の手元の環境である [Debian 環境][DEBI]への [Linuxbrew][BREW] の導入の詳細に関しては、 [thermes 氏][THER]による "[Linuxbrew のススメ][THBR]" の投稿を大いに参考にしました。 [thermes 氏][THER]に心より感謝致します。

そして、 [Linuxbrew][BREW] 本体のリポジトリの開発を行っている [Shaun Jackman 氏][SHAU]を始めとする [Linuxbrew][BREW] の開発コミュニティの各氏に心より感謝致します。また、 [Linuxbrew][BREW] の詳細に関しては、 [Linuxbrew 公式ページ][BREW]及び [Linuxbrew][BREW] のリポジトリに同梱される各種資料も併せて参考にしました。

最後に、 [Homebrew][HBRW] と [Linuxbrew][BREW] 及び [Debian 環境][DEBI]の全ての事に関わる全ての皆様に心より感謝致します。

# 追記とお断り

## 2017/11/16 現在の追記とお断り

Linuxbrew を用いた野良ビルドパッケージの管理手法について、パッケージのバージョンの切り替えを行う為のコマンドである [```brew switch``` コマンド][SEC0104]に関する内容の追記を行い、本稿を改稿致しました。どうか御了承下さい。

<!-- 各章及び各節へのリンク一覧 -->

[CHAP01]:#各種-brew-コマンドの概要
[CHAP02]:#実際のパッケージの管理手法
[CHAP03]:#結論
[SEC0101]:#brew-diy-コマンド
[SEC0102]:#brew---cellar-コマンド
[SEC0103]:#brew-link-brew-unlink-コマンド
[SEC0104]:#brew-switch-コマンド
[SEC0201]:#configure-スクリプトによるインストールが可能である場合
[SEC0202]:#cmake-によるインストールが可能である場合
[SEC0203]:#その他の場合

<!-- 外部リンク一覧 -->

[HBRW]:http://brew.sh/index_ja.html
[BREW]:http://linuxbrew.sh/
[XSTO]:http://xstow.sourceforge.net/
[PORG]:http://porg.sourceforge.net/
[FORM]:https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Formula-Cookbook.md
[THER]:https://qiita.com/thermes
[THBR]:https://qiita.com/thermes/items/926b478ff6e3758ecfea
[DEBI]:https://www.debian.org/index.ja.html
[SHAU]:http://sjackman.ca/