LINE のスクショ記事に物足りなくて、会話シミュレーターを作った

LINE のスクショ記事に物足りなくて、会話シミュレーターを作った

面白い 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通でオチ。タグは「上司」「深夜」。

ネタ管理画面。左が登録済みネタの一覧、中央が会話の編集欄、右がプレビュー。上部から JSON の読み込みや MP4 書き出しができる

AI に任せるうえで工夫したのは、次の2点です。

ひとつは、データの書き方の説明書そのものを、AI が読める形で用意したことです。AI はネタを作る前にまずこの説明書を読み、決まった形式で会話を書きます。

もうひとつは、登録の入口を1つの処理にまとめたことです。AI からの登録、コマンドからの登録、ほかのプログラムからの登録と、入口は3つありますが、中身のチェックや整形はすべて同じ処理を通ります。書き方に間違いがあれば「3通目の話し手の指定がおかしい」のように、どこが・なぜダメかを返すので、AI が自分で直して送り直せます。人が間に入って手直しする場面がほとんどなくなりました。

動いたら、次を足す

振り返ると、このツールは最初から全体を設計して作ったわけではありません。

  1. まず、LINE のようにメッセージが流れる画面を作った
  2. うまく動いたので、AI が書いた会話を読み込めるようにした
  3. それも動いたので、AI から直接登録できるようにした
  4. 動画として書き出せれば、そのまま SNS に投稿できると考え、mp4 の書き出しを付けた

1つ作って動いたら、「だったら次はこれもできるのでは」と1つ足す。その繰り返しで、作業フォルダの日付で言えば10月3日から4日にかけて今の形になりました。最後に付けた動画書き出しでは、通知音も鳴るようにしています。音は自前で合成したもので、本家のロゴや音源は使っていません。

見せてみたら、妹には伝わらず、母は爆笑した

ネタを何本か作って、まず妹に送ってみました。反応は「いったいこれは何なの?」。面白さはまったく伝わりませんでした。妹は、LINE を送ると AI が返事をしてくれるようなものを想像していたそうです。

そこで今度は母に、「面白い LINE の会話(フィクション)を再現するシミュレーター。ジョークアプリだけど」と前置きをしてから見せました。すると、見てくれた母から「爆笑した」と返ってきました。

同じ動画でも、何を見せられているのかが分かっているかどうかで、受け取られ方がまったく違う。これは作ってみて、人に見せてみて初めて分かったことでした。

不満は、作ってしまえば解消できる

人生を送っていると、面白いものにたくさん出会います。でもその中には、今回の私のように「もう少しこうだったらいいのに」と不満が残るものも少なくありません。そんなとき、その不満をエンジニアリングで解決してしまおうと考えるのが、私という人間です。

今回の経験から言えるのは、次のような不満なら、仕組みとして形にする価値があるということです。

  • 何が足りないのかを、ひと言で言える不満であること。 今回なら「画面がもっと見たい」。ここがはっきりしていれば、作るものもぶれません。
  • 小さく動くものから始められること。 最初は画面が動くだけで十分でした。動いたものを見てから次を決めれば、全体を最初に決めきる必要はありません。
  • 手作業が繰り返し発生していること。 台本を書く、登録する、動画にする。毎回同じ手順になる部分は、AI や仕組みに任せられます。

反対に、一度きりで終わる作業や、すでにある道具で十分にまかなえる不満なら、わざわざ作る必要はないと思います。

それから、出来上がったものを人に見せるときは、「これは何か」を最初に伝えることも大切でした。中身が同じでも、前置きひとつで伝わり方が変わります。

ジョークアプリという、言ってしまえばくだらない題材です。それでも、データの管理から AI との連携、動画の書き出しまで、ひとつのシステムとして完成させてしまう。そういう変わり者のエンジニアもいるのだと、知っていただけたらうれしいです。仕事でも遊びでも、何か「こうだったらいいのに」を抱えている方がいれば、エンジニアリングで手伝えることがあるかもしれません。


使用技術: Python, JavaScript, Playwright, ffmpeg, MCP, Claude Code

同様の開発をご希望ですか?

この事例と同様の開発やカスタマイズについて、
お気軽にご相談ください。

お問い合わせ