Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Gutenbergで変わる エディタカスタマイズ / wco2018
Search
Hidetaka Okamoto
June 02, 2018
Technology
2.8k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gutenbergで変わる エディタカスタマイズ / wco2018
WordCamp Osaka 2018
Hidetaka Okamoto
June 02, 2018
More Decks by Hidetaka Okamoto
See All by Hidetaka Okamoto
OpenAI APIで API Changelogを要約してみた話 / chatgpt-osaka-1
hideokamoto
0
730
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
150
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
400
Jamstack開発者のための App Runner入門
hideokamoto
1
560
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
500
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.4k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
250
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.2k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Technology
See All in Technology
AIに任せた品質は、誰が見立てるのか - AI時代のテストマネジメント
nakanao
3
3.2k
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
350
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
200
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
160
AIに会社の文脈を理解させる技術~上流工程・非エンジニアにも広げるハーネスエンジニアリング実践~
ochtum
0
140
猫でもわかるKiro Web
kentapapa
1
130
「今盗んで、後で解く」に備える ― AWSのポスト量子暗号入門
yama3133
2
260
AI臭い文章とは何なのか
nasuvitz
12
6.4k
OpenClawでAzure DevOpsのWiki更新を自動化する - クラウドAIだけでは届かない場所へ
yutakaosada
0
110
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
980
音声コミュニティを守るAI監視基盤_ 90%以上の入力削減を支えたServerless設計と運用判断
shuheioka123
0
110
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
110
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
270
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
420
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Transcript
GutenbergͰมΘΔ ΤσΟλΧελϚΠζ WordCamp Osaka 2018 Ԭຊलߴ
ࣗݾհ • Digitalcube Co. Ltd. • WordCamp Kyoto 2017࣮ߦҕ һ
• ྲྀ͠ͷJAWS-UGӡӦϝϯόʔ H i d e t a k a O k a m o t o
GutenbergίΞίϯτϦϏϡʔλʔʢओʹςετܥʣ
ࠓͷ
WordPressͷߘΤσΟλ
Զͨͪͷ͍ͬͯΔΤσΟλ
͜Ε͔ΒͷਓͨͪʹͱͬͯͷΤσΟλʢ༧ఆʣ
Կ͕มΘΔʁ ͜Ε·ͰͷΤσΟλ • PHPͱ͖Ͳ͖JavaScript • ΧελϜϑΟʔϧυΛͬͯը໘ΛΧελϚΠζ After Gutenberg • JavaScriptͱ͖Ͳ͖PHP
• ReactΛͬͯը໘ΛΧελϚΠζ
Զͨͪͷ͍ͬͯͨΤσΟλϓϥάΠϯ https://wordpress.org/plugins/classic-editor/
େมֵ
PHPʢWPؔʣͰͷΧελϚΠζ͔ΒJSϕʔε ͜Ε·ͰͷΤσΟλ • PHPͱ͖Ͳ͖JavaScript • ΧελϜϑΟʔϧυΛͬͯը໘ΛΧελϚΠζ After Gutenberg • JavaScriptͱ͖Ͳ͖PHP
• ReactΛͬͯը໘ΛΧελϚΠζ
GutenbergͰͷΤσΟλΧελϚΠζͷྑ͞ɾͭΒ͞ Gutenbergʹͳͬͯศརʹͳͬͨ͜ͱ • ReactͰΤσΟλΛΧελϚΠζͰ͖Δ͜ͱ Gutenbergʹͳͬͯେมʹͳͬͨ͜ͱ • ReactͰΤσΟλΛΧελϚΠζ͠ͳ͍ͱ͍͚ͳ͍͜ͱ
GutenbergͰͷΤσΟλΧελϚΠζͷྑ͞ɾͭΒ͞ Gutenbergʹͳͬͯศརʹͳͬͨ͜ͱ • ReactͰΤσΟλΛΧελϚΠζͰ͖Δ͜ͱ Gutenbergʹͳͬͯେมʹͳͬͨ͜ͱ • ReactͰΤσΟλΛΧελϚΠζ͠ͳ͍ͱ͍͚ͳ͍͜ͱ
Matt͕̏લʹग़ͨ॓͠@WordCamp US 2015 https://videopress.com/v/cmA03MuQ
GutenbergͰͰ͖Δ ͜ΜͳΤσΟλ
ྫ̍ɿදܗࣜͰͷใೖྗϑΥʔϜ https://gist.github.com/hideokamoto/7b9d77353bd324a6b1fead2a2caf9b7a
ྫ̍ɿೖྗදܗࣜͰɺग़ྗผʹͰ͖Δ https://gist.github.com/hideokamoto/7b9d77353bd324a6b1fead2a2caf9b7a
ྫ̎ɿStep by StepͰࣥචࢧԉ https://gist.github.com/hideokamoto/7b9d77353bd324a6b1fead2a2caf9b7a
ྫ̎ɿϓϨϏϡʔͷϚʔΫΞοϓΠϯλϥΫςΟϒʹ https://gist.github.com/hideokamoto/7b9d77353bd324a6b1fead2a2caf9b7a
ͦͷ΄͔Ͱ͖Δ͜Μͳ͜ͱʢྫʣ • withAPIData()ΛͬͯαΠτͷίϯςϯπΛऔಘ • ΦʔτίϯϓϦʔτͳͲͷೖྗิॿ • σϑΥϧτϒϩοΫΛΧελϜϒϩοΫʹมߋ • ಛఆͷߘλΠϓͰར༻Ͱ͖ΔϒϩοΫΛ੍ݶ
GutenbergͰศརͳ͜ͱɺͭΒ͍͜ͱ ศརͳ͜ͱ • JSϕʔεͳͷͰɺΠϯλϥΫςΟϒͳಈ͖͕͚͍ͭ͢ • ඇಉظ௨৴ɺೖྗʹԠͨ͡දࣔͷมߋಘҙ ͭΒ͍͜ͱ • ͜Ε·Ͱͷϊϋ͕͍͍ͩͨ׆͔ͤͳ͍ •
͝Γ͝ΓʹΧελϚΠζࡁΈͩͱϚΠάϨࣄҊʹͳΔ
Gutenberg Migration Guide https://github.com/danielbachhuber/gutenberg-migration-guide
GutenbergͰ͑Δػೳɾஔ͞Εͨػೳ͕ݟΕΔ https://github.com/danielbachhuber/gutenberg-migration-guide
Ͳ͏มΘΔ͔ͳͲͷΨΠυ͋Δʢਵ࣌Ճʣ https://github.com/danielbachhuber/gutenberg-migration-guide/blob/master/action-media- buttons.md
GutenbergͰ͡ΊΔ ΤσΟλΧελϚΠζ
ΤσΟλͷΧελϚΠζํ๏ • ϓϥάΠϯɾςʔϚͷػೳͱ࣮ͯ͠ • ʮΧελϜϒϩοΫʯͱ͍͏໊લ • PHPͰGutenberg༻ͷJSΛϩʔυ • ݪଇReactͰΤσΟλΛ࣮͢Δ •
Gutenberg͕༻ҙ͍ͯ͠Δཁૉ͕͑Δ • WP-CLIΛ͏ͷ͕Ұ൪ετϨεͳ͘͡ΊΕΔ
WP-CLIΛ͏ # 1.5.0Ҏ্͕custom blockରԠ $ wp cli version WP-CLI 1.5.1
# ϓϥάΠϯΛ࡞ $ wp scaffold plugin YOUR_PLUGIN_NAME --skip-tests —activate # σΟϨΫτϦʹҠಈ $ CD YOUR_PLUGIN_NAME # ΧελϜϒϩοΫΛՃ $ wp scaffold block BLOCK_NAME —category=formatting --title="hello custom" -- plugin=YOUR_PLUGIN_NAME
wp scaffold blockͰੜ͞ΕΔϑΝΠϧ new file: blocks/BLOCK_NAME.php new file: blocks/BLOCK_NAME/editor.css new
file: blocks/BLOCK_NAME/index.js new file: blocks/BLOCK_NAME/style.css
BLOCKΛϓϥάΠϯ͔ΒಡΈࠐΉ <?php /** * Plugin Name: Guten Blocks * <தུ>
*/ require_once(plugin_dir_path( __FILE__ ) . 'blocks/ BLOCK_NAME.php' );
ϓϥάΠϯ༗ޮԽͰɺ࠷ॳͷΧελϜϒϩοΫ͕ొ͞ΕΔ
wp scaffold blockͰੜ͞ΕΔϑΝΠϧ new file: blocks/BLOCK_NAME.php JSCSSͷϩʔυΛઃఆ͢ΔPHP new file: blocks/BLOCK_NAME/editor.css
ΤσΟλଆͷCSS new file: blocks/BLOCK_NAME/index.js ϒϩοΫఆٛΛॻ͘ϑΝΠϧ new file: blocks/BLOCK_NAME/style.css ϑϩϯτଆͷCSS
wp scaffold blockͰੜ͞ΕΔϑΝΠϧ new file: blocks/BLOCK_NAME.php JSCSSͷϩʔυΛઃఆ͢ΔPHP new file: blocks/BLOCK_NAME/editor.css
ΤσΟλଆͷCSS new file: blocks/BLOCK_NAME/index.js ϒϩοΫఆٛΛॻ͘ϑΝΠϧ new file: blocks/BLOCK_NAME/style.css ϑϩϯτଆͷCSS
JS (React)ͬͯΔਓతʹɺES NextͰΓͨ͘ͳΔ registerBlockType( 'guten-blocks/first-block', { title: __( 'Hello custom'
), edit: function( props ) { return el( 'p', { className: props.className }, __( 'Hello from the editor!' ) ); },
webpack / babelͳͲͷઃఆɺgutenberg-examplesΛ https://github.com/WordPress/gutenberg-examples/
ΧελϜϒϩοΫ࡞࣌ʹ ͍ͬͯΔͱศརͳͷ
registerBlockTypeͰొ͢Δ const { registerBlockType } = wp.blocks; registerBlockType( “ωʔϜεϖʔε/ϒϩοΫ໊”, ϒϩοΫఆٛ
);
ϒϩοΫఆٛʹ࠷ݶඞཁͳͷ const Block = { title: ‘ϒϩοΫ໊’, category: ‘ϒϩοΫΧςΰϦ໊’, edit
() { return <div>ΤσΟλଆϒϩοΫ</div>; }, save() { return <div>ϑϩϯτଆϒϩοΫ</div>; } }
ΧςΰϦҎԼ͔ΒબͿ • common • formatting • layout • widgets •
embed ɹ-> ϒϩοΫͷදࣔҐஔΛܾΊΔ
ଟݴޠରԠPHPͷ࣌ͱಉ͡Α͏ʹͰ͖Δɻ const { __ } = wp.i18n; const Title =
() => ( <p> { __( ‘༁͞ΕΔςΩετ’) } </p> );
࠷ݶ͓͖͍ͬͯͨίΞཁૉʢԶௐʣ • wp.editor.RichText - σϑΥϧτͷςΩετϑΥʔϜ • wp.editor.MediaUpload - ϝσΟΞΞοϓϩʔμʔ •
wp.components.Button - WPΤσΟλͷϘλϯཁૉ • wp.editor.InspectorControls - ӈଆͷΠϯεϖΫλఆٛ • wp.components.PanelBody - ΠϯεϖΫλͷbodyͳͲʹ͑Δ൚༻ίϯϙʔωϯτ
ೖྗͷऔΓѻ͍ɿࣄલఆٛ attributes: { name: { type: 'array', source: 'children', },
}, edit() {
ೖྗͷऔΓѻ͍ɿΤσΟλ / อଘॲཧ edit( { attributes, setAttributes } ) {
return ( <RichText tagName=‘div’ value={attributes.name} onChange={name => setAttributes({name})} ) }, save( { attributes } ) { return <div>{attributes.name}</div> }
attributesͱ͍͏stateΛߋ৽ attributesͷΛsaveͰrender
template ͰσϑΥϧτදࣔͷϒϩοΫΛมߋͰ͖Δ function myplugin_register_book_post_type() { $args = array( 'public' =>
true, 'label' => 'Books', 'show_in_rest' => true, 'template' => array( array( 'core/image', array( 'align' => ‘left', ) ), array( 'core/heading', array( 'placeholder' => 'Add Author…', ) ), ), ); register_post_type( 'book', $args ); } add_action( 'init', 'myplugin_register_book_post_type' );
ಛఆͷϑΥʔϚοτͰͷΈࣥචՄೳʹͰ͖Δ
template_lock = ‘all’ͰϒϩοΫͷՃNGʹͰ͖Δ function myplugin_register_book_post_type() { $args = array( 'public'
=> true, 'label' => 'Books', 'show_in_rest' => true, 'template_lock' => 'all', 'template' => array( array( 'core/image', array( 'align' => ‘left', ) ), array( 'core/heading', array( 'placeholder' => 'Add Author…', ) ), ), ); register_post_type( 'book', $args ); } add_action( 'init', 'myplugin_register_book_post_type' );
ͦͷ΄͔ͷใιʔε
Handbook https://wordpress.org/gutenberg/handbook/
Handbook - Design Principles https://wordpress.org/gutenberg/handbook/reference/ design-principles/
Handbook - Coding Guidelines https://wordpress.org/gutenberg/handbook/reference/ coding-guidelines/
ΧελϜϑΟʔϧυ or ΧελϜϒϩοΫ
࣌ͱ߹ʹΑΔ
ΧελϜϑΟʔϧυͱΧελϜϒϩοΫ ΧελϜϒϩοΫ • + μΠφϛοΫͳΤσΟλUI͕࡞ΕΔ • + ೖྗͱग़ྗΛςʔϚʹґଘͤͣʹΧελϚΠζՄೳ • −
the_contentʹೖΔͨΊɺෳࡶͳݕࡧʹ͍ͮΒ͍ • − JavaScript (React)ྗΛٻΊΒΕΔ ΧελϜϑΟʔϧυ • + ͜Ε·Ͱͷϊϋ͕ͦͷ··͑Δ • + ೖྗ͞ΕͨσʔλΛෳࡶͳݕࡧʹར༻͍͢͠ʢ্ΑΓʣ • − the_contentʹೖΒͳ͍ͨΊɺग़ྗଆͷΧελϚΠζ͕ඞཁ • − wp_postmetaͷσʔλྔ૿ՃʹΑΔύϑΥʔϚϯεԼ
ΧελϜϑΟʔϧυͱΧελϜϒϩοΫ ΧελϜϒϩοΫ • + μΠφϛοΫͳΤσΟλUI͕࡞ΕΔ • + ೖྗͱग़ྗΛςʔϚʹґଘͤͣʹΧελϚΠζՄೳ • −
the_contentʹೖΔͨΊɺෳࡶͳݕࡧʹ͍ͮΒ͍ • − JavaScript (React)ྗΛٻΊΒΕΔ ΧελϜϑΟʔϧυ • + ͜Ε·Ͱͷϊϋ͕ͦͷ··͑Δ • + ೖྗ͞ΕͨσʔλΛෳࡶͳݕࡧʹར༻͍͢͠ʢ্ΑΓʣ • − the_contentʹೖΒͳ͍ͨΊɺग़ྗଆͷΧελϚΠζ͕ඞཁ • − wp_postmetaͷσʔλྔ૿ՃʹΑΔύϑΥʔϚϯεԼ
ΧελϜϑΟʔϧυͱΧελϜϒϩοΫ ΧελϜϒϩοΫ • + μΠφϛοΫͳΤσΟλUI͕࡞ΕΔ • + ೖྗͱग़ྗΛςʔϚʹґଘͤͣʹΧελϚΠζՄೳ • −
the_contentʹೖΔͨΊɺෳࡶͳݕࡧʹ͍ͮΒ͍ • − JavaScript (React)ྗΛٻΊΒΕΔ ΧελϜϑΟʔϧυ • + ͜Ε·Ͱͷϊϋ͕ͦͷ··͑Δ • + ೖྗ͞ΕͨσʔλΛෳࡶͳݕࡧʹར༻͍͢͠ʢ্ΑΓʣ • − the_contentʹೖΒͳ͍ͨΊɺग़ྗଆͷΧελϚΠζ͕ඞཁ • − wp_postmetaͷσʔλྔ૿ՃʹΑΔύϑΥʔϚϯεԼ
ʮͲͪΒ͔ʁʯ Ͱͳ͘ ʮͲͬͪʯ
ΤσΟλͷΧελϚΠζΛͲͬͪͰΔ͔ʁ ΧελϜϒϩοΫ͕ڧ͍໘ • ೖྗิॿΨΠυͳͲɺಈతʹมԽ͍ͤͨ͞߹ • ϝλσʔλʹอଘ͢Δ·Ͱͳ͍ใͷ߹ • ReactJSΛ͏ํ͕ૣ࣮͘Ͱ͖ͦ͏ͳ߹ ΧελϜϑΟʔϧυ͕ڧ͍໘ •
Search EverythingͳͲͰݕࡧ͍ͤͨ͞σʔλͷ߹ • WPςʔϚPHP(WPؔ)Ͱॲཧ͍ͤͨ͞σʔλͷ߹ • GutenbergҠߦͰ͖ͳ͍αΠτͷ߹
ΤσΟλͷΧελϚΠζΛͲͬͪͰΔ͔ʁ ΧελϜϒϩοΫ͕ڧ͍໘ • ೖྗิॿΨΠυͳͲɺಈతʹมԽ͍ͤͨ͞߹ • ϝλσʔλʹอଘ͢Δ·Ͱͳ͍ใͷ߹ • ReactJSΛ͏ํ͕ૣ࣮͘Ͱ͖ͦ͏ͳ߹ ΧελϜϑΟʔϧυ͕ڧ͍໘ •
Search EverythingͳͲͰݕࡧ͍ͤͨ͞σʔλͷ߹ • WPςʔϚPHP(WPؔ)Ͱॲཧ͍ͤͨ͞σʔλͷ߹ • GutenbergҠߦͰ͖ͳ͍αΠτͷ߹
ΤσΟλͷΧελϚΠζΛͲͬͪͰΔ͔ʁ ΧελϜϒϩοΫ͕ڧ͍໘ • ೖྗิॿΨΠυͳͲɺಈతʹมԽ͍ͤͨ͞߹ • ϝλσʔλʹอଘ͢Δ·Ͱͳ͍ใͷ߹ • ReactJSΛ͏ํ͕ૣ࣮͘Ͱ͖ͦ͏ͳ߹ ΧελϜϑΟʔϧυ͕ڧ͍໘ •
Search EverythingͳͲͰݕࡧ͍ͤͨ͞σʔλͷ߹ • WPςʔϚPHP(WPؔ)Ͱॲཧ͍ͤͨ͞σʔλͷ߹ • GutenbergҠߦͰ͖ͳ͍αΠτͷ߹
More publishing !