Google DocsをMarkdownに変換するGoogle App Script

IT・プログラミング

概要

Google Docsは多機能で使いやすい文書作成ツールですが、Markdown形式で文書を扱いたい場合もあります。Markdownは軽量なマークアップ言語で、プログラマーやライターなどに広く使われており、テキストファイルとして簡単に保存できるため、GitHubやブログなどでよく使われます。

今回は、Google Docs文書をGoogle Apps Scriptを使って自動的にMarkdown(.md)ファイルに変換し、元のGoogle Docsが保存されていたフォルダにそのMarkdownファイルを保存する方法について解説します。

このスクリプトを作成した背景は、スマホで簡単に音声入力で メモを作りたいと思ったものの、
グーグルドライブに保存しているファイルに簡単にアクセスして使える方法がなかったので、
スマホでは GoogleDocsに メモを作成して、そのメモをマークダウンに変換することにしました。

前提条件

  • Google Docsの文書がGoogle Drive上に保存されていること。
  • Google Apps Scriptを使用するため、Googleアカウントが必要です。

この方法を使うことで、フォルダ内のGoogle Docsを一括でMarkdown形式に変換し、保存することができるため、大量の文書を手間なくMarkdown形式に変換できます。

Google Apps Scriptエディタを開く

まず最初に、Google Apps Scriptエディタを開きます。

  1. Google ドライブにアクセスします。
  2. 左上の「新規作成」ボタンをクリックし、メニューから「Google Apps Script」を選択します。
  3. 新しいスクリプトエディタが開きます。

スクリプトコードを貼り付ける

Google Apps Scriptエディタが開いたら、以下のコードを貼り付けます。コードは、指定したフォルダIDのGoogle Docs文書をMarkdownに変換し、元のGoogle Docsファイルが保存されていたフォルダにMarkdown形式のファイルを保存するものです。

function convertDocsToMarkdownInFolder() {
  var folderId = 'YOUR_FOLDER_ID';  // 変換したいフォルダのID
  var folder = DriveApp.getFolderById(folderId);

  // フォルダ内の全てのGoogle Docsファイルを取得
  var files = getFilesInFolder(folder);

  files.forEach(function(file) {
    var doc = DocumentApp.openById(file.getId());
    var body = doc.getBody();
    var text = body.getText();

    // Markdownに変換(改行やヘッダーの簡単な処理)
    var markdownText = text.replace(/\n/g, '  \n'); // 改行をMarkdownの改行に変換
    markdownText = markdownText.replace(/([#]{1,6})\s+(.+)/g, function(match, p1, p2) {
      return p1 + ' ' + p2; // 見出しをMarkdown形式に変換
    });

    // Google Docsがある元のフォルダに.mdファイルを保存
    var markdownFile = file.getParents().next().createFile(file.getName() + '.md', markdownText, MimeType.PLAIN_TEXT);
    Logger.log('Created Markdown file: ' + markdownFile.getUrl());
  });
}

// フォルダ内のすべてのファイルを再帰的に取得
function getFilesInFolder(folder) {
  var files = [];
  var fileIterator = folder.getFiles();

  while (fileIterator.hasNext()) {
    var file = fileIterator.next();
    if (file.getMimeType() == MimeType.GOOGLE_DOCS) {
      files.push(file);
    }
  }

  // サブフォルダも再帰的に処理
  var subfolders = folder.getFolders();
  while (subfolders.hasNext()) {
    var subfolder = subfolders.next();
    files = files.concat(getFilesInFolder(subfolder));  // 再帰的にサブフォルダを処理
  }

  return files;
}

コードの説明

このコードは3つの主要な部分に分かれています:

1. convertDocsToMarkdownInFolder 関数

この関数は、指定したフォルダID内のGoogle Docs文書をMarkdown形式に変換し、その変換結果を元のGoogle Docs文書が保存されているフォルダに保存する役割を持っています。

  • フォルダIDを指定: 最初に、対象となるフォルダのIDを指定します。ここで指定したフォルダ内のすべてのGoogle Docsファイルが対象となります。
  • ファイルを取得: 次に、getFilesInFolder 関数を呼び出し、指定したフォルダ内にあるすべてのGoogle Docsファイルを取得します。
  • Markdownに変換: 各Google Docs文書をMarkdownに変換します。変換方法としては、改行をMarkdownの改行形式(\n)に変換し、見出し(#)のフォーマットをMarkdownに合わせて変換します。
  • Markdownファイルの作成: 最後に、変換した内容を元のGoogle Docsが保存されていたフォルダにMarkdown形式の.mdファイルとして保存します。

2. getFilesInFolder 関数

この関数は、指定したフォルダ内にあるGoogle Docsファイルを再帰的に取得する役割を持っています。サブフォルダ内にあるGoogle Docsも対象に含めます。

  • ファイルを取得: フォルダ内のすべてのファイルを取得し、Google Docsファイルのみをリストに追加します。
  • 再帰的な処理: サブフォルダが存在する場合、そのサブフォルダ内のファイルも再帰的に取得し、リストに追加します。

3. Markdownへの変換ロジック

Google Docs内のテキストはそのままコピーしてもMarkdown形式にはならないため、簡単な変換処理を行っています。例えば、改行や見出しのフォーマットをMarkdownに適した形式に変換します。

  • 改行処理: \n(改行)をMarkdownの改行に変換するため、\n に置き換えています。
  • 見出しの処理: 見出し(#)がある場合、適切なMarkdown形式に変換します。

スクリプトを実行する

スクリプトを貼り付けた後、以下のします:

  1. スクリプトエディタの上部にある「実行」ボタンをクリックします。
  2. 最初の実行時には、Googleアカウントに対する権限の認証が求められます。ポップアップで表示される指示に従い、必要な権限を付与します。
  3. 実行後、スクリプトが指定されたフォルダ内のGoogle DocsをMarkdownに変換し、そのフォルダにMarkdownファイルを保存します。

注意点

  • 変換の精度: このスクリプトでは、基本的な改行や見出しの変換を行っていますが、Google Docsの書式(リストや画像、リンクなど)はサポートしていません。必要に応じて、さらに複雑な変換を追加できます。
  • ファイル名の処理: 元のGoogle Docsファイルの名前がそのままMarkdownファイルに使用されますが、Google Docsの名前に不正な文字が含まれている場合、その処理も追加する必要があるかもしれません。
タイトルとURLをコピーしました