ISID テックブログ

ISIDが運営する技術ブログ

技術系イベント登壇における資料作成のコツ

みなさんこんにちは、電通国際情報サービス(ISID)Xイノベーション本部ソフトウェアデザインセンターの佐藤太一です。

少し前になりますが4/23に、私はGo Conference 2022 SpringにおいてGo で RDB に SQL でアクセスするためのライブラリ Kra の紹介というタイトルで登壇しました。

登壇時の資料はこちらです。

このエントリでは、スライドを作成する際に私が考えていることや、情報を整理する方法について説明します。

伝えたいメッセージを作りこむ

私が技術系のイベントに登壇する際に最も重視しているのがメッセージの作りこみです。 視聴者の皆さんにどんなことを伝えたいのか強く意識することで、資料の方向性を決めています。

最初にきっちりと決められれば一番いいのですが、実際には資料を作成しながら少しずつ変わっていきます。 自分自身と向き合い何を伝えたいのかを考えるのは、何度やっても大変な作業です。

アイディア出し

今回の登壇で説明するのは、データベースアクセスライブラリであるkraの紹介です。 つまり、要素技術の紹介をするわけですね。

要素技術の紹介をする際には、その技術が前提とする課題設定をきちんと理解するのが望ましいでしょう。 あらゆる要素技術は何か解決したい問題があります。そして、その問題には何らかの状況が付随しているはずです。 視聴者が持つ課題と、要素技術の解決する課題が一致すれば、それは非常に優れたプレゼンテーションになるでしょう。 また、視聴者が将来遭遇する課題について説明するなら、それもまた繰り返し参照されるより良いものになります。

問題が発生する状況を上手く抽象化しつつ、理解しやすい形で整理できれば、その課題が身近なものであると気が付いて貰えるでしょう。

アイディアだしをする時点では、要素技術が持つ機能に着目します。 自分の理解のために30文字くらいで言いきる形の機能説明をできるかぎりたくさん並べます。 それらが、どういう状況で役に立つのか自分なりに理解していきましょう。

初期のアイディア出し例

  • ドット区切りでプロパティアクセスできるNamed Parameterサポート
  • Named Parameterのプレフィックスとして:や@が使える
  • DB非依存なNamed Parameterサポート
  • IN句におけるプレースホルダの自動展開
  • ANTLRで実装されたSQLのパーザAPI
  • 結果セットを構造体やmapにマッピングする
  • database/sqlと酷似したAPI
  • sqlxにある複雑さをできるかぎり排除したAPI
  • database/sqlの薄いラッパーAPI
  • pgxの薄いラッパーAPI
  • カスタマイズ性の高い振る舞い
  • context.Contextを引数に取らないAPIは存在しない
  • context.ContextをKra自体は触らない処理構造
  • 脱出口付きのAPI
  • データ送信時のリフレクション処理とデータ受信時のリフレクション処理を共通化

アイディアの統合

アイディアを出しきったら、次は統合です。45分の講演では全てを説明できません。 何か優先順をつけたり、類似する事柄をまとめることで話す内容をまとめていく必要があります。 また、要素技術の提供者にとっては意味があっても、利用者にとってそれほど重要でないことはあります。 そういったものは、あえて伝えないという判断をする必要もあるでしょう。

そうやって、要素技術が解決する課題やその根源的な価値について理解をすすめていきます。

アイディアの統合例

  • Named Parameterのサポート
    • ドット区切りでプロパティアクセスできるNamed Parameterサポート
    • Named Parameterのプレフィックスとして:や@が使える
    • DB非依存なNamed Parameterサポート
  • IN句におけるプレースホルダの自動展開
  • ANTLRで実装されたSQLのパーザAPI
  • 結果セットを構造体やmapにマッピングする
  • 分かり易いAPI
    • database/sqlと酷似したAPI
    • sqlxにある複雑さをできるかぎり排除したAPI
    • context.Contextを引数に取らないAPIは存在しない
    • context.ContextをKra自体は触らない処理構造
  • 薄いラッパーAPI
    • database/sqlの薄いラッパーAPI
    • pgxの薄いラッパーAPI
  • カスタマイズ性の高い振る舞い
    • 脱出口付きのAPI
  • データ送信時のリフレクション処理とデータ受信時のリフレクション処理を共通化

メッセージの絞り込み

大抵の技術系イベントでは複数の演者がそれぞれ異なった話をするため、その話を聞く人達はたくさんのメッセージを受けとります。よって、多くのメッセージをスライドに盛り込んでも聴講者の皆さんは覚えていられません。

これは私の経験則ですが、伝えたいメッセージは3つくらいに絞り込むのが望ましいと考えています。 情報を構造化し、話の流れを作り、その3つのメッセージに集約されるようにスライドを作るのです。

アイディアだしの時点では「~~しない」や「~~ではない」みたいなものがありますが、それらを一つずつ丁寧に肯定表現に入れ替えていきます。

メッセージの例

