PHPでGoogle Analyticsデータを取得する初心者向けガイド:APIの設定からコード例まで
作成日:2024.12.25
Google Analytics Data API の有効化から、PHP を使った具体的なデータ取得手順まで、わかりやすく解説しています。初心者の方でも安心して実装できるよう、コード例も用意。
error この記事は最終更新日から1年以上が経過しています。
目次
Google Analytics のデータを API 経由で PHP で取得する手順の解説です。
Google Analytics Data API の有効化
Google Analytics Data API を利用するためには、Google Cloudのアカウントが必要です。
Google Cloud のアカウントを作成し、サインインしたら、「プロジェクト」を選択、または新規に作成。

続いてコンソール画面上部の検索ボックスで「Google Analytics Data API」を検索して、API管理ページを開きます。
※似た名前の「Google Analytics API」というのもあるので注意
「有効にする」で、Google Analytics Data API を有効にします。
サービスアカウントの作成とAPIキーの作成
Google Analytics Data API のページから「認証情報」⇒「認証情報を作成」⇒「サービスアカウント」と進んで、サービスアカウントを作成します。

作成したサービスアカウントには、自動でメールアドレスが設定されます。このアドレスは後で使うのでメモっておきます。
サービスアカウントの一覧画面で、編集アイコンをクリックして編集画面を開き、「鍵」タブに移動。

「キーを追加」⇒「新しい鍵を作成」で、JSON形式を選択して、鍵を作成します。

秘密鍵が生成され、JSON形式でダウンロードできるので、ローカルに保存します。このJSONファイルは、後でPHPからAPIを呼び出す際に使用します。
Google Analytics 側の設定
続いて、上記で作成したサービスアカウントと、APIでデータを取得したい Google Analyticsのアナリティクスアカウントの紐付けを行ないます。
Google Analytics にログインし、「管理」⇒「アカウント」⇒「アカウントのアクセス管理」と進み、アカウントの追加を行ないます。

この際、追加するアカウントのメールアドレスとして、先ほど作成したサービスアカウントのメールアドレスを指定。権限は「閲覧者」で良いと思います。
あと、データを取得したいプロパティのIDをメモっておきましょう。プロパティ一覧で確認できる9桁程度の数値です。あるいは、プロパティの画面を開いたときにURLに含まれている「p000000000」の部分の「p」を除いた数値部分がプロパティIDです。
APIを使えるようにするための、Googleのアカウント周りの設定は以上。
ライブラリのインストール
PHPで Google Analytics Data API を利用するためのライブラリを composer でインストールします。
$ composer require google/analytics-data
PHP のコードサンプル
準備ができたので、ひとまずシンプルに「直近7日間のアクセスデータを上位25件」取得するコードを書いてみます。
取得するデータは以下。
- pagePath
- ウェブページのパス
- pageTitle
- ページのタイトル
- activeUsers
- サイトにアクセスした個別のユーザーの数
- screenPageViews
- ユーザーが閲覧したウェブページの数。いわゆるページビュー
- screenPageViewsPerUser
- アクティブユーザー1人あたりのユーザーが閲覧したウェブページの数
- userEngagementDuration
- ウェブサイトがユーザーのデバイスでフォアグラウンド表示されていた合計時間(秒単位)
「activeUsers」「screenPageViews」の降順でデータを取得します。
// APIキーのJSONファイルのパス(必ずブラウザではアクセスできない場所に設置すること)
putenv("GOOGLE_APPLICATION_CREDENTIALS=/path/to/credential/xxxxxxxxxx.json");
// 使用するライブラリの指定
use Google\Analytics\Data\V1beta\Client\BetaAnalyticsDataClient;
use Google\Analytics\Data\V1beta\DateRange;
use Google\Analytics\Data\V1beta\Dimension;
use Google\Analytics\Data\V1beta\Metric;
use Google\Analytics\Data\V1beta\OrderBy;
use Google\Analytics\Data\V1beta\OrderBy\MetricOrderBy;
use Google\Analytics\Data\V1beta\RunReportRequest;
$property_id = '123456789'; // AnalyticsのプロパティID
$day = 7; // 7日間のデータを指定
$limit = 25; // 上位25件取得
$client = new BetaAnalyticsDataClient();
// 日付範囲設定
$start_date = (new DateTime())->modify("-{$day} days")->format('Y-m-d');
$date_range = array(
new DateRange([
'start_date' => $start_date,
'end_date' => 'today',
]),
);
// ディメンション設定
$dimensions = array(
new Dimension(['name' => 'pagePath']),
new Dimension(['name' => 'pageTitle']),
);
// 指標設定
$metrics = array(
new Metric(['name' => 'activeUsers']),
new Metric(['name' => 'screenPageViews']),
new Metric(['name' => 'screenPageViewsPerUser']),
new Metric(['name' => 'userEngagementDuration']),
);
// 並び替え設定
$order_by = array(
new OrderBy([
'desc' => TRUE,
'metric' => new MetricOrderBy(['metric_name' => 'activeUsers']),
]),
new OrderBy([
'desc' => TRUE,
'metric' => new MetricOrderBy(['metric_name' => 'screenPageViews']),
]),
);
// リクエスト作成
$request = (new RunReportRequest())
->setProperty('properties/'.$property_id)
->setDateRanges($date_range)
->setDimensions($dimensions)
->setMetrics($metrics)
->setOrderBys($order_by)
->setLimit($limit);
$response = $client->runReport($request);
if(!$response){
// エラー処理
print "Error: Analytics Data API does not respond.";
exit;
}
// 取得したデータの整形
$access_ranking = array();
foreach ($response->getRows() as $row) {
$line = (object)array();
$line->path = $row->getDimensionValues()[0]->getValue();
$line->title = $row->getDimensionValues()[1]->getValue();
if($line->path == '/') $line->title = 'トップページ';
$line->active_user = $row->getMetricValues()[0]->getValue();
$line->page_view = $row->getMetricValues()[1]->getValue();
$line->pv_per_user = $row->getMetricValues()[2]->getValue();
$line->duration = $row->getMetricValues()[3]->getValue();
$access_ranking[] = $line;
}
var_dump($access_ranking);
その他のディメンションや指標のデータを取得したい場合は、公式リファレンスのディメンションと指標の一覧を参照。
Google Analytics Data APIをPHPで活用したい方へ
Google Analytics Data APIをPHPで利用し、アクセスデータの取得や分析を行う方法をご紹介しました。
「GA4への移行が進まない」「API連携の実装が難しい」といったお悩みがありましたら、お気軽にご相談ください。
システムへの組み込みや、データ分析基盤の構築支援も承っております。
奈良市を拠点に、27年以上の経験を持つフリーランスWebエンジニア、阿部辰也です。
これまで、ECサイトのバックエンド開発や業務効率化システム、公共施設の予約システムなど、多彩なプロジェクトを手がけ、企業様や制作会社様のパートナーとして信頼を築いてまいりました。
【制作会社・企業様向けサポート】
Webシステムの開発やサイト改善でお困りの際は、どうぞお気軽にご相談ください。小さな疑問から大規模プロジェクトまで、最適なご提案を心を込めてさせていただきます。
ぜひ、プロフィールやWeb制作会社様向け業務案内、一般企業様向け業務案内もご覧くださいね。
PHPで外部APIのフォールバックとキャッシュを実装する:該当なしと通信失敗を分けて扱う
2026.10.23
外部APIの「該当なし」と通信失敗を区別し、代替APIへ切り替える条件と取得結果のキャッシュをPHPで実装します。架空の商品情報APIを使い、問い合わせ回数・待ち時間の制限、キャッシュの有効期限・無効化、モックによる動作確認を解説します。
Laravelのコードレビューで遅いSQLの候補を洗い出す
2026.10.02
Laravelのコードレビューで、ループ内のDBアクセスやEloquentのN+1、大量取得、検索条件とインデックスなど、性能問題につながりやすい箇所を候補として洗い出します。Laravelで発行SQLと実行時間を確認し、MySQLのEXPLAINや実データに近い環境での計測へつなげる方法を紹介します。コードレビューだけではSQLの実行時間を断定できない点も説明します。
Windows 11でDocker Composeを使ってLaravel環境を作る:Container・Volume・Networkの基本
2026.10.01
Windows 11のDocker Desktop上に、DockerfileとDocker Composeを使ってLaravel・PHP・MySQL・Mailpitの開発環境を構築します。ImageとContainerの関係、Bind MountとNamed Volumeによるデータの保存、ポート公開とContainer間通信の違いを実例で確認。LaravelからMySQLへ接続するときに、localhostではなくService名を使う理由も説明します。
PHPでYAML設定を検証する:symfony/yamlとopis/json-schemaの使い方
2026.09.30
symfony/yamlでYAMLを読み込み、opis/json-schemaで必須項目や型、許可する値を検証する方法を紹介します。YAMLのマップをstdClassとして扱う方法や、空のobjectとarrayの違い、信頼できないYAMLを扱う際の注意点も解説します。