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
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
690
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
140
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
380
Jamstack開発者のための App Runner入門
hideokamoto
1
540
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
490
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.4k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
240
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.1k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Technology
See All in Technology
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
150
フィジカル版Github Onshapeの紹介
shiba_8ro
0
220
Bedrock AgentCore RuntimeでAuth0 Changelog調査AIをアップグレードした話
t5u8a5a
1
140
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
180
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
120
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1k
RAG を使わないという選択肢
tatsutaka
1
230
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
180
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
1k
AIはどのように 組織のアジリティを変えるのか?
junki
3
780
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
160
攻撃者視点で考えるDetection Engineering
cryptopeg
3
1.8k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.8k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
190
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Site-Speed That Sticks
csswizardry
13
1.2k
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
420
Agile that works and the tools we love
rasmusluckow
331
21k
KATA
mclloyd
PRO
35
15k
First, design no harm
axbom
PRO
2
1.2k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
280
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 !