今回の講演では聴講者の皆様にKraを覚えて貰いたいので、Kraがどういうものかにフォーカスして2つの方向性でメッセージをまとめています。

  • Kraの機能を説明したい
    • Named Parameterのサポート
      • ドット区切りでプロパティアクセスできるNamed Parameterサポート
      • Named Parameterのプレフィックスとして:や@が使える
      • DB非依存なNamed Parameterサポート
    • IN句におけるプレースホルダの自動展開
    • 結果セットを構造体やmapにマッピングする
    • 薄いラッパーAPI
      • database/sqlの薄いラッパーAPI
      • pgxの薄いラッパーAPI
  • Kraの思想を説明したい
    • 分かり易いAPI
      • database/sqlと酷似したAPI
      • sqlxにある複雑さをできるかぎり排除したAPI
      • context.Contextを引数に取るAPIだけが存在する
    • カスタマイズ性の高い振る舞い
      • 脱出口付きのAPI

今回のメッセージ

今回の例では伝えたい内容を明確にするために、アイディア出しから統合、削り込みを十回以上繰り返しています。

そうしてできあがったのが、以下の二つのメッセージとその内容です。

  • Kraの機能
  • Kraの特徴
    • 標準ライブラリを理解している人が実装を想像できる
    • 細かい勘違いによる動作不良を起こしづらい
    • 置き換え可能なAPI構造

できあがったものを見ると、恐らく明解で当たり前のように感じることでしょう。 そのようになるまで、メッセージを磨くことで分かり易い講演になります。 私の講演を視聴したら「Kraの機能と特徴を説明する講演だった」と一言で説明できるはずです。

伝えたい事柄をこのレベルまで磨ければ、資料を作るのはほぼ終わったといえるでしょう。

ちなみに、この状態にするためには今後説明するスライド作成の作業を並行して実施します。 情報の構造化やビジュアルデザインを作りこむ過程で、伝えたいことが明確化するのはよくあることです。

伝えたい情報を構造化する

ここでいう構造化とは木構造のことです。まずは、今回作ったスライドがどのような構造なのか確認してみましょう。

一番左の箱が、このスライド全体を表しています。そこから一段右側にある3つの箱は上から「はじめに」「主題」「まとめ」となっています。

「はじめに」の中身を分解したものがその右側の二つです。「自己紹介」と「アジェンダ」です。続けて、「主題」の中身を分解したものが、今回伝えたいメッセージである「Kraの機能」と「Kraの特徴」です。最後は、「まとめ」を「振り返り」と「宣伝」に分解しています。

これは、大きな塊を小さく分解して扱いやすくするというプログラミングでよく使う方法論です。 この方法論で論理を構成すると、ソフトウェア技術者は、おおむねこの思考様式に慣れ親しんでいるので受け入れやすい講演になります。

構造のテンプレート

概念を構造化するのは、それなりに難しいものです。慣れるまでは以下のようなテンプレートを使って考えると良いでしょう。

検討している項目の下に、何も考えずに「前提」、「主題」と「結論」を置いてしまうのです。 例えば、最初に見せた構造の中で「Kraの機能」という話題をブレークダウンしてみましょう。追加した部分には、赤い色を付けています。

ここでは、頭の中でブレークダウンするのではなく、このように見える形で箱を置いてしまうことです。 見える形で箱を置いたら、これらを声に出して読み上げます。

  • Kraの機能における前提
  • Kraの機能における本題
  • Kraの機能における結論

視覚と聴覚に刺激を与えることで、ある種の違和感が発生するはずです。その違和感を言語化すると概念の構造を明らかにする手掛かりとなります。例えば、以下のようなことが思い浮かびます。

  • Kraの機能における前提とはなんだろうか?設計か?思想か?課題設定か?
  • Kraの機能における本題は簡単。単に機能の一覧を説明すればいい
  • Kraの機能における結論とはなんだろうか?便利とかそういうことか?それとも、ここまでの説明を単にまとめるのか?

これを繰り返していくことでテーマを深掘りします。

ここで重要なのは、視覚に対して与える刺激の種類を増やすことや、声を出すことで聴覚に対して刺激を与えることで脳の様々な部分を働かせることです。散歩や入浴もおすすめです。

論理の順序を整理する

論理の構造を明らかにすることと並行して、論理の順序について考えましょう。

要素技術を説明するには、抽象度の高い事柄を最初に説明して、それを徐々に具体化していくのが基本的な手順です。 抽象度の高い事柄とは、例えば以下のようなものです。

  • 要素技術の背景にある技術的な思想
  • 要素技術が最終的に解決したい課題
  • 要素技術を実装した意図

こういったものを最初に説明すると、視聴者が混乱する可能性を低減できます。 そこから導き出される具体的な事柄とは、例えば以下のようなものです。

  • ライブラリやフレームワークのコードを使った動作説明
  • ライブラリやフレームワークの使い方を説明するサンプルコード
  • スクリーンキャプチャやCLIの出力を例示するツールの操作説明

今回は45分の枠でお話しましたが、私を含め普通の視聴者は概ね最後の5分から10分くらいで聞いた話が印象として残ります。 つまり、講演の終盤で短期的に利益のある話、分かり易い話をする方が良い印象を残せます。

まとめ

記事として少し長くなり過ぎてしまったので、今回の説明はここまでとします。 例えば、ビジュアルデザインや時間管理の方法、PowerPointの効率的な使い方については説明できていません。 そういった話題について、ご興味のある方はTwitter等のSNSで続きを読みたい旨を投稿して貰えるとありがたいです。

このエントリを読んだ皆さんが技術系のカンファレンスに登壇する助けになればうれしいです。

執筆:@sato.taichi、レビュー:@yamashita.tsuyoshiShodoで執筆されました