SlideShare a Scribd company logo
1 of 20
My First Laravel
PHP勉強会
2018.4.25(Wed)
@m_norii
About me
林 正紀 (HAYASHI Masanori)
1974年09月12日生 (43歳) ・・
埼玉生まれ埼玉育ち埼玉川越市在住
埼玉大学/大学院・数学専攻
埼玉土着エンジニア
勤務
• @m_norii
• http://norii.hatenablog.com/
• https://www.facebook.com/m.norii
• https://www.slideshare.net/m_norii
エキテン -- 国内最大級オールジャンル口コミサイト
私のWeb Application Framework歴
Zend Framework 1
symfony1
Symfony2
FuelPHP
CakePHPとCodeIgniterはかじった程度
案件:コーポレートサイト
https://www.designone.jp/
要件
• フロント側
• 動的機能はニュースと問い合わせのみ
• デザイナー要望:テンプレートエンジンいれたい
• バックヤード側
• ニュースを更新する機能
• ログイン認証
選択したスタック:フロント
• Linux/Nginx/MySQL/PHP
• https://github.com/duncan3dc/blade
• 動的機能がほとんどない要件なので
Laravelフルセットは必要なかった
• ただテンプレートエンジンは必要だった
• Twigも検討したが、社内別プロジェクトで
Laravelを使っていたので
デザイナーもBladeの知見があった
• Blade単体※で動くようにしたものをみつけた
検証して問題無さそうなので採用した
※単体と言っても依存ライブラリはまあまあある
• https://github.com/vlucas/phpdotenv
• 環境依存情報の切り出し
選択したスタック:バックヤード
• Laravel
• ニュース記事のCRUDだけにしてはリッチすぎると
も思ったが、認証やページネーションなど地味なと
ころの実装に時間かけたくなかった
• TinyMCE
• JavaScriptのWYSIWYGエディタ
• WordPressでも使われているやつ
• ニュース記事本文の編集に利用
• Jbimages
• TinyMCEのプラグイン
• 画像をアップロードできるようにする
バックヤード画面
Laravel採用してよかったところ
• ドメインが複雑でなければさくさく作れる
• 今回はうってつけだった
• php artisan make:auth が簡単・便利
• ページネーションが簡単・便利
• フラッシュデータが簡単・便利
• 次のリクエスト間だけセッションにアイテムを保存
• 「データを登録しました」みたいなやつ
• ファイルアップロードも実装が楽
• Blade、機能が洗練されてて使いやすい
Laravel はまったところ
URL生成系のメソッド
<script src="{{ asset('/js/app.js') }}" defer></script>
こう出力される ↓
<script src="http://example.com/js/app.js" defer></script>
<form action="{{ url('/articles') }}" method="post" name="article">
こう出力される ↓
<form action="http://example.com/articles" method="post" name="article">
<form id="logout-form" action="{{ route('/logout') }}" method="POST">
こう出力される ↓
<form id="logout-form" action="http://example.com/logout" method="POST">
なぜはまったか?
• 最初ローカル環境では、http (非SSL) で開発
を進めていた
• 自己署名証明書いれてもよかったが、結局ブラウザ
の警告画面がうざいので入れなかった
• ある程度開発が目処立って
検証用サーバ(https環境)にアップしたらい
ろいろリンクが機能しなかった
• 調べていったら、先のメソッドたちがURLをフルで
出力しているのが原因だった
どう直したか?
結局同一ドメインだし、メソッド通すのやめた
<script src="{{ asset('/js/app.js') }}" defer></script>
↓
<script src="/js/app.js" defer></script>
<form action="{{ url('/articles') }}" method="post" name="article">
↓
<form action="/articles" method="post" name="article">
<form id="logout-form" action="{{ route('/logout') }}" method="POST">
↓
<form id="logout-form" action="/logout" method="POST">
フルURL生成もう1つ
• ページネーションが生成するURL
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&lsaquo;</a>
<a class="page-link" href="{{ $url }}">{{ $page }}</a>
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&rsaquo;</a>
↓
<a class="page-link" href="http://example.com/articles?page=3" rel="prev">&lsaquo;</a>
<a class="page-link" href="http://example.com/articles?page=4">{{ $page }}</a>
<a class="page-link" href="http://example.com/articles?page=5" rel="next">&rsaquo;</a>
そもそもページネーションって
ページネーション用パラメータ以外、同一の
URLですよね?
この時、リンクURLはここまで省略できる
<a href="http://example.com/articles?page=3">
↓ ドメインいらない
<a href="/articles?page=3">
↓ パスも同じだからいらない
<a href="?page=3">
こう直した
• strstr() を使って ? の前を除去
• もっとスマートな直し方があればいいのだが
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&lsaquo;</a>
<a class="page-link" href="{{ $url }}">{{ $page }}</a>
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&rsaquo;</a>
↓
<a class="page-link" href="{{ strstr($paginator->previousPageUrl(), '?') }}"
rel="prev">&lsaquo;</a>
<a class="page-link" href="{{ strstr($url,'?') }}">{{ $page }}</a>
<a class="page-link" href="{{ strstr($paginator->nextPageUrl(), '?') }}"
rel="next">&rsaquo;</a>
※出力
<a class="page-link" href="?page=3" rel="prev">&lsaquo;</a>
<a class="page-link" href="?page=4">{{ $page }}</a>
<a class="page-link" href="?page=5" rel="next">&rsaquo;</a>
はまったところ(2)
「HTMLエスケープはしたいが、改行は<br>に
変換したい」場合
{{ nl2br($form['content']) }}
だと、<br>がエスケープされて出力されてしまう
{!! nl2br($form['content']) !!}
だと、<br>は出力されるが、他のHTMLタグも出力してしまう
↓
{!! nl2br(e($form['content'])) !!}
で、<br>だけをエスケープせずに出力できる
・・・けど、なんかスマートじゃない感
他、細かいところ
• カスタムエラーページの作り方がわからん
• .env 何に使うかわからない項目がある
• DBとかMailとかRedisはいいとして
• 「 PUSHER_APP」って何?
• 結局使わなそうなので設定ごと消したけど
• URLの話、そもそも開発環境のSSL証明書問題
みんなどうしてるんだろう?
ちょっとハマりどころもあったけど
Laravel開発は楽しい!
エンジニアが本来注力すべきところに集中でき
る感じが良い!
ご清聴ありがとうございました

