Puppeteerを使った保育園システムとSlackの連携。
先日、amachangがブログを再開したということで、僕も再開しようかなと思いネタを考えていたのですが、まずは軽いジャブ程度に最近作った便利ツールを紹介してみたいと思います。
年末に生まれた我が子ですが、お陰様で無事にすくすく育っており、4月から0歳児で保育園に通っています。
その保育園は、ポピンズが経営しているのですが、保護者と保育園との連絡手段として、会員マイページが用意されており、ログインして連絡事項を確認できるようになっています。
いつでもどこでも確認できますし、紙や口頭で連絡するよりもミスもなくなりそうで、とても良い仕組みなのですが、セッションの有効期限がなかなか厳しいため、基本的に毎日ログインしないと確認できないようになっています。
そこで、情報を取得してSlackに定期的にポストするツールが欲しいと思って作成したのが「ポピンズメモリーレポーター」です。
ポピンズメモリーレポーター
ポピンズナーサリースクールの会員マイページ https://ps.poppins.co.jp/nursery/login/index にある連絡ページ「ポピンズメモリー」の情報を取得してSlackに通知を行うツールです。
READMEには、上記の説明を書いていますが、こちらはPuppeteerを使ったNodeアプリです。いわゆるスクレイピングによってポピンズメモリーという連絡ページから情報を取得して、Slackへと通知するわけですが、これをPuppeteerを使って実装してます。
PuppeteerはヘッドレスChrome(コマンドラインからChromeを操作する仕組み)をNodeから扱うためのライブラリです。この手のライブラリは他にもあるのですが、最近はPuppeteerが最も有力な候補になってきています。
ヘッドレスChromeはリアルなブラウザであるため、ブラウザ操作で行えることは基本的にすべて行えます。これをPuppeteerを通じて利用するということは、Nodeモジュールを活用して、さまざまなWebサービスとも連携させることが可能だということになります。
ポピンズメモリーレポーターの中でPuppeteerが行っていることは、
- ブラウザを開いてログイン
- リンクをクリックしてページを移動
- 必要な情報をコピーして取得
という感じであり、かつてのスクレイピングに比べると、とても原始的な内容となっています。ですが、原始的であるが故にページの解析はほとんど不要で、とても簡単に実装することができました。
情報を取得した後は、Slack公式のNode Slack SDKを利用して、上図のようにSlackにポストするだけになります。