この記事はtraPアドベントカレンダー2024、ConoHa Advent Calendar 2024 18日目の記事です。
こんにちは。23Mの@mazreanです。SysAd班でtraP Collectionというアプリケーションのバックエンドの開発・運用などを行なっていました。
この記事では、PCに設定したこのはちゃん壁紙の新しい壁紙が出たら自動で更新するようにするツールを作ったので紹介します。このツールを使うと、以下のような壁紙スライドショーの対象に新しいこのはちゃん壁紙が追加されるようになります。
traPとConoHaの関係
この記事はConoHaのアドベントカレンダーでもあるため、簡単にtraPについての説明も入れておきます。traPはアプリ・ゲームや音楽、グラフィックなどデジタル創作全般を取り扱う東京科学大学のサークルです。現在はかなり大規模化しており、2024年12月現在500人を超える現役部員がいます。
このような大規模サークルtraPですが、主にコストの観点からConoHaにはお世話になっています。というのも、このtraPでは現在この記事を公開しているブログを含む計13個の部内サービスを開発・運用しているのですが、ほとんど全てのインフラがConoHaのVPSに乗せられています。その他にも、内製PaaS NeoShowcase上に500個以上のアプリケーションがデプロイされているのも含めると、もしかするとConoHa上でトップクラスの数のアプリケーションを運用している組織になるかもしれません。
traPでは、ConoHaのVPSのコストパフォーマンスのおかげでこれだけの数のサービスを現状1年あたり数十万円程度のインフラコストで運用しています。
このはちゃん壁紙
ここから本題です。
ConoHaには美雲このはという公式キャラクターがいます。
自分はこのはちゃんが大好きで毎年このはちゃんの誕生日に行われるこのはぴばは毎年見ていますし、当然コンソールも様々なところにこのはちゃんが現れるこのはモードに設定しています。
美雲このはオフィシャルサイトではこのはちゃんの壁紙が配布されています。嬉しいことにこの壁紙の追加頻度は高く、数か月に1度、場合によっては同じ月に複数新しい壁紙が追加されます。
当然、このはちゃんのファンの自分はこのはちゃん壁紙をPCなどに設定しています。
壁紙の自動切り換え
Windows、macOSのいずれにおいても一定時間ごとに壁紙を自動で切り替えてくれる機能が存在します。この機能を使うと、特定ディレクトリ内に保存された画像をランダムに切り替えて壁紙として使用してくれます。
各OSごとの設定方法は以下に記載されています。
Windows: https://faq.nec-lavie.jp/qasearch/1007/app/servlet/qadoc?QID=023313
macOS: https://macfan.book.mynavi.jp/article/m26590/#:~:text=URLのコピー-,【壁紙を自動的に変える】,-[システム環境設定
自分はこのはちゃん壁紙を特定ディレクトリに全てダウンロードしておき、この壁紙の自動切換えを設定することで、一定時間でランダムなこのはちゃん壁紙に切り替わるように設定をして使っています。
問題: 手動でのダウンロードが面倒くさい
ここまで説明したような運用をすると、見るたびごとに異なるこのはちゃん壁紙になっており飽きることがなく幸せなのですが、1点問題があります。
壁紙の追加に毎回手動で追従するのが大変なのです。この壁紙は追加されるとこのはちゃんの公式X(旧Twitter)で告知されるのですが、このはちゃんの公式Xは流速がそこそこ早いため見逃してしまいがちです。また、そもそも手動でダウンロードするのが面倒くさいです。
そこで今回はこの壁紙公開サイトをスクレイピングすることで、この壁紙ダウンロードを自動化するツールを作りました。
壁紙自動ダウンロードツール
以下のリポジトリでツールは公開しています。
Node.jsのスクリプトで公開しており、ダウンロードしてNode.jsで実行すれば使えます。Unix系のOSなら、Node.jsの環境があれば以下のワンライナーで実行できます。
wget -O - https://github.com/mazrean/conoha-wallpaper-scraper/releases/latest/download/main.mjs | node --input-type=module - --dest {{ダウンロード先ディレクトリ}}
やっていること
内部的にやっていることはシンプルです。
- 公式サイトの壁紙ページをスクレイピング
- ダウンロード先にない壁紙があればダウンロード
公式サイトの壁紙ページはSPAなどではなく、初期ロードされるhtmlに全ての要素がレンダリングされているため、そのままhtmlを解析しているだけです。この部分はcheerioというHTMLパーサーを使って楽をしています。
壁紙のダウンロードでは適切な大きさの壁紙をダウンロードする必要があります。スクレイピングあるあるですが、このはちゃんの壁紙のURLの形式はかなり不安定でこの部分は頑張ってパターンを作ってあげる必要があります。
具体的には、最近は基本的に/wp-content/uploads/2024/10/2560x1440.jpgのような/wp-content/uploads/{{年}}/{{月}}/{{横}}x{{縦}}.jpg
の形式が大半ですが、同じ月に2つ目以降の壁紙が追加されると/wp-content/uploads/2024/01/2560x1440-1.jpgのように末尾に-1
などが付きます。
また、おそらく2022年の12月ごろに2回/wp-content/uploads/2560x1440.jpgのような/{{年}}/{{月}}
が省かれたパターンがあります。
さらにさかのぼると、2021年の1月にそれまでの壁紙が/wp-content/uploads/2021/01/2015_autumn-2560_1440.jpgのような/wp-content/uploads/2021/01/{{年}}-{{季節}}-{{横}}_{{縦}}.jpg
で一斉に公開されているようでした。
これらをうまく以下のコードで正規化して、画像サイズを取り出しています。
https://github.com/mazrean/conoha-wallpaper-scraper/blob/d95b8b232366d4ea5fc311f790f45795ea79c537/src/main.ts#L64-L71
その他、注意点としては美雲このはオフィシャルサイトではTLS周りの設定ミスがあるようで中間証明書が公開されていない点があります。中間証明書はサイトの証明書を発行した認証局の証明書で、通常Webサイトを開くクライアントには最上位の認証局の証明書しか格納されていないため証明書の階層をたどるために必要になるものです。有名どころのブラウザには中間証明書がない場合でも自動的に補完する仕組みがあるため、ブラウザで開く場合には大抵問題ないのですが、TLSの設定としてはサイト側が公開するべきものです。詳細は以下に記載されています。
しかし、美雲このはオフィシャルサイトでは何らかの設定ミスの結果この中間証明書が設定されておらず、Node.jsでは通常の設定ではTLSのエラーが発生するため、以下のようにこのツールではTLSの検証を無効化するワークアラウンドを行っています。
定期実行の設定
このツール単体では実行時に新しい壁紙をダウンロードすることしかできないため、定期実行の設定を別で行う必要があります。この部分はOSごとに方法が変わってきますが、macOSならcron、Windowsならタスクスケジューラを使うのが良いと思います。
まとめ
この記事ではこのはちゃんの壁紙を自動で更新する方法を紹介しました。是非試してこのはちゃんの壁紙を使ってみてください!
また、メンテナンスの励みになるので、良いと思った方はツールのリポジトリへのスターしていただけると嬉しいです。