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
0
180
Laravel5.1をつかった Webアプリケーション開発
いまどきのPHPフレームワークは、こんなことになってるよ
kan
February 17, 2016
Tweet
Share
More Decks by kan
See All by kan
Androidアプリ開発にクリーンアーキテクチャを取り入れよう(OSS編)
notice
0
170
Androidアプリ開発にクリーンアーキテクチャを取り入れよう
notice
0
670
Other Decks in Programming
See All in Programming
ボトムアップの生成AI活用を推進する社内AIエージェント開発
aku11i
0
1.4k
data-viz-talk-cz-2025
lcolladotor
0
110
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
110
alien-signals と自作 OSS で実現する フレームワーク非依存な ロジック共通化の探求 / Exploring Framework-Agnostic Logic Sharing with alien-signals and Custom OSS
aoseyuu
3
5.2k
SODA - FACT BOOK(JP)
sodainc
1
9.1k
Claude Agent SDK を使ってみよう
hyshu
0
1.5k
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
110
Blazing Fast UI Development with Compose Hot Reload (droidcon London 2025)
zsmb
0
440
Inside of Swift Export
giginet
PRO
1
270
Swift Concurrency 年表クイズ
omochi
3
220
Register is more than clipboard
satorunooshie
1
260
Webサーバーサイド言語としてのRustについて
kouyuume
1
5k
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
The Language of Interfaces
destraynor
162
25k
Keith and Marios Guide to Fast Websites
keithpitt
412
23k
Git: the NoSQL Database
bkeepers
PRO
431
66k
[RailsConf 2023] Rails as a piece of cake
palkan
57
6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Site-Speed That Sticks
csswizardry
13
940
It's Worth the Effort
3n
187
28k
Designing Experiences People Love
moore
142
24k
Context Engineering - Making Every Token Count
addyosmani
8
330
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