Joined November 2024
809 Photos and videos
Pinned Tweet
初めてのカンファレンス参加だったけどPHPerKaigiめっちゃ楽しかった🙌 驚いたというか凄いなと思うポイントは、スピーカーで話す時もそうだし、会場の皆さん雰囲気がすごくよくて話しやすい。 お菓子とかお酒も好きなだけのめる?!っぽくて、LT登壇前にビールを一本飲みました。 来年も行きたい!というかPHPerKaigi miniという月次開催らしきカンファレンスが高田馬場で今後予定されているらしい。それも行こう。 行きたいけどPHP分からないよーって人がいたらとっておきの勉強メニュー教えます。。 #phperkaigi
1
3
44
2,024
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #481: [PROD] perf: コメント一覧の取得を高速化(いいね集計を表示分だけに限定し約15%短縮) --- stg の #480 を本番(main)へ昇格。 コメント一覧の取得処理で、いいね集計を表示するコメントぶんだけに限定して約15%短縮。詳細は #480 を参照。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
6
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #480: [STG] perf: コメント一覧の取得を高速化(いいね集計を表示分だけに限定し約15%短縮) --- ## 問題 オープンチャットのコメント一覧を開くたびに走る「コメント取得処理」が、コメントへのいいね集計を毎回 `like` テーブル全体から求める作りになっていた。MariaDB の最適化(split optimization)で全件走査自体は回避されていたものの、集計用の派生テーブルを毎回組み立てるコストが残っていた。 ## 対処 そのページに表示するコメントだけにいいね集計を限定する方式に変えた。コメント画像の取得が既に使っている「表示分だけまとめて取得(IN集計)」と同じパターン。 - まずコメント取得処理(`CommentListRepository::findComments()`)でページぶんのコメントを確定(comment log のみ、index駆動で軽い) - その `comment_id` ぶんだけ `like` を集計してマージ(`fetchLikeCounts()`) リポジトリのインターフェースもコントローラも変えていない。 ## 効果 ローカル実測(現実的なフルページ・OLDとSPLITを交互に2000サンプル×3回計測)でコメント取得処理が約15%短縮(中央値 1.12ms → 0.94ms、差0.18ms > 標準偏差0.12ms で再現)。 DB の最適化任せでなく明示的に表示分へスコープするため、`like` が大きい本番ほど効果は同等以上を見込む(本番未計測のため数値はローカル基準)。 ## 検証 - 旧クエリ(全件集計)と結果が完全一致(複数部屋・ページ・voted 含めミスマッチ0) - phpunit OK(`CommentListRepositoryTest`。古い DTO コンストラクタ呼び出しも現行4引数に修正) - PHPStan OK(変更3ファイル No errors) --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
11
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #479: [PROD] skip-post: おすすめランキングの並び順統一と内部実装のミニマル化(bulk廃止) --- stg → main リリース。 ## 内容 おすすめページの並び順の不具合修正+ランキング層の全面リファクタ(#478)。 - **並び順の修正**: 24時間で微増( 1人)の部屋が横ばい(±0人)の部屋より下に沈む不整合を解消。閾値による2段分割を廃止し「24時間の増加 → メンバー数 → id」の単一基準に統一。 - **リファクタ**: bulk方式(全15.5万行をPHP展開, ピーク502MB)を撤廃しタグ別逐次1経路へ統一(毎時バッチのピークメモリ 502MB→18MB)。抽象+3具象リポジトリを単一化、2クエリを統一1クエリへ集約、bulk一式・死にメソッドを削除(実質 -932行・7クラス削除)。DTOを4段構成から単一リストへ簡素化。 ## 検証 - リファクタ前後でタグ表示順が完全一致(ゴールデンマスター・視覚ゼロチェンジ) - recommend全テスト50件パス、CI(Mockクローリング URLテスト)グリーン - 旧形式 `.dat` を新DTOで読んでも落ちないデプロイ安全性をテスト化済み ## 補足 - カテゴリ/公式ページの先頭枠の母集団が変わる(意図的) - 本番では次回の毎時バッチが新実装で `.dat` を再生成 → 自然に切替(旧.datもガードで安全) --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/oc-graph-mock`
19
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #478: [STG] fix: おすすめの並び順を「24時間の増加→人数」に統一し、伸びている部屋が埋もれる不具合を解消 --- ## 概要 おすすめページの並び順で、**伸びている部屋(24時間で 1人)が横ばい(±0人)の部屋より下に表示される**不整合を修正し、あわせて旧設計を引きずって二重化していたランキング層を全面リファクタしてミニマル化しました。 ## 並び順の不具合と修正 「24時間で8人以上増えた部屋」だけを別枠で増加順に並べ、それ以外を人数順に回す2段構成だったため、8人未満の増加が並び順に反映されず、微増の部屋が横ばいの大型部屋より下に沈んでいました。閾値による分割を廃止し、**全候補を「24時間の増加 → メンバー数 → id」の単一基準**で並べるよう統一しました。 ## リファクタ(ミニマル化) ベンチで bulk方式 vs タグ別逐次方式を実測し、判断しました。 | 方式 | 時間 | ピークメモリ | |---|---|---| | bulk(全15.5万行を1クエリでPHP展開) | 8.5s | **502MB** | | タグ別逐次(統一後) | 18.8s | **18MB** | 毎時バッチでは時間差は無問題、メモリは **28分の1**。ページ表示時のフォールバックとして逐次方式は必須=消せない側なので、**bulkを撤廃し逐次1経路へ統一**しました。 - 抽象クラス+3具象リポジトリ → 単一リポジトリへ統合(Interface・抽象も廃止) - 先頭枠+裾埋めの2クエリ → 統一1クエリ(母集団300件)。旧フォールバックの `LIMIT 1` 候補潰しバグも解消 - bulkビルダー/bulk取得/各Interface/死にメソッドを削除(**実質 -932行・7クラス削除**) - DTOを4段(hour/day/week/member)構成 → 単一リスト+表示30件へ簡素化 ## 検証 - リファクタ前の表示順(20タグ×先頭30件)をゴールデンマスター化し、新実装と**完全一致**を確認(タグページは視覚ゼロチェンジ) - recommend全テスト **50件パス**、`/recommend`・`/oc`・トップページの実HTTPスモーク **200** - 旧形式 `.dat` を新DTOで `unserialize` しても落ちないデプロイ安全性をテスト化(`#[AllowDynamicProperties]`+ガード) ## 挙動の変化(意図的) - タグページ: 表示順そのまま。`/oc`関連ルームの母集団が「人数偏重300」→「統一300」に(巨大タグのみ実質差) - カテゴリ/公式ページ: 先頭枠が「recommend保有部屋限定」→「対象部屋を統一基準」に --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/oc-graph-mock`
1
1
17
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #477: [PROD] おすすめタグ管理画面で空行が原因の保存エラーを解消(エラー表示も改善) --- stg #476 を main へ昇格します。 おすすめタグ管理画面で、消し忘れた空行が原因で「正しく入力したのに保存が弾かれる」不具合を修正し、エラー表示も分かりやすくしました。詳細は #476 を参照。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
16
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #476: [STG] skip-ci: おすすめタグ管理画面で空行が原因の保存エラーを解消(エラー表示も改善) --- おすすめタグ管理画面(/admin/recommend-tags)で、正しく入力したはずなのに保存が弾かれる不具合を直します。 何が起きていたか タグ追加ボタンを押すと、その場で中身が空の行(タグ名が空)が1つ作られます。これを消し忘れたまま保存すると、サーバー側のチェックで次のように弾かれていました。 ``` subCategoriesTag["41"][23] の "tag" は非空の文字列である必要があります。 ``` 別の置き去りの空行が原因なので「自分はちゃんと入力したのに弾かれる」「リロードして入れ直すと直る(=未保存の空行が消えるから)」という分かりにくい状態でした。さらにエラー文の `subCategoriesTag["41"][23]` は、どのカテゴリのどの行かが分からず二重に不便でした。 対処(管理画面のJSのみ) - 保存時に「タグ名が空+キーワードも無い空行」を自動で取り除く。うっかり追加しただけの行は保存をブロックしません(タグ名の前後空白も除去)。 - キーワードは入れたのにタグ名だけ空、という本当の入力漏れのときは、添字表示ではなく「サブカテゴリタグ / カテゴリ「○○」にタグ名が未入力の行があります」と表示し、その行まで自動スクロール+赤く強調+入力欄にフォーカスして、どの行か一目で分かるようにしました。 サーバー側のチェック(`AdminRecommendTagController::validateEntryList()`)は安全網としてそのまま残しています。実装は `app/Views/admin/recommend_tags_editor.php` の `doSave` 周辺です。 あわせて nameStrong のタグ定義(ja.json)を1件更新しています。 skip-ci の理由: PHPコードは変更しておらず(管理画面のJSとタグ定義JSONのみ)、管理画面は認証必須でCIのmockクローリング/URLテスト対象外のため。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
48
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #475: [PROD] skip-ci: PR作業は本番デプロイ完了まで見届けて報告するルールをCLAUDE.mdに追記 --- stg の #474 を main へ昇格。CLAUDE.md にドキュメント追記のみ。 詳細: --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: \`user-B550M-Pro4:~/repos/Open-Chat-Graph\`
25
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #474: [STG] skip-ci: PR作業は本番デプロイ完了まで見届けて報告するルールをCLAUDE.mdに追記 --- PR をマージして終わりにせず、本番デプロイ(`deploy.yml` の Deploy job)が success になるまで確認してから完了報告する運用を CLAUDE.md に明文化。マージ=デプロイ成功ではなく、別 PR が deploy.yml 等に残した不整合で本番デプロイだけ落ちることがあるため。 ドキュメントのみ・skip-ci。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: \`user-B550M-Pro4:~/repos/Open-Chat-Graph\`
22
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #473: [PROD] skip-ci: 本番デプロイがSQLite初期化で失敗する問題を修正(oc_page_cacheはMySQL移行済) --- stg の #472 を main へ昇格。 oc_page_cache を SQLite から MySQL へ移行した際の後始末漏れで、`deploy.yml` の「Initialize SQLite databases」が削除済みの `oc_page_cache.sql` を参照して本番デプロイ全体が失敗していた。初期化リストから oc_page_cache を外し、不要になった SQLite カラム追加ステップを削除。 詳細: --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: \`user-B550M-Pro4:~/repos/Open-Chat-Graph\`
8
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #472: [STG] skip-ci: 本番デプロイがSQLite初期化で失敗する問題を修正(oc_page_cacheはMySQL移行済) --- ルーム分析文キャッシュ(oc_page_cache)を SQLite から MySQL へ移した際、`setup/schema/sqlite/oc_page_cache.sql` を削除したが、`deploy.yml` の「Initialize SQLite databases」がまだ oc_page_cache を初期化対象に含めていた。サーバに該当 SQLite DB が無いと削除済みの SQL ファイルを参照し、デプロイ全体が exit 1 で失敗する(失敗ログ)。直前の oc_page_cache MySQL 移行 PR の後始末漏れ。 ## 対処 - 初期化リストから `oc_page_cache` を除外(`statistics_ohlc` / `ranking_position_ohlc` はSQLiteのまま) - oc_page_cache 専用だった「Sync SQLite schema(narrative_data 追加)」ステップを削除(MySQL移行済で不要) deploy.yml のみの変更で PHP 非変更・mock クローリングと無関係のため skip-ci。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: \`user-B550M-Pro4:~/repos/Open-Chat-Graph\`
40
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #468: [STG] refactor: ルーム分析文キャッシュをMySQLへ統合し /oc を1クエリ化、間欠ストールの原因だったSQLiteを全廃 --- ## 何をするか ルーム個別ページの「分析文」事前計算キャッシュを SQLite から MySQL(ocgraph_ocreview*)へ移行し、 `/oc` 表示を1 MySQLクエリで完結させる。あわせて間欠ストールの原因だった SQLite を全廃する。 ## 背景 これまで `/oc` は MySQL(ルーム情報)+SQLite(分析文)の2系統を読んでおり、SQLite の WAL 競合で 本番が間欠的に固まる問題があった(2026-06-12 障害, PR #439/#440)。分析文は部屋ごとの小さなJSONで 容量も小さいため、MySQL にテーブルを足して `getOpenChatByIdWithTag` の JOIN で一緒に取れば、 SQLite と回避策を丸ごと無くせる。 ## 変更内容 - MySQLテーブル `oc_page_cache` を ja/tw/th の ocreview schema に追加(`narrative_data` mediumtext) - `getOpenChatByIdWithTag` に `LEFT JOIN oc_page_cache` `narrative_data` を追加 → 分析文も1クエリ取得 - Controller は `$oc['narrative_data']` から分析文を組み立て(SQLite read 廃止) - `OcPageCacheRepositoryInterface` を新設し MySQL 実装を DI バインド。読みは JOIN に寄せ書き込み専用に。 旧 SQLite 実装(SQLiteOcPageCache・repo・sqlite schema)を削除 - FileStorage設定・prod-sync同期対象・setupスクリプトから SQLite版 oc_page_cache を一掃 - 「分析文/関連ルーム」誤記を「分析文」に修正(関連ルームはこのキャッシュに含まれない) - Repository は必ず Interface とセットで作る方針を CLAUDE.md に追記 ## デプロイ後の手順(重要) デプロイで schema-sync が各 ocreview DB に `oc_page_cache` を追加する(add-only・安全)。 テーブルは初期空のため、デプロイ後に各言語でバックフィルが必要: `php batch/exec/update_oc_page_cache.php '' / '/tw' / '/th'`(または admin GUI)。 バックフィル前は分析文が空表示になるだけでエラーやダウンタイムは無い。 ## 検証(ローカル・全項目パス) - PHPStan エラー0 / PHP構文OK - schema-sync で3DBに oc_page_cache を作成、5件バックフィル成功(updated_at=毎時クロール完了時刻) - `/oc/21`・`/oc/228516` が 200・分析文セクション描画・例外/データ漏れなし - キャッシュ未生成ルームも 200・空表示・500なし --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
70
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #469: [PROD] refactor: ルーム分析文キャッシュをMySQLへ統合し /oc を1クエリ化、間欠ストールの原因だったSQLiteを全廃 --- stg PR #468 を本番(main)へ昇格。 ルーム分析文キャッシュを SQLite から MySQL へ統合し /oc を1クエリ化、間欠ストールの原因だった SQLite を全廃する。詳細は #468 を参照。 デプロイ後にバックフィルが必要(各言語 `php batch/exec/update_oc_page_cache.php '' / '/tw' / '/th'` または admin GUI)。バックフィル前は分析文が空表示になるだけでエラー・ダウンタイムは無い。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
30
Claude CodeにanalyticsのAPIの全権限渡せば、こう言っためんどくさくてやりたくない細かい機微の計測の実装(各ポイントでのアナリティクスのデータ送信とカスタムディメンションの設定)を一言言えばやってくれて本当に楽
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #466: [PROD] feat: 利用者の主要操作をアクセス解析で計測(検索・LINE遷移・グラフ・ランキング操作) --- 利用者の主要操作をGoogleアナリティクスで計測できるようにする一連の変更を本番へ反映します。これまでページ表示数しか取れておらず、検索・コメント・LINE遷移・グラフ操作などが集計できませんでした。 含まれるstg PR: - #460 検索・コメント投稿・いいね・グラフ期間切替を計測 - #461 キーワード検索を全経路で確実に(keyword_search) - #462 「LINEで開く」遷移とグラフ操作の詳細 - #463 グラフ操作を1イベントに統合(表示状態の組み合わせ) - #464 ランキングのボタン操作+全イベントに言語(locale) - #465 参加確認ページを開いた段階も計測(open_jump・LINE遷移率) 本番GA4プロパティ側のカスタムディメンション登録とGTM設定は反映済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
41
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #466: [PROD] feat: 利用者の主要操作をアクセス解析で計測(検索・LINE遷移・グラフ・ランキング操作) --- 利用者の主要操作をGoogleアナリティクスで計測できるようにする一連の変更を本番へ反映します。これまでページ表示数しか取れておらず、検索・コメント・LINE遷移・グラフ操作などが集計できませんでした。 含まれるstg PR: - #460 検索・コメント投稿・いいね・グラフ期間切替を計測 - #461 キーワード検索を全経路で確実に(keyword_search) - #462 「LINEで開く」遷移とグラフ操作の詳細 - #463 グラフ操作を1イベントに統合(表示状態の組み合わせ) - #464 ランキングのボタン操作+全イベントに言語(locale) - #465 参加確認ページを開いた段階も計測(open_jump・LINE遷移率) 本番GA4プロパティ側のカスタムディメンション登録とGTM設定は反映済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
108
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #465: [STG] feat: 参加確認ページを開いた段階も計測(LINE遷移率を出せるように) --- 「LINEで開く」ボタンの押下(oc_jump)は計測していましたが、その手前の「参加確認ページを開いた」段階が取れていませんでした。`open_jump` として、ページを開いた時点でも同じ値(部屋ID・部屋名・カテゴリ)を送ります。 これで open_jump → oc_jump の比で、部屋ごと・カテゴリごとのLINE遷移率(実質コンバージョン率)が出せます。言語(locale)も全イベント共通で付きます。 GTM側の設定は反映済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
39
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #463: skip-ci: グラフ操作の計測を統合し表示状態の組み合わせを取れるように --- 先にグラフ操作(期間・グラフ種別・ランキング種別・カテゴリ)を別々のイベントで計測していましたが、これだと「その時どの組み合わせで見ていたか」(例: ローソク足で1ヶ月表示)が分かりませんでした。各イベントが自分の1項目しか持たないためです。 どの操作でも単一の `chart_change` を送り、`period` / `mode` / `rank_type` / `category` の全状態と、今回変えた項目(`changed`)を毎回含めるようにしました。これで組み合わせをそのまま集計でき、何を操作したかも `changed` で分かります。 補足: グラフの状態はURLにも入りますが、サイト内の変更は `replaceState` のためGA4が遷移後を拾えません。なので状態はイベントに載せます。 GTM側は `chart_change` を追加し、旧 `chart_period` / `chart_mode` / `chart_rank` は廃止済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
37
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #462: [STG] feat: 「LINEで開く」遷移とグラフ操作の詳細をアクセス解析で計測 --- オプチャグラフで一番重要な操作のひとつ「LINEで開く」(参加確認ページからLINEへ実際に遷移するボタン)が、これまでGoogleアナリティクスで計測されていませんでした。どの部屋がどれだけLINE遷移されたか=実質のコンバージョンが分かるよう、ボタンのクリックを `oc_jump` として送ります。 ## LINEで開く(oc_jump) - 計測する値: 部屋ID(oc_id)/部屋名(oc_name)/カテゴリ名(oc_category) - カテゴリはIDがロケール(日本語/繁体字/タイ語)ごとに別物なので、ロケール解決済みの名称で送ります。 - LINEへ遷移する直前のクリックでも、GA4はbeacon送信のため取りこぼしません。 ## グラフ操作の細分化 期間切替(`chart_period`)だけでなく、グラフ種別とランキング種別も取れるようにしました。 - `chart_mode` … ローソク足/折れ線(mode = candlestick / line) - `chart_rank` … ランキング/急上昇/表示なし(rank_type = ranking / rising / none) GTM側のイベント・ディメンション設定は反映済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
36
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #461: skip-ci: キーワード検索のGA計測を全経路で確実に(検索フォーム・URL直アクセスの取りこぼし解消) --- 先のGA計測で、キーワード検索だけ取りこぼしがありました。トップページの検索フォームからランキングへ遷移(GET)した場合や、検索結果URLに直接アクセスした場合に検索が記録されません(アプリ内のフォーム送信時しか送っていなかったため)。 検索キーワードの状態が「空→非空」または値が変わったときに1回だけ送る方式へ変更し、トップフォーム・URL直アクセス・アプリ内検索の全経路を漏れなく拾います。カテゴリ・並び替えの変更や、検索のクリア時には送りません。 あわせてイベント名を `search` から `keyword_search` に変更しました(キーワード検索に限定した指標であることを明確にするため)。検索語は `search_term` の値に入ります。 GTM側のイベント名(keyword_search)への変更は反映済みです。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
51
🚀 開発環境が更新されました。以下のPRがマージされました。#オプチャグラフ #460: skip-ci: 利用者の主要操作をGA計測(検索・コメント投稿・いいね・グラフ期間切替) --- これまでオプチャグラフのサイト内操作はGoogleアナリティクスに一切記録されておらず、検索やコメントなど「何がどれだけ使われているか」を集計できませんでした(取れていたのはページ表示数だけ)。利用状況を把握できるよう、効果の高い4つの操作をイベントとして送ります。 ## 計測する操作 - 検索の実行 … `search`(検索語 search_term) - コメント投稿の成功 … `comment_submit`(画像添付の有無 has_image) - いいね/うーんの押下 … `comment_vote`(vote_type = like / dislike) - グラフの期間切替 … `chart_period`(period = 24h / 1week / 1month / all) いずれも合計値をディメンションで見られるようにしています。 ## 実装 各フロントアプリに最小の送信ヘルパ `trackEvent`(中身は `dataLayer.push`)を置き、上記4ハンドラから1行ずつ呼ぶだけ。送信先(本番GA4 / STG GA4)の出し分けはGTM側のhostNameルックアップで行うため、フロントではホスト判定しません(PHPは変更なし)。 検索・グラフ期間はURLにも反映されますが、サイト内のURL変更はGTMにHistory変更トリガーが無く今のGA4では拾えていないため、明示イベントで取得します。 ## 動作確認 STG用GA4プロパティ(新設)へhostNameで振り分けるGTM設定を公開済み。STGでpage_view着信を確認。本イベントはこのフロントをSTGへ反映後に疎通確認します。 --- 🤖 Generated with Claude Code (claude-opus-4-8[1m]) Posted from: `user-B550M-Pro4:~/repos/Open-Chat-Graph`
108
🚀 サイトが更新されました。以下のPRがマージされました。#オプチャグラフ #458: [PROD] ドキュメント・CI整備(署名/スモーク/CFレンジ監視/README整理)を本番へ --- ドキュメント/CI整備を本番へ。アプリのランタイム挙動は変えない。 - コミット/PR署名のフォーマット簡素化(モデルIDのみ・Co-Authored-By廃止) - X投稿に🤖署名を残す(URLは引き続き除去) - Cloudflare IPレンジ変化を検知してDiscord通知するワークフロー追加 - .github/README.md → DEPLOY.md にリネーム(リポジトリREADMEを上書きしてた問題の修正)
40