Gutenberg で Hello, World!

Gutenbergについて少し勉強したのでおさらいも兼ねてサンプルを作ってみたいと思います。サンプルといっても基礎中の基礎、Hello, World をただ表示させるブロックを作成します。

Gutenbergは記事をブロックの集合体として扱う、WordPressの新しいエディタです。おそらくWordPress 5.0からは現在の TinyMCE から Gutenberg に置き換わるものと思われます。とはいえそのままTinyMCEを使う続けることもできるので、無理にGutenbergに慣れる必要はありません。

環境は最新版であるWordPress4.9.8で、Gutenbergプラグイン(3.4.0)をインストールしてあります。では早速サンプルを作っていきます。

まずブロックの雛形を作る

プラグインやテーマを作るにあたってWP-CLIを使って雛形を作成する方もいると思いますが、ブロックも同じ方法で作ることができます。とても便利なので今回もWP-CLIを使っていきます。

今回はプラグインとしてブロックを作成するため、以下のコマンドでプラグインの雛形、およびその中にブロックの雛形を作ります。

$ wp scaffold plugin my-plugin
$ wp scaffold block hello-world --title="Hello,World!" --plugin=my-plugin

ついでにプラグインの有効化も一緒にやっておきます

$ wp plugin activate my-plugin

次に、作成されたプラグインのPHPファイルからブロック用PHPファイル読み込むようにする必要があるため、wp-content/plugins/my-plugin/my-plugin.php の一番最後に以下の1行を追加します。

include( plugin_dir_path( __FILE__ ) . 'blocks/hello-world.php' );

ここまで終わったらいったんGutenbergエディタでブロック追加ボタンを押してみます。うまくいっていれば以下のように、ウィジェット欄から Hello, World! ブロックが追加できるようになっているはずです。

実際にブロックを追加してみると、Hello from the editor!とうっすら書かれた黒い四角が追加されたと思います。

ブロックを修正する

今のままでもよいですがせっかくなのでメッセージをHello, World!に変更しましょう。今回のような動的な機能を持たないブロックは基本的にJavaScriptで記述します。内部的にはReactを使用していますが、よほど込み入ったことをしない限りReactに対する深い知識は必要ないと思われます。

修正するファイルは wp-content/plugins/my-plugin/blocks/hello-world/index.js です。中を見ると51行目と66行目に edit関数と save関数が定義されているのがわかると思います。

これらの関数の戻り値が実際のブロックの表示となります。edit関数はエディタ上での表示、save関数は記事を保存した後の通常の表示をそれぞれ返しています。el関数はReactのcreateElement関数と同等で、今回の場合はタグが<p>、内容が第三引数の文字列の要素を生成しています。この関数について詳しく知りたい場合はReactのドキュメントを直接みた方が良いようです。

メッセージを以下のように変更してみます。

ブロックのスタイルも修正する

エディタ上で文字が見づらいのでスタイルも修正します。修正するファイルは wp-content/plugins/my-plugin/blocks/hello-world/style.css です。

どうもGutenbergプラグインのスタイルシートで p タグの文字色が指定されているようで、そちらの設定が優先されてしまっているようです。これはちょっと修正して欲しい気もしますが今のところは !important で強引に変えときましょう。

いざ確認

新しく記事を作成してもう一度Hello, Worldブロックを追加して見ましょう。

edit関数に指定した「Hello, World! ただ今編集中」がうまく表示されています。公開して実際にどう見えるかも確認してみます。

いい感じですね。save関数に指定したメッセージが表示されています。

おわり

というわけで Hello, World! を表示するブロックの完成です!(ワーパチパチ) 言うまでもありませんが、使い道はまったくありません。今度は表示する文字をエディタ上で編集が可能な RichText コンポーネントを使ったサンプルも作りたいですね。次回、乞うご期待です。

AnyDesk を使ってみた

AnyDeskはドイツのAnyDesk社が開発したリモートデスクトップソフトウェアです。導入がとても簡単で、多くのプラットフォームに対応しており、しかも個人利用であれば無料で使用できます。

↑macOS上でAndroidの画面を画面共有(後述の通り、Androidは画面共有のみ可)している図

導入

ダウンロードはPCであれば公式サイトから、スマートフォンであれば各種アプリストアから行えます。インストールから利用開始まで10分もかかりません。アクセスする側とアクセスされる側の両方にインストールする必要があります。

インストールすると「AnyDeskアドレス」と呼ばれる9桁の数字が自動で割り当てられます。これは各PC(またはスマートフォン)を一意に識別するための識別子で、これさえあればリモートデスクトップが可能になります。裏を返せば、それだけ簡単に接続できてしまうので(ダイアログの表示で一定のセキュリティは確保されているとはいえ)、不特定多数に公開してしまわないよう気をつけたほうがいいでしょう。

接続手順

基本的にAnyDeskアドレスを相手に教えるだけでリモートデスクトップが開始できます。デフォルトの設定では以下の手順で接続を行います。(接続する側をA、接続される側をBとしています。)

  1. Bが自身のAnyDeskアドレスをAに教える
  2. AがBのAnyDeskアドレスを入力して接続
  3. Bに「接続を許可しても良いか」を確認するダイアログが表示される
  4. 3.で許可するとリモートデスクトップが開始

なんとたったこれだけです。目をつぶりながらでもできますね。IPアドレスだのネットワーク設定だのといったこざかしい複雑さは一切ありません。通信がすべて暗号化されるという点も安心です。

無人アクセス

さらに設定を追加することで上記の3番目の手順にあるダイアログの表示を無くし、B(接続される側)が無人でも接続を可能にすることができます。これはB側に常に人がいるとは限らないケースで重宝されますが、誰でも接続できる状態となりセキュリティが落ちてしまうため、パスワードの登録が必須となります。

対応プラットフォーム

対応プラットフォームは、Windows、macOS、Linux、FreeBSD、iOS、Androidといたれりつくせりなラインナップです。が、プラットフォームによって機能に差があるので注意が必要です。

現時点では、Androidは他の端末に対して画面の共有はできますが、操作は受け付けません。iOSは他の端末からの接続自体受け付けません。課金してもこれは変わらないようなので、おそらくAndroidやiOSに仕様上の壁があるのだと思われます。

いくつかのプラットフォームで試してみましたが、ファイル転送やホワイトリストでのアクセス制御など、一番機能が多いのがWindows版のようです。

おわり

今までの人生でリモートデスクトップソフトウェアというものに触れたことがなく、なんとなく複雑そうなイメージがありましたが、それが一瞬にしてくつがえるほどの簡単さにびっくりです。他のソフトもこんな感じなのかな? リモートデスクトップソフトウェア界では TeamViewer というソフトも有名のようなので、気が向いたらそちらも使ってみたいと思います。

参考リンク

font-familyプロパティにクォーテーションは必要?

CSSでフォントを指定する際に使うfont-familyプロパティ。CSSを使う人なら必ず一度は書いたことがあるであろうプロパティの一つですが、以前から僕には一つ疑問がありました。それは何かと言うと、タイトルにもありますが、値を指定する際にクォーテーションが必要かどうか? ということです。

ちなみに以下のCSSはいずれも正常に動作します。

font-family: メイリオ, Verdana;
font-family: 'メイリオ', 'Verdana';
font-family: "メイリオ", "Verdana";

ネットで軽く検索をかけてみると、「スペースを含むフォント名にはクォーテーションが必須」や「日本語を含むフォント名にはクォーテーションが必須」といった意見が見つかりますが、試しに実際に動かしてみると、どうも正常に動くようです。果たしてこれはブラウザの忖度なのか? あるいはネット上の意見が間違っているのか? というわけで少し深掘りしてみることにしました。

結論から言うと、おそらく、日本語を含む場合もスペースを含む場合もクォーテーションは必要ありません。(※ スペースが2つ以上連続で続く場合を除く)

調べてみる

こういう時はやはり規格の仕様をみるのが手っ取り早いです。CSSはW3Cが仕様を制定していて、フォントに関する仕様は CSS Fonts Modules Level 3 でまとめられているみたいです。現時点ではまだ勧告候補で最終決定盤ではないみたいですが、まあいいでしょう(適当)。

CSS Fonts Modules Level 3 の font-family の項には以下のように書かれています。

Font family names other than generic families must either be given quoted as strings, or unquoted as a sequence of one or more identifiers.

汎用ファミリー以外のフォントファミリー名は、stringsとしてクォーテーションで囲うか、あるいはひとつ以上の identifies の並びである必要があります。

!! これは重要な情報です。フォントファミリー名の指定が identifies の並びであればクォーテーションは必要ないのです。ここでいう identifies は以下のように定義されています。

