GASでJSON形式データをJavaScriptで読み込む方法

GASでJSONをJavaScriptで読み込み

GASを使用すればGoogleスプレッドシートのシートのデータをJSON形式にできる。

さらにJavaScriptを使用すればJSONを読み込んで表示できます。

GASでシートの内容をJSONにする方法

まずGoogleスプレッドシートで適当な項目入りのデータが入ったシートを作成する。

Googleスプレッドシートで適当な項目入りのデータが入ったシートを作成

次に以下のGoogle Apps Scriptで1行目以外を配列オブジェクトにして表示できるか確認。

function getData() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
  const sheet = spreadsheet.getActiveSheet()
  const range = sheet.getDataRange().getValues().slice(1)
  const values = range
  const data = values.map(row => {
    let col = 0
    return {
      id: row[col++],
      title: row[col++],
    }
  })
  console.log(data)
  return data
}

うまくいけば実行ログに配列オブジェクトが表示される。

GASの実行ログ結果

doGet()でJSON形式で配信

前述の方法でシートの内容を配列オブジェクトに変換できたが、これをJSON形式で配信してJavaScriptで読み込めるようにするには、先程のgetData()の結果をdoGet()でJSON形式に変換するコードを書く。

function doGet() {
  const data = getData()
  const response = ContentService.createTextOutput()
  response.setMimeType(MimeType.JSON)
  response.setContent(JSON.stringify(data))
  return response  
}

次に画面右上の「デプロイ」から「新しいデプロイ」を選択する。

「デプロイ」から「新しいデプロイ」を選択

デプロイの種類の選択は「ウェブアプリ」にしたあと

次のユーザーとして実行: 自分

アクセスできるユーザー: 全員

以上の設定をしてデプロイボタンを押す。

GASでJSON形式データをJavaScriptで素早く読み込む方法

デプロイ後にJSONを読み込めるウェブアプリのURLが生成されるので、あとはこれをJavaScriptで読み込めば完了です。

https://script.google.com/macros/s/AKfycbz2Xy0IKHVuzczTTVI1SF0xjIb032EfDBc1oZO8lI4WsUQLQMxLpUug_cRxp8H_eLyRDg/exec

JavaScriptのfetchで読み込む場合は以下のようになります。

const url = 'https://script.google.com/macros/s/AKfycbz2Xy0IKHVuzczTTVI1SF0xjIb032EfDBc1oZO8lI4WsUQLQMxLpUug_cRxp8H_eLyRDg/exec'

fetch(url)
  .then((res) => res.json())
  .then((data) => console.log(data))

GASのJSON取得は時間がかかる

GASのJSON取得は2秒ほど時間がかかるため、読み込み中はローディング画像を表示が必須です。

前回のデータが一時的に表示されても良いのであればlocalStorageに保存しておき、差分があれば表示させるようにすれば体感速度が上がるのでオススメです。

const url = 'https://script.google.com/macros/s/AKfycbz2Xy0IKHVuzczTTVI1SF0xjIb032EfDBc1oZO8lI4WsUQLQMxLpUug_cRxp8H_eLyRDg/exec'
const localData = localStorage.getItem('localData')
if (localData) {
  console.log(JSON.parse(localData))
}

fetch(url)
  .then((res) => res.json())
  .then((data) => {
    const dataStr = JSON.stringify(data)
    if (dataStr !== localData) {
      console.log(data)
      localStorage.setItem('localData', dataStr)
    }
  })

GASでJSON形式データを読み込むサンプル