Matomoとは?セルフホスト型アクセス解析の仕組みとDocker導入・GA4との違い

Matomoとは?セルフホスト型アクセス解析の仕組みとDocker導入・GA4との違い

Matomo(旧称Piwik)は、計測データを自社のサーバーとデータベースに保存できるオープンソースのアクセス解析ツールです。PV・流入元・コンバージョンといったGA4と同等の指標を、Googleなど外部の事業者にデータを渡さずに集計できます。2026年11月1日時点の公式ドキュメントとGitHubをもとに、計測データがレポートになる仕組み、GA4やPlausibleとの違い、Docker Composeでの立ち上げ、計測コードと同意取得の書き方、APIとGA4インポートの使い方、Matomo 6で上がる動作要件までを実装目線でまとめました。データの保管場所が要件に入っている案件で、計測基盤を選ぶ開発者とWeb担当者に向けた内容です。

まとめ:Matomoを自社サーバーで運用する判断とGA4との使い分けの結論

Matomoの中身は、PHPで書かれたWebアプリケーションとMySQL互換のデータベースです。ブラウザから届いた計測データを1件ずつ保存し、cronで動く集計処理がそれを日別・月別のレポートに変えます。データはすべて自社の管理下に残る。この点が、GA4との最大の違いです。

無料で使えるのは自社サーバーに入れるOn-Premise版で、ユーザー数とヒット数に上限はありません。その代わり、PHPとデータベースの更新、集計処理の監視、バックアップは自社の仕事になります。2026年10月30日には次期メジャー版の6.0.0 RCが出ており、正式版ではPHP 8.1・MySQL 8.0・MariaDB 10.6以上が必須です。

データの保管場所を契約や社内規程で縛られている案件、GA4と同じ粒度の分析を自社のDBで行いたい案件なら採用します。運用担当を置けない、あるいは見たい数字がPVと流入元だけなら、Matomo Cloudか、より軽いPlausibleで足ります。

Matomoの仕組み:PHPとMySQLで動く計測受付とアーカイブ処理の流れ

旧PiwikのGPLv3と提供形態2種:On-Premise・Cloud

Matomoは2018年にPiwikから名前を変えたプロジェクトで、ソースコードはGitHubのmatomo-org/matomoでGPL-3.0として公開されています。公式トップには、世界で100万を超える組織が使っていると書かれています。

提供形態は2つです。自社のサーバーに入れるOn-Premise版は無料で、公式の料金ページでも「Unlimited users and hits」とされています。運営元がホスティングするMatomo Cloudは月間ヒット数に応じた月額制で、クレジットカード不要の無料トライアルがあります。ヒートマップ・セッション記録・A/Bテストなどは有料プラグインとして別売りで、On-Premise版でも追加費用がかかる点は見落とされがちです。

matomo.phpのヒットをcore:archiveで集計する二段構造

ページに埋めたJavaScriptは、閲覧のたびに自社サーバーのmatomo.phpへ計測データ(ヒット)を送ります。Matomoはこれを訪問・アクション単位の生ログとしてDBに保存します。

管理画面のレポートは、この生ログを期間ごとに集計した「アーカイブ」から表示されます。集計の担い手は2通りで、既定の動作はレポートを開いたブラウザの操作をきっかけとする集計処理の実行です。トラフィックが増えると画面の表示がそのたびに遅くなるため、本番ではcronでcore:archiveコマンドを定期実行する構成に切り替えます。この切り替えを忘れたまま運用を始め、「レポートが開かない」と相談されるのが典型的な失敗です。

GA4・Plausibleとの違いをデータ保管場所・Cookie・機能範囲で比べた一覧

データの保存先から料金・運用負担まで3ツールを横並びで比べた比較表

Matomoの欄はOn-Premise版の既定設定、Plausibleはクラウド版を前提にしています。

項目 Matomo(On-Premise) GA4(無料版) Plausible
データの保存先 自社のサーバーとDB Googleのサーバー EU域内のサーバー
訪問者の識別 ファーストパーティCookie _ga Cookie Cookieなし
生データの扱い 自社DBにSQLで読める BigQuery連携で書き出し 集計値中心
ソフトの費用 無料(有料プラグイン別) 無料 月額制
運用の担い手 自社 Google 運営元

Matomoの持ち味は「GA4に近い機能の幅」と「自社DBに生データが残ること」の両立です。GA4は機能が広い反面、データはGoogle側に置かれ、明細の保持期間にも上限があります。GA4の仕組みはGA4とは?仕組みとUAとの違いで解説しました。PlausibleはCookieを使わず指標を絞った軽量型で、詳しくはPlausibleとは?Cookieレス解析の仕組みとGA4との違いで比較しています。

Docker Composeで検証環境を立ててサイトを登録するまでの手順

公式compose.ymlのMariaDBと本体の2コンテナ構成と起動コマンド

Docker公式イメージを管理するmatomo-org/dockerのcompose.yml例は、mariadb:ltsとmatomoの2サービスでできています。2026年11月1日時点で、Docker Hubの公式イメージのlatestは5.14.2です。公式例をそのまま使い、パスワードだけを.envに分けたのが次の手順です。

mkdir matomo && cd matomo
curl -O https://raw.githubusercontent.com/matomo-org/docker/master/.examples/apache/compose.yml

# compose.ymlが参照する2つのパスワードを.envに書く
echo "MARIADB_PASSWORD=$(openssl rand -base64 24)" >> .env
echo "MARIADB_ROOT_PASSWORD=$(openssl rand -base64 24)" >> .env

docker compose up -d
# http://localhost:8080 を開くとインストールウィザードが始まる

compose.ymlのapp側には、MATOMO_DATABASE_HOST=dbやMATOMO_DATABASE_TABLES_PREFIX=matomo_などの環境変数があらかじめ書かれています。そのためウィザードのDB接続欄は入力済みで、管理者ユーザーと計測対象サイトのURLを登録すれば完了です。ボリュームがdbとmatomoの2つに分かれている点も確認しておきます。前者が計測データ、後者が設定ファイルconfig.ini.phpを含むアプリ本体で、バックアップは両方要ります。複数コンテナ定義の読み方はdocker-composeとはを参照してください。

月間PV別のサーバー規模とPHP・MySQLの動作要件の目安

公式の動作要件は、月間の計測量ごとにサーバー規模の目安を示しています。

月間PV アプリ(DB同居可) DBを分ける場合のDB
10万以下 2CPU・2GB RAM・50GB SSD 同居で足りる
100万以下 4CPU・8GB RAM・250GB SSD 同居で足りる
1,000万以下 8CPU・16GB RAM・100GB SSD 8CPU・16GB RAM・400GB SSD

月100万PVまでは1台構成で収まりますが、生ログが溜まり続けるためディスクは見積もりより早く埋まります。必要なPHP拡張はpdo_mysqlかmysqliで、グラフ画像の生成にgd、CLIでの集計にshell_execの有効化が勧められています。DB側でどの版を選ぶかを検討する際の参考資料は、MySQLとは?特徴とバージョン選定です。

ブラウザ起点の集計を止めてcronでcore:archiveを毎時回す設定

自動アーカイブの公式手順は、1日に数百訪問を超えるサイトではcronでの集計を勧めています。設定は、cronの登録と、ブラウザ起点の集計を止める設定値の2つです。

# /etc/cron.d/matomo-archive(毎時5分に集計を実行)
5 * * * * www-data /usr/bin/php /var/www/html/console core:archive --url=https://analytics.example.com/ > /var/log/matomo-archive.log

# config/config.ini.php の [General] に追記
browser_archiving_disabled_enforce = 1

