57
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DMM WEBCAMPAdvent Calendar 2018

Day 12

【Rails経験者向け】Laravelでhello worldして、簡単にフレームワークの違いを見てみよう!

Last updated at Posted at 2018-12-12

Railsを学んだけど...

「Rubyだけでなく他の言語も学んだ方がいいですか」みたいな話はちょくちょく聞いたことがあるのですが、個人的には初心者は複数の言語に手を出すよりかは、最初は一つの言語の勉強に集中して方がいいと思っています。これはフレームワークも同じで、例えば、Ruby on Railsの基礎的な流れを把握することができれば、メジャーな他のフレームワークはなんとなく理解できるようになると思います。

他のフレームワークをみてみよう!

とはいえ、他のフレームワークがどんなものか、知りたい人は一定数いる気がするので、今回はPHP言語のメジャーなフレームワークであるLaravelで"Hello World"を出力する過程を、Railsのそれと比較していきたいと思います!ちなみにLaravelは近年すごく使われ始めている言語で、githubスター数もrailsを抜いています。
スクリーンショット 2018-12-10 10.00.19.png

また、Stack Overflow TrendsでもLaravelがRailsを約0.5%ほど上回っていますね。Laravelの人気の高さが伺えます。
スクリーンショット 2018-12-12 8.52.26.png

本記事の対象者

  • Railsを使って簡単なCRUDアプリを製作したことがある。
  • MVCの基本的な流れについて理解している。
  • 「Railsだけ勉強してるけど私大丈夫なの???」って思っている。

LaravelでHello Worldを作る過程で、Railsとの違いを解説していきます。
ちなみに僕はLaravelについてそんなに詳しいわけではないので、技術的な違いというよりは、Rails経験者がLaravelを初めて使用したときに「あ、なんか似てる!」って思うであろう部分について取り上げていきます。

※Railsの基礎について知りたい人は以下の記事をみてみてね!わかりやすいよ!
https://qiita.com/kouichi_s/items/6480586ab7f6356a91c3
https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1

Composerのインストール

Laravelを使用する為には、Composerをインストールしなくてはいけないので、以下のPHPコマンドを打ってインストールしましょう。


$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

参考ページ: https://getcomposer.org/download/

ちなみにmacでhomebrewを入れている人は以下のコマンドでcomposerをインストールできます。

$ brew install composer

参考ページ: https://brew.sh/index_ja

Laravelのダウンロード

Composerを使ってLaravelインストーラをダウンロードしましょう。

$ composer global require "laravel/installer"

hello worldしてみよう!

まずはあの画面を表示

まずは"Yay! You're on Rails!"でおなじみ、Railsのあの画面を、Laravelでも表示してみます。
スクリーンショット 2018-12-11 23.09.46.png

プロジェクト作成

任意のディレクトリで以下のコマンドを打ってLaravelのプロジェクトを作成します。

$ composer create-project --prefer-dist laravel/laravel project_name

Railsでは新規にプロジェクトを作成するときにはいつも

$ rails new project_name

とコマンドを打っていましたね。ちなみにパスを指定すれば"laravel new project_name"という感じにプロジェクトを作成することもできますが、今回はcomposerコマンドを使っていきます。

プロジェクト作成コマンド

Rails Laravel
rails new project_name composer create-project --prefer-dist laravel/laravel project_name
laravel new project_name

サーバー起動

cdコマンドでプロジェクトのディレクトリまで移動して、サーバーを起動します。以下のコマンドを打ち込んで、ローカルホストにアクセスして見ましょう。

$ php artisan serve

ちなみにartisanは職人の意味で、Laravelのホームページには"The PHP Framework For Web Artisans(ウェブ職人のためのPHPフレームワーク)"との記述もあります!職人ってなんだかかっこいいですね(小並感)!

サーバー起動コマンド

Rails Laravel
rails server php artisan serve

あの画面へ

