「文字が小さい部分もあるので見にくかったら資料公開済みなので手元で御覧ください」をやりやすくするやつを書かせた

GitHub - o0h/speaker-watch-party · GitHub

登壇するときのスライド、自分はなるべく見やすくなるように気をつけてはいるつもりだけど。
フォントサイズ大きくするとか、コードを黒背景で載せないとか、なるべく視線の移動を小さくするとか。
といっても、限界はあるじゃないですか。会場の明るさとかコントロールできないし、あと座っている位置や前に座っている人とか。

なので、カンファレンス登壇とかの準備時間がしっかり取れている系の登壇は、事前に資料は共有して&導線を分かりやすいところに貼って&ハッシュタグ付けて投稿(予約投稿)して・・・とかって準備はするのだけども。

これがベストなのか?っていうと違うなぁ、そもそも「不便を回避できるように手元で見れるようにした」と言いつつ、「喋りに合わせてスライドをめくるから、耳だけこっちに向けてもらっても手元でスライド合わせるよう要求するの無茶じゃね??」って疑念が、ある時からあったんですよね。

ってことで、ツールを作った。
発表者が開いているスライドと同じページを、ブラウザ上に表示するよってやつです。自動ページめくり&同期するもの。*1

やっていることは単純で、

  1. あらかじめ、発表に使うものとページ番号を合わせたスライドをPDFでサーバーにおいておく*2
  2. 利用者は指定したURLをブラウザで開いておいてもらう
  3. applescriptでKeynoteのイベントをポーリングしておき、スライドがめくられたタイミングでサーバーにページ番号を送る
  4. サーバーから利用者のブラウザに、ページめくりイベントを送信する

というもの。

技術

使っているのはapplescript + frankenphpです。Claude Codeは最初「honoでやるぞ〜」って言ってきたけど、そうだよねnodejsがいいよねーって思ってから、いや!ちょっと待って!!PHPでいけね・・?となり。
使ったことがなかったので、初めてFrankenPHPに触ってみた。
自分はコード書いてないですAnthropicからきた業務委託がやってくれました。

あと、これは自分のためのツールなので、プレゼンテーションツールはKeynote前提です。
というかGoogle Slideとかは、元々そういう機能だかChrome拡張だか無かったっけ?って気がする。未調査。
SpeakerDeckと連携してスライドめくりを〜・・とかも探ったけど、SpeakerDeckのスライドを埋め込んだ上でそれをJSから操作する口がなさそうだったので断念。

使い道とか

大前提として、会場がネットワークに自身がある機会にしか使えないと思っています。
直近であるイベントが(例年通りなら)ネットワークかなり拘って提供してくれているので、いけるかもなーって。

このアプリ自体の通信量は微々たるものなはずだけど、単純にWi-Fi接続数を増やすよう誘導することにはなりそうなので。

その他

作ったきっかけは、#ツナギメエフエム 第149回で「スライドツール作ってみたくなった」みたいな発言があって、「そういえば自分も、プレゼンツールを・・・」って思ったことがあったのを思い出したこと。
tsunagi.me

ニコ動風の字幕をプレゼン上に流すやつとかもあったよなぁ〜とか思い出しつつ。

単なる思いつき・雑なアイディアを、こうやって調査から設計からプロトタイピングまで半自動でやってくれる時代、よくないですね〜。今までだったら、調べる時点で腰が重くて手を出してなかったのにね!!
「他にやるべきことがある時に手を出しちゃう」が捗りすぎている。

あと、使えるようにするにはインターネットに乗っけておく必要があるので*3、どこにしようかな〜と思って久々にVPSを触ったり。放置していたドメインをいじったりした

*1:と言いつつも、本当に1番良いのは「会場のスクリーンだけ見ておけばOK」だと思うし、そういう見やすい・聞きやすい発表になるよう努めるべきだよなーとは思う。自分の登壇、スライド枚数がめっちゃ多いわけではないけど、そこそこ枚数ある&1枚あたりの情報量を少なめに抑えている方だろうな、という自覚があるので

*2:これも自動化できないかなーって思ったけど、SpeakerDeck側との連携を考えるのが面倒くさそうだったので、まぁいっか!ってなった

*3:このくらいならngrokとかでも良いかな?とも思ったけど、プレゼンに使うマシンになるべく負荷を掛けたくない