Laravelで構築したアプリケーション内で カレンダーを利用したいという要件がある場合に Google Calendar APIを利用することで LaravelからGoogle Calenderを操作することができます。
本文書では Laravelを利用してGoogle Calendarを操作するまでの設定と使用方法について2つの方法で行っています。一つはgoogle/apiclientパッケージを直接利用する方法もう一方は Laravelからより簡単に カレンダーを操作するために作成されたspatie/ laravel– google-calendarパッケージを利用した方法です。
最初にgoogle/apiclientを使って動作確認を行い確認し、その後spatie/ laravel– google-calendarを使った方法でイベントの取得を行います。
spatie/ laravel– google-calendarパッケージも内部ではgoogle/apiclientを利用しています。
PHPで Google Calendarを操作したい場合は以下の文章が参考になります。
PHPとGoogle APIでGoogle Calendarを操作する(取得、追加、更新)
目次
環境設定
認証設定
Laravelフレームワークやプログラム言語に関わらず API経由で Google Calendarを操作するためには認証設定を行う必要があります。認証設定についてはプログラム言語を超えて共通なものなので以下の文書を参考に設定をおこなってください。
Google APIを利用するためのサービスアカウントの設定(認証)
認証の設定作業が完了するとサービスアカウントIDとアクセスに必要な秘密鍵の情報等が含まれるキーファイルを取得することができます。サービスアカウントIDは Google Calendarのアクセス設定、キーファイルはアクセスする際に利用します。
Google Calendarの設定
Google Calendar上ではアクセス許可の設定を行う必要があります。サービスアカウントを作成したユーザで Google Calendarにログインしてください。
カレンダーの追加
既存の カレンダーを利用することもできますが動作確認用に新規でカレンダーの追加を行います。マイカレンダーから新しいカレンダーを作成するをクリックします。
既存のカレンダーを利用する場合は新しくカレンダーを追加する必要はありませんので カレンダーのアクセス設定に進んでください。
名前は動作確認用カレンダーとします。名前は任意なので好きな名前をつけてカレンダーを作成ボタンをクリックしてください。
カレンダーのアクセス設定
新しい カレンダーを作成後、 Google Calendarの画面の右上部にある歯車のアイコン、設定をクリックしてください。
設定画面が開いたら、左側のメニューにある動作確認用カレンダーを選択してください。
左側のメニューの特定のユーザとの共有をクリックするか右側の画面をスクロールして特定のユーザーとの共有画面にログインしたユーザのメールアドレスが表示されていることを確認し、その下のユーザーを追加をクリックしてください。
ここでは認証設定で取得したサービスアカウントIDを入力します。
メールアドレスを入力後、権限は予定の変更権限に変更し送信ボタンをクリックしてください。
送信により追加が完了するとgoogleアカウントの下にサービスアカウントIDの情報が表示されます。ユーザの追加は完了です。
作成した カレンダーのIDを取得
次に カレンダーの統合に移動して、カレンダーのIDを取得してください。 APIでアクセスする際に必要となるIDです。
Laravelのインストール
composerコマンドを使って Laravelのインストールを行います。
$ composer create-project --prefer-dist laravel/laravel laravel_google_calendar
インストールした Laravelのバージョンは6.11.0です。
$ php artisan -V
Laravel Framework 6.11.0
google/apiclientパッケージのインストール
Google Calendarに API経由でアクセスするためにgoogle/apiclientパッケージを利用します。google/apiclientパッケージもcomposerコマンドでインストールを行います。
$ composer require google/apiclient:^2.0
秘密鍵のキーファイルの保存
認証設定で取得した秘密鍵のキーファイルを Laravelからアクセスできる場所に保存します。 Laravelのインストールディレクトリのstorage/appの下に google-calendarディレクトリを作成しキーファイルを保存します。
Google Calenderの操作
コントローラーファイルの作成
動作確認用にコントローラーファイルを作成します。
$ php artisan make:controller GoogleCalendarController
web.phpファイルにはルーティングを追加します。
Route::get('/', function () {
return view('welcome');
});
Route::resource('/calendar', 'GoogleCalendarController');
環境変数の設定
カレンダーIDは.envファイルに登録を行います。.envファイルの最後に追加してください。GOOGLE_ CALENDAR_IDは任意の名前をつけることができます。
GOOGLE_CALENDAR_ID = "XXXXXXXXX@group.calendar.google.com"
GOOGLE_ CALENDAR_IDの値はgoogle calendar内で取得した カレンダーIDです。環境によって異なる値です。
イベント一覧を取得
Google CalendarController.phpファイルを使って Google Calendarに登録されているイベントを取得します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Google_Client;
use Google_Service_Calendar;
class GoogleCalendarController extends Controller
{
public function index(){
$client = $this->getClient();
$service = new Google_Service_Calendar($client);
$calendarId = env('GOOGLE_CALENDAR_ID');
$optParams = [];
$results = $service->events->listEvents($calendarId, $optParams);
$events = $results->getItems();
foreach($events as $event){
echo $event->getSummary().'';
}
}
public function getClient()
{
$client = new Google_Client();
$client->setApplicationName('Google Calendar API plus Laravel');
$client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);
$client->setAuthConfig(storage_path('app/google-calendar/XXXXXXX.json'));
return $client;
}
}
カレンダーのIDについては.envファイルに保存されているのでヘルパー関数envにパラメータを設定して取得しています。
$client->setAuthConfigメソッドではキーファイルを指定しています。保存した場合はヘルパー関数のstorage_pathを利用しています。
ブラウザでhttp://127.0.0.1:8000/ calendarへアクセスを行います。
ブラウザでアクセスする前は必ずphp artisan servコマンドで開発サーバを起動させておく必要があります。
コードの中でイベントのタイトルのみ表示されるので以下の2つが表示されます。
カレンダーは下記のようになっています。
spatie/laravel-google-calendarパッケージを利用
インストールや初期設定についてはhttps://github.com/spatie/laravel-google-calendarを参考に行なっています。
パッケージのインストールと設定
spatie/ laravel– google-calendarパッケージはcomposerコマンドでインストールを行います。
$ composer require spatie/laravel-google-calendar
サービスプロバイダーの設定を行います。config¥app.phpファイルを開いて下記を追加します。
'providers' => [
・
・
Spatie\GoogleCalendar\GoogleCalendarServiceProvider::class,
],
設定ファイルの作成を行います。configディレクトリに google-calendar.phpファイルが作成されます。
$ php artisan vendor:publish --provider="Spatie\GoogleCalendar\GoogleCalendarServiceProvider"
Copied File [/vendor/spatie/laravel-google-calendar/config/google-calendar.php] To [/config/google-calendar.php]
Publishing complete.
Publishing complete.
中身は下記の通りで秘密鍵のキーファイルと カレンダーIDの設定を行なっています。
<?php
return [
/*
* Path to the json file containing the credentials.
*/
'service_account_credentials_json' => storage_path('app/google-calendar/service-account-credentials.json'),
/*
* The id of the Google Calendar that will be used by default.
*/
'calendar_id' => env('GOOGLE_CALENDAR_ID'),
];
.envファイルへのGOOGLE_ CALENDAR_IDの設定は完了していますが、キーファイルのファイル名が異なっているので、保存したファイルをservice-account-credentials.jsonに変更するか google-calendar.phpファイル内の設定値を変更するかどちらかの変更を行なってください。
カレンダーのイベントの取得
Google CalendarController.phpファイルを以下のように書き換えます。spatie/ laravel– google-calendarでは下記のように短いコードで Google Calendarからイベントを取得することができます。
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\GoogleCalendar\Event;
class GoogleCalendarController extends Controller
{
public function index(){
$event = new Event;
$events = Event::get();
foreach($events as $event){
echo $event->name.'';
}
}
}
google/apiclientでもspatie/ laravel– google-calendarでもイベントを取得することは可能ですがspatie/ laravel– google-calendarを利用したほうが短いコードで記述できることが確認できました。
Laravelでファイルをアップロードする方法を詳細解説 あわせて読みたい入門者のためのLaravelのバリデーションとエラーメッセージ あわせて読みたいLaravel5.7で初めてのルーティングでHello World あわせて読みたいlaravel-dompdfバージョン7.0環境での日本語環境でPDFを作成 あわせて読みたいLaravel5.8+vue.jsのHot Module Replacement