2026年3月28日

Google Sheet API/Node-REDを使ったスプレッドシートの更新実証


宮島と牡蠣いかだ
宮島と牡蠣筏         


今回は,外部からGoogleSpreadSheetの更新を実証します。

GoogleAppsheet等を使ってスマホからのデータ取り込みを考えた場合,GoogleSpreadSheetに蓄えたデータを外部から読み取り後,空にする必要があります。

更新には「Google Sheets API」を使いますが,認証情報であるAPIキーは読み込みしか使えません。

そのため,「Google Sheets API」を更新で使う場合の認証情報の選択肢は,「OAuth 2.0 クライアント ID」と「サービス アカウント」になります。

このうち,今回は「サービスカウント」を使って,GoogelSpreadSheetが更新できるか実証してみようと思います。

【実証前提条件】
・クラウドアプリ : GoogleSpreadSheet 
・グラウドAPI    : Google Sheets APIを利用
・RPAツール    : Node-RED(ウィンドウズ版)等を利用

それでは始めます。




  1 .はじめに

今回のSpreadSheetの更新には,「Google Sheets API」の「サービスアカウント」という認証情報を使います。

これは,「OAuth 2.0 クライアント ID」よりも使いやすいからです。また,実証用RPAツールとして「Node-RED」を使います。

マイクロソフトの「PAD(Power Automate for Desktop)」でGoogleSpreadSheetを更新するにはHTTPアクションを使うため,Header部に「JWT認証によるアクセストークン」を与えなければなりません。

アクセストークンを得るには「JWT認証用のPowerShell」を作る必要があります。

そこで,今回はGoogleSpreadSheetの更新機能を簡単に試せる「Node-RED」の「GoogleSheet」パレットを利用してみたいと思います。

Node-RED(ノードレッド)」とは、Webブラウザ上で「ノード」と呼ばれる機能ブロックを線でつなぎ合わせ、フロー(処理の流れ)を作成するノーコード/ローコードの視覚的プログラミングツールです。

IoT機器、API、オンラインサービスを簡単に連携でき、主にデータの収集・加工や自動化ツールとして利用されています。 

当研究会では,出来る限りフリーでベンダーロックインされない方法を研究していきたいので,今回はこのツールを利用します。

Node-REDの他に「n8n」というのもありますが,今後の課題といたします。



  2.Google Sheets APIのサービスアカウント作成方法

今回もAPIキーの場合と同様に,GoogleCloudConsoleにログインします。

①プロジェクトの作成

GoogleCloudの利用開始画面が表示されますので,ここでプロジェクトを作成します。

左上の「プロジェクトの選択」をクリックします。プロジェクトの選択画面が開きますので,右上の「新しいプロジェクト」という文字をクリックします。(既にプロジェクトがあれば,それを使ってもいいです。)

新しいプロジェクトの作成画面が開きます。「プロジェクト名」を任意に入れて左下の「作成」アイコンをクリックします。少し時間がかかります。

プロジェクトが作成出来たらプロジェクトを選択して,GoogleCloudのプロダクトの中から「API APIとサービス」というメニューを探します。

もし見つからなかったら,画面上部の検索欄から「API」とタイプインして見つけます。

APIとサービス」画面が開いたら,検索欄から「sheets」と入力して,「Google Sheets API」プロダクトを探します。

検索できたら「有効」アイコンをクリックして有効にします。

【注意】
GoogleSpreadSheet」を更新するだけなら「Google Sheets API」プロダクトを有効にするのみですが,ファイルの検索や作成も行う場合は,「Google Drive API」プロダクトも有効にする必要があります。


②サービスアカウントキーの作成

次に,「API APIとサービス」画面から左側メニュー欄にある「認証情報」をクリックし認証情報画面を出力します。

今回は,Node-REDというRPAツールを活用して,GoogleCloudのスプレッドシートを外部から更新するという実証ですから,APIの認証は「サービスアカウント」を活用してみたいと思います。

認証情報画面の上部にある「+認証情報を作成」をクリックして 「サービスアカウント」を選択してください。

サービスアカウント」作成画面が開きますので,一意な「サービスアカウント」を入力し,「作成して続行」をクリックします。

権限(省略可)と出ますが,これはプロジェクト内のリソースに対するアクセス権なのでロールは「削除」します。「続行」をクリックします。

次にアクセス権を持つプリンシパル(省略可)の設定ですが,GoogleSheetを更新するだけなのでそのまま「完了」をクリックします。

