ちょうど1年前、スクショの自動化をしてました。
ちょうど1年後、同じスクリプトのメンテナンスを行いました。
おさらい
まず最初に、1年前に何をやったのか?
puppeteer
とNodeJs
で自動キャプチャーをするプログラムを作りました。自分の悩みを解決するだけのプログラムです。
メンテナンスした理由
上のプログラムをHerokuで動かしていたのですが、2022年11月にフリープランを終了するという案内がありました*1。 フリープランが終わると月額800円くらいの有料プランしかなくなってしまうので、契約中のレンタルサーバーに移行することにしました。
移行元:Heroku
移行先:ConoHa WING
移行に合わせて、プログラムを少々書き換えました。
ConoHaでNodeJsを動かす
ConoHa WINGにはNodeJsがインストールされていないので、自力でNodeJsをインストールするところからやらねばなりません。 幸いにも、おなじようなことをやっている人*2がいたので、ほとんどマネしたら最短距離で行けた気がします。
Nodeのインストールから
今日時点でNodeのバージョンは18.9.0
が最新なので入れてみる
mkdir ~/nodejs && cd ~/nodejs wget https://raw.github.com/dmrub/portable-node/master/bin/install-node.sh sh install-node.sh --version=18.9.0
homeディレクトリにNodeを入れてみたけどエラーが出る。
node: /lib64/libm.so.6: version `GLIBC_2.27' not found
ネットで調べると、どうやらバージョンが高すぎるとこのエラーが起きるらしい。バージョン下げればよさそうなので、16の最後版をインストールしなおします。
全部消してやり直す。
# ディレクトリを丸っと消して、バージョン指定でやりなおす $ cd ~ $ rm -rf nodejs $ mkdir ~/nodejs && cd ~/nodejs $ wget https://raw.github.com/dmrub/portable-node/master/bin/install-node.sh $ sh install-node.sh --version=16.17.0 # nodeの確認 $ ~/nodejs/share/nodejs/node-v16.17.0-linux-x64/bin/node -v v16.17.0
動いたのでPATH設定
$ cd /home/$USER/nodejs/share/nodejs/node-v16.17.0-linux-x64/bin $ chmod +x * $ export PATH="$PATH:/home/$USER/nodejs/share/nodejs/node-v16.17.0-linux-x64/bin"
スクリプトをインストール
GitHubからダウンロードしてきて、設定を少々いじる
$ cd ~ $ git clone https://github.com/kanaxx/hatena-autocapture.git $ cd hatena-autocapture # モジュールをインストール $ npm install
起動シェルの環境変数をセット
# 設定を書き換える $ vi run.sh > export PATH="$PATH:/home/$USER/nodejs/share/nodejs/node-v16.17.0-linux-x64/bin" > export LANG="ja_JP.utf8" > export BLOG_ADMIN_URL="https://blog.hatena.ne.jp/xxx/domain/" > export HATENA_ID="" > export HATENA_PASS="" > export CLOUDINARY_URL="cloudinary://xx:yy@zz" > cd `dirname $0` > node hatena-autocapture.js
1行目はインストールしたPATHに合わせます。
3行目は、はてなブログの管理画面のURLに合わせます。
4行目と5行目ははてなのログイン情報にします。
6行目は、CloudinaryのAPIの情報を入れます。Cloudinaryを使わない場合は空白にしてよいです。
実行する
設定が終わったらスクリプトを実行する
$ cd ~/hatena-autocapture $ sh run.sh > 2022-09-24 17:06:14 > Start program > 2022-09-24 17:06:15 > Hatena Login > goto page(0) [https://www.hatena.ne.jp/login?location=https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/] > reacged page(0) [https://www.hatena.ne.jp/login?location=https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/] > input login information > current url(0) [https://www.hatena.ne.jp/login] > current url(0) [https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/?_www_via=login] > login succeeded > 2022-09-24 17:06:28 > hatena-top > goto page(0) [https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/] > reacged page(0) [https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/] > take screenshot [./captures/20220924-170614_hatena-top.png] > uploaded to cloudinary as public_id [hatena/20220924-170614_hatena-top.png] > 2022-09-24 17:06:32 > hatena-accesslog > goto page(0) [https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/accesslog] > reacged page(0) [https://blog.hatena.ne.jp/kanaxx43/kanaxx.hatenablog.jp/accesslog] > take screenshot [./captures/20220924-170614_hatena-accesslog.png] > uploaded to cloudinary as public_id [hatena/20220924-170614_hatena-accesslog.png] > 2022-09-24 17:06:37 > End program 問題なく実行できていれば、標準出力にログが出てくる
おお、うまくいった。
あとは、これをcrontab
に設定して1日1回実行するように仕掛ければOK。
日本語が表示できてない
無事、動いたと思ったら、作られたスクショ画像に日本語が表示されていませんでした。
実際の画像
こちらの記事を参考に、フォントの.ttf
ファイルを置いてみました。
https://turtlechan.hatenablog.com/entry/2019/06/11/211543
$ mkdir ~/.fonts $ wget http://raw.githubusercontent.com/edihbrandon/RictyDiminished/master/RictyDiminished-Regular.ttf -P ~/.fonts
無事、日本語部分もキャプチャーできるようになりました。
さいごに
2022年のシルバーウィークは、1年前に作ったプログラムをメンテナンスをしました。
Herokuの無料枠が終了になるのはショックですね。Herokuの代替ツールもあるみたいですが、契約しているレンタルサーバーを選択しました。 同じような環境にある人の助けになればと思います。
参考にしたページ
ConoHaWING もしかしたら色々と凄いかもしれないのでMisskey入れようとしてみた
https://qiita.com/waxsd100/items/0f9bdf61a1a242f4bce9
nodeのv18を使ったらエラーになった(CentOS7)
https://it.ama2pro.net/2022/05/31/node%E3%81%AEv18%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F%E3%82%89%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%EF%BC%88centos7%EF%BC%89/
amazonlinux2 に nodeとnpmをインスコ
https://qiita.com/ma7ma7pipipi/items/c7ee11c6036ec35a1caa