# Docker構成なら、ホストのcronからコンテナ内のconsoleを呼ぶ
5 * * * * docker compose -f /opt/matomo/compose.yml exec -T -u www-data app php /var/www/html/console core:archive --url=https://analytics.example.com/

--urlには、Matomo自体を公開しているURLを入れます。cronが止まってもエラー画面は出ず、レポートの更新が静かに止まるだけです。ログの最終更新時刻を監視対象に入れておくと、気づくのが数日遅れる事態を防げます。

サイトへの計測コード設置とボタンクリックのイベント送信・同意取得の実装

_paqで始まる計測コードとtrackEventでボタンのクリックを送る書き方

サイト登録後に管理画面で発行される計測コードは、JavaScript Tracking Clientのガイドにある_paq配列へ命令を積む形式です。ボタンのクリックはtrackEventでカテゴリ・アクション・名前・値の順に送ります。

<script>
  var _paq = window._paq = window._paq || [];
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);   // 外部リンクとダウンロードを自動計測
  (function() {
    var u = "https://analytics.example.com/";
    _paq.push(['setTrackerUrl', u + 'matomo.php']);
    _paq.push(['setSiteId', '1']);     // 管理画面のサイトID
    var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
    g.async = true; g.src = u + 'matomo.js'; s.parentNode.insertBefore(g, s);
  })();
</script>

<script>
  // 資料請求ボタンのクリックを送る例(カテゴリ, アクション, 名前)
  document.querySelector('#request-doc').addEventListener('click', function () {
    _paq.push(['trackEvent', 'CTA', 'Click', '資料請求']);
  });
</script>

画面遷移をJavaScriptで行うSPAでは、ページ読み込みが1回しか起きません。ルーティングの切り替え時にsetCustomUrlで新しいURLを指定し、trackPageViewを呼び直します。計測の受け口を自社ドメインに置く構成は、外部サービスへの送信をサーバー経由に寄せるサーバーサイドトラッキングとはの考え方とも通じます。

requireConsentとdisableCookiesによる同意前の停止

同意の扱いは、同意取得の公式ガイドにある2種類の命令で切り替えます。requireConsentは同意を得るまで計測データもCookieも送りません。requireCookieConsentは計測データを送りつつ、Cookieだけを同意後まで保留します。

// どちらか一方を trackPageView より前に置く
_paq.push(['requireConsent']);          // 同意まで計測もCookieも止める
// _paq.push(['requireCookieConsent']); // 計測は続け、Cookieだけ止める

// 同意バナーで「同意する」が押されたとき
_paq.push(['rememberConsentGiven']);     // 以後の訪問でも同意済みとして扱う

// Cookieを一切使わない運用にする場合
_paq.push(['disableCookies']);

Cookieを無効にする手順のFAQは、無効化するとリピーターの判定が難しくなり、レポートの精度が下がると明記しています。実務では、同意前はrequireCookieConsentでCookieなしの計測を続け、同意後に通常の計測へ戻す組み合わせが落としどころです。サードパーティCookieをめぐる状況はサードパーティCookie廃止の現状と企業がとるべき対策にまとめています。

Reporting APIとGA4インポートでデータを取り出し・持ち込む実装例

POST専用トークンでVisitsSummary.getを呼び出すcurlの例

レポートの数字を社内システムへ流すときは、公式のAPIドキュメントにあるmodule=API形式のHTTP APIを使います。トークンは管理画面の「Administration > Personal > Security」で作成します。token_authのFAQによると、作成時に「Only allow secure requests」を有効にしたトークンはPOSTでしか使えず、URLのパラメータに付けると無効です。

curl -X POST 'https://analytics.example.com/index.php?module=API&method=VisitsSummary.get&idSite=1&period=month&date=last3&format=JSON' \
  -d 'token_auth=YOUR_TOKEN'

この例は直近3か月の訪問数・アクション数・直帰率などを月別のJSONで返します。トークンには閲覧専用(View)の権限を付け、URLに残らないPOSTで送るのが原則です。サーバーのアクセスログやプロキシのログにトークンが残る経路を、最初から作らないためです。

