2019年、何かやろう!

今年のことを何となく書いてみる。

昨年末、WordPress 5.0のリリースがあり、それにあわせてプラグイン「Login rebuilder」などをバージョンアップ。その作業の過程で発見したバグレポートをtracにポストしていました。そんなこともあって、「WordPress 5.0.2 Maintenance Release」に名前(tmatsuur)が掲載されました。とても久しぶりです。

今年に入ってからは「常用漢字チェッカー」のコンテンツにいくつか不具合を発見してそれを修正したり、その勢いでほんの少しだけ機能改良したりしています(地味なところなんですが)。このサイトのコンテンツを大きく変える予定はないのですが、いくつかのコンテンツには年号表記が含まれているので、新年号が発表されたら速やかに対応したいところです。

話は前後しますが、昨年WordPressのプラグインなどの翻訳ファイルを作成・編集するプラグイン「Poppoppoo」ができました。これまで翻訳ファイルの作成・編集は「Poedit」を利用してきましたが、今後はこのプラグインで対応していきます。なおこのプラグインはサーバー内(基本的には開発環境)のファイルを直接読み書きするため、公式サイトでは公開する予定はありません。ページキャッシュやサイトマップ更新関連など、最低限必要だと思う機能はできるだけ自前のプラグインでカバーできるようにと考えています。そんなわけで作りかけで「没」にしたものもあるわあけですが、今年も1つぐらいは新しいプラグインを作りたいものです。

さて、「寝かせている」といえば取得したまま放置されているドメインがいくつかあります。いつまでも寝かせたままというわけにはいかないので、それらを使って「新しい『サイト』を1つ以上立ち上げる」を今年の抱負とします。

久しぶりのPageSpeed Insights

ちょっと時間が出来たので、久しぶりに「PageSpeed Insights」でサイトをチェック。少し前に作った趣味のサイトの「速度スコア」はモバイルが50点台、パソコンが90点台でした。モバイルはもう少し何とかしたいと思い試行錯誤してみた。

「改善できる項目」に表示されたものは次の通り。

  1. 次世代フォーマットでの画像の配信
  2. 使用していない CSS の遅延読み込み
  3. レンダリングを妨げるリソースの除外
  4. サーバー応答時間の短縮(TTFB)

次世代フォーマットでの画像の配信

サムネイル画像にPNG-8ファイルを使用しており、全投稿のサムネイル画像を表示していたことが原因でした。

最初に試したのが「jQueryプラグインLazy Load」を使ったサムネイル画像の遅延読み込み。改善できる項目に変化はなく、モバイルの「速度スコア」はほぼ同じ。ということで基本に立ち返って画像ファイルのフォーマットをJPEG形式に変更してみた。サイトを作った時点でPNG-8形式を採用した理由はJPEG形式のノイズを嫌ったためだ。次世代フォーマットはブラウザが限定されるため、とりあえずはJPEG形式の画質を「80」にして、ノイズが気にならないレベルでファイルサイズを2/3程度に削減。再分析では「改善できる項目」から「次世代フォーマットでの画像の配信」は無くなりました。

使用していない CSS の遅延読み込み

「bootstrap.min.css」「font-awesome.min.css」が対象。どちらもサイトの「肝」であり、すぐに手は出せない感じ。

レンダリングを妨げるリソースの除外

「bootstrap.min.css」「font-awesome.min.css」のほか、サイト固有のCSSファイルが対象。前2つはサイトの「肝」であり、サイト固有のCSSファイルをインライン化してみた。再分析ではサイト固有のCSSファイルは遅延読み込みのところから消えたのだが、「速度スコア」はほぼ同じ。ここはなかなか悩ましい。

サーバー応答時間の短縮(TTFB)

現在のサイトはVPSを利用しており、この項目は分析のタイミングで表示されたり、表示されなかったりする。VPSを切り替えなければならないほど遅くはなく、サーバー設定で改善できる可能性があるのかはっきりしないので、しばらく様子見とした。

モバイルの速度スコアアップはなかなか手強い

対象のサイトは「Bootstrap 4」と「Font Awesome」を使ったWordPressの独自テーマで構築している。「Font Awesome」を使っている部分はそれほど多くないので代替は可能かもしれないが、「Bootstrap 4」は根幹ということもあって替えは効かない。また「PageSpeed Insights」の「診断」には「過大な DOM サイズ」という項目があり、現時点のノード数1,400を超えている。全投稿ページにすばやくアクセスできるよう、多数のリンクや検索フォームを盛り込んでいることが要因。はてさて、どうしたものか。

KUSANAGIハンズオン&徳丸先生のセキュリティセミナーに参加しました!

昨日の夜、品川マイクロソフトさんで開催された「KUSANAGIハンズオン&徳丸先生のセキュリティセミナー」に参加。軽く感想などを残したいと思います。

