ウェブサイトパフォーマンス向上のためのWordPressプラグイン「Better Website Performance」を作りました

ウェブサイトのパフォーマンス向上のための WordPressプラグイン「Better Website Performance」を作りました。

最近のウェブサイトは、ウェブページの読み込みや表示速度 (PageSpeed) などパフォーマンス面も検索エンジン対策 (SEO) において検索順位を決める重要な要素の一つとなっています。そのため、個々のウェブサイトで適切なパフォーマンスを発揮し維持するためにサイト最適化が求められています。

WordPressプラグイン「Better Website Performance」の主な機能は、以下のとおりです。

HTML ヘッダー最適化

WordPress によるメタタグや rel=link 出力を最適化します。

絵文字

WordPress に実装されている絵文字リソースを最適化

レスポンシブ画像 (image srcset)

WordPress に実装されているレスポンシブ画像 (image srcset) を最適化

非同期 JavaScript

非同期 JavaScript を管理します

jQuery

jQuery の読み込みを管理

CSS の結合やインライン化

スタイルシートファイルの読み込みをインライン化したり、縮小化、または結合します。

追加 CSS

WordPress に実装されている追加 CSSをヘッダーに配置します

Resource Hints

リソースを事前に読み込んでパフォーマンスを向上させます

Preload

リソースを事前に読み込んでパフォーマンスを向上させます

WordPressプラグイン「Better Website Performance」

WordPress開発環境「WP Compose」をつくりました

Docker の WordPress開発環境「WP Compose」をつくりました。

Vagrant (VirtualBox) による WordPress開発環境「VAW (Vagrant Ansible WordPress)」を 7,8年開発し続けていましたが、そろそろ開発環境を Mac (Apple chip) に完全に移行したいと思い、開発に着手してみました。

当初、docker-compose.yml ひとつのファイルだけで簡単に WordPressサイトを立ち上げられるので「開発環境はもう必要なさそうだなぁ」と思っていましたが。

やはり開発環境としては、HTTPSをサポートしたり、メールテストが不十分なところがあったり。複数の開発環境 (コンテナ) を立ち上げるには、localhost においてポートの割り振りを考えたり、使い続けるには面倒なところがある。ネット上に幾多ある技術系ブログにある「DockerでWordPressのローカル開発環境を構築する」の類の記事を見ると、ほぼ localhost ベースのローカル環境の初歩的な部分しか解説がないので。

本格的に開発環境として使っていくためには、もう一歩踏み込んだところが必要だなと。Dockerの開発知見を溜めつつ、開発生産性の向上を目指して開発環境を目指してみました。

目指したこと

目指したことは、

  • Mac (Apple chip) に最適化
  • 今までの開発リソースがそのまま使える (ドメインが使える、テストリソースがそのまま使える)
  • テスト環境の整備の手間なくユニットテストができる
  • 設定ファイル (.env) で開発環境のカスタマイズができたり、複数の開発環境の管理を容易にする
  • 開発リソースを開発環境から分離管理

特徴

開発の結果、以下のような WordPress 開発環境になりました。

詳しい「WP Compose」の技術要件や使い方は、GitHub にある README ドキュメントを見てください。

  • localhost でサクッと WordPressサイトが立ち上げられるし、開発が捗るビルド・ユニットテスト用のコンテナも立ち上げられる。
  • コマンドラインツール WP-CLI を使ったり、HTTPS をサポート、MailHog によるメールテスト
  • 面倒なポートの管理をしないで複数の開発環境を立ち上げられるアプローチに Local Loopback Address で開発用 IPアドレスを決めるだけ。hosts でポート指定の必要なくドメイン名でアクセスできるように。

成果

実際に Docker開発環境にしてみて。

  • Intel chip Mac 上での Vagrant (VirtualBox) 開発環境から Docker開発環境へスムーズな完全移行 (データベースデータの変更をすることなくドメイン名も引き継ぎ)
  • いままで開発しているテーマやプラグインのリソースを開発環境のリソースと一体化していた状態から分離管理した (ディレクトリレイアウトが明確に、誤って削除を避けられる)
  • 開発用IPアドレスを複数の開発環境に振り分けて整備が容易になった
  • ユニットテスト用のコンテナで開発しているテーマやプラグインをビルドしたり、ユニットテストを今までのテストリソースを手直しなく、損なうことなく実施

今後を見据えて

WordPress のテーマやプラグインを開発するに際して最適な開発環境がなかなか見つからない。どのような開発環境を選べばいいのか。開発生産性を高めたい。など悩みも多いものです。

最近の WordPress開発は、開発言語が PHP から React (JavaScript) に比重が移りつつあり、スキルの再構築 (学び直し) や WordPress自体どんどん変わっています。その変化についていけなくなり、テーマやプラグインを積極的に開発する開発者も少なくなっている感があります。

そのような中、開発環境や基盤整備にリソースを割けることが難しいことが障害になっていることも多いと思います。WordPress開発環境「WP Compose」が、少しでも開発生産性に寄与でき、お役に立てれば幸いです。

