r3 と stickleback を試してみる - プロジェクトの事前設定
デモのチュートリアルを引き続き試してみます。
ここの部分は事前設定ということで、intlとproductを作り、継承関係を設定するというものです。
過去記事
プロジェクトの事前設定
始めに、products と intl を作成する必要があります。
products と intl は、r3の用語で "dimensions" と呼ばれるものです。r3のバージョン0.9では、もう1つのdimensionとして、"page"があります。将来的には、自分でその他の dimensionを定義することができるようになります。
products と intl は、同じ方法で作ることができます。コマンドラインで以下のように叩きます。
$ r3 dimension product create generic_product product generic_product created
これで、"generic_product" という名前のプロダクトができます。r3のもう1つの重要な特徴として、プロダクト(及び他のdimension)は、他を継承することができるという点があります。
"generic_product"を作った理由は、この後出てくる実際のプロダクト(cookery, wine, cars)の共通の祖先として役割を持たせるためです。この共通の祖先では、共通のテンプレート、ターゲットの詳細、そしてtranslation(翻訳)の場所にさえ用いることができ、あなたはそれを必要としなければなりません。
OK。じゃ、generic_productも作ったので、次は、本物のプロダクトを、その子孫として作ろう。
$ r3 dimension product create cookery -p generic_product product cookery created with parent generic_product for page, template and translation domains.
-p
オプションは、"parent" (親)を意味する。
続けて残りのプロダクトと、intlも同じように作成。
$ r3 dimension product create wine -p cookery product wine created with parent cookery for page, template and translation domains. $ r3 dimension product create cars -p generic_product product cars created with parent generic_product for page, template and translation domains. $ r3 dimension intl create generic_intl intl generic_intl created $ r3 dimension intl create us -p generic_intl intl us created with parent generic_intl for page, template and translation domains. $ r3 dimension intl create ca -p us ... $ r3 dimension intl create fr -p generic_intl $ r3 dimension intl create jp -p generic_intl
ここまでで、プロダクトはこんな階層構造になります。
generic_product--+--cookery--+--wine | +--cars
そして、intlはこう。
generic_intl--+--us--+--ca | +--fr | +--jp
ここで、問題。ca はフランス語を話すカナダ圏を想定しているのに、translationsはフランスを継承しないとあれじゃない?ということで、、
r3は、継承操作において3つのドメインを認識します。
- 「テンプレート(template)」ドメイン: テンプレートを探すドメイン
- 「翻訳(translation)」ドメイン: 翻訳を探すドメイン
- 「ページ(page)」ドメイン: ページの詳細(page specifications)を探すドメイン
r3は、各ドメインで各dimesionは分離した継承ツリーを管理することができる。(page dimensionを除く、それは特別で一連の継承データの中で1つだけ持つことができる?) プロダクトもしくはintlを作り、親を指定したとき、3つすべてのドメインに同じ親の関係が設定されます。これは、一般的には希望通りの動作だと思います。しかしながら、caは、翻訳(translation)ドメインは、frを継承するといった特別なケースのときは、翻訳(translation)ドメインのみで ca と fr の継承関係を変更するということを望みます。
これは簡単で、
$ r3 dimension intl parent ca set fr -d translation parent of intl ca changed to fr in the translation domain
とすることで可能です。"-d"
で、ドメインを指定しています。
ついでに、翻訳ドメインで、generic_intlの継承って必要ないよね (基底となる言語ってないので)ということで、翻訳ドメインでのgeneric_intlの継承関係を削除します。
$ r3 dimension intl parent fr unset -f -d translation intl fr set with no parent in the translation domain $ r3 dimension intl parent us unset -d translation intl us set with no parent in the translation domain $ r3 dimension intl parent jp unset -d translation intl jp set with no parent in the translation domain
一番上の fr のところだけ "-f"
(force)フラグを付けています。これは、前の操作で、 fr の下に ca が子供として付いており、削除すると子孫にも影響を与えることとなるため、r3がデフォルトでは削除させないようになっているためです。
ここまでで、テンプレートとページドメインについては以前の階層構造から変化はありませんが、翻訳(translation)ドメインについては、以下のように変化しました。
generic_intl fr--+--ca us jp
generic_intlは依然、翻訳ドメインに存在しています。intl・プロダクト・ページの存在は、ドメインとは独立しており、それぞれのドメイン間で継承関係が異なっているだけとなっています。
指定したドメインにおいての継承構造は、コマンドラインで調べることができます。以下は、intlの翻訳ドメインでの継承関係を表示しています。
$ r3 dimension intl list -t translation jp us fr ca generic_intl
(2007/06/09 上の出力結果が間違えていたので修正しました)
-t
フラグは、"tree" viewを意味していて、ドメインを指定することにより継承関係を得ることができます。