radioc@?

レディオキャットハテナ

【勉強会メモ】関西Node学園 3時限目

nodejs.connpass.com

  • 日時:2018/08/03 (金) 19:00 〜 21:30
  • 場所:LINE KYOTOオフィス

今回も多種多様なテーマでどの発表もためになる内容でした。個人的にはpuppeteer、Serverless Frameworkあたりは気になってはいたものの手が出せていない領域だったので、具体的な活用方法が聞けたのはとても良かったです。

LINEの京都オフィスに初めて行ってきましたが、地下組織のアジトみたいなかっこいい雰囲気でした。

node-canvasでアニメーションGifをつくって遊ぶぞ!

kawasako3 さん

www.slideshare.net

  • ガチャ演出みたいのがあるといい
  • トークに時間軸のあるコンテンツをカジュアルに送りたい

ライブラリ

github.com

github.com

アニメーションを作る基本

  1. 最初に目標値を決める
  2. どのくらいの長さにするか決める
  3. フレーム毎に描画する
  4. 変化に緩急をつける

LINE Messaging API で動かす

GifアニメーションBOTから送れない

⇒mp4で作る

学び

  1. Photo movie 的なこともできそう
  2. ただし事前生成じゃないと厳しいかも
  3. Messaging APIではGifアニメは使えない

サンプル

github.com

N-APIとPromise

@mochiya98

N-APIとPromise - Google スライド

C++ Addons

C++連携

  • 速度がほしい
  • jsではできないOSの機能を呼び出したい
  • 全てをjsで書きたい

実際に書いてみると全然わからん

  • V8理解していないとよくわからない概念が多い
  • V8に依存している
  • v8バージョンアップのたびにビルドが必要

N-APIの登場

  • わかりやすい
    • 型がシンプル
  • V8に依存しない
    • 他のjsエンジンでも動く
  • V8バージョンアップの旅にビルドしなくてもいい
  • 10.0.0からstableになった

サンプル

github.com

N-API と Promise

何がしたいか

  • 諸事情でLZW圧縮の亜種をnodeで扱う
  • jsで組んでみるも遅い
  • child_processも遅い

⇒N-APIで組んでみたが問題発生

基本的に同期的

  • イベントループの中で実行
  • 重い処理はイベントループを止める

async_work を使って非同期にする

  • ExecuteCallback
    • 非同期で実行
    • イベントループの外で実行
    • ここで重い処理
    • イベントループの外なので napi_hoge() 関数を呼ぶと落ちる
  • CompleteCallback
    • Excuteが終わるとイベントループのキューで実行
    • イベントループの中で実行
    • jsにcallbackしたり戻り値を作る

非同期にするうえでの注意点

  • C++上で変数のポインタを持っていてもjsの参照カウンタは増えません
  • 自分で参照カウンタを増やしておく

N-APIのPromiseはそんなに難しくないので割愛

参考

blog.kazu69.net

LINEで馬券を購入する

@sbntaminif さん

speakerdeck.com

馬券ネット購入サービス

※参考

noanohakobune.hatenablog.com

LINEで馬券を買ってみたい

  • 馬券を購入するアプリを作りたい

APIHeadless Chrome を使う

developers.google.com

※日本語はところどころ間違いがあるので英語のほうがおすすめ

Headless Chromeとは

  • ヘッドレスで動作する=UIなしで実行
  • Chrome59がインストールされていれば使用可能
  • Chrome機能はほぼ使える
  • コマンドからChromeをUIなしで実行

puppeteer

  • Chromeチームが開発
  • NodeJSでHeadless Chromeを操作するライブラリ
  • Chrome DevToolsの上から操作するAPI
  • 「パペティア」と発音

github.com

Chromeを自動で動かして馬券購入まで

  • await地獄
    • どうしてもリクエストを待つ必要がある
  • コマンドを叩けば馬券が買えるAPIができた

しかしこのMacでしか使えない⇒このAPIをサーバで動かせるようにしたい

  • Hedless Chromeはどの環境でも動く
  • puppeteerはNode v.6.4から
  • AWS LambdaやGCPで動く

Lambdaで実行

github.com

AWS管理コンソールからしか使えない⇒API Gatewayから呼び出す

  • タイムアウトが2分⇒メモリの制限?うまく動かない
  • LambdaからLambdaをコール

どこからでもAPIを呼び出せる⇒ネットワーク経由ならAPIで馬券を購入可能

LINEでAPIを呼び出す⇒LINE Messaging APIを使う

  • 友達追加やメッセージ送信のイベントをトリガーでWebHookを実行
  • LINEに送信した値をAPI GatewayからLambdaに渡す

⇒買えるようになったが送信のみ

応答メッセージ機能

  • メッセージを送ったら1回だけ返却
  • パラメータの中のユーザーIDを使う
  • 自由にユーザーに送信するPush APIは有料

実践編

puppeteerでつまづいたこと

  • 範囲外の要素クリック
  • 画面外の要素のクリックが発火しない
  • 画面を大きくする

waitの使い分け

  • waitFor
    • 指定した時間まで待つ
  • waitForNavigation
    • 引数なし
  • waifForSelector

アピール編

Hedless Chromeの魅力

www.youtube.com

  • 大きな可能性を秘めている
  • どんなWebサービスでもAPI化できる
  • 普段ネットサーフィンしているところを自動化できる
  • APIにすればいつでも呼び出せる
  • 夢が広がる

Warning

岡崎市立中央図書館事件 - Wikipedia

  • 常識的にやりすぎない範囲で

動画で強く話されていること

  • この話はテスト自動化の話ではありません
  • 自動化することができる
  • 普段の作業を自動化する

これこそエンジニアリング⇒自動化やっていこう

AWS Serverless Express 入門

AWS Lambdaを使ってExpressを一瞬で公開する方法

@nkgrnkgr さん

speakerdeck.com

テーマ:AWS Serverless Express

そもそもServerlessとは?

サーバレス・コンピューティング - Wikipedia

Serverless Platform

  • AWS Lambda
  • Azure fuctions
  • GCP CLOUD FUNCTIONS

AWS Lambda

  • pros
    • 1ヶ月100万リクエストまで無料100Mリクエストまで0.2US$
    • 開発者が実行環境のサーバーを準備せずコードをデプロイするだけ
    • HTTPリクエストなど様々なイベントをトリガーに関数を実行する
    • オートスケール
  • cons
    • 初回起動にやや時間がかかる
    • デプロイできるファイルサイズが50MB
    • 1リクエストあたりの最大実行時間が300秒

AWS Serverless Express

github.com

  • LambdaとAPI Gatewayの上にExpressを使用してサーバレスアプリケーションとREST APIを実行できるAWS公式ライブラリ
  • Express のMiddlewareに追加するだけでLambdaで実行可能になる

How to Use

  • npm install するだけ
  • awsServerlessExpress.proxy をかます

LambdaへのデプロイはServerless Frameworkを利用

serverless.com

  • npm install でインストール
  • serverless.ymlで設定

参考

qiita.com

ライブコーディング(省略)