ぜひ、WordPress開発環境「WP Compose」を試してみてください。

ブロックエディタを拡張するWordPressプラグイン「Editor Bridge」をリリースしました

WordPressプラグイン「Editor Bridge (エディタブリッジ) 」は、デフォルトのブロックエディタを拡張するプラグインです。

デフォルトブロックの機能を拡張したり、フォーマットやスタイルを追加してみました。どのようなことができるかを確認できるサンプルページを作りましたので、そちらをざっくり見てみてください。

WordPressプラグイン「Editor Bridge」で、できることは大きく3つ。

1つ目は、デフォルトブロックの機能を横断的に拡張します。 デフォルトブロックに背景画像や枠線 (ボーダー) を付けたり、マージンやパディングなど余白 (スペース) を設定できます。またボタンのサイズや幅など各種設定ができるように設定パネルに追加しています。

対応しているブロックは以下の通り。

  • Background image (背景画像)
    • core/heading
    • core/paragraph
    • core/column
    • core/columns
    • core/group
  • Border (枠線)
    • core/heading
    • core/paragraph
    • core/group
  • Button size and width (ボタンの大きさと幅サイズ)
    • core/button
  • Space, Margin (upper margin as default) and Padding (スペース)
    • core/heading
    • core/paragraph
    • core/image
    • core/button (only Margin)
    • core/buttons
    • core/media-text (only Margin)
    • core/gallery (only Margin)
    • core/list (only Margin)
    • core/table (only Margin)
    • core/columns
    • core/column (only Padding)
    • core/group
    • core/cover

2つ目は、見出しや段落など文字を入力するところに使われる RichText Component にフォーマットを追加。文字の大きさや太さを変えたり、文字を装飾する強調やバッジが使えます。

バッジはちょっとしたアクセント用のテキスト装飾に、強調は文章の一部を強調できます。ブロックにスタイルがあるように、フォーマットにもスタイルが選べるようにしてみました。

  • Badge (バッジ)
    • Default (デフォルト)
    • Round Corner (角丸)
    • Round (円形)
    • Outline (アウトライン)
    • Status (ステイタス)
    • Perfect Circle (正円)
  • Font size (フォントのサイズ)
  • Font weight (フォントの太さ)
  • Highlight (強調)
    • Highlight (強調)
    • Marker (マーカー)
    • Underline (アンダーライン)

3つ目は、ブロックにスタイルを追加。