最後に「作成」アイコンをクリックします。これで認証情報に「サービスアカウント」が出現したと思います。

続いてサービスアカウントキーを作成します。該当のサービスアカウントをクリックします。「サービスアカウントの詳細」画面が出現します。

上部の「」タブををクリックします。下部の「キーを追加▼」をクリックして「新しい鍵作成」を選択します。

サービスアカウントの秘密鍵の作成」画面が出ますので,「JSON」を選択して右下隅の「作成」アイコンをクリックしてください。

「サービスアカウントキー(認証情報JSONファイル)」がダウンロードされますので,安全な場所に保存してください。なお,このファイルはセキュリティ上大変重要です。

【注意】
鍵の作成において,Googleより「Workload Identity連携」をするように勧められます。これは,「サービスアカウント キー(JSONファイル)」を使わずに、外部環境(AWS、Azureなど)から Google Cloud のリソースへ安全にアクセスするための仕組みです。Googleに正式に認められたAWSなどと連携してサービスアカウントを認証する方式のため,個人事業者のサーバ等で実現するには難しい面があります。そのため,サービスアカウントには無駄な「ロール(役割)」を与えないことと,利用する「APIサービスを最低限に絞る」ことで最低限のセキュリティを確保することにします。



  3.Googleスプレッドシートの設定とIDの取得

次に更新したいスプレッドシートを設定します。該当するGoogleアカウントを使って,GoogleDriveにログインし,対象とするスプレッドシートを表示します。

右上に「共有」というアイコンがありますので,これを開きます。「人の絵柄と+文字」というアイコンになっている場合もあります。

共有」画面が開いたら,「アクセスできるユーザー」に「サービスアカウント」で作成した「メールアドレス」を追加します。

そして,この「メールアドレス」の権限を「編集者」に変更します。

加えて,「スプレッドシートID」をURLから取得します。通常,URLは次の形をしています。

https://docs.google.com/spreadsheets/d/{スプレッドシートID}/edit?pli=1&gid=XXXX

この「d/」の次に来る文字列になります。これを取得しておきます。



  4.今回利用するNode-REDツールの説明

今回利用するRPAツールは「Node-RED」と言われ,ブラウザ上で「ノード」と呼ばれる機能ブロックを線でつなぎ合わせて作る視覚的プログラミングツールです。

Windows版は,コマンドプロンプト上でインストールすることが出来,PowerShellやpythonなどもNode-REDを通して利用することが可能です。

なお,Node-REDはNode.js上で稼働するため,事前にNode.jsの最新版LTSをNode.js公式ホームページからダウンロードし,インストールしておく必要があります。

詳しくは,Node-REDの公式ホームページを参照してください。起動方法はインストール後,Windowsのコマンドプロンプトから「node-red」と入力すると起動します。

今回はこれを使って,Googleスプレッドシートを外部から更新してみます。



  5.Googleスプレッドシートの更新フロー

ここからは,Node-REDのフローについて記述します。Node-REDはインストール済みとして以降記述します。

Google Sheets API」を利用したスプレッドシートの読み込みには,パレットの「node-red-contrib-google-sheets」というノード部品を使います。

Node-REDはWindowsのコマンドプロンプトで,「node-red」と入力すれば立上がります。


コード

node-red


次に,ブラウザを立ち上げてURLに「localhost:1880」と入力します。Node-REDのエディターが表示されます。慣れないと感じがわかないと思いますが,すぐにわかります。

右上の「横三本線」を押してダウンメニューから,「パレットの管理」を選択し,「ノードを追加」から「node-red-contrib-google-sheets」というノード部品をインストールします。これにより,「GSheet」というノード部品が左サイドに出現します。


Node-REDエディター画面
Node-REDエディター画面


次に左端からノード部品を選んで,真ん中にドラッグ&ドロップしていきます。それでは,スプレッドシートを読み込んで修正・更新するプログラムを作ってみましょう。
左欄から「inject(タイムスタンプ)」ノード,「GSheet」ノード,「デバック」ノードを持って来て線で結びます。



Node-REDプログラム作成
Node-REDプログラム作成


すこし説明すると,
inject(タイムスタンプ)」ノードは,フローを手起動するノードです。
 左側にあるタブをクリックすると次のノードにメッセージが送出されます。
