Created
April 3, 2023 01:42
-
-
Save suzuken/ff7e9f478401f36061fde27915a55733 to your computer and use it in GitHub Desktop.
GPT-4に生成してもらったGoogleスライド作成ツール
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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