GA4の過去データをimport-ga4-reportsで取り込むときの約4か月の壁

GA4から移るときは、Google Analytics Importerプラグインで過去のレポートを持ち込めます。インポート実行の公式FAQに載っているGA4用のコマンドが次です。

php ./console googleanalyticsimporter:import-ga4-reports --property="properties/123456789" --dates=2025-11-01,2026-10-31

詰まるのはGoogle側のAPI上限です。FAQによると、1日のリクエストは全体で最大5万、サイトごとに最大1万までで、毎日データがあるサイトでは約4か月分を取り込んだところで上限に達します。1年分を移すなら、数日に分けて実行する前提で計画を組みます。入るのはレポート単位のデータで、GA4の明細を取り直して再集計できるわけではありません。

セルフホスト運用で詰まる箇所:Matomo 6の要件引き上げと更新体制

6.0.0 RC:PHP 8.1・MySQL 8.0・MariaDB 10.6要件

公式のChangelogによると、安定版の5.14.2が2026年10月22日、次期メジャー版の6.0.0 RCが10月30日に公開されました。Matomo 6への移行ガイドは、最低要件をPHP 7.2.5から8.1.0へ、MySQLを5.5から8.0(MariaDBなら10.6)へ引き上げると明記しています。TiDBのサポートも打ち切られました。

影響が出るのは、古いOSのパッケージ版PHPやMySQL 5.7のままで動かしている環境です。Matomo本体より先にPHPとDBの更新が要り、DBのメジャー更新はバックアップと切り戻しの手順を伴います。自作や社外製のプラグインを入れている場合は、移行ガイドが挙げる削除済みAPIを使っていないかどうかも、更新前に確かめるべき項目です。いまのうちにphp -vとSELECT VERSION();で現行の版を控えておくと、6系への移行計画が立てやすくなります。

更新・バックアップ・PHPの脆弱性対応から見たセルフホストの実費

5.14系だけで、9月21日の5.14.0から1か月で3回のリリースがありました。公式の要件ページは冒頭でPHPの重大な脆弱性に触れ、セルフホスト利用者にPHPの更新を確認するよう呼びかけています。On-Premise版のソフト代は0円でも、Matomo本体・PHP・DB・OSの4層を追い続ける人の時間はかかります。

サーバー代だけを比べてCloudより安いと判断するのは危険です。月数時間の保守を誰が持つのかを先に決め、担当を置けないならCloudにする。セルフホストを選ぶ理由は費用ではなく、データを自社の管理下に置く要件があるかどうかで決めます。

Matomoを採用する条件と見送る場面:受託開発で判断する基準

採用する条件:データの保管場所に要件がある案件とGA4級の分析を自社DBで行う組織

採用を勧めるのは次の2つの場面です。1つは、取引先との契約や社内規程で、閲覧データを国内や自社の設備に置くよう求められている案件。自治体・医療・金融の周辺や、会員制サービスの管理画面がこれに当たります。もう1つは、生ログを自社のDBに置き、基幹システムや顧客データとSQLで突き合わせたい組織です。

日本の外部送信規律との関係でも、自社運用は説明が単純になります。総務省の外部送信規律の解説は利用者の情報が第三者へ送られることを問題にしており、ファーストパーティCookieに保存したIDの送信は通知・公表が不要な例に挙げています。対象サイトかどうかの判定は電気通信事業法の外部送信規律の対象判定と実装要件の手順で行ってください。計測要件の整理から、サーバー構築・計測設計・レポートを使った改善までをまとめて任せたい場合は、Webコンサルティング・アクセス解析としてご相談いただけます。

見送る場面:広告の自動入札連携が要る・保守担当を置けない・指標が少ない