セミナー内容は以下の通り。

  1. Microsoft Azureのセキュリティについて

    キーワードは「セキュリティROI」で、以前は(社内ネットワークに)『侵入させない』だったが、現在は『侵入されたことをすばやく検知し、すぐに復旧』とのこと。

  2. KUSANAGI for Vagrantを使用したKUSANAGIハンズオン

    「KUSANAGI for Vagrant」は社員の方が個人的に開発していたものがベースとのこと。box名が「yuya_tajima/kusanagi」になっている謎が解けました。

  3. WordPressサイトはWAFでどこまで防御できるか

    WAFの概要とその効果をデモサイトを使いながら紹介。

KUSANAGI WAF

さてKUSANAGIハンズオンの中身ですが、(ちょっとズルをして)事前にKUSANAGI for Vagrantのインストールまで済ませておいたこともあり、個人的にはそれなりに進めることができました。それでも前半のyumコマンドの処理に時間がかかり、一部の方はここでだいぶ苦労された様子。後半のKUSANAGI WAFのパートがきつくなったのが残念でした。KUSANAGI WAFのところはう少し詳しく聞きたかった感じです。

KUSANAGI WAFのオン・オフはコマンドで簡単に切り替え可能ですが、初期設定のままではWordPressの管理画面の一部でも問題が発生するため、チューニング(設定リストの編集作業)は必須。実際に公開サイトで使用する場合は、適用しているテーマやプラグインに応じたチューニングが必要不可欠であり、緩い設定をしてしまうと攻撃を防ぐことができないため、それなりのノウハウが必要で、実運用は「ちょっと大変そう」というのが正直な印象です。今後、時間経過によって初期設定やチューニング方法が洗練されていくことに期待したい。

WAFの防御

デモサイトを使った攻撃とWAFの検知では、徳丸さんの会社でも扱っているWAF製品の「SiteGuard」が使用され、問題がありそうなリクエストを「検知」するだけでなく、その可能性がありそうなリクエストを「監視」する機能がありました。管理画面上で「監視」から「検知」に切り替えできる機能が紹介され、攻撃発覚後の対応は比較的容易にできるそうです。WAFは既知の攻撃を防げるだけでなく、(その時点で)未知の攻撃を防ぐ場合があり、それなりに有用ではあるものの、誤検知も少なからず発生することは意識しておくべきでしょう。

さて、徳丸さんのお話であらためて意識させられたのが、「ナチュラルなリクエストは(WAFで)検知しにくい」的なニュアンスの内容と、不具合が見つかった場合は速やかにアップデートしていく責任があるということ。またプラグインの機能そのものが脆弱性になりうる可能性があることはプラグインを公開している身としては肝に銘じておきたい。

参考:KUSANAGI for Vagrant

WordPress 5.0リリースに向けて

WordPressのアップデートが近づくと、公式サイトにプラグインを登録している方には「WordPress 5.0 is imminent! Are your plugins ready?」な感じのメールが届きます。このメールには登録しているプラグインのバージョン確認状況がリストされており、それらのアップデートの準備を始めます。ある程度の需要がありそうなものはWordPressのアップデートに合わせる感じで進める方針です。

  • Login rebuilder
    一番利用者が多いプラグインで、優先度がトップ。新機能を追加した2.5.0をリリース予定です。
  • Somewhere search box
    4.9.8+Gutenberg環境において投稿の複製機能に不具合が発生しており、GithubのIssuesに投稿し、少し前に解決した模様。5.0 RC版で動作確認して調整します。
  • Posts filter multiselect
    5.0 RC版で動作確認して調整します。
  • Slightly troublesome permalink
    5.0 RC版で動作確認して調整します。
  • HTML entities button
    いわゆる旧エディター向けのプラグインなので、様子見になります。
  • Paste JSON text
    旧エディター向けのプラグインで、新エディターに対応できるか検討中です。
  • その他のプラグインについてはペンディングです。

とりあえず5.0 RC版の公開待ちですね。

Bootstrap4でテーマ再構築

WordPress関連の情報を掲載している「WordPress私的マニュアル」のテーマをリニューアルしました。主な変更点は次の通り。

  • Bootstrap4を使用
  • キーワード検索機能を独自から標準フィルターを使用する方式に変更
  • ソーシャルブックマークの停止

まあBootstrap4を使ってテーマを作ってみたかっただけなんですけどね。

2年ぶりの機種変完了

使っているスマホの契約更新月に伴い2年ぶりに機種変しました。
iPhone 6 Plus を Xperia XZ Premium に、
iPhone 6s を iPhone 8 に、といった感じ。