GSheet」ノードは,GoogleSpreadSheetを読んだり書いたりするノードです。
デバックノードは,処理結果をダンプ出力するデバッガーです。
 表示対象を「msgオブジェクト全体」にすると分かりやすいです。

各ノードの詳しい使い方は,「ヘルプ(図書マーク)」にあります。通常は英語ですが右クリックして日本語に翻訳するとわかりやすいです。

Node-REDは各ノード間を「msg」というオブジェクトでデータ連携していく仕組みになっています。

それでは,「GSheet」ノードを設定しましょう。ダブルクリックすると,編集画面が表示されます。


GSheetノードの設定
GSheetノードの設定画面

各設定欄に入力します。
「creds」には,2項②で取得した「サービスアカウントキー(認証情報JSONファイル」の中身を設定します。
「Method」は,「Get Cells」にして下さい。
「SpreadSheetID」は,3項で取得した「スプレッドシートID」を設定します。
「Cells」は,「Sheet1」とします。(扱うスプレッドシートを確認)
 これは,A1表記と呼ばれるもので
 ・{シート名}だけはシート全体を指します。
 ・{シート名}!A1:B2 と書くと、Sheet1 のA1セル~B2セルの範囲を指します。

今回は,シート全体を取得します。設定後,「完了」をクリックし「デプロイ」します。

【重要】
Node-REDのエディターでフローを修正した後は,必ず右上の「デプロイ」をクリックして下さい。これをしないとプログラムに反映されません。


ダミーデータとして以下のデータをスプレッドシートに作成しました。これをこのプログラムで読み込んでみます。


スプレッドシート(初期)
スプレッドシート(初期内容)


Node-REDプログラムの「inject(タイムスタンプ)」ノードの左側のタブをクリックしてプログラムを起動します。

下図の右側にデバック内容を表示することができます。msg.payloadオブジェクトの下にスプレッドシートの中身が読み込まれているのがわかります。


スプレッドシート読取実行図
スプレッドシート読取実行図


では,この読み込んだデータのうち,入荷量,出荷量,発注量の数字をゼロに置き換えます。これには「changeノード」を使います。


changeノードの設定内容
changeノードの設定内容


changeノード」を設定して線で結び,最後にデバッグノードを設定して「デプロイ」します。下図が一連を走らした結果です。入荷量,出荷量,発注量の数字がゼロになっています。


Changeノードまでのフロー図
Changeノードまでのフロー図


では,この内容でスプレッドシートの中身を置き換えてみます。先ほどの「GSheet」ノードのMethodを「Update」に変えて設置し線で繋ぎます。デバッグノードで「GSheet」の処理結果(デバック)が見える形にして「デプロイ」します。


最終フロー図
最終フロー図


Node-REDプログラムの「inject(タイムスタンプ)」ノードの左側のタブを再度クリックしてプログラムを最初から起動します。

エラーが発生していないので,大丈夫なようです。スプレッドシートの中身を確認します。
無事更新されていました。


スプレッドシート(更新後)

スプレッドシート(更新後)


これで「GoogleSheetAPI」の更新実証は終わりです。サービスアカウントを使えば,更新できることが分かりました。

今回は簡単に行なうため,Node-REDを利用しましたが,「サービスアカウントの認証情報」を使って「JWT認証によるアクセストークン」を作れば,PADのHTTPリクエストでも可能と思います。



  6.まとめ

Google Sheets API」と「サービスアカウント」を使って,GoogleSpreadSheetの更新を実証してみました。

正常に更新出来ましたので,GoogleAppSheetなどで作成されたスプレッドシートと既存の基幹システムを連携することが可能です。

なお,RPAツールはWindows版のNode-REDを使いました。Node-REDは,RaspberryPiなどでもよく使うツールです。

ユーザが独自の部品を作ることもできますので,今後はこれを使ってフリー版RPA用の部品を作ってみたいと思います。

なお,今回のNode-REDは,セキュリティ的に保護されたPC環境で動作することを前提に作成しています。

インターネット上に置く場合は,さらにセキュリティ上の保護対策をしなければなりませんのでご承知おきください。

また,このプログラムを自動的に好きな時刻に起動させる方法としては,Node-RED内のタイマーで起動させる方法と,タスクスケジューラを使って起動させる方法があります。

どちらもそんなに難しくないと思いますが,後日実証してみたいと思います。

それでは,楽しいITリテラシーライフをお過ごしください。


 (ご注意)情報の正確性を期していますが,実施される場合には自己責任でお願いします。


0 件のコメント: