ゆるっとLaravel「明日から使えるLaravelの話」

場 所:ロジカルスタジオ会議室アドリア(4F)
時 間:11月26日(火) 19:30~21:40
登壇者:sanadiさん 有澤さん 上平さん 本谷さん ヤッサン(私) namizatopさん

皆様、はじめまして!
ロジカルスタジオのフロントエンド/バックエンドエンジニア、ヤッサンです!
外部の方をお招きしての勉強会「ゆるっとstudy」第2回が開催されました!
※前回についてはこちらをご覧ください

本題に入る前に大事なお知らせ

●【今回から、勉強会中に随時Twitterで感想などをつぶやいて頂けます】
ハッシュタグ「#ゆるっとStudy」を感想ツイートにつけて頂くと、
それを弊社マスコットキャラクターロージーがTwitter上で拾っていきます。

Twitterフォロー募集中です!

●今回から、ご来場の皆様にロージーとカールのステッカーを1名につき1枚、配布しています!
ぜひ、ノートパソコンやiPadにお貼りくださいませ!

ようやく本題に。。

第2回目のテーマは、Laravelです!!
弊社勉強会では初の、バックエンド側のテーマです!

はじめに:Laravelとは?

Laravel は、MVCWebアプリケーション開発用の無料・オープンソースPHPで書かれたWebアプリケーションフレームワークである。LaravelはMITライセンスの下でリリースされており、そのソースコードGitHubホスティングされているマイクロソフト.NETの開発に関わっていたTaylor Otwell が開発し、Taylorを中心としたコミュニティーが活発な開発を続けている

出典 Wikipedia

つまりLaravelとは、Taylor Otwell氏(後述)のPHPerへの愛に溢れたPHPフレームワークのことです!

今回の勉強会の概要

今回の勉強会は、技術を身につけよう!というよりは

  • Laravelでこんなことをやってみた
  • Laravelのこんなことについて調べてみた
  • Laravelはここがすごい!

といったことを登壇者が持ち寄り、Laravelに対する知見を深めよう!といった内容です。

当勉強会は

  • セッション
  • 懇親会
  • LT(Lightning Talk)

この3つのセクションで、進めていきました!

セッション

上平さんによるご挨拶及び会場案内のあと、セッション開始です!

今回は、以下3名が参加してくださいました!

  • sanadiさん
  • 有澤さん
  • 上平さん

01.ド素人がLaravelを触って思ったこと by sanadiさん

なんと、社外向け勉強会2回目にして初の社外の登壇者です!
記念すべき初の社外の登壇者は、デザイナー/フロントエンジニアのsanadiさん
sanadiさんは、

  • Laravelのいいところ
  • Laravelの勉強方法

この2つをテーマに、お話をしてくださいました!
以下では、sanadiさんの発表内容及び質疑応答を、要約して掲載します。
またsanadiさんに発表資料の掲載許可を頂きましたので、そちらも併せてご覧ください!

sanadiさんの発表資料はこちら!

Twitterアカウントはこちらです!

Laravelのいいところ
  1. デフォルト機能の搭載が充実している
  2. フォルダ構造が直感的
  3. configファイルの利便性
  4. 環境ファイルも集約してて楽(.env)
  5. 例外処理が簡単
  6. メール送信が便利(make:mail)
  7. シーディングで初期データも簡単に用意できる
  8. Lang/jaを使用することで、バリデーションの文言も日本語化可能
Laravelの勉強方法
  1. 著書よりもドキュメントを読むのがおすすめ
  2. Traversy Media氏の動画めっちゃおすすめ(ハンズオン形式でチュートリアルが充実している)
  3. WEB学習(ProgateTechAcademy
質疑応答

MVCが好まれている理由は?
– A. システムは役割を明確に分担することで、メンテナンスに強くなるため

MVCの最適さ
– A. 先人たちのPGへの熱い思いからデザインパターンやMVC概念ができて、その恩恵で我々は共通認識を持てている
今後よりよくなる可能性は大いにあるが、現時点ではMVCの人気が高い

総括

Laravelは初心者にもやさしい内容!
MVCモデルが理解できればなんとかなる!との心強いご説明でした!
私ヤッサンはもちろん、社内にも展開したい情報ばかりでした!!

02.Laravelを出資している企業を調べてみた by 有澤さん

続いての登壇者は、弊社の勉強会で何度となく登壇経験のある、有澤さん!
いきなり写真を掲載し「この人誰でしょう」の問題を出して会場をざわつかせた有澤さん、
(ちなみに答えはLaravelの開発者であるTaylor Otwell氏)
そのあとの忘れてた自己紹介で会場の空気を鷲掴みに!
その後も発表途中に資料を修正しだすゆるっとさで、会場を爆笑の渦に巻き込んでいました!
まさに今回の勉強会のタイトル「ゆるっとLaravel」の、ゆるっとの象徴でした!

以下では、有澤さんの発表内容を要約して掲載します。

Laravelに出資している企業
  • パートナー一覧はこちら
  • 出資している企業は海外に多い
  • 自社サービスをもっているIT企業に多い
その他
  • Laravelの起源はTaylor Otwell氏の趣味
  • Laravelは独自フレームワークと比べるとやっぱり読みやすい
質疑応答

のんのんびよりのどこが好きですか
– A. やすらぎ

03.LaravelでGraphQLやってみた by 上平さん

続いての登壇者は、本勉強会の主催者である、上平さん!
上平さんは、LaravelでGraphQLを実行してみたというテーマで発表をしてくださいました。

発表資料はこちらです!

GraphQLとは?

GraphQL(グラフQL)は、APIのために作られた、データクエリとデータ操作のための言語と、保存されたデータに対してクエリを実行するランタイムである。GraphQLは、2012年にFacebookの内部で開発され、2015年に公開された。2018年11月7日、GraphQLプロジェクトは、Facebookから非営利のLinux Foundationがホストする新たに設立されたGraphQL Foundationに移譲された

出典 Wikipedia

GraphQLとは、Facebookが開発したデータ問い合わせと操作のための言語です。
以下のような特徴があります。

  • APIのエンドポイントがひとつ
  • getやpostを書く必要がない
  • フロントエンドとバックエンドとが分担して並行開発ができる
発表内容

使用パッケージコンポーザーは以下:

  • lighthouse
     →LaravelからGraphQLのエンドポイントを提供できる
  • laravel-graphql-playground
     →ブラウザからクエリやミューテーションを書いたら、
     その場でGraphQLを実行できる

GraphQLの環境構築は以下のコマンドで完了

laravel new laravel-graphql

モジュール追加は以下のコマンドを入力

composer require nuwave/lighthouse
composer require mll-lab/laravel-graphql-playground

初期設定は以下コマンド

php artisan vendor:publish --provider="Nuwave\Lighthouse\Providers\LighthouseServiceProvider"`
質疑応答

フロントエンドでGraphQLを叩くときはどうするのか
– A. GraphQLはApolloというライブラリをクライアントとして使用する

懇親会

今回は弊社勉強会初の試みとして、参加者同士の懇親会が行われました!

弊社が用意したお菓子やお酒を片手に、エンジニア同士でLaravelやその他技術について、語り合います!

LT

最後は、懇親会の体勢のまま登壇者のお話を聞くLTのコーナー。

登壇者は以下の3名です!

  • 本谷さん
  • ヤッサン
  • namizatopさん

01.Laravel DI・Facadeの使い方 by 本谷さん

LTのトップを飾るのは、弊社バックエンドエンジニアの本谷さん!
本谷さんは下記4パターンについて、PHPUnit実行時のテストケースにて差異を検証して発表してくださいました。
発表資料と併せてご覧ください!

具体的なソースは以下のとおりです。

1.newでインスタンスを取得する

public function case1_newでインスタンスを取得する()
{
// テスト対象のメソッドの中で下記の値を使用しているので、ここで入れておく
$_SERVER['REMOTE_ADDR'] = '172.21.0.1';

$this->get('/case1')
->assertSeeText('172.21.0.1');
}

protected function tearDown(): void
{
parent::tearDown();

// 後処理
// これをしないと各テストが終わっても値が残り続ける
unset($_SERVER['REMOTE_ADDR']);
}

2.静的メソッド

public function case2_静的メソッドを使用する()
{
// テスト対象のメソッドの中で下記の値を使用しているので、ここで入れておく
$_SERVER['REMOTE_ADDR'] = '172.21.0.1';

$this->get('/case2')
->assertSeeText('172.21.0.1');
}

protected function tearDown(): void
{
parent::tearDown();

// 後処理
// これをしないと各テストが終わっても値が残り続ける
unset($_SERVER['REMOTE_ADDR']);
}

3.DI

public function case3_DIを使用する()
{
// DIするインスタンスをモックに差し替える
$this->instance(EnvClass::class, Mockery::mock(EnvClass::class, function ($mock) {
$mock->shouldReceive('getRemoteAddr')
->andReturn('172.21.0.1');
}));

$this->get('/case3')
->assertSeeText('172.21.0.1');
}

4.Facade

public function case4_Facadeを使用する()
{
// Facadeをモックに差し替える
EnvFacade::shouldReceive('getRemoteAddr')
->andReturn('172.21.0.1');

$this->get('/case4')
->assertSeeText('172.21.0.1');
}

 

各方法の特徴

1,2では環境変数を自分で作らなければならないため、テスト後に自分で消す必要があります。
それに対し3,4ではそれを意識する必要がないため、自動テストに強いコードが書けます!

質疑応答

DIとFacadeの違いは?
– A. インスタンスはサービスコンテナから取得する点は共通だが、
なるべく3で書いて、bladeなどの処理を4で書くと良い
(4は成約がゆるく、どこででも使えるため)

02.Laravel MVC構造について by ヤッサン

続いては私、ヤッサンの登壇です!
私は、LaravelのMVC構造について調べてみました!

MVCモデルとは?

MVCModel View Controller モデル・ビュー・コントローラ)は、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。

アプリケーションソフトウェアの内部データを、ユーザーが直接参照・編集する情報から分離する。

出典 Wikipedia

MVCモデルとはModel View Controllerモデルの略で、アプリケーションを実装するためのデザインパターンのことです。
LaravelはMVCモデルをベースにしているため、MVCモデルを押さえておくとLaravelが理解しやすくなります!
私の発表内容は以下です。発表資料も併せてご覧ください!

発表内容
  • MVCモデルは以下の3つに分けられる:
    • Model:データ処理全般。DBへのアクセスに関する処理を行う
    • View:画面表示を担当。ユーザーに表示する情報を出力する
    • Controller:全体の制御を担当。ユーザーからの入力をモデルに渡したり、モデルから渡されたデータをビューに渡し画面に表示する役割を担う
  • 実装者はconrollerを意識すればコーディングできる
  • LaravelでのMVC構造
    • リクエストにルーティングが反応してどのコントローラーを使うか決める
    • 基本のMVCと大差ない
    • LaravelがMVCモデルをベースにしているため、MVCモデルを押さえておくとLaravelが理解しやすくなる

 

03.Laravelの「Hello World」を表示するまでの処理を追ってみた by namizatopさん

本勉強会の最後を飾るのは、本日2人目の外部からの登壇者、namizatopさん!
namizatopさんは、Laravelで「Hello World」を表示するまでに、
どういった処理をしているのか、順を追って説明してくださいました!
発表資料も公開されています!こちらからご覧くださいませ。

Twitterアカウントはこちらです!

発表内容
    • publicフォルダのみに、ブラウザ表示の許可をしている
      その他の画像等のコンテンツへのアクセスはpublic/index.phpを通して行う
    • public/index.phpの処理内容
      • オートロード
        use文:phpからphpを読み込むときはuse文をかくだけでいい
      • フレームワークの起動

    Applicationに色々と設定する

      • アプリケーションの実行
        HTTPカーネルに処理が渡される
        処理の内容は環境設定、エラーハンドラー、ミドルウェア、サービスプロバイダ等
      • ルーティング

    ルーティング情報を参照する

    routes/web.php
    APIサーバとして使用したい場合はこっちで定義する(SPA等)
    routes/api.php

    質疑応答

    レスポンス返すときに、自分がヘッダの設定をする場合はどこでやるのか
    – A. コントローラでステータス・コードあたりで設定できる

    ゆるっとLaravel「明日から使えるLaravelの話」を終えて

    まずはsanadiさん、namizatopさん、発表ありがとうございました!!
    全体的にゆるっとした和やかな雰囲気でした。
    知識レベルはゆるっと~ややごりっとレベルでしたが、どれも業務に結びつく内容でほんとに明日から使える内容ばかりでした。
    個人的にはsanadiさんの発表が、今まで理解が浅かったところをすごく肉付けされた感があってとても勉強になり、何よりも聞いていて楽しかったです。
    今後のゆるっとstudyでも自分にハマる登壇が1つでも多くなるようにゆるっと頑張っていきます。

    登壇者の皆様、スタッフの皆様、そして参加者の皆様、誠にありがとうございました!
    次回は弊社勉強会「Vue.jsでSPAを作ろう」の様子をブログに掲載する予定です!
    ぜひ、ご期待くださいませ!

    参加スタッフ:上平 有澤 ヤッサン ドラゴン アッカリーン のてぃこ T.K ノテ ケンティー ロージー カール

    弊社へのご用命、お問い合わせ、ご相談、Study Studioのレンタル依頼等はコチラから!▼

    ブログ記事