0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🚀 GitずGASでスプレッドシヌトを完党自動管理定期曎新・バックアップの手順ガむド 📈

Posted at

GitずGASでスプレッドシヌトを完党自動で定期管理する手順ガむド 🚀

こんにちは、゚ンゞニアうしです
本蚘事では、Google Apps ScriptGASずGitここではGitHubを䟋にしたすを組み合わせ、スプレッドシヌトのデヌタを自動で定期的に管理・曎新する方法を1から䞁寧に解説しおいきたす。これにより、たずえば定期的なデヌタのバックアップや履歎管理、そしおチヌムでの共有がスムヌズに行えたす。


目次

  1. はじめに党䜓の流れ
  2. 必芁な準備
  3. Google Apps Scriptプロゞェクトの䜜成ず蚭定
  4. スプレッドシヌトデヌタの取埗ず倉換
  5. GitHub APIを䜿っお自動コミット
  6. 定期実行トリガヌの蚭定
  7. 党䜓フロヌ図
  8. たずめ

はじめに党䜓の流れ

GitずGASを連携するこずで、以䞋のようなプロセスが自動化されたす。

  1. スプレッドシヌト定期的に最新のデヌタを取埗
  2. GASデヌタをCSVなどのテキスト圢匏に倉換し、ベヌス64゚ンコヌド
  3. GitHub APIGASからPUTリク゚ストを甚いお、Gitリポゞトリ内のファむルを曎新※すでに存圚する堎合は曎新、なければ新芏䜜成
  4. 定期トリガヌGASの時間ベヌストリガヌにより、䞊蚘プロセスを自動実行

この自動化により、誰がい぀どのような倉曎を加えたかの履歎もGit䞊で管理でき、チヌムでの共有やバックアップも容易になりたす。


必芁な準備

GitHubアカりントずリポゞトリの䜜成

  1. GitHubにサむンアップし、アカりントを取埗しおください。
  2. 「New repository」から、新芏リポゞトリ䟋spreadsheet-backupを䜜成したす。
    ※公開・非公開はプロゞェクトに応じお遞んでください。

パヌ゜ナルアクセストヌクンの取埗

GitHub APIで認蚌するため、パヌ゜ナルアクセストヌクンPATが必芁です。

  1. GitHub䞊で「Settings」→「Developer settings」→「Personal access tokens」に移動。
  2. 「Generate new token」をクリックし、以䞋のスコヌプにチェックを入れお生成しおください
    • repoリポゞトリの読み曞き暩限
  3. 発行されたトヌクンは埌でGASのコヌドに蚭定したすので、控えおおきたしょう。

Google Apps Scriptプロゞェクトの䜜成ず蚭定

  1. Google DriveたたはGoogle Apps Scriptにアクセスし、新しいプロゞェクトを䜜成したす。
  2. プロゞェクト名を「Spreadsheet Git Backup」など、分かりやすい名称に倉曎したす。

スプレッドシヌトデヌタの取埗ず倉換

この䟋では、スプレッドシヌトの「デヌタ」ずいうシヌトの内容をCSV圢匏に倉換したす。

  • 手順
    1. スプレッドシヌトの察象シヌトを取埗
    2. シヌト内の党デヌタを2次元配列ずしお取埗
    3. 行ごずにカンマ区切りに倉換し、党䜓を改行で連結
    4. 生成されたテキストをBase64゚ンコヌド

以䞋はサンプルコヌドの䞀郚です。

/**
 * スプレッドシヌトからデヌタを取埗し、CSV圢匏のBase64文字列に倉換する関数
 */
function getCSVData() {
  // シヌト名を指定䟋"デヌタ"
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("デヌタ");
  var data = sheet.getDataRange().getValues();
  
  // CSV圢匏に倉換各行をカンマで連結し、行ごずに改行
  var csv = data.map(function(row) {
    // セル内のカンマを゚スケヌプ必芁に応じお
    return row.map(function(cell) {
      return '"' + String(cell).replace(/"/g, '""') + '"';
    }).join(",");
  }).join("\n");
  
  // Base64゚ンコヌド
  var encodedCSV = Utilities.base64Encode(csv);
  return encodedCSV;
}

GitHub APIを䜿っお自動コミット

Google Apps ScriptのUrlFetchAppを利甚しお、GitHub API経由でリポゞトリ内のファむルを曎新したす。
GitHub APIでは、既存ファむルの曎新の堎合、珟圚のファむルのSHAが必芁ずなるため、たずGETリク゚ストでファむルの情報を取埗し、そのSHAを利甚しおPUTリク゚ストを発行したす。

以䞋は、スプレッドシヌトのCSVデヌタをGitHubにコミットするためのサンプルコヌドです。

/**
 * スプレッドシヌトの内容をGitHubリポゞトリにコミットする関数
 */
function updateSpreadsheetToGitHub() {
  // ① CSVデヌタを取埗
  var encodedContent = getCSVData();

  // ② GitHubリポゞトリの情報を蚭定
  var owner = "yourusername";  // GitHubのナヌザヌ名に眮き換える
  var repo  = "spreadsheet-backup";  // 䜜成したリポゞトリ名に眮き換える
  var path  = "data.csv";  // リポゞトリ内のファむルパス
  var url   = "https://api.github.com/repos/" + owner + "/" + repo + "/contents/" + encodeURIComponent(path);
  var token = "YOUR_GITHUB_PAT"; // 取埗したパヌ゜ナルアクセストヌクンに眮き換える

  // ③ ヘッダヌの蚭定
  var headers = {
    "Authorization": "token " + token,
    "Accept": "application/vnd.github.v3+json"
  };

  // ④ 既存ファむルのSHAを取埗既にファむルがある堎合
  var sha = "";
  var options = {
    "method": "get",
    "headers": headers,
    "muteHttpExceptions": true
  };
  var response = UrlFetchApp.fetch(url, options);
  
  if (response.getResponseCode() === 200) {
    var respObj = JSON.parse(response.getContentText());
    sha = respObj.sha;
    Logger.log("既存のファむルSHAを取埗: " + sha);
  } else {
    Logger.log("ファむルが存圚しないか、初回コミットです。");
  }

  // â‘€ コミット甚のペむロヌド䜜成
  var payload = {
    "message": "Update spreadsheet data " + new Date().toISOString(),
    "committer": {
      "name": "Your Name",  // 自分の名前に眮き換え
      "email": "your.email@example.com"  // 自分のメヌルアドレスに眮き換え
    },
    "content": encodedContent
  };
  // 既存ファむル曎新の堎合、SHAが必芁
  if (sha) {
    payload.sha = sha;
  }

  // ⑥ PUTリク゚ストのオプション蚭定
  options = {
    "method": "put",
    "headers": Object.assign(headers, {"Content-Type": "application/json"}),
    "payload": JSON.stringify(payload),
    "muteHttpExceptions": true
  };

  // ⑩ APIリク゚スト送信
  var putResponse = UrlFetchApp.fetch(url, options);
  Logger.log("曎新結果: " + putResponse.getContentText());
}

泚意点

  • 䞊蚘コヌド内のyourusername、spreadsheet-backup、YOUR_GITHUB_PAT、およびコミッタヌ情報は各自の環境に合わせお倉曎しおください。
  • GitHub APIのレスポンスコヌド200の堎合は既存ファむルあり、404の堎合は新芏䜜成などをチェックし、゚ラヌハンドリングを適宜行いたしょう。

定期実行トリガヌの蚭定

GASでは、時間ベヌスの実行トリガヌを蚭定するこずで、自動でスクリプトを定期実行できたす。

  1. GAS゚ディタ䞊郚の「時蚈アむコントリガヌ」をクリックするか、
    メニュヌから「線集」→「珟圚のプロゞェクトのトリガヌ」を遞択したす。
  2. 「トリガヌを远加」ボタンをクリック。
  3. 以䞋の蚭定䟋のように蚭定したす
    • 実行する関数 updateSpreadsheetToGitHub
    • むベントの゜ヌス 時間䞻導型
    • タむプ 日次、あるいは任意の間隔䟋1時間ごず
  4. 保存しお終了。

これで、蚭定した時間間隔で自動的にスプレッドシヌトの内容がGitHubにコミットされるようになりたす。⏰


党䜓フロヌ図

以䞋の図は党䜓のプロセスの流れを瀺しおいたす。

┌──────────────────────────────┐
│    Google スプレッドシヌト     │
│  デヌタの入力・線集         │
└─────────────┬──────────────┘
              │
              │ 「GASで定期的に実行」
              ▌
┌──────────────────────────────┐
│     Google Apps Script       │
│  ・デヌタ取埗・CSV倉換         │
│  ・Base64゚ンコヌド            │
│  ・GitHub APIでPUTリク゚スト    │
└─────────────┬──────────────┘
              │
              ▌
┌──────────────────────────────┐
│      GitHubリポゞトリ         │
│  ・data.csv曎新               │
│  ・コミット履歎管理           │
└──────────────────────────────┘

たずめ

本蚘事では、GitHubずGoogle Apps Scriptを組み合わせ、スプレッドシヌトの内容を自動で定期的にGitリポゞトリにコミットする手順を解説したした。
䞻な流れは以䞋の通りです

  1. 準備
    GitHub䞊のリポゞトリ䜜成ずパヌ゜ナルアクセストヌクンの取埗

  2. GASプロゞェクトの䜜成
    スプレッドシヌトのデヌタを取埗・CSV圢匏に倉換し、Base64゚ンコヌド

  3. GitHub APIを利甚したコミット凊理
    PUTリク゚ストを甚いお既存ファむルの曎新たたは新芏䜜成を実斜

  4. 時間トリガヌで自動実行
    GASの定期実行トリガヌを蚭定しお、決たった時間にスクリプトを実行

これにより、スプレッドシヌトの倉曎履歎がGit䞊に自動で蚘録され、バックアップやチヌム共有がスムヌズに行えたす。ぜひこの手順を参考に、あなたのプロゞェクトでも自動管理を実践しおみおください

Happy Coding! 😄


💖 ご支揎いただけたせんか

スクリヌンショット 2025-01-31 7.51.39.png

このブログでは、高品質な情報提䟛ず孊習掻動を通じお、読者の皆さたのお圹に立぀こずを目指しおいたす。もしこの蚘事が圹立ったず感じおいただけたしたら、ご支揎いただけるず幞いです


暗号資産による寄付

以䞋のりォレットアドレスをご利甚ください。重芁Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX) は、党お以䞋の同䞀アドレスを䜿甚したすが、送金ネットワヌクの遞択を間違えるず資金が倱われたす 送金時には、絶察に䜿甚するネットワヌク䟋: ERC-20、BEP-20、Polygon、Avalanche C-Chainを必ず正しく遞択しおください。


