deck-slides.el ユーザーズマニュアル (基本編)
k1LoW/deckとは
deckは@k1LoWさんと@Songmuさんが開発している、Markdownファイルの内容をGoogleスライドに反映するためのソフトウェアです。
“deck”は一般名詞のため、ソフトウェア名を指す固有名詞として区別しやすくするためにk1LoW/deckと表記されることもあります。本記事においても、ソフトウェアとしてのdeckのことはk1LoW/deckと呼ぶことにします。
最新のインストール方法などは公式リポジトリを参照してください。
スライドの準備
ツールとしてのコンセプトや基本的な使い方については@k1LoWさんの記事を読んでください。
重要なキーワードは「コンテンツとデザインを分離する」です。
Markdownでは文字と構造を流し込むだけのもので、デザインはGoogleスライド側のスライドマスターで作り込むというメンタルモデルを作ってください。
また、Googleスライドで文章を流し込める要素は「タイトルのプレースホルダ」「サブタイトルのプレースホルダ」「本文のプレースホルダ」の3種類だけです。
たとえば表紙スライドなど、より多くの情報を載せたい場合はスライドマスター側のレイアウト設定に埋め込んでおく必要があります。
その他のデザイン調整なども、基本的にはスライドマスターで設定してください。
Googleスライドでもデザインを調整することはできますが、次にMarkdownで編集した時に上書きされて巻き戻ってしまいます。そのため、Googleスライド上での編集は最終手段として、細かく "freeze": true
設定するようにしましょう。
フォントサイズなどは個別に調整するよりも、レイアウトの細かく種類を独立させた方が捗る場合もありますので、自分に合ったスライド作成スタイルを見つけ出しましょう。
deck-slides.elとは
deck-slides.el
はGNU Emacs上からk1LoW/deckを操作するためのパッケージです。
既に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
- OAuthの設定情報が書かれた認証ファイル(JSON)を開きます
- ユーザー個人でGoogle CloudのOAuthプロジェクトを作成する必要があります
- まだお済みでない場合は私的MarkdownとGoogle Slidesでスライドを作成する方法(またはdeckの紹介) #使い方の手順を確認してください
-
M-x deck-slides-find-config-files
- 設定ファイルのディレクトリを開きます
- ファイルがなければ
config.yml
と入力してファイル作成してください
- ファイルがなければ
- 設定ファイルのディレクトリを開きます
これらのコマンドは親ディレクトリがなければ勝手に作るので、ターミナルからアクセスするよりも、ちょっとだけ便利です。
設定ファイルconfig.yml
には最低限basePresentationID
とfolderID
は入れておくと便利ではないかと思います。
basePresentationID: "..."
folderID: "..."
認証ファイルが適切に設定できているかは、M-x deck-slides-doctor
でチェックできます。
スライドを作成する
ここまで設定できていれば、Emacs上からk1LoW/deckを使ってGoogleスライドを新規作成できるようになっています。
- コマンド
M-x deck-slides-new
を実行します- まずMarkdownファイルを選択します
- 新規ファイルでも既存ファイル名でも構いません
- ファイルに既に
presentationID
があった場合は上書きされるので注意
- ファイルに既に
- 新規ファイルでも既存ファイル名でも構いません
- タイトルを入力します (空白でそのまま進んでも構いません)
- まずMarkdownファイルを選択します
新規作成されたファイルは以下のようになっています。
---
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: YAML Front matterにCEL式を記述する
- B: Page configuration JSONにレイアウトを指定する
最終的には 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-comment
とdeck-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さんが話してるポッドキャストを聴いてください。
次回予告
コードブロックと画像の話ができたらいいですね。
Discussion