簡単にBEAR.Sundayを体験できるチュートリアルを用意しました。それぞれのセクションの目安の時間も記してみました。良かったら手を動かしてお付き合いください。

準備

PHP 5.4がインストールされていればOKです。

$ php -v
PHP 5.4.11 (cli) (built: Jan 27 2013 22:00:35)
Copyright (c) 1997-2013 The PHP Group

もしPHP5.4がインストールされてなくてもOSXならこれだけでインストールできます。1

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.4

BEAR.Sundayのインストール

5-? min

コンソールでインストールします。

curl -s http://install.bear-project.net/ | sh -s ./bear

または(curlが無い場合など)

$ php -r "eval('?>'.file_get_contents('https://getcomposer.org/installer'));"
$ php composer.phar create-project -s dev --dev bear/package ./bear

アプリケーションの作成

1 min

Helloアプリケーションを作成します。

$ cd bear
$ php bin/new_app.php Hello

コンソールでのアプリケーション実行

3 min

web.phpを使いconsoleでHTMLの出力が確認できます。GETメソッドで/(ルート)をアクセスするには以下のようにタイプします。

$ cd apps/Hello/public
$ php web.php get /

三番目の引き数でアプリケーションの実行コンテキスト(モード)を切り替える事ができます。

プロダクション

php web.php get / prod
200 OK
cache-control: ["no-cache"]
date: ["Mon, 04 Mar 2013 12:29:49 GMT"]
[BODY]
< !DOCTYPE html>
<html lang="ja">

<body>
<div class="container">
<h1>Hello BEAR.Sunday</h1>
</div>
</body>
</html>

API

php web.php get / api
200 OK
content-type: ["application\/hal+json; charset=UTF-8"]
cache-control: ["no-cache"]
date: ["Mon, 04 Mar 2013 12:31:17 GMT"]
[BODY]
{
    "greeting": "Hello BEAR.Sunday",
    "_links": {
        "self": {
            "href": "page://self/index"
        }
    }
}

利用できないメソッドには405(Method Not Allowed)が返って来ます。

php web.php delete /
405 Method Not Allowed
x-exception-class: ["BEAR\\Resource\\Exception\\MethodNotAllowed"]
x-exception-message: ["Hello\\Resource\\Page\\Index::onDelete()"]
x-exception-code-file-line: ["(405) \/Users\/akihito\/work\/bear\/vendor\/bear\/resource\/src\/BEAR\/Resource\/DevInvoker.php:59"]
x-exception-previous: ["-"]
x-exception-id: ["e500-b14ad"]
x-exception-id-file: ["\/Users\/akihito\/work\/bear\/apps\/Hello\/data\/log\/e500-b14ad.log"]
cache-control: ["no-cache"]
date: ["Mon, 04 Mar 2013 12:47:11 GMT"]
[BODY]
The requested method is not allowed for this URI.
KumaAir:public akihito$

404も試してみましょう。

Webでのアプリケーション実行 (5 min)

同じweb.phpを使ってBuilt-in Web serverを立ち上げます。ポート番号は自由です。

php -S localhost:8088 web.php

挨拶が表示されました。devモードではツールバーと共に表示されます。
スクリーンショット 2013-03-04 21.53.49

この挨拶にはpage://self/indexという名前(URI)がついています。このURIのついた情報は「リソース」と呼ばれます。

灰色のバックグランドで表示されてるのはこのリソースはキャッシュを利用しないことを表します2 URIの隣にツールバーが並び、情報の確認やコードの編集ができるようになっています。破線はそのリソースの表示範囲を表します。

オンライン編集

リソースのコードとビューテンプレートはwebブラウザ上で編集することができます。
スクリーンショット 2013-03-04 22.13.22

保存にはショートカットキーも使えます。(⌘W / Ctl+W)

シンタックスエラー

2 min

ClassのCを誤って消してしまいました。シンタックスエラーになりますがエラーある状態でアプリケーションを実行するとエラーメッセージの表示されたエディターが表示されます。

スクリーンショット 2013-03-04 22.27.37

その場で修正して、「保存」「再読み込み」ですぐに復帰します。ケアレスミスによる思考の中断を最小限にします。

クエリーを読む

5 min

HTTPのGETメソッドではonGetメソッドがアクセスされます。

public function onGet($name = 'BEAR.Sunday')

このメソッドは

$_GET

と同様に機能します。$_GET[‘name’]を$nameとして受け取っています。

?name=YourName

としてアクセスしてみたり、以下のようにyearクエリーも受け取ってみましょう

    public function onGet($name = 'BEAR.Sunday', $year=2013)
    {
        $this['greeting'] = 'Hello ' . $name . ", It's {$year}";
        return $this;
    }

スクリーンショット 2013-03-04 22.43.18

メソッドは$_GETクエリーと同じく名前で指定されるので(名前付き引き数=named parameter)通常のPHPの引き数のように引き数の順番では変数名で指定されます。(順番は関係ありません)$_GETのクエリーは取得するのではなく、PHPのメソッドと融合して与えられている事にも注目してください。

テンプレート

1 min

リソースクラスファイルの拡張子をtplあるいはtwigに変えたものがそのリソースの表現に用いられるビューテンプレートになります。

スクリーンショット 2013-03-04 22.55.42

/dev/ツール

3 min

URLに/dev/と入力するとデバックツールが表示されます

スクリーンショット 2013-03-04 22.58.27

リソース一覧

/dev/resource/ ではリソースを一覧したり新規のリソースをつくることができます。

スクリーンショット 2013-03-04 22.59.31

つくったばかりのHelloアプリケーションはpage://self/indexというページリソースが1つ。利用可能なメソッドはGETだけという事が分かります。リソース(モデル)は、アプリケーションの核心です。アプリケーション管理者はそのアプリケーションにいくつ、どんなリソースがあるかをこのリソース画面で知る事ができます。

What’s next ?

1 week

Web+DB Press記事のリソースを作ってみるのはどうでしょうか。“はじめて”シリーズはソフトウエアやインターネット技術の概念を同時に学ぶ事ができます。ブログチュートリアルは既存のFWとの実装の比較になります。apps/SandboxアプリケーションはDB/ページングなど実用的なサンプルも含みます。特にRESTに興味のある方は定番となってるREST BucksをBEAR.Sundayで実装したHATEOAS実装もあります。

  1. 詳しくは php-osx.liip.ch を []
  2. 緑/赤=Read/Write []