最初にやらなくてはならないこと

インストールが済んだ後、まずやらなくてはならないことが三つあ る。

この三つだ。

UserIDの設定

GNU arch は分散型のバージョン管理システムであり、最終的に は別のアーカイブとのデータ交換が発生する。データ交換する際には自 分のアーカイブや後でのべるパッチログ、その他のデータが他の人のも のと区別するための識別子が必要になる。集中型のバージョン管理シス テムの場合、識別子はアーカイブのあるマシン上で一元的に生成するこ とができる。データ交換はあるマシン内で閉じており、マシン間でのデー タ授受は発生しないからだ。しかし分散型システムの場合、いまこのよ うに説明している時点でも地球上の別の場所にある別のマシン上で、新 しいアーカイブが設定されているかも知れない。それは誰であるかあら かじめ知ることはできないし、その人との間で重複しないような識別子 についての合意をとることもできない。誰ともあらかじめ合意せずに、 重複しない文字列を生成するためのなんらかの仕組みが必要にになる。

GNU arch の UserID はこのようなユニークな識別子を生成するため の仕組みの一つで、重複を避けるためにユーザの E-mail アドレスを使 う約束になっている。ある特定の E-mail アドレスを持っているのはそ のユーザただ一人であることが事実上保証されると考えられるからだ。

UserID は tla my-id コマンドを使って以下のように設定する:

$ tla my-id "foo bar <octopus@bluegate.org>"
$ tla my-id
foo bar <octopus@bluegate.org>
$

以下では、"foo bar" という名前の人間が、bluegate.org とい うマシン上に foo というアカウントを持っていて、ホームディレクト リは /home/foo, E-mail アドレスは octopus@bluegate.org であるとして 話を進める。

これで UserID が設定された。

アーカイブの作成

GNU arch で言うアーカイブとは、コンピュータ用語で一般に利 用される意味とは区別して考えたほうがいい。GNU arch の世界でいう アーカイブとは後で説明する基本的な管理対象単位である「バージョン」 を(一般的には)複数格納するための領域のことで、GNU arch のデータ オプジェクトの階層としては最上位に位置する記憶クラスだ。アーカイ ブは一つのコンピュータの上にも、別のコンピュータの上にもそれぞれ いくつでも作ることができるが、それぞれのアーカイブは当然別の名前 を持たなくてはならない。同じコンピュータの上に作った複数のアーカ イブは別のコンピュータの上にあるアーカイブ相互間の関係と同様、相 互に完全に独立している。アーカイブはアーカイブを作成したマシン上 のオペレーティングシステムが管理するどれかのファイルシステム上の 一つのディレクトリとして存在する。そして後述の「バージョン」はそ のサブディレクトリとして存在する。

GNU arch は分散型システムなので、たとえ君が他のマシンとの 間で今後いっさいデータの交換をしないとしても、アーカイブは作成時 点からあらかじめそのことを見越して作成しなければならない。つまり 他のアーカイブと区別できる名前をつけなければならない。しかも他の どの GNU arch ユーザと議論することなしに、だ。君がアーカイブを作 成したとたんに、すでにそのアーカイブは地球上の GNU arch 分散シス テムの一構成要素なのだ。あるいは潜在的にはいつでもそのようにみな すことができる状態に置かれるのだ。そう考えると理解しやすい。

アーカイブの作成はアーカイブ用ディレクトリの作成と、実際の アーカイブの作成の二段階にわかれる。

$ pwd
/home/octopus
$ ls
Maildir  tla-1.2  tla-1.2.tar.gz
$ mkdir ARCHIVES
$ ls
ARCHIVES  Maildir  tla-1.2  tla-1.2.tar.gz
$ tla make-archive octopus@bluegate.org--2004 \
    /home/foo/ARCHIVES/octopus@bluegate.org--2004
$ tla archives
octopus@bluegate.org--2004
    /home/foo/ARCHIVES/octopus@bluegate.org--2004
$

アーカイブはファイルシステム中のどこに作成しても良い。が、 GNU arch を利用するユーザアカウントのホームディレクトリに作るの が普通だし、自然だろう。他のユーザとの間で特にアーカイブを共有す る積極的な理由がある場合は /usr/local のような場所に作ることもで きるが、GNU arch はアーカイブ間でデータの交換をすることが できるので、ユーザごとに自分のホームディレクトリに自分専用のアー カイブを作る方が利用しやすいかも知れない。ここではユーザのホーム ディレクトリ配下に作成することにする。

