Laravel Google連携スプレッドシートにデータベース反映

Laravelと連携:Excel・PDF・Google

LaravelはGoogleドライブやスプレッドシートとも連携が可能。

今回は指定したデータベースの情報をGoogleスプレッドシートに反映する方法を解説します。

Googleの設定がけっこう面倒ですが、そのあたりの手順も詳しくお伝えします。

じゅんこ
じゅんこ

Google連携で、さらにLaravelを快適に使いましょう♪

Laravelのプロジェクト準備

次の3ステップで進めていきます。

  1. Laravelのプロジェクト準備
  2. Google Cloud Platformの認証設定
  3. LaravelにGoogleスプレッドシート連携用コード入力

まずは1.Laravelのプロジェクト準備から進めていきましょう。

① プロジェクトの新規作成

初めてLaravelをインストールする場合は、こちらの記事を参考に必要な環境を整えてください。

プロジェクト作成後、 cd spreadsheet で、作成したプロジェクトに移動します。

② Fakerでデータを挿入

テスト用のデータをFakerを使って作成します。

database/seeders/DatabaseSdder.phpを開き、16行目を有効にしておきます。

次にdb:seedコマンドを実行。

データベースにログインすると、Laravelテーブルに、10人分のデータが入っています。

じゅんこ
じゅんこ

本当にいそうな名前ばっかりですが、すべてフェイクです!

なお日本人名のデータをいれたい場合は、あらかじめ、config/appのapp.phpファイルの109行目を 'faker_locale' => 'ja_JP', にしておいてください。

詳しくはこちらの記事を読んでください。

Google Cloud Platformの認証設定

次にGoogle側の準備をすすめます。

色々ありますが、うっかりがあると、連携ができないので、ご注意を^^;

① Google Cloud Platformアカウント作成

もしまだお持ちでない場合は、Google Cloud Platformのアカウントを作成しておいてください。

② 新規プロジェクト作成

プロジェクトの選択をクリックし、新しいプロジェクトより、新規プロジェクトを作成します。

③ OAuth同意画面の設定

左側のメニューの【APIとサービス】より、【OAuth同意画面】をクリックします。

最初は、同意が必要になります。同意画面を設定をクリック。

OAuth同意画面で【外部】にチェックが入った状態で【作成】ボタンを押します。

アプリ登録の編集では、アプリ名ユーザーサポートメール、そして下のほうにあるデベロッパーの連絡先情報を入れます。

デベロッパーの連絡先情報は、ユーザーサポートメールと同じで大丈夫です。

あとは「保存して次へ」で進んでいきます。

④ OAuthクライアントIDの設定

次に、認証情報を設定していきます。

プロジェクトのAPIとサービス/認証情報へ進みます。

画面上部の【認証情報を作成】をクリックし【OAuthクライアントID】を選択。

OAuthクライアントID作成画面になります。

ウェブアプリケーションを選び、名前を設定します。

作成ボタンをクリックすると、次のようにクライアントIDとクライアントシークレットが表示されます。このまま【OK】を押します。

⑤ サービスアカウントの設定

もう一度【認証情報を作成】をクリックし、今度は【サービスアカウント】を選択します。

サービスアカウントの名前を入力して完了ボタンをクリックしてください。

メールは、サービスアカウントから、自動で作成されます。

じゅんこ
じゅんこ

このメールアドレスは後で使います!

完了をクリックすると、サービスアカウントの詳細を入力するページが出てきます。

適当に名前を登録し、完了をクリック。

認証画面に戻ると、サービスアカウントに今作成したアカウントが入っています。

メール部分をクリックしてください。

下のほうの【鍵を追加】より、【新しい鍵を作成】を選択してください。

下記の画面が表示されます。JSON形式を詮索したまま、【作成】ボタンをクリック。

ダウンロードした.jsonファイルは、Laravelプロジェクトの中の【storage】直下にいれておきます。

ファイル名は【credential.json】としておきます。

じゅんこ
じゅんこ

このファイルはGoogleとの連携に超重要です!

⑥ 共有するGoogleファイルのIDを設定

次にGoogleドライブの中に、今回共有するスプレッドシートファイルを作成します。

作成したファイルを開き、ここの部分をコピーしてください。

Google側でファイルを識別するためのIDとなります。

Laravelプロジェクトの.envファイルを開き、【SPREADSHEET_ID】の項目を作り、この情報をいれておきます。

⑦ Googleファイルの共有設定を実施

作成したGoogleスプレッドシートに戻り、【共有】ボタンをクリック。

ここに、③のサービスアカウントの作成で出来たメールアドレスを入力し、編集者として共有します。

じゅんこ
じゅんこ

ここも、結構大事です!

【編集者】として設定されているかチェックしてくださいね。

⑧ Google APIを有効化

次にGoogle APIを有効化します。Google Cloud Platformに戻り、APIとサービス/ダッシュボードより、【APIとサービスの有効化】をクリック。

まずはGoogle Drive APIを有効化します。

その次に、Google Sheets APIも有効化します。

以上でGoogle側の設定は終わりです。

LaravelにGoogleスプレッドシート連携用コード入力

もう一度Laravel側に戻ります。

ここから、いよいよどっぷり連携です。

① revolution/laravel–google-sheetsインストール

今回は、laravel–google-sheetsを使わせてもらいます。

下記コマンドでインストール。

② configファイルの設定

app/configの中にgoogle.phpファイルを作成します。

必要項目を.envから取得するため、下記の設定をいれておきましょう。

③ コマンドファイルの作成

今回はビューを使わず、コマンドを実行すれば、指定した動作が反映されるようにします。

そのために下記のコマンドでコマンドファイルを作成します。

app/Console/Commandsの中にファイルができます。

下記のように編集します。

google:uploadを実行すると、testのfileUpload関数が実行され、テーブルの内容がスプレッドシートに反映されるようになります。

とはいっても、まだfileUpload関数はありません。これから、作っていきましょう。

④ Googleにアップロード用のコードの記述

appの下にGoogleフォルダを作り、その中にTest.phpを作ります。

ここに、次のようなコードを入れます。

最初のgetClientメソッドでは、Googleに認証情報をわたして認証の壁を突破した後、新しくGoogle_Service_Sheetsのインスタンスを作っています。

次のfileUploadメソッドでは、今回スプレッドシートにいれるUserデータを取り出し、これを配列の形にセット。

スプレッドシートIDなどの情報と一緒に、このデータをスプレッドシートに追加(append) します。

なお、追加ではなく上書き更新したい場合は、appendの部分をupdateにすればOK。

VatluInputOptionについて

最後にValutInputOptionとありますが、これは入力データの解釈方法です。

今回はUSER_ENTEREDを使いましたが、これは、次のような意味。

数字は数字のままですが、文字列はGoogle Sheets UIを介してセルにテキストを入力するときに適用されるのと同じルールに従って、数字や日付などに変換することができます。

そのままの状態で入れる場合は、RAWを使います。

詳しくは、こちらのGoogle Sheet API のマニュアル(英語)をご覧ください。

⑤ テスト:LaravelのデータベースをGoogleスプレッドシートに反映

それでは、実際にうまくいくかテストしてみます。

下記のコマンドを打ってみてください。

このあと、共有したスプレッドシートをチェックしてみます。

次のようにデータが反映されていれば、成功!

なお、最後のコマンドをうったあとに ”missing required param: ‘●●●’”というエラーメッセージがでたら、Test.phpファイルの最初のほうに、use ●●●と入れてみてください。

さいごに

以上となりますが、いかがでしょうか。

連携は最初の設定が面倒ですが、とても大事。

もしも認証系のエラーが出た場合には、Googleの設定をチェックしてくださいね。

じゅんこ
じゅんこ

連携は面倒ですが、ただ、色々とできることが広がりますよね。

なおデータベースにnullが入っていると、エラーになったりします(←わたしはなりました><)。

「Invalid JSON payload received」エラー対策は、こちらの記事にまとめてあります。

コメント

タイトルとURLをコピーしました