Skip to content

Instantly share code, notes, and snippets.

@suzuken
Created April 3, 2023 01:42
Show Gist options
  • Save suzuken/ff7e9f478401f36061fde27915a55733 to your computer and use it in GitHub Desktop.
Save suzuken/ff7e9f478401f36061fde27915a55733 to your computer and use it in GitHub Desktop.
GPT-4に生成してもらったGoogleスライド作成ツール
function createSlidesFromMarkdown() {
// Markdown のサンプルテキスト
const markdownText = `
# MarkdownでGoogleスライドを作ろう!
Markdownで簡単にGoogleスライドを作成しましょう!
## なぜMarkdownがおすすめ?
* シンプルで覚えやすい構文
* 素早く文章を書ける
* 書式ではなく、内容に集中できる
## 魅力的なツール機能
* Markdownテキストから自動的にスライドを作成
* 見出し、リスト、プレーンテキストをサポート
* カスタマイズ可能なデザインとレイアウト
## 使い方は簡単!
1. Markdown形式で内容を書く
2. Google Apps Scriptを使ってMarkdownをスライドに変換
3. 新しいGoogleスライドプレゼンテーションを楽しむ
## GPT-4がもたらす革新
* ツールのコードを生成
* トラブルシューティングや改善を支援
* プレゼンテーションの内容作成をアシスト
## 驚きのエピソード
GPT-4がツールを作るのを手伝ってくれました!信じられないでしょう?
## さあ、試してみよう!
MarkdownでGoogleスライドを作成するツールを使って、素早く簡単にプレゼンテーションを作りましょう!
`;
// Google スライドの新規プレゼンテーションを作成
const presentation = SlidesApp.create('Markdown to Slides');
const slides = presentation.getSlides();
const initialSlide = slides[0];
// 見出しでテキストを分割し、スライドごとに処理
const slideTexts = markdownText.trim().split('\n').reduce((acc, line) => {
if (line.startsWith('# ') || line.startsWith('## ')) {
acc.push(line);
} else {
acc[acc.length - 1] += '\n' + line;
}
return acc;
}, []);
slideTexts.forEach((slideText, index) => {
// 最初のスライド以外の場合は新しいスライドを追加
const slide = index === 0 ? initialSlide : presentation.appendSlide();
// スライドのテキストを解析して要素に分割
const elements = slideText.split('\n');
let yOffset = index === 0 ? 200 : 40;
let textBox;
elements.forEach((element, elementIndex) => {
if (!element.trim()) {
return;
}
// 要素の種類(見出し、箇条書きなど)を判別
if (element.startsWith('# ')) {
const title = element.substr(2);
textBox = slide.insertTextBox(title).setTop(yOffset).setWidth(500).setLeft(130);
textBox.getText().getTextStyle().setFontSize(24).setBold(true);
} else if (element.startsWith('## ')) {
const subtitle = element.substr(3);
textBox = slide.insertTextBox(subtitle).setTop(yOffset).setWidth(500).setLeft(130);
textBox.getText().getTextStyle().setFontSize(18).setBold(true);
yOffset += 40;
} else if (element.startsWith('* ')) {
const listItem = element.substr(2);
if (textBox) {
textBox.getText().appendText('\n- ' + listItem);
} else {
textBox = slide.insertTextBox('- ' + listItem).setTop(yOffset).setWidth(500).setLeft(130);
}
textBox.getText().getRange(textBox.getText().length - listItem.length - 2, listItem.length + 2).getTextStyle().setFontSize(14);
yOffset += 20;
} else {
textBox = slide.insertTextBox(element).setTop(yOffset).setWidth(500).setLeft(130);
textBox.getText().getTextStyle().setFontSize(14);
yOffset += 40;
}
});
});
// プレゼンテーションの URL をログに出力
Logger.log('Generated Slides URL: ' + presentation.getUrl());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment