ここしばらくプレゼンテーション資料作りには k1LoW/deck を利用している。Markdownファイルを書けばGoogleスライドが作れるスグレモノだ。
ソースファイルがプレーンテキストである利点のひとつに、Claude Codeのようなコーディング用のAIエージェントをスライド作成に活用できる点がある。アウトラインをもとにざっとスライドを作らせてから手直しすることも多いし、スライドを書きながら正確な引用をするための出典をWeb検索させたり、事実関係の裏取りをさせたり、アシスタントとしていろいろ役に立つ。
ページの識別子
スライドがある程度の枚数できてくると、論理構造を見直す中で「このページとこのページの順序が逆だな」とか、「ここのページの間に1枚補足が足りないな」とか気づくことがある。そういう並べ替えを手でやってもいいのだが、最近はAIエージェントに並べ替えも指示したくなった。ただし問題があり、まさに書いたように「このページ」というように指示代名詞になりがちで、単一のページならまだしも、複数のページについて指示するのは困難だった。
最初に思いつくのは「x番目のページ」という位置インデックスでの識別だが、Markdownファイルの中でページ数はわかりにくいし、並べ替えをすると変わってしまう。コンテキストの中で整合性が取れなくなるのでインデックスは却下した。
ということで、独自のルールとしてページのメタデータの中に識別子を含めて、一意に指示できるようにした。下記のように、レイアウトの設定をするページコンフィグに key フィールドを追加し、適当なランダム文字列が識別子として機能する。
---
<!-- { "key": "abcd", "layout": "...." } -->
# Heading
---
これが思いのほか手元でうまくいったので、deck本体に key フィールドを予約する提案をして、最新バージョンで取り込んでもらえた。これで key フィールドが将来的に別の用途で使われることはないし、deck apply 時点で keyフィールドが重複するページがあったらエラーになる安全装置付きだ。至れり尽くせり。
lacolaco/deck-skills
keyフィールドを使った指示で円滑にスライド編集作業をするために作った自分用のAgent Skillsがあるので、この際公開してしまうことにした。keyフィールドの使い方の一例として誰かの参考になれば幸い。とはいえ、他人が使うことは想定してないので汎用性についてはあしからず。