node.jsのいろいろなモジュール50 – Google Spreadsheetにアクセスする
node.jsでGoogle Spread Sheetにアクセス
Google Spreadsheetとは
Google スプレッドシートとは、Goolgeの提供するサービスで、
Webベースの表計算ソフトです。ブラウザを使用し、複数のユーザーとリアルタイムに編集することができます。
また、MSのエクセルに近い機能も持ち、xls(xlsx)ファイルを読み込むことも可能になっています。
手軽にシートを共有でき、APIでアクセスする手段も提供されています。
今回はnode.jsからサービスアカウント形式の認証で、Googleスプレッドシートにアクセスしてみます。
##環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.10.5
- Node : v4.1.2
データとAPIを使用する準備
1.Googleスプレッドシートの作成
まずは、適当なスプレッドシートを作成します。
ワークシート名はtest、シート名はmysheet1とし、下記のようにセルデータを入力しました。
id | name | price |
---|---|---|
1 | りんご | 100 |
2 | バナナ | 150 |
3 | みかん | 80 |
2.Google Developer コンソールでAPI許可とKeyファイルのダウンロード
Google Developerコンソールにアクセスし、プロジェクトを作成します。
作成したプロジェクトを選択し、サイドバーのメニューからAPI->Drive APIを選択して、Drive APIを有効化しましょう。
次にプロジェクトを選択した状態で、メニューから認証情報->認証情報を追加 ボタンを押します。
「サービスアカウント」を選択し、JSON形式を選択して作成ボタンを押すと、JSONファイルがダウンロードされます。
3.jsonに記述してあるメールアドレスをアクセス許可する
最後に、Googleスプレッドシート画面で共有ボタンを押し、
2でダウンロードしたJSONに書いてある「client_email」のアドレスを追加します。
なお、ここで許可するアカウントは、APIアクセス用に発行されたdeveloper.gserviceaccount.comドメインのアカウントです。
弊社のように、セキュリティの関係上、外部ドメインとの共有ができない場合、今回紹介する方法は使用できないので注意してください。
(OAuth2を使用すればスプレッドシートの共有をしなくてもAPIアクセス可能です。次回紹介予定)
nodeアプリの作成
準備ができたので、node.jsプログラムを作成してみましょう。
モジュールのインストール
まずはGoogleスプレッドシートにアクセスするためのモジュールをnpmでインストールしましょう。
% npm install npm i google-spreadsheet
サンプル作成
var GoogleSpreadsheet = require('google-spreadsheet'); var my_sheet = new GoogleSpreadsheet(<ワークシートのID>); var credentials = require(<3でダウンロードしたJSONのパス>);
ワークシートIDは、スプレッドシートを開いたURLのdとeditの間にある文字列です。
先ほどDeveloperコンソールからダウンロードしたJSONファイルも使用するので、パスを控えておきましょう。
useServiceAccountAuth関数を使用することで、JSONを元にした情報で認証を行います。
そして、getInfo関数を使うとシート情報を取得することが可能になります。
var sheet; my_sheet.useServiceAccountAuth(credentials, function(err){ my_sheet.getInfo(function(err, data){ console.log(data); sheet = data; //あとから使えるように外部スコープに保存 }); });
getInfoで取得したオブジェクトには全部のシート情報がはいっているので、タイトルで対象のシートを判定しています。
対象のシートでgetRows関数を使用することで、行毎にデータを取得できます。
for(var i in sheet.worksheets) { if(sheet.worksheets[i].title === 'mysheet1') { sheet.worksheets[i].getRows( function( err, rows ) { for(var i in rows) { console.log(rows[i]); } }); } }
また、getCells関数を使用すれば、すべてのセルごとにデータを取得できます。
なお、データを追加する場合にはaddRow関数を使用します。
sheet.addRow( <行数>, { <カラム名>: '値'} );
まとめ
今回はシート共有を使用してGoogle SpreadSheetにアクセスする方法について紹介しました。
シート共有を使うことで、簡単にアクセスできることがわかります。
次回はOAuth2を使用してGoogle SpreadSheetにアクセスする方法について紹介します。