MarpからSlidevへ乗り換えた話 — 書き方・デザイン・レイアウトを徹底比較
MarpからSlidevへ乗り換えた話 — 書き方・デザイン・レイアウトを徹底比較
Marpで満足していたけど、もっと表現の幅が欲しくなった方へ。
実際に乗り換えた視点から、両者の違いをコードで比較します。
なぜSlidevに乗り換えたのか
Marpは「Markdownだけでスライドが作れる」シンプルさが魅力です。しかしプレゼンが複雑になってくると、こんな壁にぶつかります。
- レイアウトの自由度が低い(CSSを書いてもうまくいかない)
- アニメーション・インタラクションが難しい
- テーマのカスタマイズに限界を感じる
Slidevはそれらをすべて解消してくれました。Vue.js + Viteベースで動いており、スライドでありながらWebアプリとしての自由度があります。
基本的な書き方の違い
スライドの区切り方
どちらも --- でスライドを区切りますが、フロントマターの扱いが異なります。
Marp
---
marp: true
theme: default
---
# スライド1
---
# スライド2Slidev
---
theme: default
highlighter: shiki
---
# スライド1
---
# スライド2Slidevでは先頭のフロントマターがプレゼンテーション全体の設定、--- 以降はページ単位の設定として扱われます。
ページ単位の設定
MarpはHTMLコメント、SlidevはYAMLフロントマターをページ区切りの --- に続けて書くスタイルです。
Marp(HTMLコメントで指定)
---
<!-- _class: lead -->
<!-- _backgroundColor: #1a1a2e -->
# タイトルスライドSlidev(各スライドにフロントマターを書く)
---
layout: center
class: text-center
---
# タイトルスライドSlidevの方が明示的でIDEの補完も効きやすいです。
デザイン・テーマの仕組み
Marpのテーマ
Marpのテーマは単一のCSSファイルです。
/* my-theme.css */
section {
background-color: #fff;
font-family: 'Noto Sans JP', sans-serif;
}
section.lead h1 {
font-size: 3em;
color: #2c3e50;
}---
marp: true
theme: my-theme
---シンプルですが、複雑なレイアウトは実現しにくいです。
Slidevのテーマ
Slidevのテーマはnpmパッケージで配布されます。構成ファイルは複数あり、よりWebアプリらしい設計です。
my-theme/
├── package.json
├── layouts/ ← レイアウトコンポーネント(Vue)
│ ├── default.vue
│ └── cover.vue
├── styles/
│ └── index.css ← Tailwind CSS or plain CSS
└── setup/
└── shiki.ts ← シンタックスハイライト設定テーマの適用:
---
theme: my-theme
---npmに公開されているテーマを使う場合:
npm install slidev-theme-penguin背景画像の設置方法
Marp
---
<!-- _backgroundImage: url('./bg.jpg') -->
<!-- _backgroundSize: cover -->
# 背景画像つきスライドまたは全スライドに一括適用する場合はCSSで:
section {
background-image: url('./bg.jpg');
background-size: cover;
}Slidev
各スライドのフロントマターで指定できます。
---
background: ./images/bg.jpg
---
# 背景画像つきスライドURLでオンライン画像も使えます:
---
background: https://source.unsplash.com/1280x720/?nature
---
# Unsplashから背景を取得重ねてテキストを読みやすくしたい場合は class でオーバーレイを追加:
---
background: ./images/bg.jpg
class: bg-overlay
---
# テキストが読みやすい/* styles/custom.css */
.bg-overlay::before {
content: '';
position: absolute;
inset: 0;
background: rgba(0, 0, 0, 0.5);
}比較まとめ:
| 項目 | Marp | Slidev |
|---|---|---|
| 指定方法 | HTMLコメント or CSS | フロントマター(YAML) |
| URL指定 | ○ | ○ |
| 全スライド一括 | CSSで対応 | テーマのCSSで対応 |
| 直感的さ | △ | ◎ |
カラムレイアウト(2段・3段)
これがMarpとSlidevで最も差が出る部分です。
Marpのカラムレイアウト
Marpには公式のカラム機能がないため、HTMLとCSSを直書きする必要があります。
---
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 24px;">
<div>
### 左カラム
- ポイント1
- ポイント2
</div>
<div>
### 右カラム
- ポイント3
- ポイント4
</div>
</div>Markdownの中にHTMLを書くため、インデントや空行の扱いに注意が必要で、崩れやすいです。
Slidevのカラムレイアウト
Slidevには ::left:: / ::right:: のスロット構文があります(two-cols レイアウト使用時)。
2カラム
---
layout: two-cols
---
### 左カラム
- ポイント1
- ポイント2
::right::
### 右カラム
- ポイント3
- ポイント42カラム(幅の比率を変える)
---
layout: two-cols
layoutClass: gap-16
---
::left::
<div class="w-2/3">
左側を広く使う
</div>
::right::
<div class="w-1/3">
右側は狭め
</div>3カラム以上(カスタムレイアウトまたはHTMLで)
---
---
<div class="grid grid-cols-3 gap-4">
<div>
### カラム1
内容A
</div>
<div>
### カラム2
内容B
</div>
<div>
### カラム3
内容C
</div>
</div>SlidevはTailwind CSSが使えるため、grid-cols-3 のような直感的なクラスで書けます。
比較まとめ:
| 項目 | Marp | Slidev |
|---|---|---|
| 2カラム | HTML直書き(崩れやすい) | layout: two-cols で簡単 |
| 3カラム | HTML直書き | Tailwindクラスで直感的 |
| 幅の調整 | CSSの計算が必要 | Tailwindクラス1つ |
画像の配置
Marpの画像配置
Marpは画像に独自の構文拡張があります。
<!-- 右寄せ・幅指定 -->

