輪読会用の資料をdeckとGeminiとClaude Codeで作った話

背景

  • 最近、本を読むときはClaude Codeなり、Geminiなり、NotebookLMを隣に置くことが多い
    • 音声入力で話してmcp経由でesaにメモ取らせたり、質問して会話したり、などなど
  • こういう形で勉強しているので、輪読会用の資料もLLM Agentと一緒に作りたくなった
    • しかし、Google Slidesのような形だとLLM Agentが扱いにくい
  • deckというOSSがあり、手元のmarkdownに書いたらGoogle SlideのAPIを叩いてスライドにしてくれる
    • これなら一緒に勉強しながらスライド作っていけそうと思ったので、今週の勉強会で試した
    • 引用の範疇を越えるので、スライド自体はここには貼りません

やり方

スライドの叩きの作成 by Gemini

  • まず、スライドの叩きを作ってもらう
    • Sub Section毎くらいの単位に分けたmarkdownファイルを用意する
      • epubなり書き起しなり何なりで用意してください
  • Geminiにmarkdownのファイル群をソースとして食わせる
    • Claude Codeは本のような長文コンテキストを扱うのが苦手なので、ここの品質に関してはGeminiが一番高かった
    • それなりに厚い本だったので、1章でスライド75枚くらいになったが、Geminiだと全く苦にせずやってくれた

