22
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Touch Barにタスク管理ツールのタスクを自動表示させる【PHP×GoogleCalendarAPI】

Last updated at Posted at 2020-05-20

最近MacBookAir13インチを卒業し、MacBookPro16インチを購入したのですが、こいつはすごいですね。

TouchBarとかいう近未来的なディスプレイ(壮大なおもちゃ)がついています。

ここにスクリプトを書いて何か面白いことしたい(有効活用したい)と誰しも一度は思うのではないでしょうか。

私はこの記事以前に「YouTubeの登録者数と再生数を表示させたい!」と以前考え実装したのですが、

IMG_7235 (1).JPG

これだけでは満足できず、今度は

今現在時刻のタスクを表示させたい!!と考えました。

本記事のゴール

タスク管理ツールに予定を入れたら、あとはTouchBarに自動で現在時刻のタスクが出てくる

完成像

こんな感じになりました。

スクリーンショット 2020-05-20 17.36.32.png

IMG_7252.JPG

高度な生産性はシングルタスクができるかにかかっています。

マルチタスクになって何も為せない日々が続いていませんか?

タスクを1つだけ表示させることで、目の前の作業に集中できるのです。

仕様紹介

今回タスク管理ツールには、APIが充実しているGoogleカレンダーを採用しました。

基本的な流れ

  • まずはGoogleカレンダーにタスク登録
  • 次にGoogleCalendarAPIに登録し、PHPでイベント取得
  • Better Touch Toolでphpコマンドで発火

という手順を踏みます。

前提条件、環境

OS:macOS Catalina
バージョン:PHP 7.3.12
Composer1.9.0
Better Touch Tool導入済

①下準備

まずはGoogleCalendarAPI及びサービスアカウントとの紐付け、権限周りを以下の記事で行ってください。

Google Calendar API と PHP で 予定の取得と追加をしてみるよ(準備編)

ついでにまだカレンダーで予定作ってない方は予定を組んでおいてください。

②Composerで必要なものをインストール

A PHP client library for accessing Google APIs
https://github.com/googleapis/google-api-php-client

githubより.zip形式でダウンロードしインストールもできますが、今回はcomposerでインストールします。
composerない方はgithubよりダウンロードもOKですが、composer便利なのでこの機会に導入しましょう。

Composerをインストールしてみた

cdコマンドで作業ディレクトリに移動したのちに(今回はcalendarディレクトリとしました。どこに作成してもいいです。)
composerコマンドを実行します。

$ composer require google/apiclient:^2.0

いろいろなファイルが作成され以下のようなディレクトリになります。

calendar/
 ├ comoser.json(composerで自動作成される)
 ├ composer.lock(自動作成)
 ├ Googleサービスアカウント秘密鍵.json(下準備時にDLしてるはず)
 ├ vendor/
 │   └ outoload.php他(自動作成)
 └ calendar.php(今回の処理書く作業ファイル、まだ空でいい)

サービスアカウント作成時にできた秘密鍵のjsonをここに移動させ、calendar.phpは空でいいので作成しておいてください。

スクリーンショット 2020-05-20 17.58.34.png
スクリーンショット 2020-05-20 17.58.42.png

③PHPでデータ取得、表示

先ほど作成したcalendar.phpに記述します。


<?php

// composerでインストールしたライブラリを読み込む
require_once __DIR__ . '/vendor/autoload.php';

// サービスアカウント作成時にダウンロードしたjsonファイル
$aimJsonPath = __DIR__ . '/あなたの秘密鍵.json';

// サービスオブジェクトを作成
$client = new Google_Client();

// アプリケーション名
$client->setApplicationName('Touch Bar Display ToDos');

// 予定を取得するだけなので、Google_Service_Calendar::CALENDAR_READONLY
$client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);

// ユーザーアカウントのjsonを指定
$client->setAuthConfig($aimJsonPath);

// サービスオブジェクトの用意
$service = new Google_Service_Calendar($client);

// カレンダーIDは後述
$calendarId = 'xxxxxxxxxxxxxxxxx';
// 開始日時
$start = date('c');
// 終了日時(1分後)
$end = date('c', strtotime("+1 minute"));
// 取得時の詳細設定 $startから1分後を$endとすることで、取得範囲を現在時刻のようにしている
$option = [
  'timeMin' => $start,
  'timeMax' => $end,
  'singleEvents' => 'true'
];
// データの取得
$response = $service->events->listEvents($calendarId, $option);
$events = $response->getItems();

$results = [];
if (!empty($events)) {
  foreach ($events as $event) {

    $start = new DateTime($event->start->dateTime);
    $end = new DateTime($event->end->dateTime);
    $results = [
      'start' => $start->format('H:i'),
      'end' => $end->format('H:i'),
      'title' => (string) $event->summary
    ];
  }
  echo $results['start'] . "〜";
  echo $results['end'] . "\n";
  echo $results['title'];
} else {
//カレンダーにタスクがない場合のメッセージ。自由に改変してください。
  echo 'no task';
}

optionはリファレンス参照してみてください。

Google Calendar API REST Reference

カレンダーIDはどこから?

カレンダー左の「設定と共有」から

スクリーンショット 2020-05-20 17.19.36.png スクリーンショット 2020-05-20 17.26.08.png

「カレンダーの統合」を見つければIDがわかります。

Better Touch Toolはechoしたものをretutnして表示できる

最後に取得した値をechoしているのは、Better Touch Toolが取得できるようにするためです。

④Better Touch Toolから発火させる

まずはBetter Touch Toolを開き、以下の画面のように追加します。

スクリーンショット 2020-05-20 17.49.04.png そしたら右側にこのような画面が出てきます。 スクリーンショット 2020-05-20 17.53.57.png

ここからphpファイルを実行していきます。

手順としては

①cdコマンドでphp実行ファイルが入っているディレクトリまで移動して、
②phpコマンドを叩きphpファイルを実行する

でいけます。

デスクトップにディレクトリを作られられた方はこんなコードになるかなと(return do shell scriptは必ず必要になります)

return do shell script "cd /Users/ここは人によって違う名前/Desktop/calendar/ ; php calendar.php"
スクリーンショット 2020-05-20 18.20.34.png

その後スクリプトを実行を押し、画像のようにスクリプト結果にタスクが出力されたら、完了になります。

同時に各スクリプトの実行タイミングがデフォルトでは5secondsとなっており、これではすぐにAPIアクセス制限がかかるので、300secondsあたりに変更しておきます(ただ数分タスク更新がズレるので値はお好みで)

これにてtouch Barに表示されているはずです。

このままだと文字サイズが大きいのでptをいじり調整。

スクリーンショット 2020-05-20 20.44.08.png

IMG_7252.JPG

表示できたら、脱マルチタスクへの第一歩だ

おまけ
スクリーンショット 2020-05-21 20.11.40.png

IMG_7260.JPG

タスクがない場合はelse部分のメッセージが表示されます。

22
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?