Upgrade to Pro — share decks privately, control downloads, hide ads and more …

LINEのおうむ返しbotを徹夜で作ろうとしてギリギリ間に合ったと思ったらやっぱり間に合ってなかった話

 LINEのおうむ返しbotを徹夜で作ろうとしてギリギリ間に合ったと思ったらやっぱり間に合ってなかった話

Yuto Takamune

December 04, 2021
Tweet

More Decks by Yuto Takamune

Other Decks in Programming

Transcript

  1. LINEのおうむ返しbotを徹夜で作ろうとして
    失敗したギリギリ間に合ったと思ったらやっ
    ぱり間に合ってなかった話
    会津大学 学部一年 しんぶんぶん

    View Slide

  2. 自己紹介
    - 会津大学学部一年生
    - 人間
    - 普段はNuxt.jsとかNode.jsとかGoとか
    - SGG(学生団体)の運営
    - 興味分野はアイデンティティ管理・認証系
    - チキング先輩と一緒に卒業したい
    https://shinbunbun.info/
    @shinbunbun_

    View Slide

  3. 深刻なネタ不足
    - 昨日まで期末試験だったのでネタを考えてる時間がなかった
    - とりあえず徹夜で何か作ろうと思い、LINEのおうむ返しbotに挑戦
    してみた
    - が、大量のバグが発生して失敗した🥺
    - と思ったが、LTの順番が遅かったのでギリギリ間に合った(?)
    - と思ったけど間に合ってなかった

    View Slide

  4. 技術構成
    - openssl, socket.hなどのライブラリを使用し、C言語でソケット通信を実

    - ちょうど授業でC言語を勉強したので...
    - サーバはAWSのLightsailにデプロイ
    - 証明書はLet’s Encrypt
    ※Webhookサーバはhttps対応じゃないといけないという制約がある

    View Slide

  5. 最初につまづいた点
    - そもそもCでサーバ書いたことない
    - しかも、TLS対応のサーバを作ってるサンプルがかなり少ない
    - 色々調べながら、最初は自己署名証明書でとりあえずサーバを
    立ててみた

    View Slide

  6. サーバの用意で普通に手間取る
    - 普段サーバレスで開発しているので、そもそもサーバを立てるの
    に手間取った
    - Let’s Encryptの使い方とか普通に覚えてなかった🥺
    - なぜか443ポートが開けられなかった

    View Slide

  7. Content-Lengthつけ忘れて3時間くらいハマった
    - 途中でリクエストが止まってしまって何もエラーが出なかったの
    で、全く原因がわからなかった
    - 通りすがりの真っ黒い先輩が指摘してくれた
    - ありがとうありがとう...

    View Slide

  8. 未定義動作踏みすぎ
    - 主に変数の初期化し忘れ

    View Slide

  9. やっと動いたかと思いきや...
    - なぜかサーバ立ち上げて1発目のリクエストしか通らない問題が
    発生
    - グローバル変数とかスコープをミスってせいで、前のリクエストのヘッ
    ダーがそのまま残ってた
    - その後もSSL_readで謎のdelayが発生してて、1リクエストごとに
    20秒くらい待たないと返信が返って来ない問題が発生

    View Slide

  10. 三度目の正直はなかった
    - 前述2つの問題が解決して一見完成したか
    のように思えたが、何件かメッセージを送る
    と返信が来なくなるという問題が発生
    - どうやら前のメッセージのreplyTokenとメッ
    セージが変数に残ってるっぽい
    - が、原因はわからず未解決

    View Slide

  11. 眠すぎ
    - 昨日の夜から完徹で作ってたので眠すぎて死にかけた
    - 徹夜よくない

    View Slide

  12. 結局どこまで出来たの?

    View Slide

  13. -
    ⭕TLS対応のサーバを立てる
    -
    ⭕Webhookを受け取る
    -
    ⭕JSONをパースしてメッセージの中身を取り出す
    -
    ⭕リプライAPIを叩く
    -
    🔺リプライに成功する
    あと1時間あれば...
    どこまで出来たの?

    View Slide

  14. 今後の展望
    - とりあえずバグは全てとりたい
    - プロトコルやC言語自体への理解が薄いせいでだいぶ苦しんだの
    で、その辺を勉強したい
    - おうむ返しだけじゃなくて他の機能も色々実装したい

    View Slide

  15. 次回: CのLINEBot SDK作ってみた

    View Slide