In CSS, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [a-zA-Z0-9] and ISO 10646 characters U+00A0 and higher, plus the hyphen (-) and the underscore (_); they cannot start with a digit, two hyphens, or a hyphen followed by a digit. Identifiers can also contain escaped characters and any ISO 10646 character as a numeric code (see next item). For instance, the identifier “B&W?” may be written as “B\&W\?” or “B\26 W\3F”.

要は identifies は[a-zA-Z0-9]、ISO 10646のU+00A0以上、ハイフン(-)、アンダースコア(_)のみを含み、かつ、数字、2つのハイフン、1つのハイフンと数字では始まらないもののことを指します(わかりづら)。ここで重要なのは、日本語はU+00A0以上なので identifies に含むことができるということです。

つまり…

これまでのことを総合するとこうです。

  • identifies の並びであればクォーテーションは必要ない。
  • 日本語もidentifies に含まれる。

つまり、フォントファミリー名に日本語が含まれようと、スペースが含まれようと、全て identifies の並びとして解釈され、クォーテーションは必要ないようです。

ひとつ気がかりなのが identifies の『並び』と言う部分です。僕は並びと言うのをスペース区切りと解釈しました(英語の文章も単語をスペースで区切って並べるし…)が、それがあってるのか正直微妙です。ですがいろんな記事に目を通したところおそらく! 僕の解釈であっていると思われます。

仕様の続き

To avoid mistakes in escaping, it is recommended to quote font family names that contain white space, digits, or punctuation characters other than hyphens:

エスケープ時の間違いを防ぐために、スペース、数字、ハイフン以外の区切り文字を含む場合、クォーテーションで囲うことをオススメします。

しかし強制ではないものの、仕様ではスペースを含む場合はクォーテーションで囲うことをオススメしているので、特に理由のない限り結局はクォーテーションを使ったほうがいいのかもれません。

注意点

ちなみに絶対クォーテーションが必要なケースが2つあって、1つはフォントファミリー名が inherit や serif などのCSSで使用するキーワードと同じ場合。

もう1つは、フォントファミリー名の中で2つ以上のスペースが連続で続く場合です。と言うのも、identifies の並びで記述された値は全てのidentifies をスペースで結合した文字列に変換されるため、2つ以上のスペースは1つのスペースに変換されてしまいます。まあそんなフォント名があるかどうかわかりませんが、そういったフォントを扱う場合は指定に気をつける必要がありそうです。

参考リンク

WordPress4.9.8リリース

2018/08/02にWordPress4.9.8がリリースされました。46個のバグ修正や更新があったようです。

Try Gutenberg

ダッシュボードにGutenberg の使用を勧めるどでかい通知(コールアウトと呼ぶらしい)が表示されるようになりました。

やっとと言うべきか、ついにと言うべきか、Gutenberg が本格始動する WordPress5.0 まで、もうまもなくというところのようです。

プライバシーに関する修正

4.9.6で追加されたGDPR関連のプライバシーページや個人用データツールなどの修正が多く、46個のうち18個がそれ関係みたいです。

他にもregister_meta()がオブジェクトサブタイプに対応したり、Twenty Seventeen に微修正があったりするようですが、ここで詳しく説明するのはやめておきましょう。なぜなら英語が苦手だからです。興味のある方は下のリンクから各自読んでみてください。(そしてできたら教えてください…)

それにしても Gutenberg がもう間近に迫ってます! 実を言うとまだ Gutenberg について知らないことだらけ(というか全然知らない)なのでそろそろ本気で勉強しないと…

参考リンク

WordPress 4.9.8
https://wordpress.org/news/2018/08/wordpress-4-9-8-maintenance-release/

“Try Gutenberg” Callout in WordPress 4.9.8
https://make.wordpress.org/core/2018/08/02/try-gutenberg-callout-in-wordpress-4-9-8/

Registering Metadata in 4.9.8
https://make.wordpress.org/core/2018/07/27/registering-metadata-in-4-9-8/

.htaccessによるIPアドレスでのアクセス制御

Apache2.4以前まではDenyAllowといったディレクティブを使用していましたが、Apache2.4以降それらは非推奨となり、代わりにRequireディレクティブを使用するよう変更されました。

全てのアクセスを拒否

Require all denied

特定のIPアドレスからのアクセスのみ許可

Require ip 192.168.0.1

複数指定

Require ip 192.168.0.1 192.168.0.2

前方一致での指定

Require ip 192.168

ネットワーク指定

Require ip 192.168.0.0/255.255.0.0

CIDRでのネットワーク指定

Require ip 192.168.0.0/16

参考URL

mod_authz_host のドキュメント
https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html