最近[いつ?]は AI に登壇用のスライドをポン出しさせたという話や, それに対する賛否両論を各所で聞くようになってきました.
そこで私も試しに AI にスライドをポン出しさせてみて, 実際に登壇に耐える品質なのかレビューしてみました. 条件設定は以下の通りです:
- Claude Code を使用
- 題材は tsc.rip の実装リポジトリ
- 詳しくは前回の記事 tsc.rip を支える技術 または 型レベル Web アプリケーション - Object.create(null) を参照
- リポジトリにはソースコード一式と, 構成などを書いた CLAUDE.md が含まれています
- 指示は
tsc.rip を題材に 10 分間の登壇を行うことになりました. 登壇用のスライドを作成してください. 出力形式は PDF でお願いします.のみ- そのため発表のストーリーが意に沿うか・人間が作った時と同じかどうかは評価対象外
- モデルは Opus 5 と Fable 5 (effort は共に high) でそれぞれ出してみて比較
というわけで早速見ていきましょう.
Opus 5

- 表紙はまあ悪くないんじゃないですか

- 見たことある感じの見た目だ! 特にスタイルを指示しないとやっぱりこういう感じになるんだ
- キャプション部分, 文字も小さいしコントラスト比も低くないですか? 後ろの方の人とかちょっと見づらいんじゃないかな
- 「です。」: 他のスライドも含めて一貫して常体なのに, ここだけなぜか敬体が混ざっていますね

- 「The tsc is dead, long live the tsc!」のスタイルはブラウザでサイトを表示した時のものなのだけれど, curl の結果しか紹介していないと何でこんなスタイルなのか伝わりづらそう
- さっきのスライドと同時にブラウザのデモも見せるとか, 口頭でブラウザで見るとこういう感じと補足できていれば良さそう
- 引き続き小さい文字は読みづらいかも
- 「.rip ドメインが取れたので」: 正確な経緯 (script のアナグラムで取っていて持て余していたのを転用した) は伝えていないのでわからないのは仕方ないですが, 捏造はしないでください
- 「せっかくなので」: こういう変な論理の飛躍は自分もあえてやることがあるので良いでしょう

- コード例は最後の 1 行だけで十分なんじゃないかな

- この横並びの図よく見ますよね. 5 つも並ぶと文字も小さくなってかなり読みづらいですし, 適度に折り返すか, 横長のものは縦に並べるのが良さそう
- 「typeeval」はサーバー内部のモジュールの名称なのだけれど, ここでいきなり名前だけ書いても何のことか伝わりづらそう
- typeeval と typescript-go だけ色が違うのはどういった意図があるのかわからなかった
- 肝心のアプリケーション本体が図の中に登場していなくて, 全体像なのに全体の流れがわかりづらい
- リクエストの流れ (CloudFront → Lambda → サーバー → アプリ) と, サーバー内部の型の評価の流れ (サーバー → typeeval モジュール → typescript-go) の二つを同時に説明しようとしてしまっていそう

- 「Program」が何なのかは簡単に説明した方が良い気がします. まあ口頭でも良いか

- 「契約違反」「型エラー」がそれぞれ何を指しているのかわかりづらいかも
- 直すなら「型の評価や読み取りに失敗した時は 500 にする」とか?
- 「ContractError」「TypeError」みたいな内部のエラーの識別子をわざわざ持ち出す必要もなさそう
- そもそも聴衆はこれらのエラーを 500 としていることについてそれほど興味ない気もする

- 特筆すべきことはなさそう

- なんかこの「xxxを、xxxする」みたいな構文もよく見ますね. 洒落臭いのでやめた方がいいです

- q 値の比較を型レベルでやっているのは特筆すべきだとは思うけど, あとの話題は割とどうでも良いので省いてもいいんじゃないかな

- 「ついでに計算もさせる」: ここまでもだいぶ計算させてただろという気がする
/brainfuckと比べても Accept ヘッダの解釈の方がよほど複雑- 単に面白エンドポイントもありますくらいの紹介で良いのでは

- このスライドで伝えたいことがわからないです. 遅いの? 十分に速いの?

- 「テストで殴る」: 殴らないでください. 暴力反対

- 「インターネットに晒す」: 晒さないでください. 必要もないのに攻撃的な言葉を使わない
- 単に「公開する」に直すだけだとまだ違和感があって, 直すとしたら「インターネットに公開する上での安全性」とかかな
- こういう二段組のレイアウトもよく見るけど, 個人的にはスライドの情報量が多くて追いつけなかったり, どこを見たら良いのかわからなくなることが多いです. ちゃんとスライド二枚分の時間をかけて説明するか, そもそもスライドを二枚に分けてほしい