More Related Content

What's hot

国産ランキングプラグインを作ってみた件(2016/10/15)
国産ランキングプラグインを作ってみた件(2016/10/15)国産ランキングプラグインを作ってみた件(2016/10/15)
国産ランキングプラグインを作ってみた件(2016/10/15)Hiroyuki Ishikawa
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-ServerあれこれKazuya Wada
 
ES2015の今とこれから
ES2015の今とこれからES2015の今とこれから
ES2015の今とこれからlion-man
 
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下Tomoya Hokari
 
20191129 kyotoLT
20191129 kyotoLT20191129 kyotoLT
20191129 kyotoLTOtazo Man
 

What's hot (7)

国産ランキングプラグインを作ってみた件(2016/10/15)
国産ランキングプラグインを作ってみた件(2016/10/15)国産ランキングプラグインを作ってみた件(2016/10/15)
国産ランキングプラグインを作ってみた件(2016/10/15)
 
Bydstudy#26 sato
Bydstudy#26 satoBydstudy#26 sato
Bydstudy#26 sato
 
Shiny-Serverあれこれ
Shiny-ServerあれこれShiny-Serverあれこれ
Shiny-Serverあれこれ
 
ES2015の今とこれから
ES2015の今とこれからES2015の今とこれから
ES2015の今とこれから
 
20190910 rpalt
20190910 rpalt20190910 rpalt
20190910 rpalt
 
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下
20191204_WordPressの教科書出版記念イベント_WordPress開発のツボ_森下
 
20191129 kyotoLT
20191129 kyotoLT20191129 kyotoLT
20191129 kyotoLT
 

Similar to 20180425 phpstudy-my-first-laravel

ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudy
ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudyライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudy
ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudyKenichi Mukai
 
第67回PHP勉強会LT(その2)
第67回PHP勉強会LT(その2)第67回PHP勉強会LT(その2)
第67回PHP勉強会LT(その2)Hideyuki Shimooka
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身Hisateru Tanaka
 
これができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejectedこれができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejectedTakahiro YAMAGUCHI
 
Rails5クイックスタート
Rails5クイックスタートRails5クイックスタート
Rails5クイックスタートHirata Tomoko
 
Atnd地域検索作ったよー
Atnd地域検索作ったよーAtnd地域検索作ったよー
Atnd地域検索作ったよーOhishi Mikage
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?sasezaki
 
