メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

「Puppeteer入門」という本を執筆しました

Puppeteer入門 という本を執筆しました

先日こっそり触れましたが、Puppeteerの入門書が秀和システムから出版されました。表紙は漫画家の鶴田謙二さん。
表紙目当てで買って頂ける方もいらっしゃるようです。
Node.jsの知識がなくてもWebスクレイピングができるようになれるよう書きました。

www.shuwasystem.co.jp

Amazonのリンクはコチラ

ざっくり内容

・Puppeteerを使い始めるまでの色々な環境構築
JavaScript や Node.jsの書き方
・ブラウザ操作の自動化 (要素の特定、要素への入力など)
・実践例いろいろ
・テスト自動化への適用やデバッグ

と、だいたいこんな感じの流れになってます。

読んでいただいた方々の声

Amazonのカスタマーレビューより

Puppeteerを使いこなしたかったので買ってみましたが、大当たり!
これは色んな人にお勧めしたい本です。
機能解説に止まらず、色んな角度から「自動処理」の考え方を教えてくれる内容でした。

初心者にもわかりやすいように環境構築方法が丁寧に書いてあるし、
(僕は初心者ではないので、本当に初心者向きかは保証できませんが!)
すぐに使える実用的なサンプルプログラムも豊富だし、
コラムとか本文の節々に書かれている著者の体験談がとても面白く、
中〜上級者が読んでも、深みを感じられる内容だと思います。

とにかく「自動化大好きなんだろうな〜。かなり試行錯誤を繰り返して来たエッセンスなんだろうな〜」
っていう著者の熱い想いがかなり伝わってきました。

www.amazon.co.jp

これは本当に嬉しい!!m(_ _)mm(_ _)mm(_ _)m
高い評価もさることながら、特に 自動化が大好き ということを感じとって頂けて何よりです。

記事にして頂きました

とってもオススメ!を頂きました。こちらも同じく嬉しい(T T

motok5.hatenablog.com

ネットで情報を探していたら、ものすごい時間がかかっていたか、最悪 waitFor(1000) で妥協してました。

同じ気持ちです^^ 私もハマりました。

Twitter

感謝×2です。拾いきれてなかったらスミマセン

書店にもこっそり見にいったり

f:id:ryoichi0102:20180922163124j:plain

f:id:ryoichi0102:20180922163130j:plain

嬉しい…しみじみ。自分の力ではありませんが良い位置。店舗によっては置いてあったりなかったり一喜一憂。
我が子が買ってくれた方の役に立ってほしい。

締めのひとこと

初心忘れるべからず。

LINE Beaconが当たったので簡単な実装をしてみた

経緯

ryoichi0102.hatenablog.com

何を作ったか

Beaconに近づくとLINEで教えてくれるBotです。簡単すぎてスミマセン。

画面

f:id:ryoichi0102:20180925102130j:plain

処理の流れ

次のようなJSONが送られてくるのは前回紹介しました。

{
  "events": [
    {
      "type": "beacon",
      "replyToken": "e0f475d5c49249b48b1bb37f7406d4cc",
      "source": {
        "userId": "*********************************",
        "type": "user"
      },
      "timestamp": 1536757232074,
      "beacon": {
        "hwid": "**********",
        "dm": "",
        "type": "enter"
      }
    }
  ]
}

ここのeventsの要素のtypeが'beacon'になっているとbeaconのイベントということで。実装は次のような感じでできますね。

if (events[0].type === 'beacon') {
  if (events[0].beacon.type === 'enter') {
    // enter時の処理.
  } else if (events[0].beacon.type === 'leave') {
    // leave時の処理.
  }
}

ソースコード

github.com

どんな展開が見込めるか

[ Beaconを持ち歩く前提で ]
待ち合わせする人にこのBotに友達になってもらって、近づいたらお知らせすることにより、待ち合わせがスムーズに。

[ Beaconを固定で設置する前提で ]
家に近づいたらスマートホーム関連のAPIを叩く。(電気つける/テレビつけるetc) 

やろうとしたけどできなかったこと

[ Beaconを持ち歩く前提で ]
このBotを飲み会トークルームに招待して、飲み会に遅れる場合、自分が店に近づいたら予めビールを頼んでおいてもらいたいw

できなかった理由は、トークルームでのイベント発火です。まぁよく考えたら
・友達登録もしていないトークルーム上のアカウントにBeaconイベントを発火させる
トークルーム上の誰に近づいたかそもそも判別できない
など、セキュリティー的にもWebhook API的にも無理な感じでした。 

GCPのCloud FunctionsでPuppeteerを動かす

経緯

ちょっと前に(2018/08)、GCPがNode8対応したとのことでPuppeteerを動かす記事が載っていましたので試してみました。記事によると以前のGCPでPuppeteerを動かそうと思ったら、クラウドにしてはそれなりにヘビーな環境が必要になっていたようです。
まぁこれはAWSでも同じことが言えますね。果たしてGCPはいかに。

cloud.google.com

Cloud Functionsの課金

初めて使うということと、お試しであるとうことで、おいくら万円?ってのが、まずありますよね。ざっくりまとめると次のとおり。

  • 呼び出し : 0.0000004 [$/回]
  • コンピューティング(メモリ) : 0.0000025 [$/GB秒]
  • コンピューティング(CPU) : 0.0000100 [$/GHz秒]
  • データ転送 : 上り無料、下りは 0.12 [$/GB]
  • ローカルディスク : 使わないつもりなので無視

ただ、無料階層というものがあり
・200万回の呼び出し
・メモリ 400,000 [GB秒]
・CPU 200,000 [GHz秒]
・データ転送下り~5GB
が付いてますので、実質無料で試せそうです。

無料階層を使用する場合でも、有効な請求先アカウントが必要です

Pricing  |  Cloud Functions Documentation  |  Google Cloud

でもまぁ、登録は必要です。

Functionを作成します

関数を作成

f:id:ryoichi0102:20180918202837p:plain

関数の詳細を入力します

関数の名前を付けて、メモリ容量を選択して(公式では1GBを推奨)、トリガーはHTTP。今回はお手軽お試しということで、ソースコードはインラインエディタを選択。ランタイムはNode.js 8を選択。

公式のブログからソースコードをコピーします。
が、14~15行目のreturn res.send(がつながっててエラーになるので注意

実行する関数には screenshot と入力し、作成ボタンをクリックします。

f:id:ryoichi0102:20180918203103p:plain

くるくる・・・

f:id:ryoichi0102:20180918203832p:plain

失敗するとこうなります (さきほどの14〜15行目が原因でした)

f:id:ryoichi0102:20180918204241p:plain

無事に成功するとこうなります

f:id:ryoichi0102:20180918204328p:plain

関数名クリックで詳細が見れます

URLがすでに出てるのでAWSで言うと API GatewayAWS Lambda って感じなんでしょうきっと。

f:id:ryoichi0102:20180918204355p:plain

Postmanから叩いてみる

無事にscreenshot関数の結果が返ってきました\(^o^)/

f:id:ryoichi0102:20180918204523p:plain

感想

Puppeteerをクラウドで動かそうとした場合パッケージが大きくて、アップしたり動かしたりするのが結構大変です。
その点GCPのCloud Functionsではインストール(npm i)がクラウド側で行われるのでライトな印象です。

Puppeteerといえば・・・本を執筆しました

「これが言いたかっただけじゃないの?」というツッコミは置いといて…

Puppeteerの入門書が秀和システムから出版されました。表紙は鶴田謙二さん。
表紙目当てで買って頂ける方もいらっしゃるようです。
Node.jsの知識がなくてもWebスクレイピングができるようになれるよう書きました。

www.shuwasystem.co.jp

Amazonのリンクはコチラ