アーカイブをホームディレクトリに直接作ることもできるが、そ れだと新しいアーカイブを作るたびにホームディレクトリにアーカイブ 用ディレクトリが追加され、アーカイブ用サブディレクトリで一杯になっ てしまう。これはあまり楽しい状況ではないので普通はアーカイブ専用 のサブディレクトリを作成し、その中に実際のアーカイブを作るように するのが慣例だ。これを便宜的にアーカイブフォルダと呼んでおく。

アーカイブフォルダの名前にも特に約束ごとはないが、非常に重 要なディレクトリであることだけは確かだ。まちがってアーカイブフォ ルダを削除してしまうと、GNU arch で保管してきた一切のデータが消 えてしまう。だから重要であることを示す特徴的な名前をつけると良い。 今回は単に ARCHIVES という名前にした。

人によっては、{archives}という特殊な名前をつけるのを推奨す る人もいる。この方式の利点は、1.奇妙な名前なので間違った操作でアー カイブフォルダを削除してしまう危険が減る、2. '{' 文字でファイル 名を始めると ls コマンドでディレクトリの一覧を表示する際にこのディ レクトリの表示が一番最後の方にくる、ということがある。欠点は、す でに書いたように、1.シェルの補完機能がうまく働かなくなることがあ る、2.どうも馴染めない、3.シェルスクリプトで ${foo} のような記述 と衝突する可能性があるのではないか? 4.どうも馴染めない、などがあ る。好みに応じて名称を選択してほしい。

実際にアーカイブを作るには make-archive コマンドを実行する。 このコマンドで今回 ARCHIVES というディレクトリの中に作った実際の アーカイブがoctopus@bluegate.org--2004 だ。アーカイブ名にも命名 規約があるがUserIDとは全く独立している。アーカイブ名の正確な命名 規約は補遺を見て欲しいが、大雑把に言うと、e-mail アドレスの雰囲 気を持った文字列が先頭に来て、その後ハイフンが二つ来たあとにアル ファベットや数字やハイフンが来る、というものだ。--2004 の部分は 省略してemailアドレスだけでも良い。

アーカイブ名の一意性は、UserIDよりも重要なものだ。UserIDの 時と同じように自分の E-mail アドレスを利用するか、uuid の方法を 使えば一意性は確保できるだろう。

アーカイブ名は論理的な名前であり、それがファイルシステム上 のどの場所に具体的に結びつけられるかを示すのがアーカイブ位置だ。 これをすでに作ったアーカイブフォルダの中に指定する。アーカイブ位 置のファイル名部分はアーカイブ名とは独立に指定できるが、後で混乱 が減るように、私は合わせるのが好きだ。上の例ではそのようにしてあ る。結果、ファイル名称として '@' のついたファイル(正確にはディレ クトリ)がシステムにできてしまった。これは奇妙な文字が嫌いな私が あえて奇妙な文字を利用する数少ない場面のひとつだ。

tla archives コマンドは GNU arch システムに登録されている アーカイブ名とその位置を一覧表示するコマンドだ。確かに今作ったアー カイブができているのがわかる。アーカイブの登録情報は、内部的には ~/.arch-params/=locations というディレクトリに格納されている(ま た '=' 文字だ :)。直接編集することはないが、興味のある人は理解を 深めるためにちらっと覗いてみるのも良いだろう。

デフォルトアーカイブの設定

GNU arch の多くのコマンドはデフォルトアーカイブに対して実 行される。これはちょうと Unix のコマンドの多くがカレントディレク トリに対して実行されるのと同じような発想だ。すでに見たようにアー カイブ名は非常に長いのでデフォルトアーカイブを設定しておくとよい。 いま作ったアーカイブを my-default-archive コマンドでデフォルトアー カイブとしよう:

$ tla my-default-archive octopus@bluegate.org--2004
$ tla my-default-archive
octopus@bluegate.org--2004
$

このコマンドは引数なしで実行すると現在のデフォルトアーカイ ブの内容が表示される。以降の章ではデフォルトアーカイブが設定 されていることが前提となるので注意してほしい。