メリークリスマス!
TECH PLAY 女子部 Advent Calendar 2017のラストバッター吉澤です!
今年は出産育児などがあり、あまり技術に触る時間が確保できないという思いがありました。そんな中やはり何かやりたいと最近は時間を捻出して、フレームワークのLaravelを触りはじました。
LaravelといえばPHPの人気フレームワークです。最近はPHPフレームワークの中でも、今選ぶならLaravelしかなく一人勝ちのような状況と聞いたことがあります。一番人気というからには、きっと使いやすいフレームワークなのかなと期待を抱きつつ、環境づくりからはじめました。
LaravelはHomesteadという開発環境が用意されているため、Vagrantを入れてあれば特に環境のことを心配せず利用することができます。Dockerを利用した環境も幾つか試したのですが、結局公式が推しているHomesteadを使うことにしました。
この段階でふと気になったことがあります。フレームワークを勉強するときにどういうフローで学ぶのが良いのでしょうか。
というのは、LaravelでHomesteadの開発環境ができた後、次に何をするべきなのかよくわかりませんでした。
私の場合では、まずルーティングについて学ぶことにしました。ルーティングを学べば、なんらかのURLを生成できますから、フレームワークが動いている感じを体験できると考えたからです。
ルーティング周りを学ぶ
基本的なルーティング
Laravelのルーティングは、/routes
ディレクトリから始まります。ディレクトリ内にあるweb.phpにルーティングを定義することができます。
ドキュメントのサンプルコードではこう記載されています。
Route::get('foo', function () {
return 'Hello World';
});
こちらを/routes/web.php
に書きます。
/foo
にアクセスすると、Hello World
と表示されます。
ほとんどのアプリケーションではweb.php
から始めれば良いとあるのでここから始めればいいでしょう。
ちょっとWebアプリケーションを作成した経験がある方ならわかると思いますが、上記のRoute::get($uri, $callback);
だけではまだ開発をするには色々情報が足りないと感じるはずです。
コントローラを設定するにはどうしたらよいかみてみます。
ルート定義メソッド
ドキュメントを読み進めます。ドキュメントには使用可能なルート定義メソッド
として次のように記載されてます。
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
ここまで読むとLaravelの使い方がなんとなくわかった気持ちになりました。
つまりRoute:HTTPメソッド
という書き方にすればよさそうです。
例えば/items
というルーティングをしたければ
Route::any('items', function () {
});
こちらを/routes/web.php
に書きます。すると/items
周りのメソッドを一気に手に入れることができるのですね。
さて、ここまでで勝手にわかった気持ちになった次に、よくあるCRUDのコントローラを生成したくなりました。
リソースコントローラ
Laravelのようなフレームワークには、CRUDのコントローラを生成するコマンドが用意されているようです。
試してみるということでItemsController
を生成してみました。
php artisan make:controller ItemsController --resource
コマンドを実行すると、app/Http/Controllers/ItemsController.php
が生成されています。
中身を見てみます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ItemsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
うん。私が欲しかったものが生成されています。CRUDのアクションが生成されました。
アクションへのルーティングを/routes/web.php
に記述します。
こちらにより各アクションが動作するはずです。試しにindex()
アクションへアクセスすると無事動作を確認できました。
ルーティングを1つ1つ書くのは大変なのでRoute::resource();
で一度に定義できるのはだいぶありがたいです。
Webアプリを作れば大抵はCRUDが必要になりますからこれがわかってだいぶ安心しました。
振り返り
Laravelの開発環境ができてからの最初の一歩として、ルーティング周り、基本的なルーティングとリソースコントローラについて学びました。
これがわかったからすぐ何ができるということではありませんが、最初の一歩としてはここからなのかなと考えています。
もうちょっと色々わかればまた記事にしていきます!
参考
- https://readouble.com/laravel/5.5/ja/routing.html
- https://readouble.com/laravel/5.4/ja/controllers.html
TECH PLAY 女子部ではサーバーからフロントまでフルスタックで技術を身につけたい女子の部活です。
普段はLTやもくもく会、ハンズオン、年に3回くらい男性もWelcomeな大きめのイベントも開催予定なので気になってくださった方はフォローお願いいたします!
Twitter
Facebook
良い年末を\(^o^)/