BEAR.Sunday クイックスタートをレンタルサーバーではじめる方法

#はじめに
　BEAR.Sundayに興味を持っていて、GW中にクイックスタートに取り組みはじめ、
　開発者のKoriymさんのサポートのおかげでレンタルサーバー上で動かすことができました。
　感謝！
　拙いながらも、インストールから動かすまでをシェアしたいと思います。



#ゴール
・BEAR.SundayのQuick StartをレンタルサーバーXServer上にアップロードし、
　ターゲットURL「http://{あなたのドメイン}/foo/api/hello」にアクセスすると

```json
{
    "greeting": "Hello BEAR.Sunday",
    "_links": {
        "self": {
            "href": "/foo/api/hello"
        }
    }
}
```
　が表示されること。
　
　[ポイント] http://{あなたのドメイン}/foo/api/hello?name=bar」にアクセスすると

```json
{
    "greeting": "Hello bar",
    "_links": {
        "self": {
            "href": "/foo/hello?name=bar"
        }
    }
}
```


　が返って来る。



#公式サイト クイックスタート
　https://bearsunday.github.io/manuals/1.0/ja/quick-start.html



# ローカル開発環境
　今回は２つのパターンで試して、どちらも動作しました。
 
・Windows7 CLI環境
　・PHP 7.2.5 (cli) (built: Apr 25 2018 02:20:05) ( ZTS MSVC15 (Visual C++ 2017) x64 )
　・Composer version 1.6.4 2018-04-13 12:04:24


・Docker（Windows7）& 公式PHP 7.2.5 に composerなどの関連ツールをインストール



#サーバー環境の準備 (xserverの場合)
・必要なもの
・SSHでの接続
・FTPでの接続

　-------------------------------------------
　参考： XServerの標準パス例
　
　[ドメインルート]
　　URL　
　　　http://{あなたのドメイン名}/
　　
　　サーバードメインルートパス:（ウェブ非公開フォルダ）
　　　/home/{ユーザー名}/{あなたのドメイン名}/
　　
　　ウェブ公開パス:
　　　/home/{ユーザー名}/{あなたのドメイン名}/public_html/
　
　-------------------------------------------



#BEAR.Sunday クイックスタートプロジェクトのインストール

・Windows版の場合

　  cd C:\temp\bear    (作業フォルダ。環境によって変えてください、)
　  C:\temp\bear>composer create-project -n bear/skeleton MyVendor.MyProject

	当方PCだと、１０分くらいでインストール完了。


・Docker版は、任意のフォルダを作成し、

　　$ composer create-project -n bear/skeleton MyVendor.MyProject
　　を実行



#BEAR.Sundayのpublicフォルダ内にある 「.htaccess」を編集する。
　下から２行目にある行を . を追加してカレントディレクトリのindex.phpを指すようにする
	変更前　　RewriteRule ^(.*)$ /index.php [QSA,L]
    
    	変更後　　RewriteRule ^(.*)$ ./index.php [QSA,L]

　[ポイント]	今回の「foo」みたいなサブディレクトにインストールするときは、
　　　　　　　　この作業が必要。通常は必要ない。



#PageリソースをMyVendor.MyProject\src\Resource\Page/Fooフォルダ内に作成する
　cd Resource/Page
　mkdir Foo
	
　Hello.phpを作成する

　/home/{ユーザー名}/{あなたのドメイン名}/app_bear/MyVendor.MyProjec/src/Resource/Page/Foo/Hello.php

```php:Hello.php
<?php
namespace MyVendor\MyProject\Resource\Page\Foo;

use BEAR\Resource\ResourceObject;

class Hello extends ResourceObject
{
    public function onGet(string $name = 'BEAR.Sunday') : ResourceObject
    {
        $this->body = [
            'greeting' => 'Hello ' . $name
        ];

        return $this;
    }
}
```
　
　※ポイント　ここでは、アクセスURLに「foo」ディレクトリが含まれているので、
　	　　ソースの配置場所は、Fooディレクトリの下になる
　
　※ポイント　配置ディレクトリにあわせて、、ソースの namespaceに「Foo」を追加すること
　	　　namespace MyVendor\MyProject\Resource\Page\Foo;



#MyVendor.MyProjectをzipファイルにまとめる（ローカル側）
	MyVendor.MyProjectフォルダごとzipに圧縮
	MyVendor.MyProject.zipができる



#サーバー側のアップロード先フォルダ「app_bear」の作成

　・ウェブ非公開フォルダのドメインルートパスに、「app_bear」フォルダを作成
　　$cd /home/{ユーザー名}/{あなたのドメイン名}/
　　$mkdir app_bear



#FTPで 作成したzipファイルを、app_bearフォルダへ転送
	転送先　/home/{ユーザー名}/{あなたのドメイン名}/app_bear/

　[注意ポイント] アップロードするコードなどは、ウェブ非公開のフォルダに保存すること



#転送したtutorialファイルの展開
　・サーバーへSSH接続後、
　　cd /home/{ユーザー名}/{あなたのドメイン名}/app_bear
　　unzip MyVendor.MyProject.zip

　　展開すると、MyVendor.MyProjectフォルダが作成され、そのなかに展開されたファイルが
　　/home/{ユーザー名}/{あなたのドメイン名}/app_bear/MyVendor.MyProject にファイルが設置される


　・MyVendor.MyProjectのファイル全部を作成したapp_bearフォルダにアップロード

　　[ポイント]	１つ１つ転送するとものすごく時間がたくさんかかるので、
　		ローカル側で圧縮したファイルを送り、サーバー側で展開すると効率的
	

#web公開フォルダに、「foo」ディレクトリを作る

　cd /home/{ユーザー名}/{あなたのドメイン名}/public_html/
　mkdir foo
　cd foo



#BEAR.Sundayのpublicフォルダ内にある 「.htaccess」と「index.php」にシンボリックリンクを貼る
　ln -s /home/{ユーザー名}/{あなたのドメイン名}/app_bear/MyVendor.MyProject/public/.htaccess .
　ln -s /home/{ユーザー名}/{あなたのドメイン名}/app_bear/MyVendor.MyProject/public/index.php .



#ブラウザでアクセス
　http://{あなたのドメイン名}/foo/hello

　表示が下記のようになれば成功です。

```
　{
　    "greeting": "Hello BEAR.Sunday",
　    "_links": {
　        "self": {
　            "href": "/foo/hello"
　        }
　    }
　}
```

　クエリも試してみましょう。
　http://{あなたのドメイン名}/foo/hello?name=bar

　表示が下記のようになれば成功です。

```
　{
　    "greeting": "Hello bar",
　    "_links": {
　        "self": {
　            "href": "/foo/hello?name=bar"
　        }
　    }
　}
```

　※ポイント　エラーが出る場合は、「touch src」を実行するといいようです。

　※ポイント Not FoundとJSONで返って来る場合、２箇所、再チェックする。
```
　　{
　　    "message": "Not Found"
　　}
```

　　・最初のチェックポイント
　　　　var/log/ フォルダにエラーが記録されてないか確認しましょう。
　　　　$_SERVERなどの値が記録されているので、おかしくないか確認します
 

　　・２番目のチェックポイント
　　　　public/index.phpが呼ばれてるか確認するために、
	ソース２行目に echo $_SERVER['REQUEST_URI']; を追加して、表示されるか調べる
	
	先頭に、/foo/hello が表示されれば、index.phpは呼ばれているのでOK。
	[注意] 追加した部分は元に戻して再アップロードしておくこと。


　　・３番目のチェックポイント
　　　Resouce/Pageフォルダ内に、「Foo」フォルダが作成されているか、
　　　そして、Hello.php内の namespaceが MyVendor\MyProject\Resource\Page\Foo に
　　　なっているかチェック。

　　　クラス名がHelloになっているか。　　

　　　[ポイント] 「touch src」を実行すると生成コードがリセットされます。
　　　　　　　　　エラーが出た時に試してみましょう。

	$touch /home/{ユーザー名}/{あなたのドメイン名}/app_bear/MyVendor.MyProject/src

　　　  そうしないとエラー画面が表示されることがある。
　　　　その後、再度ブラウザでアクセスすればOK       



#おつかれさまでした。

　以上で終了です。

　これでBEAR.Sundayの最初の扉を開けることができました。

　BEAR.Sundayの開発者さまのみなさま、特に直接サポートしていただいたKoriymさんに感謝を申し上げます。