Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravel5.1をつかった Webアプリケーション開発
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
kan
February 17, 2016
Programming
180
0
Share
Laravel5.1をつかった Webアプリケーション開発
いまどきのPHPフレームワークは、こんなことになってるよ
kan
February 17, 2016
More Decks by kan
See All by kan
Androidアプリ開発にクリーンアーキテクチャを取り入れよう(OSS編)
notice
0
180
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
notice
0
670
Other Decks in Programming
See All in Programming
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
140
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
240
自動レビューエンジンの実装と運用 ~レビューのない世界へ~
kurukuru1999
1
220
20260514_its_the_context_window_stupid.pdf
heita
0
1.1k
Are We Really Coding 10× Faster with AI?
kohzas
0
220
Firefoxにコントリビューションして得られた学び
ken7253
2
170
過去のレビュー知見をSkillsで資産化した話
pkshadeck
PRO
1
2.2k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
10
1k
Kubernetesを使わない環境にもCloud Nativeなデプロイを実現する / Enabling Cloud Native deployments without the complexity of Kubernetes
linyows
3
500
色即是空、空即是色、データサイエンス
kamoneggi
1
150
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
220
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
330
Featured
See All Featured
Are puppies a ranking factor?
jonoalderson
1
3.4k
Making Projects Easy
brettharned
120
6.6k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
How to train your dragon (web standard)
notwaldorf
97
6.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
220
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
270
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
140
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
580
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Building the Perfect Custom Keyboard
takai
2
770
Transcript
いまどきのPHPフレームワークは、 こんなことになってるよ Laravel5.1をつかった Webアプリケーション開発 2015/08/20
[email protected]
http://www.notice.co.jp/ @notice_inc
お話しすること • フレームワーク・アーキテクチャ • Laravelの特徴 • Laravelのアプリケーション開発サイクル • ステージング環境構築 •
脆弱性検査とパフォーマンス検査 • CI
フレームワーク・アーキテクチャ • PofEAA (Patterns of Enterprise Application Architecture) • DDD(Domain
Driven Development) • GoF Design Patterns • (The Three Amigos, UML)
最近、話題のアーキテクチャ MicroService Architecture PofEAAの著者マーティン・ファウラー氏が提唱 こんな話も… http://www.slideshare.net/AkiraMiki/20160722-microservice PHP Micro frameworks こっちは小さい・シンプルって方
Lumen,Slim,Silex
Laravel5.1の特徴 • PHP >= 5.5.9 • LTS(Long Term Support) •
Composerによるパッケージ管理 • Symfony2コンポーネント継承 • IoCコンテナ装備 • データベースマイグレーション機能 • 強力なORM(Eloquent ORM) • Bladeテンプレートエンジン • gulpが標準タスクランナー(Elixir)
ベンチマーク 遅い、大食い… DIのせいかな?? 全てのサービスがリクエストごとにDI対象 しかし、 不必要なサービスを外すとか チューニングすれば、解消? PHP7/HHVM(JIT)とか使えばいっか!
アプリケーション開発サイクル 命名規則(CoC)とケーススタイル データベーステーブル、カラム名は スネークケーススタイル(hoge_fuga) テーブル名は複数形・モデルクラス名は単数形 PHPコーディングはPSR-2準拠(Laravel5.1準拠) メソッド・変数名は文脈で単数・複数形を使い分け CSSのid,classはチェインケーススタイル(hoge-fuga) ※CSSはSMACCSに準拠,CSSプリプロセッサはLess
アプリケーション開発サイクル Laravelインストール $ composer create-project laravel/laravel --prefer-dist $ cd laravel;
git init # とりあえずリポ作成 $ composer install # frameworkのダウンロード $ gulp # ビルド(transpile,minify,uglify CSS/Javascript) $ artisan serve # PHP buildin server起動(port:8000) create-project使うと、passwordハッシュのソルトとか自動生成してくれて便利 Javascript/CSSライブラリはbowerとnpmでパッケージ管理
アプリケーション開発サイクル データベースマイグレーション Schema Builderでテーブル定義を書く。 $ artisan make:migration create_users_table $ artisan
db:migrate 初期データの投入はseederを書く(モデルクラス定義後)。 $ artisan db:seed
アプリケーション開発サイクル 各テーブルのORMクラスを生成 $ artisan make:model User 関連もORMクラスに定義 hasOne(),hasMany(), belongsTo(),belongsToMany()... Lazy
Eager Loadingをサポート
アプリケーション開発サイクル URI設計とルーティング設定 URIとコントローラのメソッドを結びつける Route::get(‘/projects’, ‘ProjectController@index’); Route::get(‘/projects/{id}/show’, ‘ProjectController@show’); Pretty URLで記述できる。 middlewareと呼ばれるフィルタを自在に設定可能。
アプリケーション開発サイクル コントローラを書く コントローラの役目は、 (1)リクエストをバリデーション(バリデータをDIできる) (2)ビジネスロジックを実行 (3)表示に必要なデータをViewへ渡すまで。 コンストラクタでサービスの実装をDIする。 public function __construct(ServiceInterface
$service) fat controllerにしない。 ビジネスロジックはサービス層で、設計と実装を分離する。 UnitTestがしやすくなる。
アプリケーション開発サイクル PHPUnit Laravelのテスティングクラスでテストケースを記述 Webページのインタラクティブな動作も記述可能(visit,click,see) フレームワークのメソッドをMockできる(Mockery)。 未完成のサービスはDIでMockをbindする。 ファクトリを使ったテストデータ作成(Faker) データベースもテストケースごとにリセット可能(ロールバック)。 PsySHでインタラクティブなテストも可能 TDD(テストファースト)からBDD(スペックファースト)へ
開発とはオールレッドをオールグリーンに変えていく作業。
ステージング環境の構築 VirtualBox+Vagrantで プロダクション環境と 同じOS、ミドルウェアを構成管理 プロビジョニングはAnsibleを利用 デプロイメントもAnsibleを利用 ※デプロイメントスタイルはCapistranoスタイル QA(Quality Authroity)向けにも提供
脆弱性検査とパフォーマンス検査 Vaddy+New Relic どちらも無償版があるが、 実務では有償版でないと十分機能しないかも。
CI(Continuous Integration) Gitリポジトリのmasterへpush/mergeをトリガー ステージング環境をVagrant,Dockerで 一時的に構築しプロビジョニング Gitリポジトリからmasterをarchive/export ビルド ユニットテスト実行 (結果を通知 HipChat,Slackとかへ)
通過すれば、Vaddyで脆弱性検査 ステージング環境を破棄 プロダクション版リリース これらをCIで自動化したい。 TravisCI,Jenkins,CircleCI