LINEのおうむ返しbotを徹夜で作ろうとして失敗したギリギリ間に合ったと思ったらやっぱり間に合ってなかった話会津大学 学部一年 しんぶんぶん
View Slide
自己紹介- 会津大学学部一年生- 人間- 普段はNuxt.jsとかNode.jsとかGoとか- SGG(学生団体)の運営- 興味分野はアイデンティティ管理・認証系- チキング先輩と一緒に卒業したいhttps://shinbunbun.info/@shinbunbun_
深刻なネタ不足- 昨日まで期末試験だったのでネタを考えてる時間がなかった- とりあえず徹夜で何か作ろうと思い、LINEのおうむ返しbotに挑戦してみた- が、大量のバグが発生して失敗した🥺- と思ったが、LTの順番が遅かったのでギリギリ間に合った(?)- と思ったけど間に合ってなかった
技術構成- openssl, socket.hなどのライブラリを使用し、C言語でソケット通信を実装- ちょうど授業でC言語を勉強したので...- サーバはAWSのLightsailにデプロイ- 証明書はLet’s Encrypt※Webhookサーバはhttps対応じゃないといけないという制約がある
最初につまづいた点- そもそもCでサーバ書いたことない- しかも、TLS対応のサーバを作ってるサンプルがかなり少ない- 色々調べながら、最初は自己署名証明書でとりあえずサーバを立ててみた
サーバの用意で普通に手間取る- 普段サーバレスで開発しているので、そもそもサーバを立てるのに手間取った- Let’s Encryptの使い方とか普通に覚えてなかった🥺- なぜか443ポートが開けられなかった
Content-Lengthつけ忘れて3時間くらいハマった- 途中でリクエストが止まってしまって何もエラーが出なかったので、全く原因がわからなかった- 通りすがりの真っ黒い先輩が指摘してくれた- ありがとうありがとう...
未定義動作踏みすぎ- 主に変数の初期化し忘れ
やっと動いたかと思いきや...- なぜかサーバ立ち上げて1発目のリクエストしか通らない問題が発生- グローバル変数とかスコープをミスってせいで、前のリクエストのヘッダーがそのまま残ってた- その後もSSL_readで謎のdelayが発生してて、1リクエストごとに20秒くらい待たないと返信が返って来ない問題が発生
三度目の正直はなかった- 前述2つの問題が解決して一見完成したかのように思えたが、何件かメッセージを送ると返信が来なくなるという問題が発生- どうやら前のメッセージのreplyTokenとメッセージが変数に残ってるっぽい- が、原因はわからず未解決
眠すぎ- 昨日の夜から完徹で作ってたので眠すぎて死にかけた- 徹夜よくない
結局どこまで出来たの?
-⭕TLS対応のサーバを立てる-⭕Webhookを受け取る-⭕JSONをパースしてメッセージの中身を取り出す-⭕リプライAPIを叩く-🔺リプライに成功するあと1時間あれば...どこまで出来たの?
今後の展望- とりあえずバグは全てとりたい- プロトコルやC言語自体への理解が薄いせいでだいぶ苦しんだので、その辺を勉強したい- おうむ返しだけじゃなくて他の機能も色々実装したい
次回: CのLINEBot SDK作ってみた