- 「本物の純粋関数型言語」: う〜ん, 意図はわからないでもないけど正確さに欠けるので「れっきとした宣言的プログラミング言語」くらいが無難かなあ
- 「HTTP サーバーくらいは書ける」: Web アプリは書いたけど, HTTP サーバー全体は書いてないので言い過ぎでは?
- IO がないのはもちろんだし, それを除いても HTTP サーバーの全てを型で実装するのは難しい
- 「tsc が Go になったことで (中略) 間に合う速度になった」: TypeScript 実装と速度比較していないのに適当なこと言わないでください
- 「こんなことに使われても壊れない」: 確かに typescript-go はよくできているんだけど, よくできているかの評価の軸としてこれを使うのはおかしいのでは

- https:// 書くなら書くので一貫させましょう
- 最後の curl の例は何を見せたいのだろう? HTML ならブラウザで見せた方が良さそう
総評: 全体を通して視覚的・言語的に読みづらいところが多いし, まとめのスライドに関してはほぼ間違っていて, このまま登壇はできなさそう.
Fable 5

- Opus とは打って変わってシンプル. まあ良いんじゃないですか

- 文字がデカくて好感が持てます

- 「JavaScript 実装」: 実装言語としては「TypeScript 実装」の方が正確そう
- わかりづらそうなら「TypeScript セルフホスト」とかで
- 「置き換わる」: 7.0 はリリース済みなので「置き換わった」でも良いかな
- 「当然」: こういう変な論理の飛躍は自分もあえてやるので一旦良いでしょう
- 小さい文字のコントラスト比はちょっと際どい感じはする (読みやすいとは言えない)
- Opus のものよりはマシだけど

- 横並びも 3 つくらいならまだ読めますね
- 「アプリ」と「サーバー」についてはここでちゃんと説明した方が良さそう
- この後のスライドではアプリとサーバーの存在を前提として話が進んでいる
- 補足的に書かれている説明は読み飛ばしそうだし, そもそも Apache と CGI でピンと来る人にしか伝わらなさそう

- 特筆すべきことはなさそう

- 「__eval.ts」というファイル名は重要ではないので「評価用のファイル」くらいでも良いかも
- 「型を文字列に印字してパースはしない」: 理由が説明されないなら書かないほうがわかりやすそう

- 超重箱の隅だけど, 一行目は「、」のあとで改行した方が読みやすそう
- 「アプリの型エラーが (中略) Internal Server Error になる世界」: 大体そうじゃない?

- ちょっと情報がごちゃついているので, 自分だったら上 4 行は 2 行にまとめるかな

- 「プログラム」が何なのかは簡単に説明した方が良い気がするけど口頭でも良いか
- 「Go 実装だから許される贅沢」: TypeScript 実装と速度を比較したことないのに言い過ぎです
- 停止しないリクエストが作れるのは, 型システムがチューリング完全かどうかというよりは, /brainfuck みたいなふざけたエンドポイントを用意してるのが悪いのでは

- 特筆すべきことはなさそう

- 「何が大変か」と言いつつ「HTML を返す」「Brainfuck」あたりはやるだけみたいな感じで, 結局何が大変なのかわかりづらいです
- 「node_modules に JS が無くても普通に動く」: まあそうなのだけれど, このスライドの話との関連性がよくわからなかった

- 「tsString」みたいな内部の関数名はわざわざ言っても意味なさそう
- タイムアウトや上限の話題はさっきも登場したけど, ここで詳しく説明されるならここだけでも良いかも
- 「信頼境界」: これだけ Lambda 一般の話題なので浮いてそう. この発表で説明する必要性は薄いかも

- 「ネタだけど」の後, Accept ヘッダの解釈とかの型の実装で本気出している部分を紹介した方が良くないですか?
- そもそもネタだったら入力検証はサボって良いみたいな言い草なのも気になるけれど
- GitHub リポジトリ https://github.com/susisu/tsc.rip は private なので, ここに書いても見えないですね
総評: ちょいちょいずれているところはあるけど, まあ最悪このままでも登壇できなくもないか.
まとめ
ポン出しを比較しただけで, 二回目では結果は変わるかもしれないという前提は置いた上で,
- Opus と比べると, Fable はこの手の登壇の文脈をある程度わかっている感じがあっていくらかマシ
- Opus は文字の大きさやコントラスト比, スライドあたりの情報量などの配慮が足りていない上, 言語的なセンスもあまり良くない
- Opus も Fable も共通してちょいちょい間違ったことやずれたことを言っているので, まともな品質を目指すならちゃんとレビューはした方が良いです. してくれ
- 実装途中に人間が考えていたこと (型の評価の実装方針検討など) は AI に伝えていないので, 当然スライドにも全く含まれていないません. もしそれが登壇で伝えたいことなのであればちゃんと AI にも伝えましょう
