78
Yuuki Takezawa / 竹澤 有貴 Laravel JP user group オープンソースカンファレンス北海道2014

Laravel_オープンソースカンファレンスhokkaido_JP_2014

Embed Size (px)

DESCRIPTION

オープンソースカンファレンス2014 Hokkaido 最新鋭phpフレームワークLaravelで始めるこれからのモダンphp で使用したスライドです

Citation preview

Page 1: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Yuuki Takezawa / 竹澤 有貴

Laravel JP user group

オープンソースカンファレンス北海道2014

Page 2: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Profile / 自己紹介

yuuki takezawa 竹澤 有貴

GitHub : ytake (https://github.com/ytake) facebook (https://www.facebook.com/yuuki.takezawa) qiita : ytake (http://qiita.com/ytake) twitter : ytake (https://twitter.com/ex_takezawa) !ベンチャー、フリーランスを経て、 現エキサイト株式会社 / Excite Japan Co., Ltd. engineer! !小樽市出身!

Page 3: Laravel_オープンソースカンファレンスhokkaido_JP_2014

個人で使用している開発ツール

Page 4: Laravel_オープンソースカンファレンスhokkaido_JP_2014

フレームワーク経験

Page 5: Laravel_オープンソースカンファレンスhokkaido_JP_2014

次々と現れる新しい技術と、 新しいツール

Page 6: Laravel_オープンソースカンファレンスhokkaido_JP_2014

PHPも進化(みなさんPHP5.4以上ですよね?)

namespace

array short syntax

closure

trait

Built-in web server

etc…

Page 7: Laravel_オープンソースカンファレンスhokkaido_JP_2014

<

パッケージ管理ツールも

Page 8: Laravel_オープンソースカンファレンスhokkaido_JP_2014

すばらしいライブラリ群guzzle

symfony components

zf components

doctrine Aura

monolog

swift mailer

Page 9: Laravel_オープンソースカンファレンスhokkaido_JP_2014

PHPの標準コーディング規約

Page 10: Laravel_オープンソースカンファレンスhokkaido_JP_2014

サーバ環境も大きく進化しました

Page 11: Laravel_オープンソースカンファレンスhokkaido_JP_2014

AWS

Heroku

cloudControlWindows Azure

Google App Engine

PaaS

Page 12: Laravel_オープンソースカンファレンスhokkaido_JP_2014

webserver

webserverも選択する時代

Page 13: Laravel_オープンソースカンファレンスhokkaido_JP_2014

様々な環境で動かすときに、 悩ませる過去のフレームワーク達

server error 500

PHP Fatal error: require_once()

Fatal error: Class 'Hoge' not found

真っ白だと・・・

etc…

Page 14: Laravel_オープンソースカンファレンスhokkaido_JP_2014

色んな環境で楽に動いてくれる モダンなPHP環境

Page 15: Laravel_オープンソースカンファレンスhokkaido_JP_2014

そんなモダン環境で動かす フレームワーク

Page 16: Laravel_オープンソースカンファレンスhokkaido_JP_2014
Page 17: Laravel_オープンソースカンファレンスhokkaido_JP_2014

creatorFuelPHPやKohanaのような、 CodeIgniterの開発者がフォークして 産み出されたフレームワークではなく、 マイクロソフトの.NETの開発に関わっていたTaylor Otwell氏によって 開発されています !GitHubで公開されていますので、 バグや、機能拡張等何かアイディアがあれば、 気軽にpull requestを送る事もできます

Page 18: Laravel_オープンソースカンファレンスhokkaido_JP_2014

動作環境php5.4以上 mcrypt必須 OSは問いません composer利用の為、composerは別途導入する必要があります。

cache, sessionはファイルキャッシュ、database memcached, redisがデフォルトで選択可能です databaseはmaster, slave構成でも簡単です

導入方法や簡単なチュートリアルはインターネット上で公開されている記事や、 「オープンソース」を使ってみよう (第35回 phpフレームワーク Laravel) でも触れています。あわせてご覧くださいhttp://www.ospn.jp/press/20140605no40-useit-oss.html

Page 19: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelが気に入れば、 フレームワークを構成している

コンポーネントを、 Laravel外でも使えます。

illuminate/database, container オススメです

Page 20: Laravel_オープンソースカンファレンスhokkaido_JP_2014

PEARのライブラリは使用しません。 あれをダウンロードしたけど、 これが無い!非推奨関数が・・

もうありません require,include地獄もありません

Page 21: Laravel_オープンソースカンファレンスhokkaido_JP_2014

google trend等で検索すると、 最近急激に注目度が高くなりました 注目度故に色々話題も付きません Facade誤用?(proxy pattern)

static function? bootstrap very slow?

Page 22: Laravel_オープンソースカンファレンスhokkaido_JP_2014
Page 23: Laravel_オープンソースカンファレンスhokkaido_JP_2014

信憑性はあまりありません

Page 24: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ソースコード、マニュアルなどを 読む事で解決される問題ばかりが 取り上げられていますので、 必ず中身を見る事が大事です (Laravel以外でも同じです)

分からなければ聞きましょう!!

Page 25: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelとは

Page 26: Laravel_オープンソースカンファレンスhokkaido_JP_2014

MVC採用ですが、厳密なMVCではありません

アーキテクチャ

modelview

controller

Page 27: Laravel_オープンソースカンファレンスhokkaido_JP_2014

フルスタック

security

ORM

router

request

SSH

migration

view

container

etc…

cache

Page 28: Laravel_オープンソースカンファレンスhokkaido_JP_2014

世界のLaravelGitHubでは現在スターが10,000を超え PHPフレームワークの中で最も注目されているかもしれません。 *人気だけがすべてではないので実際に使ってみて下さい

Laravelcomposerを用いたフレームワーク 依存パッケージの管理や、 構成しているコンポーネントの差異によるエラーや問題が少ない *ただし、バージョンアップ時にクラス名が変更される場合もありますが、 アップグレード方法が正確にアナウンスされます

ライブラリの追加や、 フレームワークに組み込むのも、癖が無くスムーズ ストレスがたまりません Symfonyコンポーネントを利用し、複雑さを巧くラップ

Page 29: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelのpackage紹介サイトLaravel Packages Registry http://registry.autopergamene.eu/ Packalyst :: Packages for Laravel http://packalyst.com/ comnect/smarty(smarty利用パッケージ 作った人) https://github.com/ytake/laravel-smarty

LaravelLaravelのパッケージ開発は誰でも可能で、 様々なパッケージが世界中のユーザーから提供されています。 海外で利用している開発者が多いため、 日本とは違う技術や、新しいものを吸収したり、 刺激を受ける事もある、大きなコミュニティがあります

Vagrantで利用できるboxも公式で提供されています Ubuntu 14.04, PHP 5.5, Nginx, MySQL Postgres, Node (With Bower, Grunt, and Gulp) Redis, Memcached, Beanstalkd

Page 30: Laravel_オープンソースカンファレンスhokkaido_JP_2014

LaravelMySQL, postgreSQL, sqlite, SQL Severに対応 コマンドラインツール(Artisan)を使ってmigrate! unitTestしやすい構造 ほとんどの機能を入れ替えて独自のクラスに変更したり、 コアクラスを拡張したりといった事が簡単にできる様になっています !デフォルトで用意されている認証クラスで簡単にログインを実装

Laravel unittestMockeryを使用すると便利です https://github.com/padraic/mockery Laravel Testing Decoded 日本語版 https://leanpub.com/laravel-testing-decoded-japanese Laravelに限らず、テスト本としてオススメです

Page 31: Laravel_オープンソースカンファレンスhokkaido_JP_2014

LaravelHHVMでも動作します Vagrant HHVM Hack Nginx Laravelの組み合わせでもOK https://github.com/kernelcurry/vhhnl AngularJS, backbone.js, ember.js, Knockout.js, react.jsなどの javascriptフレームワークとも簡単に連携可能

cache/sessionはmemcached, Redisがデフォルトで利用可能 大規模なトラフィックにも対応できたり、 websocketを組み合わせたリアルタイムコンテンツ開発も簡単

簡単に実装できるwebsocketパッケージもありますhttps://github.com/sidneywidmer/Latchet

Page 32: Laravel_オープンソースカンファレンスhokkaido_JP_2014

主な機能紹介

Page 33: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ご紹介する各機能や サンプルコードは

https://github.com/ytake/Tutorial.Application で公開しています

Page 34: Laravel_オープンソースカンファレンスhokkaido_JP_2014

RouterLaravelのルーターは多くのMVCフレームワークの様な、 domain/コントローラー/メソッド/ の様な形式ではありません。 HTTPメソッドとコントローラー、メソッドを組み合わせ、 自由に定義する事ができ、 routerだけで小さなアプリケーションを作る事も可能です

Route::get(‘uri’,‘controller@method’)Route::post(‘uri’,‘controller@method’)Route::put(‘uri’,‘controller@method’)Route::delete(‘uri’,‘controller@method’)

Page 35: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Router

Sinatra の様なルーターClosure利用で簡単な記述方法

Page 36: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Controller特に特筆する様なものはありませんが、至ってシンプルです

1.RESTに対応したコントローラー 2.簡単なAPI設計 3.function名はhoge_index など 制約はありません

Page 37: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Viewbladeテンプレート / Smartyやtwigも使用できます

Smarty/Twig等と同様に

レイアウト対応等も簡単

Page 38: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ModelLaravelではModelに Eloquent(エロクアント), query builder, ベーシックなPDO 3種が用意されています !ルーターと同様にトランザクションもClosureを用いて実装したり、 Eloquentを使って簡単に実装したり、 複雑なクエリはベーシックなものを利用したり、 実装内容などで選択が可能です。 !パッケージには、mongoDBやOracleに対応させたもの等があります

Page 39: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Model(Query builder)

cacheと組み合わせたり、

簡単なpagerが利用できます

Page 40: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Model(Eloquent)

Page 41: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Model(ベーシック)PDOを利用しているので、 同様にSQL文を記述します

(プリペアドステートメント) ただし、pagerやcacheは組み合わせて実装します(簡単)

Page 42: Laravel_オープンソースカンファレンスhokkaido_JP_2014

FacadesLaravelのFacade(ファサード)は、 本来の複雑な処理を隠して、シンプルなI/Fを提供するものではなく、 プロキシパターン(GoF)と思って下さい !他のフレームワークとは若干アプローチ方法が異なる記述方法を適用

Route::get() Input::get() View::make()

App::make()Redirect::to()

Session::get()

Page 43: Laravel_オープンソースカンファレンスhokkaido_JP_2014

英語の文章を書く様な記述方法 それまでに無いシンタックス 簡単な、わかりやすい記述方法

Page 44: Laravel_オープンソースカンファレンスhokkaido_JP_2014

あれstatic function?

静的なメソッドではありません 

Page 45: Laravel_オープンソースカンファレンスhokkaido_JP_2014

class_aliasと__callStaticを 組み合わせてコンテナからインスタンスを

取得

$thisを用いた記述が好みでしたら、その様に記述する事も可能です

Page 46: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ただしフレームワーク自体の 実行速度は少し遅いです

Page 47: Laravel_オープンソースカンファレンスhokkaido_JP_2014

シンプルで簡単な記述方法で、 初めての方にも優しく

Page 48: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Closureと組み合わせて、 独特な記述方法を提供

Page 49: Laravel_オープンソースカンファレンスhokkaido_JP_2014

コ、コンテナ?

Page 50: Laravel_オープンソースカンファレンスhokkaido_JP_2014

でたな、コンテナ

Page 51: Laravel_オープンソースカンファレンスhokkaido_JP_2014

クラスで実装すべきメソッドたちを定義して(interface)、 使用するクラスで

直接インスタンスを生成せずに ほかで関連性を定義付けて実行

Page 52: Laravel_オープンソースカンファレンスhokkaido_JP_2014

よくあります !

このクラスは、 あれのインスタンスがないと 動かないんだよねぇ・・

Page 53: Laravel_オープンソースカンファレンスhokkaido_JP_2014

interface

Page 54: Laravel_オープンソースカンファレンスhokkaido_JP_2014

controller

クラスは何でもいいけど

getUser()があればイイヨ!

Page 55: Laravel_オープンソースカンファレンスhokkaido_JP_2014

getUserがあればDBでも

Page 56: Laravel_オープンソースカンファレンスhokkaido_JP_2014

getUserがあればRedisでも

Page 57: Laravel_オープンソースカンファレンスhokkaido_JP_2014

生成するインスタンスを 決定するために どこかで設定しよう

Page 58: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelならそんなことも 簡単解決 学んで習得

Page 59: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelはシンプル且つ、 手軽で簡単、

強力なDIを備えています

Page 60: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Ioc ContainerLaravelでは、 コンストラクタ・インジェクションによる依存性の解決方法を提供 依存をクラス外で定義し、実行時に定義したクラスが呼ばれます !クラスそのものを入れ替える事はもちろん、 interfaceを用いて拡張性のある開発が可能です テストしやすい環境を提供 !

Page 61: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Ioc Container関係性を定義するだけ シンプル簡単

Page 62: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Ioc Container依存の解決は、コンストラクタで指定されたものだけではなく、 さらにその先の依存も解決してくれます !コントローラーからモデルを利用する場合等に利用してみましょう !その他に、シンプルにインスタンスを生成したり、シングルトンなども 提供されています !LaravelはほとんどがIocContainerを使って、 それぞれの機能をコンテナに格納して、 必要なときに必要なインスタンスを生成する様に活用されています フレームワーク内のソースを読む事で色々な発見がありますので、 是非目を通してみて下さい

Page 63: Laravel_オープンソースカンファレンスhokkaido_JP_2014

他にも色んな機能がありますが、 どれも簡単でシンプルな機能、

APIです

Page 64: Laravel_オープンソースカンファレンスhokkaido_JP_2014

デモ1 シンプルなアプリケーション https://github.com/ytake/Tutorial.Application

をダウンロードして実際に覗いてみて下さい ログイン、管理画面、投稿や簡単なフィルターを実装している

簡易ブログ投稿アプリケーションです

Page 65: Laravel_オープンソースカンファレンスhokkaido_JP_2014

その他

Laravelに対応したcapistrano/laravelが公開されています https://github.com/capistrano/laravel !

ホスティングがセットになったforgeというサービスが 公式で開始されました https://forge.laravel.com/

Page 66: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravelで構築されたサービス等が載っています 日本国内のものは無いと思いますが、作ったら登録してみましょう! http://builtwithlaravel.com/ !

Laravelをベースにした、協力なCMSがリリースされています GitHubでも公開されていますので、是非ご覧下さい http://octobercms.com/

その他

Page 67: Laravel_オープンソースカンファレンスhokkaido_JP_2014

開発時のヒント

Page 68: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ポイント1キャッシュや、テンプレートのキャッシュ、 セッション等がapp/storage内に書き込まれます。 インストール後に実行権限を与えてください 「インストールしたけど真っ白!」という場合のほとんどがコレです

このクラスはどこに?モデル = データベース専用ではありません 専用だと思っていると、こういう疑問が必ず起こると思います。 コントローラーを太らせる? いえ、modelsディレクトリを削除して、 自由にディレクトリを構成し直してみてください ドメインモデルパターンを採用して開発すると良いかもしれません

Page 69: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ポイント2現在、インストール後はcomposerのオートローダーで classmapになっていますので、 PSR-0 or PSR-4 に変更するのをおすすめします コントローラーやモデル等クラスを追加する度にcomposer dump-autoloadを叩く必要が有るため、面倒臭いです またパフォーマンスも向上します。

Laravel4のエイリアスローダーはグローバル名前空間で有効になる為、 コントローラーやモデル等、名前空間を利用する場合は Facadeの先頭に\を付けなければなりません !公式通りの記述方法がお好みであれば、useを記述するか、 パッケージを利用するなどで簡単に対応出来ます

Page 70: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ポイント3高品質なLaravelパッケージもあわせて使ってみましょうジェネレーター : Laravel-4-Generators セキュリティ周り : cartalyst/sentry IDE コード補完 : barryvdh/laravel-ide-helper *Laravelはその記述方法から、IDEを使用しても補完されません。 ide_helperは実装の大きなヒントになりますので、導入をお勧めします

Ioc container, 依存をまとめて定義するproviderを使ってみる お気に入りのライブラリがあれば、ごっそり入れ替えてみる、 フォルダ構成も好みに変更する事で、 リファレンスに記載されているだけが全てではないLaravelの利用方法を見つける事ができます。 !Twitterで困ったアピールすると誰かが答えてくれます?

Page 71: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ポイント4Laravelはphp artisan optimize でフレームワークのソースをcompileして動きます ユーザーが実装したクラスは対象になりませんので、 app/config/compile.php に compileしたいクラスを追記してみましょう

Page 72: Laravel_オープンソースカンファレンスhokkaido_JP_2014

新しい技術を利用する場合も モダンなPHP+Laravelで簡単実装

Page 73: Laravel_オープンソースカンファレンスhokkaido_JP_2014

デモ2 websocketアプリケーション

https://github.com/ytake/laravel-websocket

Page 74: Laravel_オープンソースカンファレンスhokkaido_JP_2014

日本語ドキュメント

Laravel 4 ドキュメント+ (https://leanpub.com/laravel4plus) Laravel: Code Bright (https://leanpub.com/codebright-jp) Laravel 4 Cookbook (https://leanpub.com/laravel4cookbook-jp) Laravel: From Apprentice To Artisan (https://leanpub.com/laravel-jp) Laravel Testing Decoded (https://leanpub.com/laravel-testing-decoded-japanese) Implementing Laravel (https://leanpub.com/implementinglaravel-jpn) Laravel4でこなすプログラム術 (https://leanpub.com/gsd-laravel-jp) !!Laravel 4 Cookbook, Implementing Laravel, Laravel Testing Decodedの3つは、 これさえあれば何でも作れる!できる!というくらいの良い内容です。

内容の良い電子書籍が多数あります

Page 75: Laravel_オープンソースカンファレンスhokkaido_JP_2014

わからない事を日本語で聞きたい・・

Page 76: Laravel_オープンソースカンファレンスhokkaido_JP_2014

日本語訳したサイト

Laravel フォーラム : 日本語で質問が!ミートアップや勉強会の募集にもお使いください http://io.laravel.jp/forum !Laravel トリックス : Tipsサイト http://tricks.laravel.jp !海外フォーラムは活発ですが、日本ではあまり活用されていないので是非お願い致します。 !近々レシピサイトの翻訳します!

Page 77: Laravel_オープンソースカンファレンスhokkaido_JP_2014

Laravel ユーザーによる国内勉強会Laravel Meetup Tokyo http://laravel.doorkeeper.jp/ fukuoka http://fukuokaphp.doorkeeper.jp/events/10120 Laravel in action http://connpass.com/series/750/ !他にも各地でのカンファレンスや、PHPカンファレンス等でもLaravel話題が出てきます !気軽に使ってみて困ったことや疑問は、勉強会やフォーラム、twitter等で聞いてみて下さい。

Page 78: Laravel_オープンソースカンファレンスhokkaido_JP_2014

ご清聴ありがとうございました

Yuuki Takezawa