コドモン Product Team Blog

株式会社コドモンの開発チームで運営しているブログです。エンジニアやPdMメンバーが、プロダクトや技術やチームについて発信します!

言の葉、集める。No More, 忘れる。- 生成AI時代でも、ペアプロを続ける理由 -

こんにちは、プロダクト開発部 部長の松浦です。

すっかり春になり、心はパステルです。 春といえば新緑の季節、木々が色づいてきますよね。そんな季節に考えたことを綴ってみました。

口から出た音を、葉っぱに例えた人がいる

「言葉」という文字を改めて見ると、ステキな情緒があります。「口から出た音を、葉っぱのようだ」と例えた人がいます。

言の葉が口から出て、そのまま地面に落ちていく。私たちの会話は、毎日そうやって生まれ、そしてすぐに散っていきます。 そんなことを考えていたら、ふと疑問が浮かびました。 もしその落ち葉をすべて拾ったら、それがどんな木についていたか、どんな樹木の姿だったか、復元し、想像できるのだろうか?

本当の樹木の話であれば、それはさすがに難しいでしょう。散った葉から、もとの木の姿を思い浮かべることは困難です。

でも、「言の葉」だとしたらどうでしょう。チームの会話の中に散った言葉を一つ一つ拾い集めていけば、そのとき何を考えていたのか?なぜその判断をしたのか?チーム内でどんな文脈があったのか?どんな木に、どんなふうについていたのか?意外と思い出せるのではないでしょうか。

そんなことを思い、落ち葉拾いをはじめてみました。


落ち葉を拾う仕組みを作った

私たち、コドモンのプロダクト開発部では、コミュニケーションにGatherを使っています。これはオンラインのワークスペースというか、言わば「職場」のようなツールです。物理的には別な場所にいるものの、あたかも同じ空間にいるかのような雰囲気を作ってくれる、不思議なツールです。 このおかげで、組織内のみなさんの「距離感」がちょうど良く、ふらっと誰かに話しかけやすいし、ちょっとした雑談から大事なアイデアが生まれたり、意思決定に至ることもあります。

ただ、リアルタイムな文字起こしの機能は備わっていません。 会話に花が咲いても、その言の葉はやがて散っていきます。

この落ち葉を拾ってみることにしました。世の中には良いツールがありそうなものだと思ったのですが、意外と無かったので作ってみました。 (作ってみたいという気持ちが強く、あまりちゃんと探さなかったというのはヒミツです)

実際、アプリと言っても、macOSのマイク音声、システム音声をキャプチャし、音声モデルによってテキスト化する、いわゆる「Speech To Text」です。 私がいままで経験したことのないRustやSwiftで、(Claude Codeが)アプリを作っていきました。 私がこだわりたかったのは「文字起こしが速いこと」と「外部通信が発生しないこと」でした。 色々と検討を経て、オフラインのmacOSネイティブアプリになりました。

実際に作ったツールは、自分のマイク入力と相手の声の2系統で録音するだけのシンプルなものです。生の会話ログさえあれば、LLMに依頼するだけで、良い感じに整形できます。 このあたりの技術詳細はさておき(Tech Blogなのに!)、ある程度満足なものが出来上がり、1か月間くらいドッグフーディングも兼ねて常用しています。とても便利です。

文字起こしアプリ(音声なくてごめんなさい〜二人の会話を拾っています。なんとなくイメージは伝わるかと!)


なんでこうなんだっけ? → なんでその記録がないんだっけ?

コドモンではいままで、ペアプログラミングを実践してきました。プロダクトや開発で必要な知識はチーム内で循環していたし、コードにも蓄積されていました。ドキュメントもありました。

でも、人の記憶の量と比べると、記録として残っているものはやはり少ないです。

当たり前ですが、時間は有限です。プロダクト開発では時間と余裕はなぜか少なくなりがちです。過去の意思決定の背景は、きちんと記録できていませんでした。なぜその設計にしたのか?なぜその選択をしたのか?そういった「Why」の部分です。ある程度の粒度や大きさの意思決定の記録はあるものの、口頭のコミュニケーションで生まれた「小さな決定」や「背景」は抜け落ちていました。

