Puppeteerを使った保育園システムとSlackの連携。

20180615031039

先日、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が行っていることは、

  1. ブラウザを開いてログイン
  2. リンクをクリックしてページを移動
  3. 必要な情報をコピーして取得

という感じであり、かつてのスクレイピングに比べると、とても原始的な内容となっています。ですが、原始的であるが故にページの解析はほとんど不要で、とても簡単に実装することができました。

ポピンズメモリーレポーター

情報を取得した後は、Slack公式のNode Slack SDKを利用して、上図のようにSlackにポストするだけになります。

Puppeteerの可能性。

実際に使ってみるとよく分かりますが、ヘッドレスChromeとPuppeteerの組み合わせはとにかく楽です。

その上、Dockerと組み合わせることで、ポータブルなパッケージにすることも可能であるため、ちょっとした業務ツールの作成などにもぴったりだと思います。実際にこの後、業務でデバイスをエミュレートしてスクリーンショットを撮るツールを作成したりと大変活躍しています。

このあたりに関しては、色々と知見が溜ってきているのでどこかで纏めて公開できればと思っています。

それではまた。