📂

deck-slides.el ユーザーズマニュアル (基本編)

に公開

k1LoW/deckとは

deck@k1LoWさんと@Songmuさんが開発している、Markdownファイルの内容をGoogleスライドに反映するためのソフトウェアです。

“deck”は一般名詞のため、ソフトウェア名を指す固有名詞として区別しやすくするためにk1LoW/deckと表記されることもあります。本記事においても、ソフトウェアとしてのdeckのことはk1LoW/deckと呼ぶことにします。

最新のインストール方法などは公式リポジトリを参照してください。

https://github.com/k1LoW/deck

スライドの準備

ツールとしてのコンセプトや基本的な使い方については@k1LoWさんの記事を読んでください。

https://k1low.hatenablog.com/entry/2025/03/31/083000

重要なキーワードは「コンテンツとデザインを分離する」です。

Markdownでは文字と構造を流し込むだけのもので、デザインはGoogleスライド側のスライドマスターで作り込むというメンタルモデルを作ってください。

https://qiita.com/howdy39/items/3c12a4e497dbe7c3256a

また、Googleスライドで文章を流し込める要素は「タイトルのプレースホルダ」「サブタイトルのプレースホルダ」「本文のプレースホルダ」の3種類だけです。

たとえば表紙スライドなど、より多くの情報を載せたい場合はスライドマスター側のレイアウト設定に埋め込んでおく必要があります。

その他のデザイン調整なども、基本的にはスライドマスターで設定してください。

Googleスライドでもデザインを調整することはできますが、次にMarkdownで編集した時に上書きされて巻き戻ってしまいます。そのため、Googleスライド上での編集は最終手段として、細かく "freeze": true 設定するようにしましょう

フォントサイズなどは個別に調整するよりも、レイアウトの細かく種類を独立させた方が捗る場合もありますので、自分に合ったスライド作成スタイルを見つけ出しましょう。

deck-slides.elとは

deck-slides.elはGNU Emacs上からk1LoW/deckを操作するためのパッケージです。

https://github.com/zonuexe/deck-slides.el

既にEmacs 30とdeckコマンドがインストールされてPATHが通っていることが前提です。

Emacs上で以下のLispコードを評価(実行)して、deckコマンドのフルパスが表示されていればインストールに成功しています🎉

(executable-find "deck")
;; => "/opt/homebrew/bin/deck" など

続いて以下のコードを評価するとdeck-slides.elがインストールされます。

(package-vc-install
 '(deck-slides :url "https://github.com/zonuexe/deck-slides.el.git"
               :main-file "deck-slides.el"))

k1LoW/deckをセットアップする

改めて、k1LoW/deckを使うには設定が必要です。

以下のコマンドを実行すると、認証ファイルや設定ファイルに簡単にアクセスできます。

  • M-x deck-slides-find-credentials-json
  • M-x deck-slides-find-config-files
    • 設定ファイルのディレクトリを開きます
      • ファイルがなければconfig.ymlと入力してファイル作成してください

これらのコマンドは親ディレクトリがなければ勝手に作るので、ターミナルからアクセスするよりも、ちょっとだけ便利です。


設定ファイルconfig.ymlには最低限basePresentationIDfolderIDは入れておくと便利ではないかと思います。

basePresentationID: "..."
folderID: "..."

https://github.com/zonuexe/deck-slides.el/issues/9

認証ファイルが適切に設定できているかは、M-x deck-slides-doctorでチェックできます。

スライドを作成する

ここまで設定できていれば、Emacs上からk1LoW/deckを使ってGoogleスライドを新規作成できるようになっています。

  • コマンドM-x deck-slides-newを実行します
    • まずMarkdownファイルを選択します
      • 新規ファイルでも既存ファイル名でも構いません
        • ファイルに既にpresentationIDがあった場合は上書きされるので注意
    • タイトルを入力します (空白でそのまま進んでも構いません)

新規作成されたファイルは以下のようになっています。

---
presentationID: 1piBZavgnuIxCdHck3ld2SNcg6OUKj1NnxwIOS2x4Qe0
title: テストプレゼン
---

ファイル冒頭の---から始まるエリアはFront matterと呼ばれ、プレゼンファイルの設定をYAML形式で書き込むことができます。

デフォルトのプレゼンテンプレートでは「タイトルのプレースホルダ」「サブタイトルのプレースホルダ」の二つのプレースホルダがあるはずなので、以下のように二つの見出しを用意してみましょう。

# メインタイトル

## サブタイトル

この文章は反映されません。

<!-- スピーカーノートに反映されるよ -->

Markdownファイルを編集したら、以下のコマンドで表示確認・反映できます。

  • M-x deck-slides-open-browserを実行すると、Webブラウザで作成されたスライドが開きます
  • ファイルを適当に編集し、 M-x deck-slides-applyを実行すると編集内容がGoogleスライドに反映されます
  • M-x deck-slides-apply-watchを実行すると、変更を監視して非同期で反映されます

前述の通り、デフォルトの表紙レイアウトには「本文のプレースホルダ」がありませんので、「この文章は反映されません。」という段落は反映されていないのは正常です