How Would You Like Component Management System
How Would You Like Component Management SystemHow Would You Like Component Management System
How Would You Like Component Management SystemHidetaka Okamoto
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由Kenichi Mukai
 
Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Shohei Kobayashi
 
Webの勉強会#11
Webの勉強会#11Webの勉強会#11
Webの勉強会#11MarlboroLand
 
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Masaru Gushiken
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについてMasahito Zembutsu
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後Tomoki Hasegawa
 
勉強会参加のススメ
勉強会参加のススメ勉強会参加のススメ
勉強会参加のススメYoshito Tabuchi
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜Koichi ITO
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャota42y
 
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業株式会社 オープンソース・ワークショップ
 

Similar to 20180425 phpstudy-my-first-laravel (20)

ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudy
ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudyライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudy
ライブラリ・ファースト 第91回 PHP勉強会@東京 #phpstudy
 
第67回PHP勉強会LT(その2)
第67回PHP勉強会LT(その2)第67回PHP勉強会LT(その2)
第67回PHP勉強会LT(その2)
 
#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身#phpmatsuri LT大会システムの中身
#phpmatsuri LT大会システムの中身
 
ML Opsのススメ
ML OpsのススメML Opsのススメ
ML Opsのススメ
 
これができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejectedこれができたらエンジニア|YAPC::Asia 2015 LT rejected
これができたらエンジニア|YAPC::Asia 2015 LT rejected
 
Rails5クイックスタート
Rails5クイックスタートRails5クイックスタート
Rails5クイックスタート
 
Atnd地域検索作ったよー
Atnd地域検索作ったよーAtnd地域検索作ったよー
Atnd地域検索作ったよー
 
HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?HTTPメッセージ、PHPの 事情ば分かっとっと?
HTTPメッセージ、PHPの 事情ば分かっとっと?
 
How Would You Like Component Management System
How Would You Like Component Management SystemHow Would You Like Component Management System
How Would You Like Component Management System
 
フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由フレームワークを使うべき 3 つの理由
フレームワークを使うべき 3 つの理由
 
Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料Ruby on vim yokohama.vim発表資料
Ruby on vim yokohama.vim発表資料
 
Webの勉強会#11
Webの勉強会#11Webの勉強会#11
Webの勉強会#11
 
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
Yahoo!アフィリエイトソン最優秀賞者に学ぶ Swift講座
 
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
 
スクレイピングその後
スクレイピングその後スクレイピングその後
スクレイピングその後
 
勉強会参加のススメ
勉強会参加のススメ勉強会参加のススメ
勉強会参加のススメ
 
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
 
Web∩アプリ
Web∩アプリWeb∩アプリ
Web∩アプリ
 
マイクロサービスにおける 非同期アーキテクチャ
マイクロサービスにおける非同期アーキテクチャマイクロサービスにおける非同期アーキテクチャ
マイクロサービスにおける 非同期アーキテクチャ
 
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
ドローンをプログラミングして飛ばす!Scratch、PHP、Python、映像のプログラミング授業
 

More from Masanori Hayashi

More from Masanori Hayashi (12)

JAWS DAYS 2017直前! AWS総復習
JAWS DAYS 2017直前! AWS総復習JAWS DAYS 2017直前! AWS総復習
JAWS DAYS 2017直前! AWS総復習
 
Phpstudy98
Phpstudy98Phpstudy98
Phpstudy98
 
Php blt-vol2
Php blt-vol2Php blt-vol2
Php blt-vol2
 
Symfony meetup-7
Symfony meetup-7Symfony meetup-7
Symfony meetup-7
 
Glt vol49
Glt vol49Glt vol49
Glt vol49
 
Glt vol48
Glt vol48Glt vol48
Glt vol48
 
ボトルネックを解消せよ
ボトルネックを解消せよボトルネックを解消せよ
ボトルネックを解消せよ
 
Glt vol47
Glt vol47Glt vol47
Glt vol47
 
PHP framework Phalcon
PHP framework PhalconPHP framework Phalcon
PHP framework Phalcon
 
俺的世界で一番暑い夏
俺的世界で一番暑い夏俺的世界で一番暑い夏
俺的世界で一番暑い夏
 
Soft bank ssl仕様変更について
Soft bank ssl仕様変更についてSoft bank ssl仕様変更について
Soft bank ssl仕様変更について
 
20081120 lt11th ace
20081120 lt11th ace20081120 lt11th ace
20081120 lt11th ace
 

20180425 phpstudy-my-first-laravel