さて、Laravel版のあの画面はというと。。。

スクリーンショット 2018-12-11 23.45.36.png

Railsのわーい感満載の画面とは異なって、シンプルでおしゃれな画面が登場しました。すごく洗練されている感があります。

hello world!

さて、それでは"Hello world"と出力して見ましょう。一旦さらっといきます!最初にroutes/web.phpを編集して、

routes/web.php
Route::get('/', 'WelcomeController@index');

次にターミナルで以下のコマンドを打ち込み、

$ php artisan make:controller WelcomeController

新規作成されたファイルを以下のように編集し、

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class WelcomeController extends Controller
{
    public function index() {
        return view('welcome.index');
    }
}

そしてresources/viewsの配下にwelcomeディレクトリを、welcomeディレクトリの中にindex.blade.phpを作成して、

resources/views/welcome/index.blade.php
<h1>hello world</h1>

と記述します。はい完成!この状態で"localhost8000/"にアクセスしてみるとhello worldが出力されているはずです。

Railsとの比較を見ていく

MVCは同じ

お気づきになったでしょうか。「routes.rbを記述→コントローラーの作成&コントローラーにアクションを定義→Viewファイル作成」という上記の流れ、Railsと全く同じです!
MVCは他のフレームワークでも採用されていることが多く、非常に重要な概念の一つです。この考え方は実はLaravelでも採用されているんです。
他にもCakePHPでもMVCが採用されていますし、DjangoではMTVという概念が使われていますが、考え方はMVCと同じです。
すなわち、**Railsをある程度マスターしてしまって、データの流れさえ覚えてしまえば、他のフレームワークを使ったときにもその知識は生きることになります。**一から勉強するよりも圧倒的に楽に学習することができます。

Routing

それではRailsと比較しながらコードを見ていきましょう。まずはルーティングから。上がRailsのコード、下がLaravelのコードです。

Railsの場合

config/routes.rb
Rails.application.routes.draw do
  get '/', to: 'welcome#index'
end

Laravelの場合

<?php
Route::get('/', 'WelcomeController@index');

書き方こそ違いますが、基本的にやっていることは一緒で、「"/"にアクセスしたときは、welcomeコントローラのindexアクションを実行する」という意味です。

Controller

次にコントローラーを見ていきましょう。まずはコントローラーの作成から。Laravelでは基本的にphp artisanコマンドを使って諸々の作成をします。

$ php artisan make:controller WelcomeController

コントローラー作成コマンド

Rails Laravel
rails g controller Welcome php artisan make:controller WelcomeController

それでは実際にコントローラーの中身の記述を比較していきましょう。

Railsの場合

app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
  def index
  end

Laravelの場合

app/Http/Controllers/WelcomeController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class WelcomeController extends Controller
{
    //
    public function index() {
        return view('welcome.index');
    }
}

railsでは任意にコントローラー内にアクションを定義しただけで、views/コントローラー名/アクション名.html.erbのファイルを返してくれるのですが、laravelではreturnを指定してあげないとファイルが返りません。ですがアクションを定義して、そのアクションの中に任意の処理を書いていくという点ではRailsでもLaravelでも大して変わりません。

Viewについて

今回はhello worldしか出力していないですが、参考までに。例えば、コントローラーから変数testを渡してviewに表示したい場合は、以下のような記述になります。

Railsの場合

Controller
def hoge
  @test = 'hoge'
end
View
<%= @test %>

Laravelの場合

Controller
 public function hoge() {
        $test = 'hoge';
        return view('hogehoge.hoge', compact('test'));
    }
View
{{ $test }}

コントローラーで変数を定義して、viewファイルでそれを展開するという形は同じです。

最後に

Railsを学んでマスターしてくと、他のフレームワークへの適応力も上がります。フレームワーク感の違いは、記述形式以外にはそんなにないということを感覚ベースでわかっていただければ幸いです。

57
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?