『7回目の出直し🌻』

好きなことを自分のペースで、のんびり更新

はてなブログのサイトマップ問題を解決する「サイトマップちゃんと!」というサービスを作りました

はてなブログのサイトマップGoogle Search Consoleにちゃんと登録するサービスを作りました。

名付けて、
「サイトマップちゃんと!」です。

作ったきっかけ

このブログで何度も取り上げているように、はてなブログのサイトマップってGoogleのサーチコンソールにうまく登録できないのですよね。
Googleの問題かはてなの問題かわからないですが、昔からある問題のようで一向に解決に向かいません。

f:id:kanaxx43:20200801085726p:plain

待っていても登録されないなら、Search Console APIを使って直接登録してしまおうということで作りました。完全に自分の需要から生まれた自分のためのものです。

サービスの内容

登録したドメインのサイトマップインデックスからサイトマップURLを探してきて、GoogleのAPIを使ってSearch Consoleに登録するだけのサービスです。 GoogleのAPIのCredeitialファイルを預かって、定期的にサイトマップの再登録を実行します。

過去に作ったPHPのプログラムを再編集し、WebのUIを付け足して作り直ししたものです。

kanaxx.hatenablog.jp

画面構成

いまのところ、3つの画面しかありません。シンプル。

入口はここです。
https://sitemap-chant.herokuapp.com/site/

ドメインを新規登録する画面はまだ無いです。

1ドメインの一覧

サービスに登録されているドメインの一覧です。もちろん、現状は自分のブログドメインしかありません。
増やしたことはないですが、追加で登録すれば同じように動くはずです。

f:id:kanaxx43:20200730230016p:plain

2ドメインの詳細(サイトマップ一覧)

ドメイン配下で検出されたサイトマップを確認する画面です。
定期的にサイトにアクセスしてサイトマップをチェックしているので、月単位で増えるはてなブログのサイトマップに自動対応できます。

f:id:kanaxx43:20200730230150p:plain

3ドメインの詳細(バッチの履歴)

定期的にちゃんと動いているか確認する画面です。ログの確認をするのが面倒なので念のための画面です。
f:id:kanaxx43:20200730234146p:plain

1時間に1回、全てのサイトマップをsubmitしています。

開発に使ったもの

今回のサービスは、これで動かしています。

  • Heroku (Free)
  • Heroku Scheduler add-on (Free)
  • Jaws DB(MySQL) add-on (Free)
  • Laravel 7.x
  • PHP7.2

Herokuは1000時間以内は無料のフリープラン、MySQLデータベースはストレージ5Mバイトまで使えるJawsDBを使っています。
データ量が増えてきて5Mバイト以上になるころに何か考えないといけないです。

作ってみてハマったところ

PHPのバージョン

Windowsの環境(PHP7.2)で動作確認していたのですが、何も気にせずにHerokuにデプロイしたらPHP7.4が使われました。PHP7.4だとエラーが出て動かなくて、composer.jsonで7.2系にする設定をちゃんと書いたら動きました。
完全なる勉強不足。Windows側のPHPを7.4にバージョンアップをしてテストすればよいだけなのだけど、ちゃんと勉強しよう。

composer.jsonを編集

    "require": {
        "php": "~7.2.0",
    }
MySQLのバージョン問題

HerokuのMySQLのアドオンは、ClearDBとJawsDBと2つあるのですが、ClearDBはMySQL5.5なのですよ。
MySQL5.5だと、TimestampとDatetime型に面倒な問題があり使いたくないですね。

https://dev.mysql.com/doc/refman/5.6/ja/mysql-nutshell.html

テーブルごとに最大 1 つの TIMESTAMP カラムを自動的に初期化するか、現在の日時に更新することが可能でした。この制限は撤廃されました。どの TIMESTAMP カラム定義にも、DEFAULT CURRENT_TIMESTAMP 句と ON UPDATE CURRENT_TIMESTAMP 句の任意の組み合わせを指定できます。さらに、これらの句は、DATETIME カラム定義で使用できるようになりました。

ClearDBのバージョン確認

 show variables like 'version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| version                 | 5.5.62-log                   |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
4 rows in set (0.18 sec)

JawsDBのバージョンの確認

show variables like 'version%';
+-------------------------+---------------------+
| Variable_name           | Value               |
+-------------------------+---------------------+
| version                 | 5.7.23-log          |
| version_comment         | Source distribution |
| version_compile_machine | x86_64              |
| version_compile_os      | Linux               |
+-------------------------+---------------------+
4 rows in set (0.19 sec)

今回はJawsDBを選ぶことで解決しました。

まとめ

今までサイトマップ系のプログラムを場当たり的に作ってきましたけど、改めてまとめ直して形にしてみました。これでサイトマップの悩みはこれで解消です。 ドメインとGoogle Credentialを登録できる画面は作っていないのですが(そのうち作るかも)、興味があればTwitterにでもご連絡ください。

やり残したこと

ちゃんとしたドメインとって、デプロイすること
新規登録の画面、登録したドメインを削除する機能がないこと*1
ドメインごとのバッチ実行の間隔、コントロールが雑なこと

参考資料

Google APIの認証ファイルの作り方を整理しました。
kanaxx.hatenablog.jp