おぎろぐはてブロ

なんだかんだエンジニアになって10年以上

r3 と stickleback を試してみる - プロジェクトの作成

前記事(r3 と stickleback を試してみる - セットアップ - おぎろぐはてな)の続き。
移動中の電車の中で、ボールペン片手にドキュメントを読んでみた。まだ最後まで読み終わってないので勘違いがあるかも。。

で、これってどういうものなのか

productとintlをベースに、テンプレートを管理、一括生成する仕組みで、自由度の高いローカライズ等を可能にするもの。ヘッダーとかの埋め込みも、辞書を使ったローカライズも、リアルタイムにせずに、予め生成してしまって、ファイル一杯サーバにアップしちゃったほうが早いじゃない。ってアプローチだと思います。
多言語、多地域、大小のいくつものプロダクトでサービス展開をするポータルみたいなサイト (それって、Yahoo!とかgoogleとか)では、有効だと思うのですが、個人でやってる分には、きちんと継承関係が整理されるくらいのメリットなのかも。
Yahoo!は、様々な言語でサービスされていて、国が違っても共通化されているサービスがあります。(日本のヤフーはおいといて)
で、ロケールで表示を出し分けてたりすることがあり、例えば、下のID登録画面はそんな感じに見えます。

googleもそう

これが、r3で言ってる "international sites" (intl)。
もう1つ、"products" は、webサイトにあたるようなので、"Yahoo! News", "Yahoo! Maps" みたいな区切りなんでしょうか。粒度は分かんないけど、そんな感じだと思います。
そして、intlとproductsはさらに他を継承するという概念があります。デモチュートリアルを読んでいくと分かるのですが、例の productでは、こんなツリー構成にしています。

generic_product--+--cookery--+--wine
                 |
                 +--cars

ベースのgeneric_productから、cookery(料理)、cars(車)、そしてwine(ワイン)は、cookeryを継承しています。
さらに継承の操作には "template", "translation", "page" の3つのドメインがあり、それぞれを別に継承することもできるようです。
日本に住んでると意識することがないのですが、カナダでは英語とフランス語が両方話されていて、フランス語版英語版があったりするようです。こうなると、エリア的には北米として、アメリカを継承するけれど、言語は、フランス語だから、フランスを継承したいということも出てくるわけで、その際、translationの継承だけをfrにして、対応するといったことが可能です。
いろいろ奥が深そうだけど、他言語展開のサービスなんて自分で作ることないからなぁ。。

はじめての、かんたん r3 プロジェクト

ここからドキュメントに沿って、つたない日本語訳で進めていきます。

r3の簡単なプロジェクトを作っていきましょう。
r3は "複数の言語" の "複数のwebサイト" を管理することができます。この例では、3つの独立したプロダクト(だけれど、関連がある)を4つの言語で作成します。このプロジェクトは、以下の構成にします。
プロダクトは以下の3つ

  • cookery (料理)
  • wine (ワイン)
  • cars (車)

そして、国 (intl)は、以下の4つ

  • アメリカ (us)
  • フランス語のカナダ (ca)
  • フランス (fr)
  • 日本 (jp)

これらのプロダクトとinternational sites (intls)は、適当に選んだわけではありません。これらは、多くの相互関係を持っています。ワインと料理の例は一般的なサイト構成に近い (一方はもう一方のサブサイトとなる)、ca (カナダ)は、言語は fr (フランス) と共通だけれど、文化の多くは us (アメリカ)と共通の部分が多いです。
逆に、車と料理は殆ど共通点が無いし、カナダと日本もそう。

3つのプロダクトと4つの言語を掛け合わせると 3 * 4 = 12 のwebサイトができます

  • cookery/us
  • cookery/ca
  • cookery/fr
  • cookery/jp
  • wine/us
  • wine/ca
  • wine/fr
  • wine/jp
  • cars/us
  • cars/ca
  • cars/fr
  • cars/jp

この時点でけっこう複雑なので、この中ではそれぞれ1ページ (page)だけ作ることにします。
各ページは、シンプルな共通の構成を共有します。こんな感じ。

container--+--header--+--core branding
           |          |
           |          +--site branding
           |
           +--navigation
           |
           +--content

プロジェクトの事前設定

始めに、products と intl を作成する必要があります。

products と intl は、r3の用語で "dimensions" と呼ばれるものです。r3のバージョン0.9では、もう1つのdimensionとして、"page"があります。将来的には、自分でその他のdimensionを定義することができるようになります。
。。。

時間切れ。おやすみなさい。