Fixing issues with the scaffold generator (custom actions did not work).
[akelos.git] / docs / tutorial-ja.markdown
blob44388d329173218ba0d964e6bfaa235d4a5c25b5
1 Akelos フレームワークを使用して簡単なアプリケーションを作成する
2 =========================================================
4 導入
5 --------------------------
7 このチュートリアルでは、Akelosフレームワークを使用したアプリケーションを作成方法を説明します。
9 アプリケーションは書籍や著者を管理し、**booklink**と名づけます。
11 このチュートリアルに必要なもの
12 ---------------------------
14  - MySQL または SQLite データベース
15  - Apache ウェブサーバ
16  - 実行するサーバにシェルで接続できること
17  - PHP4 または PHP5
19 この設定は多くのLinuxやホスティング事業者で見うけられます。Akelosは、このチュートリアルのおいてはこのように指定された設定上に限定しますが、どのような設定でも動作します。
21 ダウンロードとインストール
22 ---------------------------
23 バージョン1.0に到達するまでの間は、Akelosのtrunkバージョンを取得することを強く推奨します。[subversion](http://subversion.tigris.org/)がインストールされていなければなりません。
24 Akelosのソースコードのコピーをチェックアウトするには、次のコマンドを使用します:
26     svn co http://svn.akelos.org/trunk/ akelos
28 subversionからコードをチェックアウトできない、またはしたくない場合は、[最新の安定版](http://www.akelos.org/akelos_framework-dev_preview.tar.gz)を取得できます。これは継続的な統合システムによって自動的に生成され、次のように実行することでそれを解凍します:
30     tar zxvf akelos_framework-dev_preview.tar.gz;mv akelos_framework-dev_preview akelos
32 さて、akelosが使用しているPHPのバージョンを見つけることができるかを確かめる必要があります。
34     /usr/bin/env php -v
36 もし次のように表示される場合は、
38     PHP 5.1.2 (cli) (built: Jan 17 2006 15:00:28)
39     Copyright (c) 1997-2006 The PHP Group
40     Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
41     
42 正しい状態ですので、続いてAkelosアプリケーションを作成することができます。もしそうでない場合は、PHPバイナリへのパスを見つける必要があります。通常は、次のようにします。
44     which php
46 さらに、次のファイル(`script/console`, `script/generate`, `script/migrate`, `script/setup`, `script/test`)の先頭にある `#!/usr/bin/env php` をPHPのバイナリのパスに変更します。
48 **Windowsユーザへの注意 :** 次のように php.exe ファイルへのフルパスを使用してアプリケーションディレクトリからスクリプトをコールする必要があります:
50     C:\Program Files\xampp\php\php.exe ./script/generate scaffold
52 新規Akelosアプリケーーションのセットアップ
53 ---------------------------------------------
55 Akelos をダウンロードしたら、コンソールから PH Pスクリプトを実行できるでしょう。(Akelos を実行する必要はありませんが、このチュートリアルでは必要です。)
57 次のように2つの方法があります:
59  1. 異なるフォルダに Akelos アプリケーションを作成し、フレームワークライブラリへアプリケーションをリンクする
60  2. セキュリティの観点からこのフォルダからアプリケーションをコーディングし始め、サイトの訪問者に対してアプリケーションのモデル、ビュー、サードパーティライブラリ等を有効にする。
63 すでに推測されていると思いますが、最初のオプションを使用してリンクされたAkelosアプリケーションを作成します。これは世界への公開フォルダを提供するだけです。フレームワークのパスを変更することは、Akelosでは本当に簡単です。しなければならないことは、各コンポーネントが配置される場所を設定ファイルに定義するだけです。しかし、将来のチュートリアルでは設定ファイルを配布するアプリケーションをデザインすることでこれをやめる予定です。
65 `HOME_DIR/akelos` にフレームワークをダウンロードし、カレントが`akelos`ディレクトリであると仮定します。次のコマンドを実行して新しいアプリケーションで設定するための有効なオプションをチェックします。
67    ./script/setup -h
69 インストーラで有効なオプションが表示されます。
71     Usage: setup [-sqphf --dependencies] <-d> 
73     -deps --dependencies      Includes a copy of the framework into the application
74                               directory. (true)
75     -d --directory=<value>    Destination directory for installing the application.
76     -f --force                Overwrite files that already exist. (false)
77     -h --help                 Show this help message.
78     -p --public_html=<value>  Location where the application will be accesed by the
79                               webserver. ()
80     -q --quiet                Suppress normal output. (false)
81     -s --skip                 Skip files that already exist. (false)
83 次にこのコマンドを実行します:(`/wwwh/htdocs`はあなたのウェブサーバ公開パスに置き換えてください。共有サーバでは`/home/USERNAME/public_html`が使用されます)
85     ./script/setup -d HOMEDIR/booklink -p /www/htdocs/booklink
87 This will create the following structure for the **booklink** application:
88 これは次のような構造をした**booklist**アプリケーションを作成します:
90     booklink/
91         app/ << コントローラ、ビュー、モデル、インストーラを含むアプリケーション
92         config/ << 退屈な設定ファイル (ウェブ経由で設定します)
93         public/ << これは単なるフォルダで/www/htdocs/bboklist下でソフトリンクとして公開されます
94         script/ << コード生成やテスト実行のためのユーティリティ
96 **Windowsユーザは注意:** booklink/publicへのソフトリンクは*NIXシステムについてのみ生成されます。そのため、ウェブサーバに`httpd.conf`ファイル上で次のように追加することで**booklink**アプリケーション用のpublicパスを伝える必要があります。
98     Alias /booklink "/path/to_your/booklink/public"
100     <Directory "/path/to_your/booklink/public">
101         Options Indexes FollowSymLinks
102         AllowOverride All
103         Order allow,deny
104         Allow from all
105     </Directory>
107 そしてウェブサーバを再起動します。
109 ### アプリケーション用のデータベースを作成する ###
111 次に必要なことは、アプリケーション用のデータベースを作成することです。PHP5でSQLiteを使用しようとしている場合はこの章を飛ばしてください。
113 MySQLデータベースを作成することは、このチュートリアルの範囲外ですので、ご自身のシステム上での作成方法をググルか、またはこの一般的なシナリオを試してください。それぞれの異なる環境について3つの異なるデータベース(production, development, testing)を作成できます。
115     mysql -u root -p
116     
117     mysql> CREATE DATABASE booklink;
118     mysql> CREATE DATABASE booklink_dev;
119     mysql> CREATE DATABASE booklink_tests;
120     
121     mysql> GRANT ALL ON booklink.* TO bermi@localhost IDENTIFIED BY "pass";
122     mysql> GRANT ALL ON booklink_dev.* TO bermi@localhost IDENTIFIED BY "pass";
123     mysql> GRANT ALL ON booklink_tests.* TO bermi@localhost IDENTIFIED BY "pass";
124     
125     mysql> FLUSH PRIVILEGES;
126     mysql> exit
128 もし共有サーバである場合は、ホスグィング会社の操作パネルから作成する必要があるかもしれません。
130 ### 設定ファイルを生成する ###
132 #### ウェブインストーラを使用する ####
134 http://localhost/booklink であなたのアプリケーション設定ウィザードを見ることができます。    
136 ウィザードの次のステップはデータベース、ロケール、ファイルパーミッションを設定し、設定ファイルを生成します。そうしている間コーヒーでも飲みましょう。そうすると**booklink**アプリケーションを作成できます。
138 #### 手動で設定ファイルを編集する ####
140 `config/DEFAULT-config.php` や `config/DEFAULT-routes.php` というファイルは、`config/config.php` や `config/routes.php` として保存し、必要に応じて次のように編集します。
142 `public/.htaccess`ファイルを編集して、次のようなRewriteBaseを設定することで賢いURLを使用したい場合は、手動でbase rewrite パスを設定する必要があるかもしれません。
144     RewriteBase /booklink
146 アプリケーションを正常にインストールした後で、http://localhost/booklink でウェルカムメッセージが見えるでしょう。そうしたらフレームワークセットアップファイル(`/config/config.php` ファイルが存在する場合はアクセスできないでしょう)を安全に削除することができます。
148 booklink データベースの構造
149 ---------------------------------
151 さて、テーブルとカラムを定義する必要があります。そこにアプリケーションが本と著者についての情報を保持します。
153 他の開発者と作業する際に、データベースが変更されるためそれぞれに異なったものが配布されます。Akelosはこの問題に対する解決法があります。それは*インストーラ*または*マイグレーション*と名づけられています。
155 それではインストーラを使用してデータベースを作成してみましょう。その時々にbooklinkデータベーススキーマに対して行った変更を配信することができます。
156 *インストーラ*を使用することで、データベースのテーブルやカラムをデータベースベンダから独立して定義することができます。
158 では、次のインストーラコードを使用して`app/installers/booklink_installer.php` という名前のファイルを作成します。
160      <?php
161      
162      class BooklinkInstaller extends AkInstaller
163      {
164          function up_1(){
165              
166              $this->createTable('books',
167                 'id,'.          // the key
168                 'title,'.       // the title of the book
169                 'description,'. // a description of the book
170                 'author_id,'.   // the author id. This is how Akelos will know how to link
171                 'published_on'  // the publication date
172             );
173             
174              $this->createTable('authors', 
175                 'id,'.      // the key
176                 'name'      // the name of the author
177                 );
178          }
179          
180          function down_1(){
181              $this->dropTables('books','authors');
182          }
183      }
184      
185      ?>
187 これだけでAkelosにとってはデータベーススキーマを作成するには十分です。カラム名を指定する場合は、Akelosはデータベース標準規約に基づいて最もベストなデータ型をデフォルトとします。テーブル設定において完全な制御をしなければならない場合は、[php Adodb データディクショナリ構文](http://phplens.com/lens/adodb/docs-datadict.htm)を使用することができます。
189 次にコマンドを使用してインストーラを実行する必要があります。
191     ./script/migrate Booklink install
193 それからトリックを使用します。MySQLを使用する場合は、データベースは次のようになるでしょう:
195 **BOOKS テーブル**
197     +--------------+--------------+------+-----+----------------+
198     | Field        | Type         | Null | Key | Extra          |
199     +--------------+--------------+------+-----+----------------+
200     | id           | int(11)      | NO   | PRI | auto_increment |
201     | title        | varchar(255) | YES  |     |                |
202     | description  | longtext     | YES  |     |                |
203     | author_id    | int(11)      | YES  | MUL |                |
204     | published_on | date         | YES  |     |                |
205     | updated_at   | datetime     | YES  |     |                |
206     | created_at   | datetime     | YES  |     |                |
207     +--------------+--------------+------+-----+----------------+ 
209 **AUTHORS テーブル**
210                        
211     +--------------+--------------+------+-----+----------------+
212     | Field        | Type         | Null | Key | Extra          |
213     +--------------+--------------+------+-----+----------------+
214     | id           | int(11)      | NO   | PRI | auto_increment |
215     | name         | varchar(255) | YES  |     |                |
216     | updated_at   | datetime     | YES  |     |                |
217     | created_at   | datetime     | YES  |     |                |
218     +--------------+--------------+------+-----+----------------+
221 モデル,ビュー,コントローラ
222 ------------------------------------------------------
224 Akelosはアプリケーションの形成において[MVC デザインパターン](http://en.wikipedia.org/wiki/Model-view-controller)に基づいています。
226 ![Akelos MVC 図](http://svn.akelos.org/trunk/docs/images/akelos_mvc.png)
228 ### アプリケーションのファイルとAkelos命名規約 ###
230 Akelosに「設定よりも規約」という哲学を付与する規約があります。
232 #### モデル ####
234  * **パス:** /app/models/
235  * **クラス名:** 単数形, キャメルケース *(BankAccount, Person, Book)*
236  * **ファイル名:** 単数形, アンダースコア *(bank_account.php, person.php, book.php)*
237  * **テーブル名:** 複数形, アンダースコア *(bank_accounts, people, books)*
239 #### コントローラ ####
241  * **パス:** */app/controllers/*
242  * **クラス名:** 単数形 または 複数形, キャメルケース, `Controller`で終わる *(AccountController, PersonController)*
243  * **ファイル名:** 単数形 または 複数, アンダースコア, `_controller`で終わる *(`account_controller.php`, `person_controller.php`)*
245 #### ビュー ####
247  * **パス:** /app/views/ + *underscored_controller_name/* *(app/views/person/)*
248  * **ファイル名:** アクション名, 小文字 *(app/views/person/show.tpl)*
251 Akelos スキャフォールド
252 ------------------------------------------
254 Akelosはコードジェネレータを付属しており、完全に機能的なスキャフォールドコードを生成することによって開発時間を短縮することができます。出発点/学習ポイントとして使用することができます。
256 ### スキャフォールドジェネレータを使用する ###
258 **booklink**データベースを作成する前に対話的に基本となる骨組みを生成します。この骨組みをすばやく取得するために、次のような*スキャフォールドジェネレータ*を使用することができます。
260     ./script/generate scaffold Book
262 と 
264     ./script/generate scaffold Author
266 これは実際に動作するコードを含んだファイルやフォルダを生成します。信じられませんか?自分でやってみてください。ブラウザで[http://localhost/booklink/author](http://localhost/booklink/author) や [http://localhost/booklink/books](http://localhost/booklink/books)を開いて、著者や書籍を追加できます。レコードをいくつか作成し、フードの下に何があるかを説明している部分に戻ってください。
268 Akelos ワークフロー
269 ------------------------------------------
271 これは、`http://localhost/booklink/book/show/2`というURLをコールしたときのワークフローの簡単な説明です。
273  1. Akelos はリクエストを3つのパラメータに分解します。これは`/config/routes.php`ファイル(この後に詳しく説明します)の内容に従います。
274   * controller: book
275   * action: show
276   * id: 2
278  2. 一度Akelosがこのリクエストを処理すると、`/app/controllers/book_controller.php`ファイルを検索します。もし見つかれば、`BookController`クラスをインスタンス化します。
280  3. コントローラはリクエストから`controller`変数にマッチするモデルを検索します。この場合、`/app/models/book.php`を検索します。見つかれば、コントローラの`$this->Book`属性にモデルのインスタンスを生成します。`id`がリクエストに存在すれば、データベースからidが2の書籍を検索し、`$this->Book`のままです。
282  4. 有効であれば、`BookController`クラスから`show`アクションをコールします。
284  5. 一度showアクションが実行されると、コントローラは`/app/views/book/show.tpl`ビューファイルを検索します。結果を描画し`$content_for_layout`変数に格納します。
286  6. Akelosは`/app/views/layouts/book.tpl`のようなコントローラと同じ名前のレイアウトを検索します。もし見つかれば、`$content_for_layout`に内容を挿入してレイアウトを描画し、ブラウザに出力を送信します。
288 これはAkelosがリクエストを処理する方法を理解するのに役立ちます。そのため、ベースアプリケーションを変更します。
290 Books と Authors の関連
291 ----------------------------
293 それではauthorsテーブルとbooksテーブルを関連付けてみましょう。これを保管するために`author_id`カラムを使用しますので、データベースに追加します。
295 テーブルがどのようにお互いに関連しているかをモデルに教える必要があります。
297 */app/models/book.php*
299     <?php
300     
301     class Book extends ActiveRecord
302     {
303         var $belongs_to = 'author'; // <- declaring the association
304     }
305     
306     ?>
308 */app/models/author.php*
310     <?php
311     
312     class Author extends ActiveRecord
313     {
314         var $has_many = 'books'; // <- declaring the association
315     }
316     
317     ?>
319 モデルはお互いに注意してください。bookコントローラを修正する必要があります。そうすると`author`と`book`モデルインスタンスが導入されます。
321 */app/controllers/book_controller.php*
323     <?php
324     
325     class BookController extends ApplicationController
326     {
327         var $models = 'book, author'; // <- make these models available
328         
329         // ... more BookController code
330         
331         function show()
332         {
333             // Replace "$this->book = $this->Book->find(@$this->params['id']);"
334             // with this in order to find related authors.
335             $this->book = $this->Book->find(@$this->params['id'], array('include' => 'author'));
336         }
337         
338         // ... more BookController code
339     }
341 次のステップは、本を作成または編集したときに有効な著者テーブルを表示することです。これは`$form_options_helper`を使用して*/app/views/book/_form.tpl* ファイルの `<?=$active_record_helper->error_messages_for('book');?>` の後ろの右に次のようなコードを挿入することでできます。
343     <p>
344         <label for="author">_{Author}</label><br />
345         <?=$form_options_helper->select('book', 'author_id', $Author->collect($Author->find(), 'name', 'id'));?>
346     </p>
348 まだ著者テーブルを追加指定ない場合は、すぐに作成してhttp://locahost/boolink/book/add を開き、選択リストから新しい著者をチェックしてください。リストから著者を選択して新しい本を追加します。
350 著者が保存されたように思えますが、`app/views/book/show.tpl`ビューには含まれていません。`<? $content_columns = array_keys($Book->getContentColumns()); ?>`の後の右にこのコードを追加してください。
352     <label>_{Author}:</label> <span class="static">{book.author.name?}</span><br />
354 めったにない`_{Author}`や`{book.author.name?}`構文についてカナキリ声をあげたにちがいありません。それは実際に[Sintags](http://www.bermi.org/projects/sintags)のルールであり、キレイにビューを記述するのに役立ちます。また、標準のPHPにコンパイルされます。
357 Colophon
358 --------------------
360 これがすべてです。徐々にこのチュートリアルを改良していて、足りない特徴を追加します。他の文書は次のようなものです:
362  * validations
363  * routes
364  * filters
365  * callbacks
366  * transactions
367  * console
368  * AJAX
369  * helpers
370  * web services
371  * testing
372  * distributing
373  * and many more...
375 ------------
377 Translated by: bobchin