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
WordPressローカル開発環境をつくろう — WP-CLI + Composer —
Search
Takashi Kitajima
March 06, 2017
Programming
3.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WordPressローカル開発環境をつくろう — WP-CLI + Composer —
Takashi Kitajima
March 06, 2017
More Decks by Takashi Kitajima
See All by Takashi Kitajima
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1.5k
Snow Monkey&unitone から見た WordPress エディターの変遷
inc2734
0
200
Snow Monkey CM
inc2734
0
120
メンテナンス性を考慮した CSS 設計
inc2734
0
390
Snow Monkey とは
inc2734
0
1.4k
WordPress_テーマのつくりかた.pdf
inc2734
4
610
受託開発者だった僕が WordPress の有料テーマ開発者になって学んだこと
inc2734
1
1.1k
Snow Monkey(WordPress) による web コンテンツ制作の新しいカタチ【ビジネスパーソン向け】
inc2734
0
130
Snow Monkey とコミュニティ
inc2734
0
710
Other Decks in Programming
See All in Programming
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
110
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.7k
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
110
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
リアルな遅延を測る仕様
kota_yata
1
120
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
130
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
410
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
520
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
310
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
300
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
270
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1k
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
480
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Visualization
eitanlees
152
17k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
A Soul's Torment
seathinner
6
3.4k
My Coaching Mixtape
mlcsv
0
240
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Site-Speed That Sticks
csswizardry
13
1.4k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
370
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
8PSE1SFTTϩʔΧϧ։ൃڥΛͭ͘Ζ͏ 81$-* $PNQPTFS ͪͺͳɻ
ΩλδϚλΧγ !JOD ϑϦʔϥϯε ʙ 8FCσβΠφʔϓϩάϥϚʔ 8PSE1SFTTϓϥάΠϯ
.881'PSNɺ4NBSU$VTUPN'JFMETʜ 8PSE1SFTTςʔϚ )BCBLJSJɺ.JNJ[VLVʜ 4BTT4UZMVT$44ϑϨʔϜϫʔΫ #BTJT
8PSE1SFTTίϛϡχςΟͱͷؔΘΓ 8PSE#FODI࡚ϞσϨʔλʔ 8PSE$BNQ5PLZP-5 8PSE$BNQ,BOTBJ࣮ߦҕһϋϯζΦϯ 8PSE$BNQ,BOTBJ࣮ߦҕһεϐʔΧʔ
8PSE$BNQ5PLZPεϐʔΧʔ FUD
ϩʔΧϧ։ൃڥ͕ͳ͍ͱʜ w ϩʔΧϧ։ൃڥʜαʔόʔ্Ͱͳࣗ͘ͷϚγϯͷ தʹ͋Δ։ൃ༻ͷڥͷ͜ͱ w ຖճຖճ͍͍ͪͪ'51ͰϑΝΠϧΛαʔόʔʹ্͛ͨΓ %#ͷΤΫεϙʔτΠϯϙʔτΛͯ֬͠ೝ͢Δͷ࣌ؒ ͷແବ w αʔόʔͷϑΝΠϧΛૢ࡞͢Δʹͯ͠ෳਓͰಉ
࣌ʹ৮ΔͱઌฦΓͷةݥੑ͕ʜ
ͳͥϩʔΧϧ։ൃڥΛ͏ͷ͔ w ϩʔΧϧʹ։ൃڥ͕͋Ε͙͢ʹಈ࡞֬ೝͰ͖Δ w ݱʹ(JU͕͋ΔͷͰෳਓͰ࡞ۀͨ͠ͷΛϚʔδ ͯ͠αʔόʔ্ʹө͢Δͷ؆୯
None
.".19".11 w 8FC੍࡞ʹ͓͚ΔҰൠతͳϩʔΧϧ։ൃڥͱ͍͑ .".19".11 w 8PSE1SFTTΛμϯϩʔυͯ͠ɺσʔλϕʔε༻ҙͯ͠ ͱ͔ɺ্ཱͪ͛Δ·Ͱ͕ΊΜͲ͍͘͞ w 8PSE1SFTTͰͷ։ൃʹಛԽͨ͠ઐ༻ͷϩʔΧϧ։ൃڥ ͕͍Ζ͍Ζ͋Δ
8PSE1SFTTͷϩʔΧϧ։ൃڥ
None
7$$8ɹIUUQWDDXDD w 7BHSBOUΛͬͨ8PSE1SFTTͷϩʔΧϧڥ w ʮ7$$8ͷΰʔϧɺ୯ʹ։ൃڥΛखͬऔΓૣ͘༻ҙͰ ͖ΔΑ͏ʹ͢Δͱ͍͏͜ͱ͚ͩͰͳ͘ɺ8PSE1SFTT͕ಈ࡞ ͢ΔڥͦͷͷΛɺϫʔΫϑϩʔؚΊͯڞ༗͢Δ͜ͱʯ w ศརͳ։ൃऀ͚πʔϧ 81$-*ɺ.BJM$BUDIFSɺ8PSENPWFʜ
w ڥ࡞Δͷʹʙ͘Β͍͔͔Δ
None
8PDLFSɹIUUQTXDLSHJUIVCJP w %PDLFSΛͬͨ8PSE1SFTTͷϩʔΧϧڥ w ʮ*55",&4+6454&$0/%450$3&"5&"/&80/&ʯ w ؆୯ͳίϚϯυͰΆΜΆΜ8PSE1SFTTڥΛ࡞ͬͨΓফ͠ ͨΓͰ͖Δ
None
-PDBMCZ'MZXIFFMɹIUUQTMPDBMHFUqZXIFFMDPN w 8PSE1SFTTಛԽܕͷ.".19".11తڥ w αΠτ͝ͱʹ1)1ɺ.Z42-ͷόʔδϣϯɺ 8FCαʔόʔ "QBUDIPS/HJOY ΛબՄೳ w ศརͳ։ൃऀ͚πʔϧ
81$-*ɺ.BJM$BUDIFSʜ w .BD൛ͱ8JOEPXT൛ʢ#FUBʣ
<൪֎ฤ>ϏϧτΠϯαʔόʔ w Ϛγϯͷ1)1ͱ.Z42-ΛͬͯϩʔΧϧڥΛ্ཱͪ͛Δ w ͜Εผʹ8PSE1SFTTಛԽͰԿͰͳ͍Ͱ͕͢͜Ε Λ͍ͬͯ·͢ʜ w .BD#PPL"JSͷ༰ྔ͕ݶքʹ͍͖ۙͮͯͨͷͰ7$$8Λਐ ΊͯϏϧτΠϯαʔόʔͰϩʔΧϧڥΛ࡞ΔΑ͏ʹͨ͠
IUUQTJODPSHCMPH w Ϛγϯ্ͷ.Z42-Λ֤ڥͰڞ༗͢ΔͷͰτϥϒϧͱશαΠ τ͕ࢮ͵
8PSE1SFTTΛ(JUཧ ͢Δͱ͖ͷ
Ͳ͜Λཧ͢Δͷ w υΩϡϝϯτϧʔτ·Δ͝ͱ ˠ8PSE1SFTTίΞɺϓϥάΠϯɺςʔϚશ෦ w XQDPOUFOU·Δ͝ͱ ˠϓϥάΠϯɺςʔϚશ෦ w ࣗ࡞ςʔϚͷΈ
υΩϡϝϯτϧʔτ·Δ͝ͱ w ϝϦοτ w ಉ͡ڥΛ؆୯ʹ࠶ݱͰ͖Δ w σϝϦοτ w ίΞϓϥάΠϯͳͲɺࣗͷॻ͍͍ͯͳ͍ίʔυ ཧରʹͳͬͯ͠·͏
ˠ8PSE1SFTTࣗಈΞοϓσʔτ͕͋ΔͷͰόʔδϣϯཧ͕ ɹࡶʹͳΔ
XQDPOUFOU·Δ͝ͱ w ϝϦοτ w 8PSE1SFTTίΞཧର֎ʹͳΔ w σϝϦοτ w ίΞϓϥάΠϯͳͲɺࣗͷॻ͍͍ͯͳ͍ίʔυ ཧରʹͳͬͯ͠·͏
ˠ8PSE1SFTTࣗಈΞοϓσʔτ͕͋ΔͷͰόʔδϣϯཧ͕ ɹࡶʹͳΔ
ࣗ࡞ςʔϚͷΈ w ϝϦοτ w ࣗͷॻ͍ͨίʔυ͚ͩΛཧରʹͰ͖Δ w σϝϦοτ w ͲͷϓϥάΠϯΛΠϯετʔϧ͢Δ͖͔ɺͦΕΒͷ όʔδϣϯͲΕΛ͍ͬͯΔͷ͔ΛࣗͰѲͯ͠
खಈཧ͠ͳ͚ΕͳΒͳ͍
ͭ·ΓͲΕΊΜͲ͍͘͞
w 8PSE1SFTTαΠτίΞ ϓϥάΠϯ ςʔϚ w ·Δ͝ͱ(JUϦϙδτϦͰཧ ˠطʹཧ͞Ε͍ͯΔίΞϓϥάΠϯͷίʔυ·Ͱ ɹೋॏཧͯ͠͠·͏͜ͱʹͳΔ w
ຊࣗͷॻ͍ͨίʔυ͚ͩཧ͍ͨ͠ ˠίΞϓϥάΠϯόʔδϣϯͰಈ࡞͕มΘΔͷͰ ɹཧ͠ͳ͍Θ͚ʹ͍͔ͳ͍
$PNQPTFS ͦ͜Ͱ
None
$PNQPTFSɹIUUQTHFUDPNQPTFSPSH w 1)1ͷґଘੑཧπʔϧ w ʮશͯͷϓϩδΣΫτύοέʔδͰ͋Δʯ w DPNQPTFSKTPOʹґଘੑΛهड़ ˠίϐϖͯ͠ଞͷϢʔβʔ͕Ϗϧυͯ͠ಉ͡ڥ͕࠶ݱʂ ˠͭ·Γ͜ͷઃఆϑΝΠϧʹॻ͔Εͨʮґଘੑใʯ͑͋͞Ε ɹͦΕΒͷύοέʔδͷʮίʔυʯཧ͢Δඞཁ͕ͳ͍
w ֎෦ύοέʔδશͯ$PNQPTFSͰཧ ˠʮࣗͷॻ͍ͨίʔυʯ͚ͩΛ(JUཧͰ͖Δʂ
None
1BDLBHJTUɹIUUQTQBDLBHJTUPSH w $PNQPTFSͷύοέʔδϦϙδτϦ w $PNQPTFSͰύοέʔδΛΠϯετʔϧ͢Δͱ͖ جຊతʹ1BDLBHJTU͔ΒΠϯετʔϧ͞ΕΔ w ࣗͰ࡞ͬͨύοέʔδ؆୯ʹެ։Ͱ͖Δʂ
جຊతͳDPNQPTFSίϚϯυ # ύοέʔδΛΠϯετʔϧ (ྫ: Symfony Yaml Component) $ composer require
symfony/yaml # ։ൃڥͰ͚ͩ͏ύοέʔδΛΠϯετʔϧ (ྫ: phpunit) $ composer require --dev phpunit/phpunit # composer.jsonɺcomposer.lock ʹهड़͞ΕͨύοέʔδΛΠϯετʔϧ $ composer install # ύοέʔδΛશ෦ߋ৽ $ composer update # ಛఆͷύοέʔδ͚ͩΛߋ৽ (ྫ: phpunit) $ composer update phpunit/phpunit
͍͍ͨ8PSE1SFTTͷϓϥάΠϯςʔϚ͕ 1BDLBHJTUͰެ։͞Ε͍ͯͳ͔ͬͨΒͲ͏͢Μͷʜ
8PSE1SFTT1BDLBHJTU
None
8PSE1SFTT1BDLBHJTUɹIUUQTXQBDLBHJTUPSH w XPSEQSFTTPSH ެࣜϦϙδτϦ Ͱެ։͞Ε͍ͯΔ ϓϥάΠϯςʔϚ͕$PNQPTFSϦϙδτϦͯ͠ ެ։͞Ε͍ͯΔϛϥʔαΠτ w ͭ·ΓɺXPSEQSFTTPSHʹެ։͞Ε͍ͯΔϓϥάΠϯ ςʔϚશͯ$PNQPTFSͰཧͰ͖Δʂ
Ͱ͜ͷล͏ͨΊʹઃఆ͢Δͷ ͦ͘ΊΜͲͦ͘͞͏ʜ
$PNQPTFS8PSE1SFTT%FWFMPQNFOU,JU ͦ͜Ͱʂ
$PNQPTFS8PSE1SFTT%FWFMPQNFOU,JU IUUQTHJUIVCDPNUPSPVOJUDPNQPTFSXQEFWLJU w $PNQPTFSͰ8PSE1SFTTίΞɺϓϥάΠϯɺςʔϚΛ ཧͰ͖Δ8PSE1SFTTͷϩʔΧϧ։ൃڥ w 8PSE1SFTTϏϧτΠϯαʔόʔͱͯ͠ىಈͤ͞Δ͜ ͱ͕Ͱ͖Δ
$PNQPTFS8PSE1SFTT%FWFMPQNFOU,JU Ͱ։ൃڥΛͭ͘Ζ͏
w .BDͳΒϚγϯ্Ͱಈ͔͢ͷ؆୯ɻ Ͱ8JOEPXTʜ w ͱ͍͏͜ͱͰࠓճݪ͞Μʹ࡞͍ͬͯͨ%PDLFSΠ ϝʔδ্Ͱಈ͔͠·͢
ϋϯζΦϯ # ϏϧυΠϯαʔόʔΛىಈˍϒϥβͰ֬ೝ $ composer server # ϏϧυΠϯαʔόʔͷఀࢭ control +
c # ςετσʔλΛΠϯϙʔτ͠Α͏ $ composer import-theme-unit-test
$PNQPTFS8PSE1SFTT%FWFMPQNFOU,JU ΛͬͨςʔϚϓϥάΠϯͷՃํ๏
ϓϥάΠϯͷՃ $ composer require wpackagist-plugin/<Πϯετʔϧ͢ΔϓϥάΠϯͷεϥοά> # MW WP Form
ΛΠϯετʔϧ͢Δྫ $ composer require wpackagist-plugin/mw-wp-form # Smart Custom Fields ΛΠϯετʔϧ͢Δྫ $ composer require wpackagist-plugin/smart-custom-fields
ςʔϚͷՃ $ composer require wpackagist-theme/<Πϯετʔϧ͢ΔςʔϚͷεϥοά> # Lightning ΛΠϯετʔϧ͢Δྫ $ composer
require wpackagist-theme/lightning # Habakiri ΛΠϯετʔϧ͢Δྫ $ composer require wpackagist-theme/habakiri
$PNQPTFSͰ8PSE1SFTTίΞɾ ϓϥάΠϯɾςʔϚΛߋ৽͢Δ
;ͭ͏ʹDPNQPTFSίϚϯυͰ0, # શ෦ߋ৽ $ composer update # ಛఆͷϓϥάΠϯ͚ͩߋ৽ $ composer
update wpackagist-plugin/mw-wp-form # ಛఆͷςʔϚ͚ͩߋ৽ $ composer update wpackagist-theme/habakiri
͜͜·ͰΔͳΒɺ ཧը໘Ͱͷૢ࡞ͳΔ͘ ίϚϯυͰΓ͍ͨ
None
81$-*ɹIUUQXQDMJPSH w 8PSE1SFTTΛίϚϯυͰૢ࡞Ͱ͖Δπʔϧ w ཧը໘͔ΒͰ͖Δ͜ͱجຊతʹԿͰͰ͖Δ w Α͘͏ૢ࡞ઃఆͳͲΛγΣϧεΫϦϓτͱͯ͠·ͱ Ί͓͚ͯࣗಈԽͰ͖ΔͷͰศར w $PNQPTFS8PSE1SFTT%FW,JUΛ͑ࣗಈతʹΠϯε
τʔϧ͞ΕΔ
Α͘͏81$-*ίϚϯυ # ΠϯετʔϧࡁΈͷςʔϚΛ༗ޮԽ $ wp theme activate twentyseventeen # σʔλϕʔεจࣈྻͷஔ
(γϦΞϥΠζରԠ) $ wp search-replace http://127.0.0.1:8080 http://example.com # σʔλϕʔεͷΠϯϙʔτɾΤΫεϙʔτ $ wp db import/export
ϋϯζΦϯɹ؆୯ͳϓϥάΠϯΛͭͬͯ͘ΈΑ͏ # ϓϥάΠϯͷܗΛੜɾ༗ޮԽ # ϢχοτςετɺίʔσΟϯάن४ڌςετɺEditorConfig ੜ͞ΕΔ ! $ wp scaffold
plugin sample-plugin —activate http://localhost:9000/wp-admin # γϣʔτίʔυ [phper] ΛՃ͢ΔϓϥάΠϯΛͭͬͯ͘ΈΑ͏ https://gist.github.com/inc2734/158b59217bee19a2db9b1ba3692a8a6d
ϋϯζΦϯɹ؆୯ͳϓϥάΠϯΛͭͬͯ͘ΈΑ͏ # ϢχοτςετΛ͔͍ͯΈΑ͏ https://gist.github.com/inc2734/6c0920516d9fb909e9b8d1e89c8bff77 # ϢχοτςετΛ࣮ߦͯ͠ΈΑ͏ # PHPUnit ͷΠϯετʔϧ $
composer require --dev phpunit/phpunit # PHPUnit ΛΒͤΔҰ࣌ςετڥͷੜ $ bash ./bin/install-wp-tests.sh wordpress_test root 'hogehoge' localhost latest # PHPUnit ࣮ߦ $ /path/to/wp-content/mu-plugins/vendor/phpunit/phpunit/phpunit
։ൃڥ͚ͭͬͨ͘Ͳ σϓϩΠͲ͏͢Δͷ
w $PNQPTFS8PSE1SFTT%FW,JUͰσΟϨΫτϦԼʹ 8PSE1SFTTͷϑΝΠϧ͕ల։͞ΕΔͨΊɺجຊతʹ ·Δ͝ͱαʔόʔ্ʹΞοϓ͢Ε0, ͨͩ͠XQDPOpHQIQαʔόʔͱϩʔΧϧͰ༰͕ҟͳΔͷͰҙ w Ͱ'51Ͱຖճߋ৽ͨ͠ϑΝΠϧநग़ͯ͠Ξοϓϩʔυ ͢ΔͷΊΜͲ͍͘͞ʜ w
σʔλϕʔεʜQIQ.Z"ENJOʜΊΜͲ͍͘͞ʜ
8PSENPWFɹIUUQTHJUIVCDPNXFMBJLBXPSENPWF w 8PSE1SFTTͷσϓϩΠπʔϧ w ίϚϯυҰൃͰ·ΔͬͱΞοϓϩʔυɺμϯϩʔυ͕ Մೳ w σʔλϕʔεͷ63-ஔࣗಈ w $PNQPTFS8PSE1SFTT%FW,JUͰɺઃఆϑΝΠϧͷ
ܗΛ༻ҙͯ͘͠ΕΔͷͰͦΕΛ͑݁ߏ؆୯ w ৄ͘͠IUUQXXXTMJEFTIBSFOFUJODXQEGFT
ͰॾʑͷࣄͰ݁ߏΑ͘ಈ͔ͳ͘ͳΓ·͢ʜ
#BTI81%FQMPZ ͦ͜Ͱʂ
#BTI81%FQMPZɹIUUQTHJUIVCDPNJODCBTIXQEFQMPZ w ͭ͘Γ·ͨ͠ w γΣϧεΫϦϓτͳͷͰΘΓͱ؆୯ʹಈ͘ ͣ ཁ81$-* w ৄ͘͠
IUUQTHJUIVCDPNJODCBTIXQEFQMPZ