よく使うブロック5つほどにスタイルを追加しています。応用的な活用方法として、まずスタイルを設定して、次に拡張機能のパディングで余白バランスを整えたり。ブロックの拡張機能を組み合わせてスタイルに柔軟性をもたせることができます。

  • Button block (ボタン)
    • Triangle Icon (三角アイコン)
    • Blur (ぼかし)
    • Shadow (シャドウ)
    • Expansion (膨張)
    • Emboss (エンボス)
  • Heading block (見出し)
    • Underline (アンダーライン)
    • Thick Underline (太めのアンダーライン)
    • Two Color Underline (2色アンダーライン)
    • Up Down Line (上下線)
    • Accent Line (強調線)
    • Kebab Line (横串線)
    • Single Box (囲み線)
    • Double Box (2重囲み線)
    • Left Accent Line (左ラインアクセント)
    • Gradation Line (グラデーション
    • Stripe Line (ストライプ)
    • Cross Box (交わり囲み線)
    • Brackets (カッコ)
    • Japanese quotation marks (日本語の引用符)
  • Image block (画像)
    • Round Corner (角丸)
    • Frame (フレーム)
    • Shadow (シャドウ)
  • Separator block (区切り線)
    • Thick line (太線)
    • Dotted (点線)
    • Shadow (シャドウ)
    • Circle Mark (円マーク)
  • Table block (テーブル)
    • No Style (スタイルなし)
    • Underline (アンダーライン)
    • Dashed (破線)
    • Round Corner (角丸)

プラグイン命名に悩む

今回WordPressプラグイン「Editor Bridge」を公式ディレクトリに登録するにあたり直前にプラグイン名を変更しました。

理由は、プロジェクト名「gutenberg」がプラグイン名に含まれていることについてです。 含まれていると表示名 (後で変えられる) とパーマリンク (後で変えられない) にも含まれるからです。プラグインの登録申請すると、一旦確認のメールが届きます。

そのメール内容には、上記の理由とリスクが書いてあり、正式エディタは、WordPressエディタとクラシックエディタなので、「gutenberg」プロジェクト名は時間が経てば忘れ去られる。コードネーム的な扱いですね。

そのときにそのまま登録を進めていいのか。パーマリンクを変更するなど何か対応する必要があるのか決めて返信するとレビューが開始されます。つまりワンステップ追加した形でプラグインのレビューが進められます。

もともとは「Guten Plus」というプラグイン名でしたが、その前にも「Guten Bridge」と付けていましたので、実は2回めのプラグイン名を変更でした。

「Guten Bridge」のときは、開発している途中に他に同名のプロジェクトが出てきたので、「Guten Plus」に変えたのですが。。。

今後は、とりあえずコードネーム的に名前をつけて開発を進めたほうがいいかもしれないなぁと思いつつ。いつもプラグイン命名に頭を悩まされています。

2転3転して何度も心を折られた開発

今回の開発したWordPressプラグイン「Editor Bridge」はだいぶ難航しました。

プラグインの構想自体は、WordPressバージョン 5.0 リリース直前にちょこちょこブロックの作り方を学びつつ進めてきました。

その中でいちばん実現したかったことは、スペースの設定。ブロックにマージン (margin) とパディング (padding) をいい感じにつけれたらいイイなぁと。レイアウトに変化をもたらすものになればなぁと。

しかしそれは容易なことではありませんでした。特にフロント部分とエディタ部分の整合性を調整するところ。

ブロックエディタは、2018年12月6日にWordPress (v 5.0) の標準エディタとして搭載されてからブロックエディタ自体がまだまだ発展途上で機能追加されるし、改良もされます。そのたびに仕様が変更されてしまいます。

初期の頃のブロックエディタは、とにかくエディタ部分のDOM (Document Object Model) 構造が複雑すぎて。作ってもCSSセレクタが入れ子の連続だったり、設定次第でレイヤーが一つ増えたりしてDOM構造が動的に変わります。ありとあらゆることに対応するには複雑になりすぎて整合性が全く取れませんでした。変更容易性も保守性も確保できなくなるのが目に見えて挫折。。。

アップデートのたびに大幅にDOM構造が変わるところもあり、なかなか安定しません。バージョン5.4 あたりからようやくDOM構造が素直になりつつある感が出てきました。フロント部分とエディタ部分の整合性がとれるような感触を掴んだので。形にしてもいいのではないかと。そしてリリースにこぎつけました。

今後の展望

WordPressプラグイン「Editor Bridge」は特定のテーマに依存する形ではなく、なるべくブロックエディタに対応するいろんなテーマで使えるようにしたいなぁと考えています。

一番の課題は、テーマそれぞれにマージンやパディングの余白のとり方が違うと思うので。またマージンの付け方も上部または下部とあるでしょう。そこをどのように埋められるか。

すでに少し考えていて、今回裏ではCSSカスタムプロパティを仕込んでいていろんなテーマにフィットするように開発者向けの仕組みをつくることを視野に入れていたりします。

ブロックエディタは、まだまだ改良が続くと思います。 WordPressプラグイン「Editor Bridge」もまだまだ改良や調整をしながらいいプラグインにしていきたいと思います。

話はそれてしまいましたが、ブロックエディタでWordPressプラグイン「Editor Bridge」をぜひ活用してみてくださいね。

WordPressプラグイン「WP Auto Updater」に通知機能が付きました

WordPressの本体 (コア)、テーマ、プラグイン、翻訳を自動更新するプラグイン「WP Auto Updater」には、今まで更新したテーマやプラグインなどのアップデート履歴を記録し、管理画面上で確認できますが、今回バージョン 1.4.0 へアップデートに伴い、新たに更新完了時にメールで更新内容を通知する機能を実装しました。

通知を有効にしていると、こんな感じのメールが届きます。

タイトル:
[シングス] プラグインは自動的に更新されました

本文:

次のプラグインは正常に更新されました:
WP Auto Updater v1.4.0 (upgraded from v1.3.0)


アップデート履歴を見る
https://http://example.com/wp-admin/index.php?page=wp-auto-updater-history

通知メールは、本体・テーマ・プラグイン・翻訳毎に受け取りたい通知を有効/無効ができます。
またメールの宛先、送信先も管理者権限グループを持っているユーザーを受取人に選択できます。
管理画面からいろいろ設定できますので、運用に合わせて活用できます。

管理画面はこんな感じ。

WordPressプラグイン「WP Auto Updater」の管理画面

是非試してみてください。

カスタム投稿タイプのデフォルトウィジェットブロック一式が詰まったWordPressプラグイン「Custom Post Type Widget Blocks」をリリースしました

カスタム投稿タイプで活用できるデフォルトウィジェットブロック 7 点が詰まった WordPressプラグイン「Custom Post Type Widget Blocks」を作りました。

WordPressプラグイン「Custom Post Type Widget Blocks」は、以前つくったウィジェット版の WordPressプラグイン「Custom Post Type Widgets」のブロックエディタ版です。

WordPress 5.0 から標準エディタがブロックエディタになりました。それに伴い、ウィジェットはブロックエディタに統合されていくことを見越して、ブロックの作り方をちょこちょこ学びつつ作ってみました。

機能は、Custom Post Type や Taxonomy で絞り込みができる以外は、標準のウィジェットブロックとほぼ同じです。
ある程度安定した状態になれば、将来的に機能を追加して拡張していこうかと思います。

是非ブロックエディタで活用してみてくださいね。

最近の投稿

カテゴリー

アーカイブ