RubyKaigi 2025、お疲れ様でした。
今年も発表者の末席を務めさせていただきました。
資料は以下です。
今年も英語での発表をしたわけですが、英語での登壇準備は年を追うごとにツールのノウハウが積み重なっていくのを感じ、特に今年は英語化自体は*1楽になったなあと思っています。どういう感じのことをしたか後学のため記事を置いておこうと思います。
全体にMacOSのツールを使っています。真似する際は環境によって適宜置き換えてください。
全体のフロー
- 日本語で箇条書きで資料を用意する
- 一度、その内容で日本語で発表練習をする
- その内容を録音して文字起こしする
- 文字起こしした内容を英訳する
- 同時に、箇条書きの日本語資料を英訳する
- あとは微調整
- 長さが適切になるようスクリプトを
say
コマンドに噛ませる - スライドと資料がアラインするように相互の内容を調整する
- 長さが適切になるようスクリプトを
順番に解説します。
日本語で箇条書きで資料を用意する
まず日本語でOK、雑でOKなので通しで資料を作ってしまいます。
RubyKaigiでの発表は去年から Marpit を利用しており、Markdown+箇条書きで資料ができるようになっているので便利です。コードサンプルとか作図とかは後回しにして大丈夫です。次の「通しで発表」のための最低限のアウトラインでOK。
一度、その内容で日本語で発表練習をする
次に、スライドを写しながら一通り日本語で喋っちゃいましょう。で、その内容を録音します。
録音はMacで普通にQuickTimeとかを使いました。日本語で喋った音声を m4a 形式(なんでいいんですが)にエクスポートして保存しておきます。
発表を文字起こしする
Google AI Studio に当該の音声ファイルをアップし、文字起こししてねってお願いしたら、まあ大体OKな日本語スクリプトが手に入ります。
Meet等の日本語文字起こし機能も試したんですが、無料/低価格でできる範囲ではGoogle AI StudioのGemini(2.5)が最もコスト対品質がいい感じがしました。好みもあると思いますが。
ちなみにこの「日本語で喋って一度文字起こしする」というワザップは、以前どこかのPodcastでまつもとゆきひろさんがされているとおっしゃっていたので真似したという経緯です。 Matz, Thanks!
文字起こしした内容を英訳する
次に、返す刀でその日本語の文字起こしを全文英語にさせます。無論、若干は手直ししておきます。
今回はそのままGoogle AI Studioのチャットを再利用しています。少しでもコンテクストが多くなるように...。
ちなみに txt ファイルをアップロードしても何やらうまく読んでくれなかったので、プロンプトにぺたりと貼り付けています。また、30分弱の発表スクリプトでもトークンは 10,000 強ぐらいしか減りませんでした。だいぶ余裕。論文丸っと一個みたいな場合は使えなそうですが。
英語の質はぼちぼちという感じですが十分かなという印象でした。
同時に、箇条書きの日本語資料を英訳する
Marpの資料は全部単一のリポジトリで管理しているので、日本語版の資料もそこに置き、Cursorに読ませた上で「構造を変えないように、英語に翻訳してください」みたいな指示を送ります。
これで数十分後には英語版の資料の叩き台が完成。
一応 今回のスライドの基本的なルール と、Marp公式の how-to-write-slides.md をそのまま mdc 拡張子にして .cursor/rules
に置いておきました。役に立ったのかは謎...。
こういうことができるのはスライドをテキストで管理しているからなので、Marpでもなんでもいいのですがテキスト管理おすすめです。
と、いうことで、ここまでで英語のスライドとスクリプトが手に入っているわけで、これで英語発表らしきことはとりあえず完遂できる状態になります。おめでとう!
とはいえもう若干やるべきことはあります。
長さが適切になるようスクリプトを say
コマンドに噛ませる
英語のスクリプトをそのまま読んでも、発表時間の30分で収まるのかよくわかりませんよね。不安ではありますが、どうやって読んだ時の長さを見積もればいいでしょうか。一回イチから読む?
それもいいのですが Mac の say
コマンドに英語スクリプトを読ませて、その結果を音声ファイルに保存して活用できます。
$ cat script.md | say -r 105 -o rubykaigi-speech.m4a
この rubykaigi-speech.m4a
の再生時間がスピーチ全体の長さの見積りに使えます。
say
コマンドの -r
オプションで、 wpm(words per minute) の指定が可能です(man say
の結果参照)。読む人が英語ネイティブスピーカーでないことを考慮してゆっくり目の数値がいいでしょう。僕は最終的に 105
にしましたが、もっと遅くて良かった感はありました。成果物の m4a を聴きながら調整してください。
ともかく、スピーチ全体の長さの見積りが分かれば、ここからあと20%削るとか、あるいは増やすとか、分量の調整が可能になるというわけです。さらに言えば、この分量の調整自体もAIにやらせることができます。
ちなみにこの say
コマンドで作ったスピーチを定期的に聴くことで実質シャドウイングになり、発表時のスピーチの訓練にもなると思います。
スライドと資料がアラインするように相互の内容を調整する
あとはスクリプトを聴きながらスライドをめくっていき、スライドの文言とスクリプトが乖離していたら直す、を繰り返して発表の自信を深めましょう。
なお、Marpはスライドのコメントで「発表メモ」を残すことができます。 こういう感じ。 今回はそのスライドでどの英語を喋るか対応づけて、発表メモをほぼそのまま読んでました。
あとは発表当日...。
こうやって準備してたので、別に現地に移動してから慌ててスライドを作るということもなくKaigiを楽しめ...でもまあやっぱ Day 3 は色々そわそわしますね。とほほ...。
所感
これほど左様に英語での発表準備は楽になりました。
僕はreading以外の英語はかなりからっきしで、特にwriting/speakingなんて全然自信がないんですが。それでもAIの力を借りれば十分にプレゼンを英語話者の聴衆に伝えることができる(技術的詳細まではわからんけど...)と思いました。
流石に何を喋っているか自分でわからないというのはキツいので多少のreadingの能力は必要かなとは思います。でもある程度投資すれば得られる範囲の力で、あとはAIに任せられる世の中になった〜すごい〜って感想です。
ということで、英語で発表しない言い訳がどんどんなくなっていくのを感じます。AIによって俺たちは勉強しなければならなくなるのだ...。
*1:そもそもの登壇に足るコードやコンテンツを準備する苦しみは毎年変わらない...。