面白い LINE のやりとり(フィクション)を、本物そっくりの画面で再生して動画にできる「おもしろLINEトークシミュレーター」を作りました。
台本を書けば、相手が「入力中…」になり、吹き出しが届き、既読がつき、返信が来る。その流れをスマホの画面のまま再生し、SNS にそのまま投稿できる縦長の動画として書き出せます。
きっかけは、ニュースサイトで毎日のように目にしていた「LINE のやりとり記事」への、ちょっとした不満でした。
見たかったのは、トーク画面そのものだった
私は Yahoo!ニュースをよく見ます。そこには、LINE のやりとりをアイキャッチにして、その会話をネタにした記事がたくさん公開されています。気になってつい開いてしまうのですが、読み終わるといつも少し物足りなさが残りました。
私が見たかったのは、やりとりの LINE 画面そのものです。ところが記事の中で画面が出てくるのはほんの少しで、大半は会話の説明や感想の文章でした。会話の面白さは、文字で説明されるより、画面で見たほうがずっと伝わります。相手がなかなか返信しない間、既読がついたまま止まる沈黙、そこに届くひと言。そうした「間」こそが面白いのに、スクリーンショット数枚ではそれが抜け落ちてしまいます。
だったら、画面が主役になる何かを自分で作れないか。それが開発の動機です。
台本を書くだけで、人間らしい「間」で再生される
作ったのは、パソコンのブラウザで動くスマホ風のトーク画面です。会話を1行ずつ書いておくと、それを自動で再生してくれます。

いちばんこだわったのは、再生のテンポです。メッセージを一定間隔で並べるだけでは、どうしても機械的に見えてしまいます。そこで、実際の人の動きを想像しながら、次のような間合いを自動で計算するようにしました。
- 長い文ほど「入力中…」が長く表示される(打つのに時間がかかるため)
- 話し手が交代するときは、相手の発言を読んで考える時間を少し長めに取る
- 同じ人が続けて送るときは、間を短くする
- ときどき、返信までに妙な沈黙が入る

実際の計算部分はこのくらいの短いコードです(プレイヤーの index.html から抜粋)。
const think = turn ? 1500 + rnd() * 2000 : 600 + rnd() * 900; // 相手の発言を読む・考える
typing = type === "stamp" ? 300 : Math.min(500 + len * 140, 4500); // 打つ時間
gap = (think + typing) * jitter;
if (turn && rnd() < 0.18) gap += 2000 + rnd() * 3000; // ときどき気まずい沈黙
話し手が交代するとき、18% の確率で2〜5秒の「気まずい沈黙」が入ります。この沈黙があるだけで、画面の向こうに人がいる感じがぐっと増しました。オチの前に「溜め」を作りたいときは、待ち時間をメッセージごとに指定することもできます。
台本は、次のように1行1メッセージで書けます。
日付: 10/4(日)
相: 今日なんの日か覚えてる? @08:12
自: 日曜日 @08:30
相: [😇]
「相」が相手、「自」が自分、[ ] で囲むとスタンプ、行末の @ が時刻です。間合いのことを考えずに会話だけ書けば、あとはツールが人間らしく演じてくれます。
ネタづくりは AI に頼み、登録までそのまま任せる
画面が動くようになると、次はネタ(会話)をどう用意するかが問題になりました。毎回自分で台本を書くのは大変です。そこで、生成 AI に会話を書いてもらうことにしました。
最初は、AI が作った会話のデータ(JSON というテキスト形式)を、管理画面から読み込めるようにしました。これがうまく動いたので、さらに一歩進めて、AI がツールに直接ネタを登録できるようにしました。AI と外部の道具をつなぐ仕組み(MCP)に対応させたことで、Claude Code などの AI に、次のように頼むだけで済むようになっています。
line-joke の MCP を使って、「上司からの深夜LINE」をテーマにしたネタを5本作って登録して。
各ネタ10〜12通、最後の1通でオチ。タグは「上司」「深夜」。

AI に任せるうえで工夫したのは、次の2点です。
ひとつは、データの書き方の説明書そのものを、AI が読める形で用意したことです。AI はネタを作る前にまずこの説明書を読み、決まった形式で会話を書きます。
もうひとつは、登録の入口を1つの処理にまとめたことです。AI からの登録、コマンドからの登録、ほかのプログラムからの登録と、入口は3つありますが、中身のチェックや整形はすべて同じ処理を通ります。書き方に間違いがあれば「3通目の話し手の指定がおかしい」のように、どこが・なぜダメかを返すので、AI が自分で直して送り直せます。人が間に入って手直しする場面がほとんどなくなりました。
動いたら、次を足す
振り返ると、このツールは最初から全体を設計して作ったわけではありません。
- まず、LINE のようにメッセージが流れる画面を作った
- うまく動いたので、AI が書いた会話を読み込めるようにした
- それも動いたので、AI から直接登録できるようにした
- 動画として書き出せれば、そのまま SNS に投稿できると考え、mp4 の書き出しを付けた
1つ作って動いたら、「だったら次はこれもできるのでは」と1つ足す。その繰り返しで、作業フォルダの日付で言えば10月3日から4日にかけて今の形になりました。最後に付けた動画書き出しでは、通知音も鳴るようにしています。音は自前で合成したもので、本家のロゴや音源は使っていません。
見せてみたら、妹には伝わらず、母は爆笑した
ネタを何本か作って、まず妹に送ってみました。反応は「いったいこれは何なの?」。面白さはまったく伝わりませんでした。妹は、LINE を送ると AI が返事をしてくれるようなものを想像していたそうです。
そこで今度は母に、「面白い LINE の会話(フィクション)を再現するシミュレーター。ジョークアプリだけど」と前置きをしてから見せました。すると、見てくれた母から「爆笑した」と返ってきました。
同じ動画でも、何を見せられているのかが分かっているかどうかで、受け取られ方がまったく違う。これは作ってみて、人に見せてみて初めて分かったことでした。
不満は、作ってしまえば解消できる
人生を送っていると、面白いものにたくさん出会います。でもその中には、今回の私のように「もう少しこうだったらいいのに」と不満が残るものも少なくありません。そんなとき、その不満をエンジニアリングで解決してしまおうと考えるのが、私という人間です。
今回の経験から言えるのは、次のような不満なら、仕組みとして形にする価値があるということです。
- 何が足りないのかを、ひと言で言える不満であること。 今回なら「画面がもっと見たい」。ここがはっきりしていれば、作るものもぶれません。
- 小さく動くものから始められること。 最初は画面が動くだけで十分でした。動いたものを見てから次を決めれば、全体を最初に決めきる必要はありません。
- 手作業が繰り返し発生していること。 台本を書く、登録する、動画にする。毎回同じ手順になる部分は、AI や仕組みに任せられます。
反対に、一度きりで終わる作業や、すでにある道具で十分にまかなえる不満なら、わざわざ作る必要はないと思います。
それから、出来上がったものを人に見せるときは、「これは何か」を最初に伝えることも大切でした。中身が同じでも、前置きひとつで伝わり方が変わります。
ジョークアプリという、言ってしまえばくだらない題材です。それでも、データの管理から AI との連携、動画の書き出しまで、ひとつのシステムとして完成させてしまう。そういう変わり者のエンジニアもいるのだと、知っていただけたらうれしいです。仕事でも遊びでも、何か「こうだったらいいのに」を抱えている方がいれば、エンジニアリングで手伝えることがあるかもしれません。
使用技術: Python, JavaScript, Playwright, ffmpeg, MCP, Claude Code