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
kan
February 17, 2016
Programming
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
AIで効率化できた業務・日常
ochtum
0
140
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
6.7k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
Vite+ Unified Toolchain for the Web
naokihaba
0
320
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
New "Type" system on PicoRuby
pocke
1
970
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
120
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
350
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
200
Agentic UI
manfredsteyer
PRO
0
170
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
820
A2UI という光を覗いてみる
satohjohn
1
140
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
8
720
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
4 Signs Your Business is Dying
shpigford
187
22k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
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