Xperia XZ Premium は久しぶりの Android 端末。発売から少し経っているのもあり、すぐにシステムアップデートとなって、アップデートの実行で 8.0.0 になりました。これの気になった点は、標準状態のバッテリーの減り具合。フル充電後の未操作で2日経過前にバッテリー残量が0になりました。とりあえず、標準でインストールされている「しゃべってコンシェル」と「スケジュール&メモ」を無効化して経過を見てみたところ、未操作の場合は1日約7%の減りとなりました。しばらくはこの状態で使ってみようと思います。

iPhone 8 の方はというと、こちらも立ち上げ直後にアップデートが来ていたのでとりあえず実行して iOS 11.2.5 に。パッと見で気になったのが、画面がやや赤みを帯びていること。ネット検索して「設定」で調整できることがわかったので、「Night Shift」-「色温度」の設定を初期状態よりも「冷たく」側にスライドして調整しました。
こちらの端末で戸惑ったのが Gmail のセットアップ。実は以前の端末が Google アカウントの2段階認証に使っていて、セキュリティコード発行の操作を行っても MNP したこの端末には通知が届きません。この問題の対処方法はいくつかあるようですが、PC で Google アカウントの「2段階認証プロセス」にアクセスして、Xperia XZ Premium の電話番号を追加し、そちらをデフォルトに変更。これで無事 Gmail のセットアップが完了しました。

最後に料金プランを紹介。自宅・事務所ともWiFi環境なので、データ通信料を低く抑えたプランを選択しています。

Xperia XZ Premium docomo
合計 5,500円(5,940円)
カケホーダイライト 1,700円(1,836円)
spモード 300円(324円)
データSパック(小容量)(2GB) 3,500円(3,780円)
iPhone 8 SoftBank
合計 6,500円(7,020円)
スマ放題 2,700円(2,916円)
ウェブ使用料 300円(324円)
データ定額ミニ(2GB) 3,500円(3,780円)

今回の機種変は2週連続で「ヨドバシカメラ マルチメディア横浜」さんで行い、iPhone 8 の月額料金はいくつか割引が適用されて上記の値段よりも安くなります(Xperia XZ Premium と同程度)。もう少し安くおさえたところですね。

yum updateした翌朝にsshできない

昨日、twitterにApacheの脆弱性に関するツイートがありました。

パッチが公開されているか微妙なタイミングだったのですが、昨晩中に手持ちのサーバーにアクセスして「yum update」だけ実行しておきました。日付が変わって今朝sshでログインしようとすると、タイムアウトでログインできません。全部ログインできないかというとそんなわけではなく、CentOS 6系は問題なくログインできましたが、CentOS 7系がログインできない状況でした。外は雨降ってるし、かなりブルーに。。。「まあ最悪はサーバーをリセットかな」と思ったわけですが、とりあえずサーバー(さくらのVPS)のコントロールパネルにアクセスして、「コンソール」からrootでログインを試行。なんとかログインできたので、原因の調査開始です。

はじめにsshのログを確認。ログインに失敗している形跡を示すログは見つかりませんでした。。。

ログがまったくないということなので、ファイアウォールの状況を確認。

# firewall-cmd --list-all
...途中、省略...
services: dhcpv6-client https ssh ...

サービスとして登録されていることは確認できたので、/usr/lib/firewalld/services/ssh.xmlを開いてみたところ、ポート番号がデフォルトに戻っていました。昨日の「yum update」によって、変更していたsshのポート番号が初期状態に戻ったようです。

<port protocol="tcp" port="22"/>

ポート番号を変更してファイアウォール設定を更新。無事、sshでログインできるようになりました。

# firewall-cmd --reload
# systemctl restart sshd.service

今回の件、反省すべきところは「yum update」したら、別のターミナルからsshでログインできることを確認しなかったこと。今後は徹底しないといけないですね。

「学年別常用漢字一覧」が「新学習指導要領(平成29年3月公示)」に対応

弊社サイトの1つ「joyokanji.info」では「小学校学習指導要領」に対応した「学年別常用漢字一覧」を公開しています。
このコンテンツについて今年3月に公示された「新学習指導要領」の「小学校学習指導要領」に対応し、以下のページを追加しました。

ざっと見た感じ、新しい小学4年に都道府県名の漢字が追加され、小学5年・6年とで字数調整したようです。

Login rebuilderのActive installsが10,000+達成

弊社で開発・公開しているWordPressのプラグイン「Login rebuilder」のActive installsがついに10,000+達成を達成しました。誠にありがとうございます。
「Login rebuilder」はログインページをサイト独自のアドレス(URL)に変更することで、ログインページへの不正アクセスをシャットアウトすることを目的に開発しました。ログインページ不正アクセスやログインのログ管理、管理者ログイン時のメール通知機能などを備えています。よろしかったらお試しください。