次のどれかに当てはまるなら、MatomoのOn-Premise版は見送ります。

  • Google広告の自動入札を、GA4のコンバージョンで調整している
  • PHP・DB・OSの更新とバックアップを担う人を社内にも委託先にも置けない
  • 見たい数字がPV・流入元・上位ページ程度に収まる
  • プロダクト内の操作ログや機能フラグまで一体で扱いたい

広告連携が要るならGA4を本番の計測に残し、Matomoは併用に留めます。保守担当を置けないならMatomo Cloud、指標が少ないならPlausibleが候補です。プロダクト分析が主目的なら、セッション記録や機能フラグまで1つで扱うPostHogの導入手順と料金の試算のほうが合います。

よくある質問

Matomoの導入を検討する段階でよく出る質問を5つ取り上げます。

MatomoとPiwikは同じものですか?

同じプロジェクトです。Piwikは2018年にMatomoへ名前を変え、GitHubのリポジトリ名もmatomo-org/matomoになっています。古い記事に出てくるpiwik.phpやpiwik.jsは旧名時代のファイル名で、現在の計測コードが読み込む対象はmatomo.phpとmatomo.jsの2つのファイルです。Piwik時代から使い続けているサイトでも、本体を更新すればMatomoとして動き続けます。

Matomoは無料で使えますか?

自社サーバーに入れるOn-Premise版は無料で、公式の料金ページでもユーザー数とヒット数は無制限とされています。ただし、サーバー代と更新・バックアップの手間は自社の負担です。ヒートマップ、セッション記録、A/Bテスト、ファネルなどは有料プラグインで、使う機能によっては費用がかかります。運営元がホスティングするMatomo Cloudは月額制で、無料トライアルがあります。

WordPressのサイトに入れるにはどうすればよいですか?

2通りあります。別サーバーで動かすMatomoの計測コードを、テーマやタグマネージャー経由でWordPressに埋め込む方法と、WordPressのプラグインとしてMatomo自体を同じサーバーに入れる方法です。後者は手軽ですが、計測データがWordPressと同じDBに溜まり、アクセスが増えると本体の表示速度に響きます。月数十万PVを超えるなら、Matomoは別サーバーに分ける構成を勧めます。

GA4と同時に入れても問題ありませんか?

同時に入れても動作上の衝突はなく、移行期間に両方を並べる使い方は一般的です。ただし訪問の区切り方やボット除外の基準が違うため、数字は一致しません。比べるなら前月比や流入元の構成比のような相対値を見ます。指標を改善につなげる読み方はアクセス解析のやり方|GA4で見るべき指標と改善につなげる手順の考え方がMatomoでもそのまま使えます。

Matomo 6が出たらすぐに更新すべきですか?

2026年11月1日時点で6.0.0はRC(リリース候補)で、本番の更新は正式版を待つのが無難です。急ぐべきは、PHP 8.1以上とMySQL 8.0以上(MariaDBなら10.6以上)への土台の更新のほうです。使っているプラグインがMatomo 6に対応しているかを、各プラグインの対応バージョン表記で確かめておきます。正式版が出たら、検証環境で更新とアーカイブ処理の動作を確認してから本番へ進みます。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

今日のトレンド記事 直近 24 時間で、いつもより多く読まれている記事

  1. 2026.10.29 テックブログ ソニー生命の不正アクセス:38.5万件の対象確認と窓口、停止中の手続き
  2. 2026.10.31 テックブログ osinaの情報漏洩:約23万人の対象確認とSNS連携の解除、分析ツールへ渡すデータの絞り方
  3. 2026.10.31 テックブログ 松屋の不正アクセス:237万件の対象確認と窓口、漏れたパスワードの守り方
  4. 2026.11.01 テックブログ RAGTAGの情報漏洩:延べ約120万件の対象項目と会員の備え、侵入から検知まで11日の意味
  5. 2026.05.18 テックブログ マネーフォワードで連携できない・失敗するときの対処法|エラー別の原因と再連携のやり方

RELATED POSTS 関連記事

目次