Rails Insights

GolangでGoogle Sheetsを使う方法

Google Sheetsは、データの管理や分析に非常に便利なツールです。Golang(Go言語)を使用してGoogle Sheetsと連携することで、プログラムから直接スプレッドシートを操作することができます。本記事では、Golangを使ってGoogle Sheetsを操作する方法について、ステップバイステップで解説します。

必要な準備

まず、GolangでGoogle Sheetsを使用するために必要な準備を行います。以下の手順に従ってください。

  1. Google Cloud Platform(GCP)にアカウントを作成します。
  2. 新しいプロジェクトを作成します。
  3. Google Sheets APIを有効にします。
  4. サービスアカウントを作成し、JSON形式の認証情報をダウンロードします。
  5. Google Sheetsのスプレッドシートを作成し、サービスアカウントのメールアドレスを共有します。

Google Cloud Platformでの設定

具体的な手順は以下の通りです。

  1. GCPのコンソールにログインし、「プロジェクトを作成」をクリックします。
  2. プロジェクト名を入力し、「作成」をクリックします。
  3. 左側のメニューから「APIとサービス」→「ライブラリ」を選択します。
  4. 検索バーに「Google Sheets API」と入力し、APIを有効にします。
  5. 「APIとサービス」→「認証情報」を選択し、「認証情報を作成」→「サービスアカウント」を選択します。
  6. サービスアカウントの名前を入力し、「作成」をクリックします。
  7. 役割を選択し、「続行」をクリックします。
  8. 「キーを作成」→「JSON」を選択し、ダウンロードします。

Golangの環境設定

次に、Golangの環境を設定します。以下の手順に従ってください。

  1. Golangをインストールします。公式サイトからダウンロードできます。
  2. プロジェクト用のディレクトリを作成します。
  3. 以下のコマンドを実行して、必要なパッケージをインストールします。
go get -u google.golang.org/api/sheets/v4
go get -u golang.org/x/oauth2/google

コードの実装

それでは、実際にGolangでGoogle Sheetsを操作するコードを実装してみましょう。以下のコードは、スプレッドシートにデータを書き込む例です。

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"

    "google.golang.org/api/option"
    "google.golang.org/api/sheets/v4"
)

func main() {
    // 認証情報の読み込み
    b, err := ioutil.ReadFile("path/to/your/service-account.json")
    if err != nil {
        log.Fatalf("Unable to read service account file: %v", err)
    }

    config, err := google.JWTConfigFromJSON(b, sheets.SpreadsheetsScope)
    if err != nil {
        log.Fatalf("Unable to parse service account JSON: %v", err)
    }

    client := config.Client(context.Background())

    // Sheets APIのサービスを作成
    srv, err := sheets.NewService(context.Background(), option.WithHTTPClient(client))
    if err != nil {
        log.Fatalf("Unable to retrieve Sheets client: %v", err)
    }

    // スプレッドシートIDと範囲を指定
    spreadsheetId := "your_spreadsheet_id"
    writeRange := "Sheet1!A1"

    // 書き込むデータ
    var vr sheets.ValueRange
    myval := []interface{}{"Hello", "World"}
    vr.Values = append(vr.Values, myval)

    // データの書き込み
    _, err = srv.Spreadsheets.Values.Update(spreadsheetId, writeRange, &vr).ValueInputOption("RAW").Do()
    if err != nil {
        log.Fatalf("Unable to write data to sheet: %v", err)
    }

    fmt.Println("Data written successfully!")
}

コードの解説

上記のコードを詳しく見ていきましょう。

認証情報の読み込み

最初に、サービスアカウントのJSONファイルを読み込みます。このファイルには、APIにアクセスするための認証情報が含まれています。

b, err := ioutil.ReadFile("path/to/your/service-account.json")

Sheets APIのサービスを作成

次に、Google Sheets APIのサービスを作成します。これにより、スプレッドシートにアクセスできるようになります。

srv, err := sheets.NewService(context.Background(), option.WithHTTPClient(client))

データの書き込み

最後に、指定した範囲にデータを書き込みます。ここでは、"Hello"と"World"という2つの値をA1セルに書き込んでいます。

myval := []interface{}{"Hello", "World"}
vr.Values = append(vr.Values, myval)

データの読み込み

次に、Google Sheetsからデータを読み込む方法を見てみましょう。以下のコードは、スプレッドシートからデータを取得する例です。

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"

    "google.golang.org/api/option"
    "google.golang.org/api/sheets/v4"
)

func main() {
    // 認証情報の読み込み
    b, err := ioutil.ReadFile("path/to/your/service-account.json")
    if err != nil {
        log.Fatalf("Unable to read service account file: %v", err)
    }

    config, err := google.JWTConfigFromJSON(b, sheets.SpreadsheetsScope)
    if err != nil {
        log.Fatalf("Unable to parse service account JSON: %v", err)
    }

    client := config.Client(context.Background())

    // Sheets APIのサービスを作成
    srv, err := sheets.NewService(context.Background(), option.WithHTTPClient(client))
    if err != nil {
        log.Fatalf("Unable to retrieve Sheets client: %v", err)
    }

    // スプレッドシートIDと範囲を指定
    spreadsheetId := "your_spreadsheet_id"
    readRange := "Sheet1!A1:B2"

    // データの読み込み
    resp, err := srv.Spreadsheets.Values.Get(spreadsheetId, readRange).Do()
    if err != nil {
        log.Fatalf("Unable to retrieve data from sheet: %v", err)
    }

    if len(resp.Values) == 0 {
        fmt.Println("No data found.")
    } else {
        fmt.Println("Data retrieved:")
        for _, row := range resp.Values {
            fmt.Println(row)
        }
    }
}

まとめ

この記事では、Golangを使用してGoogle Sheetsを操作する方法について説明しました。Google Cloud Platformでの設定から、データの書き込みや読み込みのコード例まで、具体的な手順を示しました。

GolangとGoogle Sheetsを組み合わせることで、データの管理や分析がより効率的に行えるようになります。ぜひ、実際に試してみてください!

Published: August 24, 2024

© 2024 RailsInsights. All rights reserved.