スライドの叩き生成のプロンプト(クリックで開きます)

  • 添付したmarkdownファイル元に、以下の内容を考慮してmarkdownとして出力してください
    • 「Markdownを使用してプレゼンテーションを記述する際のルール」に従ってください
  • 出力が長くなって問題ないので、要約をせず非常に詳細なスライドを作ってください
    • 途中で止めず、全ての内容を出力してください
  • 画像の取り扱いに関して
    • markdown中にある![こんにちは](https://hoge.com/example.png)のような画像は一枚の別スライドに分割してください
    • 画像は全てスライド内に含めてください
      • 入力のmarkdownファイル内にある画像の枚数と出力に含まれる画像の枚数が一致することを確認してください
    • レイアウトは<!-- {"layout": "image"} -->を必ず指定してください

yamlフロントマターには以下を指定してください。

---
title: "第4章 ビジネスプロセスのモデリング: アジャイルデータモデリング @ datatech-jp"
presentationID: "1dhv3hewK4DYKSjf0wiHgzqsSKn6DoP5KiFh9EFEXvuU"
breaks: true
author: "Yasuhisa Yoshida"
date: "2025-08-13"
---

Markdownを使用してプレゼンテーションを記述する際のルール

特に指定がない限り、以下のルールに従ってください。

基本構造

  • スライド間の改ページを示すには、行の最初から最後まで3つの連続したハイフン(---)のみを含む行を使用します。
  • その他の水平線要素(- - -***___など)は、視覚的な区切りとしてコンテンツ内に残り、複数のボディプレースホルダーを分離するために使用できます。
  • 各スライド内では、最小の見出しレベルがタイトルとして扱われ、その次のレベルがサブタイトルとして扱われます。それより上位レベルの見出しは、ボディコンテンツとして扱われます。スライドごとにタイトルの見出しは1つだけにすることをお勧めします。

YAMLフロントマター

ファイルの先頭にYAMLフロントマターを含めることができます:

---
title: "プレゼンテーションのタイトル"
presentationID: "presentation_id"
breaks: true
author: "作成者名"
date: "2024-01-01"
tags: ["tag1", "tag2"]
custom:
  nested: "value"
  number: 42
---

サポートされているマークダウン構文

スライドのコンテンツでは、以下の構文を使用できます:

テキストの書式設定

  • 太字 (**bold**)
    • 太字は見出しには使ってよいですが、本文中での仕様は禁止されています
  • 斜体 (*italic* or __italic__)
  • インラインコード (\<code>`code`\</code>)
  • 組み合わせた書式設定(例:太字と斜体

リスト

  • 箇条書きリスト(-を使ってください。*は使わないでください)
    • 箇条書きリストの文末では「。」は書かないでください
  • 番号付きリスト(1. または 1)
  • ネストされたリスト(適切なインデント付き)
  • アルファベット順リスト(a. b. c.)

リンクと画像

  • リンク([リンクテキスト](https://example.com)
  • 画像(![代替テキスト](image.jpg)
  • PNG、JPEG、GIF形式をサポート
  • ローカルファイルとURL(HTTP/HTTPS)の両方をサポート

ブロック要素

  • ブロッククォート(> 引用テキスト
  • ネストされたブロッククォート
  • 言語指定付きのコードブロック:
コードの内容
  • Mermaidダイアグラム(mermaid言語を指定したコードブロック内)

HTML要素

以下のHTMLインライン要素を使用できます:

  • <strong>, <em>, <b>, <i>, <mark>, <small>
  • <code>, <kbd>, <cite>, <q>, <ruby>, <rt>
  • <span>, <u>, <s>, <sub>, <sup>, <var>
  • <samp>, <data>, <dfn>, <time>, <abbr>, <rp>
  • <br>(改行用)
  • カスタムスタイリングにはclass属性を使用します

改行の処理

  • デフォルト(breaks: false):ソフトな改行はスペースになります
  • breaks: trueの場合:ソフトな改行は実際の改行になります
  • 明示的な改行には<br>タグを使用します

ページ設定

ページ設定とスピーカーノートにはHTMLコメントを使用します:

  • ページ設定: <!-- {"layout": "title-and-body"} -->
  • 利用可能な設定:"freeze": true"ignore": true"skip": true
  • スピーカーノート:<!-- This is a speaker note --> (use separate comments for notes)

重要な注意点

  • コメント(<!-- -->)にJSONが含まれている場合、それはページ設定です - 上書きしないでください
  • ページ設定に"freeze": trueが存在する場合、そのページの内容は一切変更しないでください
  • スピーカーノートは、JSON設定コメント内ではなく、別のコメントに記述してください
  • コードブロックは、--code-block-to-image-commandオプションを使用して画像に変換できます

出力例

---
title: "第4章 ビジネスプロセスのモデリング: アジャイルデータモデリング @ datatech-jp"
presentationID: "1dhv3hewK4DYKSjf0wiHgzqsSKn6DoP5KiFh9EFEXvuU"
breaks: true
author: "Yasuhisa Yoshida"
date: "2025-08-13"
---

# 第4章 ビジネスプロセスのモデリング

## アジャイルデータモデリング

---

### 第4章の概要

- ビジネスプロセスの集計・分析には、複数のビジネスイベントのモデリングが求められます
- BIのステークホルダーは、複数のプロセスを横断した分析 (クロスプロセス分析) を行いたいと考えます
- 複数イベントのモデリングにおける2つの重要なポイント:
  - **イベントシーケンス**: ステークホルダーはイベントを時系列でモデル化し、ビジネスプロセスやバリューチェーンを表現します
  - **適合ディメンション**: 異なるイベントで共通の項目 (7W) を使い、クロスプロセス分析の基礎を築きます

---

### 第4章のトピック一覧

- アジャイルなDW設計における適合ディメンションの重要性
- イベントマトリックスを用いたイベント順序のモデルストーミング
- スクラムを用いて開発するイベントやディメンションの優先順位付け
- 適合ディメンションを用いたイベントストーリーのモデル化とその例

---

### アンチパターン: サイロ型データマート

- 初期スコープを厳しく管理すると、BIユーザーは早期にデータマートを受け取り、部門ごとの洞察を得られます
- **問題点**: 部門やプロセスをまたいだ分析を行おうとすると、説明や尺度が互換性を持たないため、必要な比較ができません
- **結果**:
  - 各部署が「部署独自の方法」でデータを再抽出する羽目になります
  - 「信頼できない複数の情報源」から生じる一貫性のない、あるいは矛盾した結果に悩まされます

---

<!-- {"layout": "image"} -->

![図4-19 イベントストーリーを伝えるための略語の使用](https://cdn-ak.f.st-hatena.com/images/fotolife/s/syou6162/20250705/xxxxxx_original.png)

---

スライドの改善 with Claude Code

  • Geminiに作らせた叩きだと、スライドが自分のものになっていないので、発表ができない
    • 原本も読みつつ「この表現はこっちのほうがいい」と修正の指示を出したり「ここはどういう意味?」と聞きつつ理解を深めていったりする
    • 読書会は原本に立ち返ることが重要なので、質問するときは「根拠になる文も引用して」という具合に指示する
  • 理解が深まったところや自分の意見、ディスカッションしたいことについては非表示スライド用としてmarkdownに書かせていったり、Speaker Noteに書いておくと後から参照するときに便利
    • 発表の邪魔にもならない
  • 個別のスライド程度のスコープであればClaude Codeでも問題なく取り扱えるし、手元のmarkdownからdeckでそのままスライドに反映されるので便利

deckを使ってみた感想

  • 普通に便利
    • deck applyが特に便利で、markdown修正してればスライドが更新されていく
      • たまにGoogle Slide側をリロードしないと反映されないことがちょいちょいあるのは気になるが、これはGoogle Slide側の問題
  • 内容とスタイルの分離ができる
    • スライドテーマは別で設定できるので、内容を先に固めて、見せ方は後からどうとでもできるのはよい
      • 中身の作成に集中できる
    • スライドのテーマを適用できるので、スタイルの再利用も簡単
  • スライドの枚数が多くなっても、それなりに動いてくれる
    • 75枚くらいでは根を上げないので助かりました
  • LLM Agentとの共同作業がやりやすい
  • これがあるとさらによくなりそうポイント
    • 一枚のスライドに箇条書きと画像を並べる、などがやりにくい
      • そういうレイアウトを決めた上で画像用のプレースホルダーを用意すればいいが、画像のサイズが可変長ではないため、画像の縮尺がおかしくなってしまう場合がある
      • 画像のサイズの修正をするとそれ以降同じスライドを修正しにくくなってしまう
    • 表の取り扱いが難しい
      • レイアウトを決める際に表用のプレイスホルダーがGoogle Slideに用意されていないため、ちょっと困った
    • とはいえ、テキストと同居させずに1枚の単体スライドとして差し込む運用にすればなんとかなる