カテゴリー: WordPress

  • カスタムブロック開発を TypeScript で行う。

    TypeScript で書いたコードをいろいろいじってたら、カスタムブロックもTypeScirpt で書きたくなってきました。そんなわけでいろいろ試行錯誤してみてます。

    レポジトリ:https://github.com/torounit/gutenberg-examples-with-typescript

    一からwebpack の設定とかを扱うのは面倒だし、@wordpress/scirpts の wp-scirpts はそのまま使いたいなーと言うことで、webpack の設定を一部上書きする格好で設定しています。

    wp-scripts になるべく乗っかりたいので、ts-loader ではなく、babel でコンパイルするようにしてます。なので、tsc での型チェックをビルド時に走らせてます。

    Babel 7でTypeScriptをトランスパイルしつつ型チェックをする 〜webpack 4 + Babel 7 + TypeScript + TypeScript EsLint + Prettierの開発環境を構築する〜 の記事を参考にいろいろしてます。

    ブロックエディター周りのパッケージの型定義もDefinitelyTyped に入っていたりするので、以外に簡単に TypeScirpt での開発できそうです。

  • WordCamp Tokyo 2019 で 「本当にだれにでもできる、WordPress をよりよいものにする方法。」という話をしました。#wctokyo

    WordCamp Tokyo 2019 で 「本当にだれにでもできる、WordPress をよりよいものにする方法。」という話をしました。#wctokyo

    Photo by sugawara shinnosuke

    ブログを書くまでが WordCamp です。

    というわけで、11/1 – 2 に開催された WordCamp Tokyo 2019 に参加してきました。初日はコントリビューターデイ、翌日はセッションデイという内容でした。

    コントリビューターデイ

    コントリビューターデイでは、ヘルプデスク担当と言うことでしたが、まぁ他のチームのメンターとか、参加者の皆さんがヘルプしていたようで、得に忙しいと言うことも無かったです。なぜか落とし物の連絡が来たり、これがほんとのヘルプデスク感ありました。ひさびさに落ち着いて Gutenberg の issue とかを読む時間に出来たのはよかったです。

    セッションデイ

    久々に、WordCamp Tokyo でセッションをさせて頂きました。去年の今頃、WordPress 5.0 beta 4 / Gutenberg 4.3 で日本語入力における不具合があったのですが、そのときに、僕がどう関わったのかという話を中心に、「本当にだれにでもできる、WordPress をよりよいものにする方法。」というテーマでお話しさせて頂きました。

    当日紹介した、Github や、Slack でのやりとりです。

    WordPress の本体や、Gutenberg へのコントリビューション・改善提案は、達人プログラマーじゃ無いと出来ないと思われているようですが、そうでなくてもやることいっぱいあるよ!という話ができればいいなと思いながら話しました。

    Slack 上でのやりとりや Github 上でのコメントなど、まず最初にやらないといけないのは、コミュニケーションを取るということなんだなと感じる次第です。

    Slack での Meeting のスケジュールは https://make.wordpress.org/meetings/ こちらにて公開されています。

    セッションでは、アジア太平洋でも参加しやすい時間帯のミーティングの話もしました。11/14 の 14:00 から、APAC Editor Triage Session が #core-editor のチャンネルで行われます。ぜひどんな感じなのか覗いてみてください。

    感想とか

    久々に WordCamp Tokyo で登壇させて頂きました。とても有意義な時間でした。セッションを聞いた方から「やってみようと思いました!」ってコメントを頂けてとても嬉しかったです。

    信州 WordPress Meetup vol.18 を、11/23 に開催します。またそちらでも WordCamp Tokyo 2019 の振り返りをやるので、是非お越しくださいー。

  • 『WordPressのやさしい教科書。手を動かしながら学ぶ実用サイト作りと正しい運用 5.x対応版』の執筆に参加しました #wpネコ本

    『WordPressのやさしい教科書。手を動かしながら学ぶ実用サイト作りと正しい運用 5.x対応版』の執筆に参加しました #wpネコ本

    WordPressのやさしい教科書。手を動かしながら学ぶ実用サイト作りと正しい運用 5.x対応版』通称ネコ本が、5/21に発売されましたがその執筆に参加させて頂きました。もとはちさん額賀さんシマさんとの共著となっております。

    「カフェとか小さなお店向けサイトを作ろうという方向け」というテーマで執筆すると言うことで、PHPやJavaScriptなど全く書かない、可能な限りHTMLやCSSも書かないでサイトを作る・運用するという本になっております。

    そんなわけで、「WordPress をカスタマイズしてサイトを作ろう」みたいな本ではなく、ある意味ではWordPressの説明書に近い本になったのではないかなと思います。可能な限りプラグインなども最小限にして、WordPress の本体の機能を上手く使ってサイトを作る方法を紹介しています。

    僕は主に、ブロックエディターの解説などを中心に執筆させて頂きました。文章よりコードを読み書きする方が得意なのでなかなか難産でした。これをきっかけに「ブロックエディターを使ってみよう」という人が増えたら嬉しいなと思う次第です。

    また、6/10 に、WordPress のオンライン勉強会 WP ZoomUP にて、内容の紹介や、書籍の内容に沿って実際にサイト作ってみるライブデモみたいなモノを行いますので、ご興味ある方はぜひそちらもどうぞ。

    #20 WP ZoomUP 「WordPressのやさしい教科書」実際にサイトを作ってみよう! – connpass

    執筆陣のブログ

    『WordPressのやさしい教科書。 手を動かしながら学ぶ実用サイト作りと正しい運用 5.x対応版』という書籍の執筆に参加させて頂きました。 | mt8

    「WordPressのやさしい教科書。 」を書きました ‹ nuuno

    https://shimakyohsuke.com/2019/05/24/wp5-8341/

    謝辞

    出版・編集の担当者さん、ご紹介いただいた、デジタルキューブ岡本さん、レビューを手伝って頂いた、村上さん (@ud_fibonacci)みうらさん (@NOCE_WEB_DESIGN)こうのさん (@chiaki_kouno)齋木さん (@lunaluna_dev)なおさん (@naokomc) 、執筆チームのみなさん、本当にありがとうございます。

  • Advanced Posts Blocks 0.2.2 をりりーすしました。

    一月にリリースしたプラグインですが、今更ブログを書きます。Advanced Posts Blocks というプラグインをリリースしました。

    機能

    WordPress のビルトインのブロックに、「最新の記事」ブロックがありますが、あれを大幅に強化したプラグインです。より細かい検索条件で記事を取得できたり、テーマ側でテンプレートを用意することで表示をカスタマイズ出来ます。

    • 複数の投稿の一覧を表示する Multiple Posts Block
    • 特定の記事の子ページ一覧を表示する Children Posts Block
    • 特定の個別投稿を表示する Single Post Block

    の3つのブロックを提供します。

    テンプレート

    テーマのなかに、template-parts/blocks/advanced-posts-blocks/posts.php といったファイルを用意することで、表示をカスタマイズすることができます。WordPress のテンプレート階層のように、template-parts/blocks/advanced-posts-blocks/posts/page.php と行ったファイルを用意すると、個別ページの一覧の場合は、こちらが読み込まれます。ブロックのスタイルなどを利用すると更に細かいテンプレートのカスタマイズができます。

    開発

    開発は Github で行っています。https://github.com/torounit/advanced-posts-blocks プルリクエストなどください!

  • WordPress 5.0 への更新について

    WordPress 5.0 への更新を控えるように等の情報があるので、ちょっとそれはどうなんだろうとおもってつらつらと。

    Supported Versions « WordPress Codex

    WordPress の Codex によれば、サポートポリシーとしては、最新版のみです。可能であれば古いバージョンにもセキュリティアップデートは適用するとのことですが、基本的には最新版を使うことが推奨されてます。

    バージョン番号について

    WordPress のバージョン番号は、上位2桁が10進数的な扱いです。3.9 の次は 4.0 でしたし、4.9 -> 5.0 です。なので 4系から5系みたいな感じではないです。3桁目は、パッチのバージョンなので上位2桁とはまた別にナンバリングされます。4.7.11 みたいな。バージョン番号の付け方としては違和感がありますが、最初の小数点は無視してバージョン 49 から 50 に上がったんだなーくらいのノリで理解するのが良いのかなと。

    なので、5.0 はメジャーアップデートではありますが、普段のメジャーアップデートと基本的には同じです。まぁ内容次第というところはありますが。個人的には、REST APIがマージされた 4.7 や、管理画面がリニューアルされた 3.8 辺りの方が印象は強かったりします。

    ブロックエディタを使いたくない場合

    Classic Editor プラグインを入れましょう。2022 年まではとりあえずサポートするようです。そのあとはサポート終了というわけでは無く、2022 年になったときにまた検討すると言うことのようです。

    また、利用しているテーマ・プラグインが 5.0 対応しているのか等は確認する必要があるのかなと思います。

    不具合などが心配な場合

    5.0 に限った話では無いですし、プラグイン・テーマなどもそうですが、不安な場合は事前に検証するのが良いかと思います。サーバー内に、test.example.com みたいな感じで、同じプラグイン・テーマ・本体を入れた環境を用意して、それで試すのが良いかと思います。All-in-One WP Migration 等を利用すると手軽に同一の環境を再現できるかと思います。

    まとめ

    WordPress のアップデートと一口に言っても本体やプラグインなど様々なものが関わってきますので、とりあえず検証できる環境を用意して、安心して WordPress と付き合っていけるようにしましょう。

    WordPress に限った話ではないですが、アップデートのときは、事前検証・バックアップをちゃんととりましょう。

  • unregisterBlockType で ブロックを削除する。

    HandBook のほうには、

    wp.blocks.unregisterBlockType( 'core/verse' );

    をするとブロックの登録を解除できるという話だったのですが、このまま書いても解除されないんですよね。

    何故かというと、core/verse が 登録される前に unregisterBlockType が実行されてしまうからです。なので、Gutenberg / ブロックエディタの初期化処理が終了してから、こいつを実行してあげる必要があります。

    const { _wpLoadBlockEditor } = window;
    const { unregisterBlockType } = wp.blocks;
    _wpLoadBlockEditor.then( () => {
        unregisterBlockType( 'core/verse' );
    } );

    こんな感じで、_wpLoadBlockEditor の完了を待ってから実行すれば良いみたいです。

    _wpLoadBlockEditor はこんな感じです。

    
    window._wpLoadBlockEditor = new Promise( function( resolve ) {
    	wp.domReady( function() {
    		resolve( wp.editPost.initializeEditor( 'editor', "%s", %d, %s, %s ) );
    	} );
    } );

    覚えておくと何かの役に立つかもしれません。

  • Gutenberg のカスタムブロックでも、ES Modules import を使う。

    要は、どうしたいかというと、

    const { registerBlockType } = wp.blocks;

    これを、Gutenberg のコアのソースコードのように、

    import { registerBlockType } form '@wordpress/blocks'

    としたいと言うことです。

    やりかた

    webpack.config.js を の externals を良い感じに設定すればできます。Gunteberg 本体も似たようなコトをやっています。

    const entryPointNames = [
    	'blocks',
    	'components',
    	'editor',
    	'utils',
    	'viewport',
    	'edit-post',
    	'core-blocks',
    	'nux',
    ];
    
    const gutenbergPackages = [
    	'api-request',
    	'blob',
    	'core-data',
    	'data',
    	'date',
    	'deprecated',
    	'dom',
    	'element',
    	'keycodes',
    	'plugins',
    	'shortcode',
    ];
    
    const wordPressPackages = [
    	'a11y',
    	'dom-ready',
    	'hooks',
    	'i18n',
    	'is-shallow-equal',
    ];
    
    const externals = {
    	react: 'React',
    	'react-dom': 'ReactDOM',
    	tinymce: 'tinymce',
    	moment: 'moment',
    	jquery: 'jQuery',
    	lodash: 'lodash',
    	'lodash-es': 'lodash'
    };
    
    [
    	...entryPointNames,
    	...gutenbergPackages,
    	...wordPressPackages,
    ].forEach( ( name ) => {
    	externals[`@wordpress/${ name }`] = {
    		window: ['wp', name],
    	};
    } );
    
    module.exports = {
    	output: {
    		library: ['wp', '[name]'],
    		libraryTarget: 'window',
    	},
    	mode: 'production',
    	module: {
    		rules: [
    			{
    				test: /\.js$/,
    				exclude: /node_modules/,
    				use: {
    					loader: 'babel-loader',
    					options: {
    						presets: ['@babel/preset-env']
    					}
    				}
    			}
    		]
    	},
    	devtool: 'source-map',
    	externals,
    	resolve: {
    		extensions: ['.js', '.jsx']
    	}
    };

    こんな感じの config を書いてます。externals の 設定を行えば、@wordpress/{packageName} みたいなので、import の解決が出来ます。output の設定も書かないとうまいこと動きません。ここでちょっとつまづきました。

    メリット

    • コアのソースをコピペするときに、import とかを書き換えなくて済む。
    • npm で、@wordpress/editor 等を devDependencies で入れておけば、PHPStorm 等でコードジャンプが容易に出来る。
    • ちょっとカッコいい。

    addFilter 等もあるため、コアのソースを読みたいという瞬間はかなり多いです。ですので、コードジャンプが行えるのは大きな利点なのかなとおもいます。

  • registerBlockType の styles プロパティ

    wp.blocks.registerBlockType に styles というプロパティがあります。これにちょっとした設定をするだけで、「追加 CSS クラス」がグラフィカルに適用できるようになります。「ブロックタイプを変更」というボタンが出現し、GUIで適用するスタイルを選択出来ます。

    「ブロックタイプを変更」を押したときの様子

    実装

    'use strict';
    const { registerBlockType } = 'wp.blocks';
    
    registerBlockType( 'block-example/basic', {
    	title: 'Example',
    	icon: 'universal-access-alt',
    	category: 'example',
    	styles: [
    		{ name: 'default', label: 'default', isDefault: true },
    		{ name: 'style1', label: 'スタイル1' },
    		{ name: 'style2', label: 'スタイル2' },
    	],
    	edit ( { className } ) {
    		return <div className={ className }>Basic example with JSX! (editor)</div>;
    	},
    	save ( { className } ) {
    		return <div className={ className }>Basic example with JSX! (front)</div>;
    	},
    } );
    

    実装はこんな感じでとにかくシンプルです。styles プロパティを指定するだけです。適用される class は is-style-style1 だとか、is-style-[name] という格好になります。

    GUI でゴリゴリ出来ていろいろ楽そうですねこれ。

  • Vue.js と REST API で WordPress のテーマを作ってます。

    Vue.js と REST API で WordPress のテーマを作ってます。

    Angular2 + WP API で作られた WordPress のテーマ、Wallace WordPress Theme というプロジェクトがありましたが、それにならって、WP API ベースの WordPress テーマを作っていますVue.js の勉強もしたかったので、Vue.js + Vuex + Vue Router という作りになっています。作っている最中に、Universal Router の方が良いなぁって思いました。

    Github:  torounit/Aetherium: A next-generation WordPress theme built with the Rest API and Vue.js .

    Aetherium で エーテリウム とか エセリウム って読んでます。

    デモ

    Aetherium Demo です。テーマユニットテストのデータを放り込んであります。

    機能

    Service Worker を用いてオフラインサポートしてます。これがやりたくて SPA みたいなことわざわざテーマ上でやっています。Workbox つかってます。Service Worker やキャッシュはログイン時には削除されます。

    また下書きなどのプレビューなども行えます。

    パーマリンク設定を「基本」以外に設定しないと動きません。自由なパーマリンク設定にも対応しているはずです。

    所感

    イベントレポート:WordPress Meetup Tokyo #34 – AMA Session with Joe Hoyle and Bryce Adams – Capital P の記事でもありましたが、WordPress テーマとして、SPAを作るのはいろいろトリッキーです。WordPress の URLのパラメーター全てに対応したりとかするのは難しいですね。add_rewrite_rule とかは考えないことにしてます。

    また、テンプレートタグと呼ばれている関数と同じようなモノを再実装する必要があります。また、option 等 WP API から取得出来ない情報がいっぱいあるので、wp_script_add_data でそういった情報を大量にJS側に渡しています。

    いろいろ面倒ごとも多いですが、サポートする機能をある程度限定すれば、テーマでというのも出来るかなとは思いました。

    メリットとしては、プレビューなど、WordPress としての使い勝手を変えずに、SPA にしたり、PWA 対応をしたり出来ることですね。Smart PWA という WordPress にオフラインサポートを追加するプラグインをリリースしていたりはしますが、HTML を毎回キャッシュするのはあんまり効率も良くないですし、テーマの変更等があったときに、ページごとにデザインが違ったり等の問題が発生します。SPAの場合はHTMLは変わらないので、REST API の戻り値をキャッシュすればコンテンツのキャッシュが出来るのは容量を食い潰さなくて良いですね。

    正直今のところ趣味以外の理由を見つけられていませんが、細々と開発していこうかなと思います。フィードバックスター待ってます。

  • WordBench Nagano Special 2018 !!! を開催します。#wbnagano

    WordBench Nagano Special 2018 !!! を開催します。#wbnagano

    去年の今頃は、WordBench Nagano vol.6 "WBNagano Special!!!" ということで、沢山の方にお越し頂きました。

    今年も、WordBench Nagano Special 2018 !!! とタイトルも微妙に変更して開催します。県外の方などもお招きして楽しい会になるんじゃないかなとおもいます。

    参加登録は Connpass のイベントページからどうぞ!

    セッションなど

    こんな感じのセッションを予定しています。

    WordPress のいまとこれから(仮)

    REST API や Gutenberg など、WordPress は進化し続けています。これからの WordPress について一緒に考えてみませんか?

    Kite @ixkaito

    WordCamp Kansai 2015 実行委員長。WordPress コアコントリビューターなど、多くのオープンソースプロジェクトに貢献する一方、Wockerなど、自身でも数多くのオープンソースソフトウェアを開発。

    はじめてのGutenbergブロック開発

    WordPress 5.0 から実装予定の Gutenberg ではオリジナルのブロックを追加する事ができます。 現行エディタで行っていたクイックタグ追加ボタンのような機能をGutenbergでどのように実装するのか?実際に実装してみた感想などをお話します。

    石川栄和 @kurudrive

    株式会社ベクトル 代表取締役。WordPressテーマ「Lightning/BizVektor」開発者。 最近はスプラトゥーン三昧で順調にウエスト・体重共に増幅中。

    超雑記ブログならではの運営の裏側について

    WordPressで超雑記ブログを5年運営しています。「ジャンルは絞る」「覚え易い名称で」などのセオリーをことごとく守っていないけれど、代わりに記事ごとのユーザー環境やリファラがさまざまでおもしろいので、データ解析してご紹介します。ブログを運営してる/したい、という方に楽しんでいただけたら幸いです!

    *you @ateitexe

    非IT企業でWeb担&業務アプリ作ってるプログラマ。WordPressでのブログ歴5年。小学生と保育園児を抱えるお母さん。MSOffice系の書籍を執筆しています。ドラクエ11はいいぞ。

    コンテンツ制作におけるメディアの最適化と品質について

    ばかなひとは言いました「WordPressに大きい画像とか動画アップロードできないんだけど」。 それはWordPressのせいではありません。コンテンツがどう見られているか、メディアをどう表示すべきか考えていないからです。 …というような小咄をします。

    GOUTEN @gouten5010

    WordBench大阪モデレーター。フロントエンドエンジニア。

    通常の登壇ではスベらないことに定評があります

    どうやってるの?案件で確認する要件と見積り

    Webサイト一つ制作するとしても、細々な要件や希望によってかかる時間はそれぞれ違ってきます。要件が決まっている場合は問題なくても、要件が決まっていないこともしばしば。そんな時に、私ならこの項目を確認している!という点と、その時に見積りをどのようにしているというお話をします。

    長谷川 広武(´°ム°`) @h2ham

    HAMWORKSの代表取締役。テクニカルディレクター・フロントエンドエンジニア。

    札幌でデザイナー向けの勉強会「SaCSS」の主催・運営をしています。

    むずかしくないデザインの話

    デザインとはなんでしょうか、なんだと思いますか?わたしにもわかりません。しかし15年ほど「デザイナー」としてやってきたことについてお話しします。異論は認めます。

    角田綾佳 @spicagraph

    フリーランスでデザイナーとイラストレーターをしています。たこ焼きを焼くのが得意です。

    WordPressで困った時にやるべきことと、困らないために備えること

    WPの構築や運用でトラブルが起きた時、まず何をしますか?

    WordBench京都運営してて「こんなのあったんですか!?」って言われることが多かったものを紹介します。

    岡本秀高 @motchi0214

    WordCamp Kyoto 2017 実行委員長。WordBench 京都 モデレーター。

    デジタルキューブのエンジニア。通称太鼓の人。 WordPress日本語フォーラム世話役をひっそりやってます。

    懇親会

    会場内で食事を用意して、懇親会を行う予定です。( 2000円程度 )

    また、懇親会中にライトニングトークを予定しています。登壇したい方はぜひご連絡下さい。

    イベント概要

    日時

    2018年2月3日(土)

    12:30 開場・13:00 スタート。18:00 終了予定です。

    場所

    松本市の縄手通りのコワーキングスペース SWEET WORK さんにて行います。

    駐車場などは近隣の有料駐車場等をご利用下さい。開場のすぐ近くにあります。

    申し込み

    席数に限りがありますので、イベントページより参加登録をお願いします。

    WordBench Nagano Special 2018 !!! – connpass

    ご参加お待ちしてます!

  • WordPress のテーマの配置場所について

    Roots さんが作っている Sage という WordPress のスターターテーマがありまして。WordPressのテンプレートに、Webpack や Laravel Blade とか様々な便利ツールを突っ込んだ、大変意欲的なプロジェクトです。

    このテーマの中に resources というディレクトリが有り、その中にWordPressのテーマの style.css やら functions.php やらが居るんですよね。

    これどうなってるんだろー、って思っていろいろ調べたところ、どうやら WordPress のテーマは themes 直下だけでなく、その一段したのディレクトリにある場合でも検出されるようです。

    つまり、themes/my-theme だけでなく、themes/hoge/my-themeに配置されたテーマも認識されるようです。

    内部的にはこんな感じらしいです。

    gulp や Webpack でいろいろゴリゴリやってる場合などは覚えておくと便利かもしれないですねー。

  • WordCamp Kyoto 2017 でセッションチームをやりました。

    WordCamp Kyoto 2017 でセッションチームをやりました。

    6/24,25に、WordCamp Kyoto 2017 が開催されました。

    実行委員長の太鼓の人こと岡本さんに、「お前を太鼓にするぞ!」と脅されたのは嘘ですが、お誘いいただいたのでセッションチームのリーダーをやらせてもらいました。

    年明けくらいから準備をしつつ、気がつけばあっという間の半年でした。

    過去のWordCampの実行委員長がメンバーだったりとても豪華な布陣でした。胃が痛くもあり、心強くもあり、なんだかんだ楽しかったです。

    スピーカー、ハンズオンの世話役などを快く引き受けて下さった皆様、本当にありがとうございます。

    また、WordPress コミュニティ以外の方にも登壇して頂けたのは、僕個人としても嬉しかったです。WordPress そのものや、WordPress を利用するにあたって、本当に様々な考え方や技術が関わっています。それを全て紹介するというのはなかなか難しいことですが、少しくらいはそういったことが伝えられたのかなとは思います。

    実行委員という立場上、当日のセッションを全然見れませんでした。客席に座って聴いてたいなーと思いながら会場を行ったり来たりするのは宿命みたいなモノなので仕方が無い。

    WordCamp Kyoto 2017 | Event | WordPress.tv に当日のセッションの動画が上がっているので、ゆっくり見ようと思います。当日来られなかった方や、裏番組のセッションも聞いてみたかった方なども、ぜひご覧下さいませ。

    またスピーカーの方々にお会いしたときにでも詳しく話を聞いてみたいので色んなイベントに顔も出そうと思います。直近では、CMS大阪夏祭り2017 に参加予定なのでかまって頂ければ幸いです。

    というわけで今週末の7月15日、WordBench 長野 vol.10 を開催します。WordCamp Kyoto 2017 の振り返りとか、いろいろやりたいと思いますので、お時間がある方はぜひ参加登録よろしくお願いします!

    また、来月の8月19日にも予定はしているので、そちらも予定が合えばぜひどうぞー。