<!-- 背景として配置 -->

<!-- 背景を左半分に -->

<!-- 背景を右半分に・60%幅 -->
Marpのbg構文はとても便利で、テキスト+背景画像の分割レイアウトが1行で実現できます。
Slidevの画像配置
Slidevは標準Markdownの画像構文に加え、HTMLとTailwindで細かく制御します。
<!-- 基本 -->
{width=400}
<!-- 右寄せ(Tailwind) -->
<img src="/images/photo.jpg" class="w-64 ml-auto" />
<!-- 中央寄せ -->
<img src="/images/photo.jpg" class="mx-auto w-1/2" />
<!-- 角丸・影つき -->
<img src="/images/photo.jpg" class="rounded-xl shadow-lg w-80" />image-right レイアウトを使うとMarpのbg構文に近い表現が可能です:
---
layout: image-right
image: ./images/photo.jpg
---
# テキスト + 右画像
左側にテキスト、右側に画像が自動で並びます。左画像版:
---
layout: image-left
image: ./images/photo.jpg
---
# テキスト + 左画像比較まとめ:
| 項目 | Marp | Slidev |
|---|---|---|
| 背景画像分割 | ![bg left] で1行 |
layout: image-left |
| サイズ指定 | w:400 構文 |
Tailwindクラス or style属性 |
| 細かいスタイル | 難しい | Tailwind/CSSで自由自在 |
| 学習コスト | 独自構文を覚える | HTML/CSSの知識が活かせる |
動画の配置
Marpでの動画
Marpはネイティブで動画をサポートしておらず、HTMLで埋め込む必要があります。
---
<video controls width="720">
<source src="./demo.mp4" type="video/mp4">
</video>ただし、PDF出力時には動画は表示されません。
Slidevでの動画
SlidevはWebアプリとして動作するため、動画との相性が抜群です。
ローカルファイルの埋め込み
<video controls class="w-full rounded-lg">
<source src="/videos/demo.mp4" type="video/mp4">
</video>YouTubeの埋め込み
<Youtube id="dQw4w9WgXcQ" />幅・高さの指定も可能:
<Youtube id="dQw4w9WgXcQ" width="800" height="450" />自動再生・ループ
<video autoplay loop muted class="w-3/4 mx-auto">
<source src="/videos/loop-demo.mp4" type="video/mp4">
</video>Vimeoなど外部サービス
SlidevはVueコンポーネントが使えるため、サードパーティの埋め込みコンポーネントも利用できます:
<iframe
src="https://player.vimeo.com/video/YOUR_VIDEO_ID"
class="w-full h-64"
frameborder="0"
allowfullscreen
/>比較まとめ:
| 項目 | Marp | Slidev |
|---|---|---|
| ローカル動画 | HTML必要・PDF不可 | HTML or コンポーネント |
| YouTube | 非対応(iframe手動) | <Youtube /> コンポーネント |
| 自動再生 | 一応可 | ◎(属性そのまま使える) |
| PDF出力時 | 動画消える | スライドとして出力(動画は静止) |
移行時のチェックリスト
乗り換えを検討している方向けに、最低限確認しておくべき点をまとめます。
環境構築
# Slidevのセットアップ
pnpm create slidev@latest
# または既存プロジェクトに追加
pnpm add @slidev/cli @slidev/theme-defaultファイル構成の変化
Marp(1ファイルで完結) Slidev(プロジェクト構成)
slides.md → slides.md
public/ ← 画像・動画を置く
components/ ← Vueコンポーネント
styles/ ← カスタムCSS
package.jsonよくあるつまずきポイント
- 画像パスが変わる — Slidevでは
public/フォルダ以下に置き、/images/xxx.jpgのように絶対パスで参照 - Marpのbg構文は使えない —
layout: image-left/rightに書き直す - テーマの適用方法が違う — CSSファイルではなくnpmパッケージ
- プレビューにNode.jsが必要 — VS Code拡張だけでは動かない
まとめ
| 観点 | Marp | Slidev |
|---|---|---|
| セットアップ | ◎ 拡張機能1つ | △ Node.js環境が必要 |
| シンプルさ | ◎ Markdown完結 | ○ 少し学習コストあり |
| レイアウト自由度 | △ HTMLが必要 | ◎ Tailwind + Vue |
| カラムレイアウト | △ 崩れやすい | ◎ 専用レイアウトあり |
| 動画・インタラクション | △ 限定的 | ◎ Web標準がそのまま使える |
| PDF出力 | ◎ 安定 | ○ 対応(動画は除く) |
| テーマ拡張性 | △ CSS1ファイル | ◎ Vueコンポーネント |
Marpのままで良い場合:
- シンプルなテキスト中心のスライドを素早く作りたい
- PDFとして配布することがメイン
- Node.js環境を使いたくない
Slidevに乗り換えるべき場合:
- レイアウトの自由度を上げたい
- 動画・アニメーションを多用したい
- ブラウザでインタラクティブに発表したい
- テーマをがっつりカスタマイズしたい
Slidevへの移行は最初の環境構築さえ乗り越えれば、あとはHTML/CSSの知識がそのまま活かせてとても快適です。ぜひ試してみてください。
便利なテーマ
- 学会に便利 https://mksmkss.github.io/slidev-theme-gtlabo/#layout-default
参考リンク: