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
Laravelを使った既存WebサービスのAPI化
Search
Futoshi Endo
September 13, 2018
Programming
3.8k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelを使った既存WebサービスのAPI化
Laravel MeetUpTokyo #11で発表した内容になります。
https://laravel-meetup-tokyo.connpass.com/event/93838/
Futoshi Endo
September 13, 2018
More Decks by Futoshi Endo
See All by Futoshi Endo
【PHPカンファレンス小田原2026】Webアプリケーションエンジニアにも知ってほしい オブザーバビリティ の本質
fendo181
0
1.4k
【PHPerKaigi2026】OpenTelemetry SDKを使ってPHPでAPMを自作する
fendo181
2
420
AI時代におけるドメイン駆動設計 入門 / Introduction to Domain-Driven Design in the AI Era
fendo181
0
1.3k
【PHPカンファレンス小田原2025】New RelicのAPMを活用したECサービスにおけるメール遅延解消の舞台裏
fendo181
1
4.3k
PHP8の機能を使って堅牢にコードを書く
fendo181
7
8.2k
Introduction to Typing Practice
fendo181
0
1.2k
PsySHを使った効率的なデバッグ方法について / How debug efficiently using PsySH
fendo181
1
2.6k
PHP8によるデザインパターン入門 / Introduction to Design Patterns with PHP8
fendo181
2
4.9k
PHPerがGoに入門してみた/PHPer introduction to Go.
fendo181
0
6k
Other Decks in Programming
See All in Programming
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
2.4k
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
220
OSINT for SRE: 学術論文とポストモーテムから探る システム障害の共通パターン / SRE NEXT 2026
tomoyk
1
3.5k
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
5.8k
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
140
광주소프트웨어마이스터고등학교 DevFest 특강 - 바이브 코딩 시대에서 주니어 개발자로 살아남는 방법
utilforever
1
110
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
1
2.4k
Contextとはなにか
chiroruxx
1
390
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
250
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
130
1年で人数1.5倍、PR数5.5倍増。 品質とアウトカムはどうなったか、 何が効いたか
ike002jp
0
130
act1-costs.pdf
sumedhbala
0
210
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
12k
エンジニアに許された特別な時間の終わり
watany
107
250k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
The Curious Case for Waylosing
cassininazir
1
430
Facilitating Awesome Meetings
lara
57
7k
Paper Plane (Part 1)
katiecoart
PRO
0
9.6k
It's Worth the Effort
3n
188
29k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
WCS-LA-2024
lcolladotor
0
680
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Transcript
ԕ౻ଠಙ(.01FQBCP *OD -BSBWFM.FFU6Q5PLZP -BSBWFMΛͬͨ طଘ8FCαʔϏεͷ"1*Խ
ԕ౻ଠಙ ͑ΜͲ͎ʔ !'FOEP 4)ࣄۀ෦(PPQFάϧʔϓ8FCΤϯδχΞ @Fendo181 @Fendo181
ɾ؆୯ʹࣗͷϗʔϜϖʔδ͕࡞Ͱ͖Δ ɾࠓͰαʔϏεՔಇͯ͠
-VNFOͰݎ࿚ͳ"1*Λઃܭ͢Δɻ ʲ༁ʳLaravelΛ5.6͔Β5.6.30ʹΞοϓάϨʔυ͢Δ(Security Release) ͜Ε·Ͱ͖ͬͯͨࣄ
ࠓ͓͍ͨ͠ࣄ
طଘͷ༷ʹ߹Θͤͨ3&45GVM"1*Λ ৽نͰ։ൃ͢Δ ࠓ͓͍ͨ͠ࣄ طଘͷ8FCαʔϏεΛ"1*Խͤ͞Δ ৽͘͠"1*Λ࡞Δ 8FC"QQ ˞ҎԼ"1*ͱ͍͏දه3&45GVM"1*ͱ͠·͢ɻ
എܠ
͋Δ৽ػೳͷ։ൃͷҝ ৽نͰ"1*Λ։ൃ͢Δࣄʹͳͬͨɻ എܠ
࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ ࣮͢Δલ എܠ
εςʔλείʔυ Ͳ͏͢Δͷ͔ ΤϥʔϨεϙϯε Կ͕ฦͬͯ͘Δͷ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ ϦιʔεԿ͕͋Δͷ ઃܭஈ֊ ࣌ؒ Δ͖ࣄ
Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ എܠ
εςʔλείʔυ Ͳ͏͢Δͷ͔ ͲΜͳΤϯυϙΠϯ τ͕ඞཁͳͷ σΟϨΫτϦߏͲ͏͢Δͷ ςετ ࣮ஈ֊ طଘͷ%#ʹͲ͏ͬͯ߹ΘͤΔͷ ϦιʔεԿ͕͋Δͷ ΤϥʔϨεϙϯε
Կ͕ฦͬͯ͘Δͷ ࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτఆٛ Ϩεϙϯεͷఆٛ ΤϯυϙΠϯτͷ࣮ എܠ
։ൃཁ݅ ɾ%#طଘͷͷΛѻ͏ ɾಠࣗͷςʔϒϧن ɾѻ͏%#͕ͭଘࡏ͢Δ എܠ ɾ3&45GVMͳ"1*Λ৽نͰ։ൃ ۀͰ։ൃະܦݧ
"1*։ൃߟ͑ΔࣄɺΔࣄଟ͗͢ʜ എܠ
͜ͷΑ͏ͳঢ়گͰ ཁ݅Λຬͨͯ͠"1*Λ։ൃ͍ͨ͠ എܠ
എܠ
എܠ ͳͥ-BSBWFMͳͷ͔ ɾυΩϡϝϯτͷใྔ͕ଟ͍ɻ3FBE%PVCMFΛݟΕղܾ͢Δɻ ࣾͰ૬ஊͰ͖Δਓ͍Δɻ ɾೝূͱೝՄɾϩάͷಋೖඞਢͰ͋Γɺͦ͜Ͱ᪴͘ͷࠔΔ -BSBWFMʹඪ४ೝূϥΠϒϥϦͷ1BTTQPSU͕͑Δ ɾڧྗͳσʔλϕʔεΫΤϦʔϏϧμʔ͕͋ΔͷͰɺෳࡶͳ ςʔϒϧεΩʔϚͰରॲͰ͖Δɻ
എܠ ࣌ؒ Δ͖ࣄ Ϧιʔεఆٛ ΤϯυϙΠϯτઃܭ Ϩεϙϯεͷઃܭ ΤϯυϙΠϯτͷ࣮ ఆٛ ࣮
ఆٛɾ࣮ͷ྆໘͔Β طଘ8FCαʔϏεΛ-BSBWFMͰ "1*Խ͢Δ͓͠·͢ɻ എܠ
ΞδΣϯμ
ΞδΣϯμ ɾ4XBHHFSͰ"1*ͷυΩϡϝϯτԽ ɾσΟϨΫτϦͷߏΛʹ͚ͯΤϯυϙΠϯτΛ࣮͢Δɻ ɾطଘʹ%#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ5JQT ɾ·ͱΊ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ɾ3&45GVM"1*Λߏங͢ΔͨΊͷΦʔϓϯιʔεͷϑϨʔϜϫʔΫ ɾ+40/͘͠:".-ܗࣜͰهड़͕Ͱ͖Δ ɾϩʔΧϧͰϞοΫαʔόΛ্ཱͪ͛ΔࣄՄೳ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ 4XBHHFS4QFD 4XBHHFS6*
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ͳͥ4XBHHFSΛ࠾༻ͨ͠ͷ͔ ɾҰ൪ͷཧ༝ͱͯ͠ɺΫϥΠΞϯτͱαʔόαΠυͷೝࣝΛ߹ΘͤΔҝ ɾ"1*ଆͰఆٛ͢ΔΑΓΫϥΠΞϯτଆ ͍ਓ ͕ఆٛͨ͠ํ͕ྑ͍ 4XBHHFS BQJWIPHF Λୟ͍ͨΒ ˓˓ͳϨεϙϯε
͕ཉ͍͠ ΫϥΠΞϯτଆ ɾ:".-ڞ௨ͰಡΊΔҝɺ͓ޓ͍ʹมߋमਖ਼͕͍͢͠ αʔόଆ ˓˓ͳϨεϙϯε ͕ฦͬͯ͘ΔΑ͏ ʹϨεϙϯεΛ ΈཱͯΑ͏
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ɾΤϯυϙΠϯτΛՃ͢Δʹίʔυ͕ੌ·͘͡ݟͮΒ͘ͳΔ ɾมߋ͠Α͏ʹɺߦ͙Β͍͑ͯ͘ΔͱͰͬͯमਖ਼Ͱ͖ͳ͘ͳΔʜ ɾ4XBHHFS1)1-4XBHHFSߟ͕͑ͨίʔυͷՄಡੑ͕Լ͕Δ ͦͦΫϥΠΞϯτଆ͕͍͡Εͳ͍ 4XBHHFSͱݴ͑ʜ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ JOEFYZNM SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ $ tree -I node_modules . ├── definitions │ ├──author.yml
├── index.yml ├── paths │ ├── account │ │ └── authors.yml └── resolve.js ɾEFpOJUJPOTσΟϨΫτϦҎԼʹ.PEFMΛఆٛ͢Δ ɾQBUITσΟϨΫτϦҎԼͷϑΝΠϧʹΤϯυϙΠϯτͷ༷Λఆٛ͢Δ SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ SFGΛ༷ͯ͠EFpOJUJPOTͱQBUITΛׂͯ͠ཧ͢Δ JOEFYZNM BVUIPSTZNM QBUITσΟϨΫτϦ BVUIPSZNM EFpOJUJPOTσΟϨΫτϦ
4XBHHFSΛͬͨ"1*ͷυΩϡϝϯτԽ ͜ΕΒΛ݁߹ͤͯ͞JOEFYZNMΛ࡞͢Δ const resolve = require('json-refs').resolveRefs; const YAML = require('js-yaml');
const fs = require('fs'); const root = YAML.load(fs.readFileSync('index.yml').toString()); const options = { loaderOptions : { processContent : function (res, callback) { callback(undefined, YAML.safeLoad(res.text)); } } }; resolve(root, options).then(function (results) { console.log(YAML.dump(results.resolved)); }); node resolve.js > index_all.yml # ϑΝΠϧ໊ҙ SFTPMWFKT ৄࡉ4XBHHFS༻ϑΝΠϧΛׂͯ͠هड़͠Α͏ ׂ͞ΕͨϑΝΠϧ͕౷߹͞Εͯग़ྗ͞ΕΔ
Λ͚ͨσΟϨΫτϦߏ
3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ
%#ૢ࡞ ϨεϙϯεΛ࡞ ϨεϙϯεΛฦ͢ ɾͭͷΤϯυϙΠϯτʹରͯ͠ɺͭͷ$POUSPMMFSͰରԠΛߦ͏ ɾ(&5BQJWIPHF )PHF$POUSPMMFS ˞ఏڙ͢ΔαʔϏεͷڥʹΑͬͯมΘΔҝɺ͋͘·ͰͭͷྫͰ͢ʂ ɾ1045BQJWIPHF Λ͚ͨσΟϨΫτϦߏ #FGPSF
├── app ├── Http │ ├── Controllers │ │ └──
HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── routes ├── api.php Λ͚ͨσΟϨΫτϦߏ
SPVUFTBQJQIQ BQQ)UUQ)PHF$POUSPMMFSQIQ Λ͚ͨσΟϨΫτϦߏ Route::prefix('api/v1')->group(function () { Route::get('/hoges', 'Hoge@index'); Route::get(‘/hoges/1', 'Hoge@show');
Route::post(‘/hoges', 'Hoge@store'); Route::put(‘/hoges/1', 'Hoge@update'); Route::delete(‘/hoges/1', 'Hoge@delete'); });
3PVUFS ᶃ(&5IPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶆ
%#ૢ࡞ ϨεϙϯεΛ࡞ ϨεϙϯεΛฦ͢ ɾஈʑͱ$POUSPMMFS͕ංେԽͯ͘͠Δͷ͕ݟ͑ͯ͘Δʜ Λ͚ͨσΟϨΫτϦߏ
Λ͚ͨσΟϨΫτϦߏ Ͳ͏ͨ͠ͷ͔ʜ
3PVUFS ᶃ(&5BQJWIPHF .JEEMFXBSF 3FRVFTU $POUSPMMFS 3FTQPOTF .PEFM ᶄೝূ ᶅόϦσʔγϣϯ ᶇ
ϨεϙϯεΛฦ͢ 4FSWJDF ɾϏδωεϩδοΫΛ"QQ4FSWJDFΓग़͢ ɾ(&5BQJWIPHF )PHF$POUSPMMFS!JOEFY ᶆ %#ૢ࡞ ϨεϙϯεΛ࡞ ɾ$POUSPMMFSʹϏδωεϩδοΫΛॻ͔ͣʹ)551ͷؔ৺ࣄʹूதͤ͞Δɻ ɾϧʔςΟϯάαʔϏεΫϥε -JTU4FSWJDFQIQ ɾ1045BQJWIPHF )PHF$POUSPMMFS!TUPSF $SFBUF4FSWJDFQIQ Λ͚ͨσΟϨΫτϦߏ "GUFS
├── app ├── Http │ ├── Controllers │ │ └──
HogeController.php └── Requests │ └── HogeRequest.php └── Hoge.php ├── Servicies └── Hoge │ └── ListService.php #GET Ұཡ │ └── ShowService.php #GET ৄࡉ │ └── CreateService.php #POST │ └── DeleteService.php #DELET ├── routes ├── api.php Λ͚ͨσΟϨΫτϦߏ
BQQ4FSWJDFT)PHF-JTU4FSWJDFQIQ Λ͚ͨσΟϨΫτϦߏ ɾ"QQ4FSWJDFͰΤϯυϙΠϯτΛୟ͍ͨࡍͷϏδωεϩδοΫͷॲཧΛ٧ΊΔ
Λ͚ͨσΟϨΫτϦߏ ɾ$POUSPMMFSͰ͋͘·ͰϨεϙϯεΛKTPOͰฦ͚ͩ͢ʹప͢Δ
%#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ FOWͰઃఆΛՃ͢Δ # 1ͭΊͷDB DB_CONNECTION=mysql1 DB_HOST=database DB_PORT=3306 DB_DATABASE=database_1 DB_USERNAME=hoge
DB_PASSWORD=secret # 2ͭΊͷDB DB_CONNECTION_2=mysql2 DB_HOST_2=database DB_PORT_2=3306 DB_DATABASE_2=database_2 DB_USERNAME_2=fuga DB_PASSWORD_2=secret FOW
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpHaEBUBCBTFQIQʹઃఆΛՃ͢Δ # 2ͭΊͷDBͷઃఆΛՃ͢Δ 'mysql2' => [ 'driver' => 'mysql',
'host' => env(‘DB_HOST_2‘, '127.0.0.1'), 'port' => env(‘DB_ACC_PORT_2', '3306'), 'database' => env(‘DB_DATABASE_2', 'forge'), 'username' => env(‘DB_USERNAME_2', 'forge'), 'password' => env(‘DB_PASSWORD_2', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], DPOpHaEBUBCBTFQIQ ѻ͏%#͕ෳଘࡏ͢Δ߹
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ $date = DB::connection(env(‘DB_CONNECTION_2’)) ->table(’t_name’) ->get() NZTRMͷઃఆͰ%#ʹଓͨ͠ঢ়ଶͰσʔλΛऔಘ͢Δࣄ͕ՄೳͱͳΔ FOW ѻ͏%#͕ෳଘࡏ͢Δ߹
˞FOW Λݺͼग़͢ࡍͷҙ %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ ৄࡉ:Laravelͷ .env ͷconfig()ܦ༝Ͱ͏ɻ <?php class HogeController extends Controller
{ public function getHoge() { dd( env('MY_ENV'), config('my-app.my-env') ); } } ˞։ൃڥͰྑ͍͕DPOpHDBDIFͨ͠ঢ়ଶͰͷຊ൪ڥʹ͓͍ͯFOW ͕Λฦ͞ͳ͍ɻ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ˞։ൃڥͰྑ͍͕DPOpHDBDIFͨ͠ঢ়ଶͰͷຊ൪ڥʹ͓͍ͯFOW ͕Λฦ͞ͳ͍ɻ ѻ͏%#͕ෳଘࡏ͢Δ߹ ৄࡉ:Laravelͷ .env ͷconfig()ܦ༝Ͱ͏ɻ null "Full" php
artisan config:cache FOW Ͱݺͼग़͢ͱOVMM͕ฦͬͯ͘Δɻ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpH Λͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ Psy Shell v0.9.8 (PHP 7.2.1 —
cli) by Justin Hileman >>> dump(config('database.connections.mysql2')) array:12 [ "driver" => "mysql" "host" => "database" "port" => "3306" "database" => "database_2" "username" => "fuga" "password" => "secret" "unix_socket" => "" "charset" => "utf8" "collation" => "utf8_general_ci" "prefix" => "" "strict" => true "engine" => null ]
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ DPOpH Λͬͯݺͼग़͢Α͏ʹ͢Δ ѻ͏%#͕ෳଘࡏ͢Δ߹ $date = DB::connection(config(‘database.connections.mysql2’)) ->table(’t_name’) ->get()
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ +------------------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key
| Default | Extra | +------------------------+--------------+------+-----+-------------------+-----------------------------+ | user_id | int(20) | NO | PRI | NULL | auto_increment | | name | varchar(32) | YES | MUL | NULL | | | email | varchar(255) | YES | MUL | NULL | | | state | tinyint(4) | YES | MUL | NULL | | | make_date | datetime | YES | MUL | NULL | | | update_date | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +------------------+--------------+------+-----+-------------------+-----------------------------------+ U@VTFSςʔϒϧ TUBUF༗ޮ TUBUFແޮ (&5BQJVTST TUBUFFOBCMFE (&5BQJVTST TUBUFEJTBCMFE TUBUFFOBCMFEͳ͍Αʂ (&5BQJVTST TUBUFBMM "1* ΫϥΠΞϯτ
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ ৄࡉ-BSBWFM&MPRVFOUɿϛϡʔςλ
ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ (&5BQJVTST TUBUFFOBCMFE TUBUFFOBCMFE ΫϥΠΞϯτ "1* TUBUF %# ࠓճͷέʔεͰTUBUFΛม͍ͨ͠ͷͰΞΫηαΛ࡞Δ
HFU4UBUF"UUSJCVUF $user = App\User::all(); # state=1ͷuserΛऔಘ͢ΔΑ͏ʹࣗಈͰม͢Δ $firstName = $user->state(’enabled’)->get()
%#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ
$users = User::where('user_id', $this->request->userId) ->state(User::toStateKey($state)) ->limit($limit) ->offset($offset) ->get(); %#༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ ΞΫηαɾϛϡʔςʔλΛ͏ࣄͰΫΤϦʔύϥϝʔλͰडऔͬͨΛ
ࣗಈͰ&MPRVFOͰ͑ΔΑ͏ʹͯ͠σʔλΛऔಘ͢Δࣄ͕Ͱ͖Δɻ TUBUFFOBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม͞ΕΔ TUBUFEJTBCMFE͕ૹΒΕͯ͘ΔͱTUBUFʹม͞ΕΔ TUBUFBMM͕ૹΒΕͯ͘ΔͱɺԿ͠ͳ͍ͷͰࣗಈͰ TUBUFPSTUBUFͷσʔλΛऔಘ͢Δɻ ΞΫηαΛͬͯ&MPRVFOUͰѻ͑Δܗʹ͢Δɻ
wѻ͏%#͕ෳଘࡏ͢Δɻ w&MPRVFOUͰΞΫηαΛఆٛͯ͠ΫΤϦʔύϥϝʔ λ͔ΒडऔͬͨΛࣗಈతʹม͢Δɻ %#ͷ༷ʹ߹Θͤͯ-BSBWFMଆͰௐ͢Δ
·ͱΊ
·ͱΊ ɾ3&45GVM"1*Λ͔Β࡞͢ΔͷେมͳͷͰɺ·ͣ ΫϥΠΞϯτଆͱ૬ஊ͠ͳ͕ΒϨεϙϯεΛ͔ͬ͠Γઃܭ͢Δɻ ɾطଘͷ%#ͷ༷ʹରͯ͠-BSBWFMͳΒɺඋΘͬͯΔػೳΛ͍͜ͳ͢ ɹ͚ͩͰ͋ΔఔͷࣄͰ͖Δɻ ɾͪΐͬͱ͍͠ࣄΛΔ߹ΛΘ͚ΔΑ͏ʹ͢Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ ϓϩϑΟʔϧGFOEP1SPpMF