これは「開発あるある」ですし、仕方がない部分もあります。エンジニアとしては、ユーザーのみなさんへ早く価値を届けたい気持ちが先行しますし、この気持ちを優先してしまいます。私もその一人です。 いちいちキーボードで入力し、整形し、共有のために文章を書くのも大変です。実際にやれば数分で出来るはずなのに、気持ち的には30分かかる作業に思えてしまいます。

チームでは毎朝会話はしているのです。ペアでの会話も常時あります。その中で自然と生まれる文脈、判断の背景、「あのときこう考えたよね」という議論や合意。 ユーザーのことを考え、言の葉を重ね、会話に花を咲かせる。開発における最も素敵な瞬間の一つです。 このような素敵な瞬間は、記憶にはあるものの、記録されていないだけなのです。良いアイデアはすぐに形にしたい。コードで表現したい。結局きちんと意思決定を記録できず、「どうしてこうしたんだっけ?」とあとで思い出しにくくなる。このような連鎖が続いてしまいます。

チームでの活動の思い出と共に、散りゆく花と葉。こう思うと、風情はあります。しかし、プロダクトの開発という目線だと、意思決定の記録が存在しないのは、風情よりも不便が上回ってしまいます。


一人語りは、続かなかった

せっかく作った文字起こしアプリ、最初は一人語りでも使ってみました。思考が整理されるのもありますし、音声入力の代わりにもなりそうですし。

ただ、どうもしっくり来ません。言葉が続かないのです。

「うー」とか「あー、えっと、まー」のようなフィラーが増えていく。話し始めても、すぐに詰まる。これはシンプルに、私の「ひとりごとスキル」が低いのかもしれません。

でも、なぜ言葉が続かないのか考えてみると、一人だと自分の視点でしか話さないからだと気づきました。数日後、一旦忘れてしまうと、そのコンテキストを復元できません。当時の自分の視点もどこかに固定されていて、「何を前提にこの話をしたんだっけ?」が思い出せなくなります。

一人語りの文字起こしを見返しても、「で、何が言いたかったんだ?」となってしまいます。他者の視点がなく、アイデアの広がりもありません。言の葉を集めてみても、痩せた木しか見えてこないのです。


誰かがいると、刺激が続く

他にも気づいたことがあります。ペアプロからもらっていたものは、「言葉が続く」だけではありませんでした。

このブログを書く前に、開発部内で私が作った文字起こしアプリを披露(自慢)してみました。すると、それに触発されて、チームで使う開発ツールを自作してくれるエンジニアがいました。

私もそれに刺激を受け、次回作を考えています。

こうやって互いに影響し合えるのは、エンジニア冥利に尽きます。やりゃいいことは、やればいい


会話の先にあるもの

AI時代、今後の開発がどこまで速くなるかを考えたとき、その答えは「会話が最速」なのではないかと思っています。 (逆に、会話を超える速度の情報理解に、私はついていく自信がありません。)

会話したものがまとめられ、構造化され、コードとして出てくる。そのサイクルがどれだけ速く回るか。それが開発の速さに繋がりそうです。

会話の速度を超えるとしたら、過去の会話がAI用のコンテキストとして整い、AIがスッと推論して出してくる状態なのではないでしょうか。そこに到達できたとき、はじめて会話の壁を越えられるような気がしています。

今まで書いた通り、コドモンには「ペアでの会話」という習慣があります。これは意外と、生成AI時代においても活きるのではないかと思っています。ペアプロをやってきたからこそ、その仕組みとメリットをもっと増幅したい。 チームの会話が自然と記録になり、コンテキストが残り、次の判断に使える。そういう流れを作れたらいいなと思っています。 (きっとこのあたりについて、そのうち誰かがブログを書いてくれるでしょう)


おわりに

落ち葉を拾う仕組みを作ったら、思わぬ発見がありました。

一人じゃ、言葉が続きませんでした。 誰かがいると、言葉が続きました。刺激も続きました。 このような循環は、AIのトークンでは生成できません。やはり人間同士のトークから生まれるものです。

ペアプロの価値を再発見した、そんな春の出来事でした。