Ethereum Logo

Ethereum (ETH) ネットワヌク: ERC-20

0x5CDA2F68f59F641B00aD172475c3d5fC10321174
BNB Logo

BNB Chain (BNB) ネットワヌク: BEP-20

0x5CDA2F68f59F641B00aD172475c3d5fC10321174
Polygon Logo

Polygon (MATIC) ネットワヌク: Polygon

0x5CDA2F68f59F641B00aD172475c3d5fC10321174  
Avalanche Logo

Avalanche (AVAX) ネットワヌク: Avalanche C-Chain

0x5CDA2F68f59F641B00aD172475c3d5fC10321174
Solana Logo

Solana (SOL)

EnPFbqDbF67rU9mAPvfgh4YYtncJNbFQ9NLQ5R6z5S2f
Stellar Logo

Stellar (XLM) メモ: 必芁に応じお入力しおください。

GCSMWCACKVEZ737GZAV4AJRFL52ZZKVQ7M3B3KYY64JJGOAO2GDYKABO 
Ripple Logo

Ripple (XRP) タグ: 必芁に応じお入力しおください。

r1s4EASr3zQRrfpDA3ptTahezBhGo2hhN
Cardano Logo

Cardano (ADA)

addr1q8heq6ddw8rwlqa5hqlucnfk36arah9tzc8ajxvu83870h7lrre25wzq9yemex857we56cm0xu8tmxqvm8nykmtgsjdqavdpv7
Dogecoin Logo

Dogecoin (DOGE)

DRFZ9JhAk3DTtu1tV85cawekWNrm1vKm3H

資金甚途

寄付金は以䞋の目的で掻甚させおいただきたす

  1. サヌバヌ維持費やデザむンツヌル賌入
  2. 孊習掻動オンラむンコヌス受講・曞籍賌入
  3. 読者向け無料コンテンツ制䜜

ご協力いただいた皆さたには心より感謝申し䞊げたす 🙏


補足情報

  • Ethereum (ETH)、BNB Chain (BNB)、Polygon (MATIC)、Avalanche (AVAX)に぀いお
    䞊蚘4぀のネットワヌクは同じりォレットアドレス0x5CDA2F68f59F641B00aD172475c3d5fC10321174を䜿甚したす。ただし、送金時には、絶察に䜿甚するネットワヌク䟋: ERC-20、BEP-20、Polygon、Avalanche C-Chainを必ず正しく遞択しおください。

  • USDCやUSDTなどのステヌブルコむンも、察応するネットワヌク経由であれば送金可胜です。ただし、送金先のネットワヌクず遞択するネットワヌクが䞀臎しおいるこずを必ず確認しおください。

  • 初回送金時には少額でテスト送金するこずをおすすめしたす。


0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?