27
ADVENTAR の Bot を作る with Haskell ひげ

ADVENTAR の Bot を作る with Haskell

Embed Size (px)

Citation preview

Page 1: ADVENTAR の Bot を作る with Haskell

ADVENTAR の Bot を作るwith Haskell

ひげ

Page 2: ADVENTAR の Bot を作る with Haskell

$whoami名古屋の学生

研究テーマ: 型システムについて

好きなジャンル: 言語処理系

好きな言語: Haskell, 次点で Ruby

その他:

Haskell でバイトしてる

NGK2017b で Haskell × Elm × Kotlin でアプリを作った話について LT する予定

Page 3: ADVENTAR の Bot を作る with Haskell

本題

Page 4: ADVENTAR の Bot を作る with Haskell

ADVENTAR というサイトを知ってますか?

アドベントカレンダーの作成や登録を管理してくれる〇iita と違って何でもありって感じ(雑)

Page 5: ADVENTAR の Bot を作る with Haskell

悲しいことに...

〇iita と違い RSS のような機能が ADVENTAR には無い

Page 6: ADVENTAR の Bot を作る with Haskell

なので去年は作った

Google App Script でスクレイピング + Slack に通知(貧者なので GAS を使った)

Page 7: ADVENTAR の Bot を作る with Haskell

しかし

Page 8: ADVENTAR の Bot を作る with Haskell

今年の ADVENTAR のソースを見てみると...

Page 9: ADVENTAR の Bot を作る with Haskell

今年の ADVENTAR のソースを見てみると...

Page 10: ADVENTAR の Bot を作る with Haskell

React...だと...

Page 11: ADVENTAR の Bot を作る with Haskell

静的な DOM が生成されないので スクレイピングできない...

Page 12: ADVENTAR の Bot を作る with Haskell

そこで Headless Browser(e.g. Selenium, PhantomJS)

Page 13: ADVENTAR の Bot を作る with Haskell

この時点で GAS はもう...

困った...

Page 14: ADVENTAR の Bot を作る with Haskell
Page 15: ADVENTAR の Bot を作る with Haskell

CircleCI 2.0 で cron 追加されたしDocker イメージをプルすれば...

任意のプログラムを定期実行できる!

Page 16: ADVENTAR の Bot を作る with Haskell

プログラムの流れ

コレを Haskell でやる!(なぜ)

Page 17: ADVENTAR の Bot を作る with Haskell

各種 Haskell ライブラリ(ほぼおまけ)

webdriver: Headless Browser を操作できる

scalpel: 関数型パーサーっぽいスクレイパー

aeson: JSON デコーダー・エンコーダー

slack-api: Slack API を簡単に扱える

Headless Browser は Java のスタンドアローンなselenium-serverを使った

CircleCI のときは docker-compose でコレを使った

Page 18: ADVENTAR の Bot を作る with Haskell

cron で回す

Page 19: ADVENTAR の Bot を作る with Haskell

いい感じ

Page 20: ADVENTAR の Bot を作る with Haskell

いやいや...

Page 21: ADVENTAR の Bot を作る with Haskell

Bot ならこっちのメッセージからも動けや(?)

という強い圧力を感じた(適当)

Page 22: ADVENTAR の Bot を作る with Haskell

GAS から GitHub に commit すればいいんじゃね?

Page 23: ADVENTAR の Bot を作る with Haskell

いい感じ

Page 24: ADVENTAR の Bot を作る with Haskell

まとめ

Page 25: ADVENTAR の Bot を作る with Haskell

まとめReact系の Webページには Headless Browser

CircleCI + Docker で任意のプログラムを実行可

GAS から commit で好きなタイミングでも実行可

ただし無料枠は 1500 build min/month

Haskell でも作れるよ!

Page 26: ADVENTAR の Bot を作る with Haskell

おしまい

Page 27: ADVENTAR の Bot を作る with Haskell

ちなみに

細かい話は で記事にする予定