watchを停止させるにはコマンドM-x kill-compilationを実行するか、*compilation*バッファでC-c C-kを実行してください。

deck-slides.elでは、k1LoW/deckスタイルのMarkdown編集をサポートするためdeck-slides-modeというマイナーモードを提供しています。M-x deck-slides-newから作成するとこのマイナーモードは有効化されていますが、Emacsを再起動してC-x C-fなどで再度開き直した後は自分で有効化する必要があります。

ページを追加・編集する

Markdownを使ったプレゼンテーションにおいては、ツールによって改ページ制御の方法が異なります。

  • A: 見出し(#, ##)から自動で改ページを行なうもの
  • B: 明示的にページ区切り記号を挿入するもの
  • C: 基本は自動改ページだが、明示的区切りも可能なもの

k1LoW/deckはこのうちBの方式を採用しておき、独立した行の --- だけを改ページの区切り記号として処理します。
より正確には"\n\n---\n"で、---の前には二つの空行が必要です。

deck-slides-modeではキーボードでC-c RETと入力することで改ページ記号を挿入できます。

ところで、k1LoW/deckでページごとに適用されるレイアウトの種類を変更する方法は2種類あります。

最終的には A でルールを記述した方がスムーズにスライドを作成できるようになりますが、これはdeck-slides-modeの操作方法とはあまり関係ないので、このマニュアルではBの方法を説明します。

Page configuration JSONは、ページ内にあるコメントブロック <!-- ... --> に書かれたJSONオブジェクトです。k1LoW/deckはコメントブロック内の内容がJSONとして妥当に解釈できればPage configuration JSON、JSONとしての解釈に失敗した場合はスピーカーノートとして扱います

このJSONは人間が編集してもいいのですが、deck-slides-modeはワンタッチで編集できるコマンドを用意しています。

コマンド deck-slides-mapキー 効果
M-x deck-slides-insert-page C-c RET / C-c C-c RET 改ページ (ページ区切りを挿入)
C-u M-x deck-slides-insert-page C-u C-c RET レイアウト名を指定して改ページ
M-x deck-slides-toggle-freeze-page C-c C-u f 現ページをフリーズ/解除
M-x deck-slides-toggle-skip-page C-c C-u s 現ページをスキップ/解除
M-x deck-slides-toggle-ignore-page C-c C-u s 現ページを除外/解除
M-x deck-slides-set-page-layout C-c C-c l 現ページのレイアウト名を変更
M-x deck-slides-insert-comment C-c C-c ; 空のコメントを挿入

Page configuration JSON編集コマンドは、ページ内(現在のカーソル位置で---から次の---またはファイル末尾)の範囲で、最初に存在するPage configuration JSONの内容を書き換えます。

これらのコマンドはdeck-slides-insert-commentdeck-slides-insert-pageを除いて、カーソル位置から動かずに設定を変更できるので非常に便利です。

レイアウト名はM-x deck-slides-ls-layoutsで目視チェックすることもできます。一度取得したレイアウト名一覧はキャッシュされるので、Googleスライド上でレイアウトを追加・変更した後はC-u M-x deck-slides-ls-layoutsでリフレッシュできます。

ページ単位編集

deck-slides-modeはEmacs標準のページ指向編集機能をそのまま利用可能です。

コマンド 標準キーバインド 効果
M-x backward-page C-x [ カーソルを前ページに移動
M-x forward-page C-x ] カーソルを次ページに移動
M-x mark-page C-x C-p 現在のページをリージョン選択
M-x narrow-to-page C-x n p 現在のページでナローイング
M-x what-page カーソル位置のページ番号を表示

さらに独自のページ指向編集コマンドを追加しています。

コマンド deck-slides-mapキー 効果
M-x deck-slides-move-page-up C-c C-c <up> / C-c C-c M-v 現在ページを上に移動
M-x deck-slides-move-page-down C-c C-c <down> / C-c C-c C-v 現在ページを下に移動
M-x deck-slides-duplicate-page C-c C-c d 現在ページの内容を複製

これらのコマンドを活用すれば、既存のスライド編集ソフトに近い間隔でスムーズにスライド編集できるようになるのではないでしょうか。

💡お役立ちTips

自動でdeck-slides-modeを有効化

init.elに以下に以下のコードを追加してください。

(with-eval-after-load 'markdown-mode
  (advice-add 'markdown-mode :after #'deck-slides-auto-activate-mode))

この設定では、ファイルの開始直後に ---(改行)presentationID:という記述があると仮定しています。

deck-slides-apply-watchの起動時にブラウザを開く

init.elに以下に以下のコードを追加してください。

(with-eval-after-load 'deck-slides
  (advice-add 'deck-slides-apply-watch :before #'deck-slides-open-browser))

k1LoW/deckの設計思想をもっと知りたい

@k1LoWさんと@Songmuさんが話してるポッドキャストを聴いてください。

https://oss4.fun/episode/46/

https://oss4.fun/episode/48/

次回予告

コードブロックと画像の話ができたらいいですね。

Discussion