📖 ADVENTURE JOURNAL
Day 0086
コクピットに、自律の機構を刻んだ日
§ 1
WORK LOG
- work.txtヘッダー行混入エラー→削除して再ビルド(解決)
- WP投稿 post_id=1631 / 累計87,571→88,173 / Lv30→Lv31 LEVEL UP(職人)
- check_post.py bokentecho raw markers修正(§6/EXP REPORT/HP:/MP: 削除・rendered classesで担保)
- 全Step完了・X投稿生成済(07:42)
- cj_update.php 新設(/lifegame/mycockpit/): YouTubeの配信一覧ページをスクレイプし各曜日CJの動画IDを抽出・cj_cache.jsonに蓄積保存
- index.htmlに☕ボタン追加(⚙ボタン横): updateCJChannels()でPHP→JSON取得→COCKPIT_CHANNELS更新→Google Tasks永続化
- applyCJCache(): 起動時にcj_cache.jsonを自動適用(全ユーザー共通)
- 蓄積型キャッシュ: 取得できた曜日のみ更新・過去分は保持
- 技術的発見: YouTubeのlockupViewModel構造でtitleがcontentId(動画ID)より先に出現・後方8000バイト以内にcontentIdが存在
- BGMチャンネルは前日分を翌日も継続ライブ配信→☕ボタン1回で今日+昨日の2曜日が同時更新
- commits: ef189bd / 9c51361
- cj_update.phpにJST日付キャッシュ追加: 同日2回目以降はYouTubeアクセスなし・即キャッシュ返却
- applyCJCache()のエンドポイントをcj_cache.json→cj_update.phpに変更
- ページ読み込み時に自動で最新IDを適用(☕ボタン操作不要)
- 本番テスト: 2026-06-22朝(1時以降)に自動更新確認予定
- commit: 1dde197
- 症状: チャンネル追加→保存→ブラウザ再起動→消失
- 主因: lifegame-gtasks.jsがdeferのためインラインinitCockpit() IIFE実行時点でwhenGisReady未定義→ReferenceError→pullCockpitChannels()未呼出→localStorageのみで動作→消失
- 副因: pullCockpitChannels()とcommitCockpit()の並行実行でrace condition→pull古値がcommit後を上書き
- 修正: DOMContentLoaded待機をinitCockpit()に追加(主因解消)・pullCockpitChannels()を_cockpitCommitChainに統合し直列化(副因解消)
- console.log追加→診断後削除・重複コメント・旧migration記述コメント削除
- commits: 272237c(race fix)→c4be1ba(DOMContentLoaded)→953ccdd(debug log除去)→44c076f(comment cleanup)
- 問題: 初期状態(未スタート)でprogress()=1→タイマー画像が100%完成形・ボタンが「✓ 完了」表示
- 解決: loop内でidle = !running && accMs===0フラグを分岐→drawReveal(idle?1:p)(元画像=100%で初期表示)・ボタン状態はpベース維持
- アラーム回数: if(alarmCount<5)→if(alarmCount<2)(5回→2回)
- YouTube埋め込みリスク評価: 少数ユーザー・非商業・現規模なら低リスク判定
- WP post=1412 全面改訂: Google Tasks連携が「必須」であることを冒頭明記
- データ保存仕様を正確に記述: GTasks=マスター・localStorage=キャッシュ(ミラー)のみ
- My Cockpitセクション新規追加(記事末尾・CTA前)
- CH.undefinedバグ修正: selectCh(c,n)内のc.n→n(オブジェクトに存在しないプロパティ参照が原因)
- 別室リンク改善: window.open()→focus()方式(BGM・タイマー継続)
- FTPアップ・REST API検証済み
- ダウンロードフォルダのGemini生成画像を採用(差し替え1回)
- 保存: LifeGame/village/assets/note/note_battle_article_eyecatch_20260620.png(2.2MB)
- JPEG変換: note_battle_article_eyecatch_20260620.jpg(354KB・quality=90)
- L1: 面白さ 8.5 / 分かりやすさ 7.5 / 総合 8.00 — 初稿・技術詳細残存・括弧併記不足
- L2: 面白さ 8.5 / 分かりやすさ 9.0 / 総合 8.75 — 括弧併記追加・クライマックス絞込(+0.75)
- L3: 面白さ 9.0 / 分かりやすさ 9.2 / 総合 9.10 — memorable line強化・テンポ調整(+0.35)
- L4: 面白さ 9.1 / 分かりやすさ 9.2 / 総合 9.15 — 微調整(+0.05)→ ③ 改善停滞で終了
ボリューム
★★★★★
成果
★★★★★
§ 2
ADVENTURE SCENARIO
翌朝のコーヒーを、機械に任せた
コクピット(作業コンソール)を村に据えてから、1週間が過ぎた。
問題は2つあった。
1つ目——チャンネルが消える。
BGMチャンネルを追加して保存し、ブラウザを再起動すると、また消えている。Google Tasks(タスク管理ツール)には確かに保存されているのに、画面には出てこない。原因が分からないまま、その日も再登録した。
今日、コンソール(ブラウザ診断ツール)を開いた。エラーが1行だけ出ていた。
`whenGisReady is not defined`
——これだ。
Google Tasks接続の魔道具は「後読み」指定(defer属性)で読み込まれる。コクピットの初期化コードが先に走ると、接続関数がまだ存在しない。初期化がクラッシュして、チャンネル一覧を引き出す処理が一度も実行されていなかった。localStorageキャッシュだけで動き、ブラウザを閉じるたびに記憶が消えていた。
修正は「ページ読み込み完了(DOMContentLoaded)を待ってから動け」と命じることだった。さらに並行実行の衝突(race condition)——古い読み取り結果が新しい書き込みを上書きする現象——も同時に潰した。合計4本のコミット(修正の積み重ね)でコクピットは静かになった。
保存したチャンネルが、ブラウザを閉じても次に開けば戻ってくる。当たり前のことが、ようやく当たり前になった。
2つ目——コーヒーが毎週変わる。
コーヒージャズ(作業BGM)のYouTubeライブ配信は、毎週動画IDが更新される。曜日ごとに手動で調べ直し、コクピットに入力する。地味だが、確実に積み上がる作業だった。
その手間を機械に渡した。
PHPスクリプト(サーバー処理)がYouTubeの配信ページを自動で読みに行く。曜日ごとの動画IDを拾い、キャッシュ(一時保存庫)に蓄積する。ページを開くだけで、最新のIDが自動で適用される。さらにJST日付キャッシュで、同じ日の2回目以降はYouTubeへのアクセスをスキップする仕組みも入れた。
翌朝の珈琲は、Hiroが命じなくても出てくる。
日の終わりに、myhouse-guide(冒険者の家の案内書)も現実に合わせて書き直した。Google Tasks連携が「任意」ではなく「必須」であることを冒頭に明記し、コクピットの紹介セクションを新設した。施設の設計図と、実際の施設が、ようやく一致した。
この日のコクピットは、静かだった。チャンネルは消えなくなり、コーヒーは自動で動く。記憶と自律を手に入れた作業台は、明日も同じ場所で待っている。
—
問題は2つあった。
1つ目——チャンネルが消える。
BGMチャンネルを追加して保存し、ブラウザを再起動すると、また消えている。Google Tasks(タスク管理ツール)には確かに保存されているのに、画面には出てこない。原因が分からないまま、その日も再登録した。
今日、コンソール(ブラウザ診断ツール)を開いた。エラーが1行だけ出ていた。
`whenGisReady is not defined`
——これだ。
Google Tasks接続の魔道具は「後読み」指定(defer属性)で読み込まれる。コクピットの初期化コードが先に走ると、接続関数がまだ存在しない。初期化がクラッシュして、チャンネル一覧を引き出す処理が一度も実行されていなかった。localStorageキャッシュだけで動き、ブラウザを閉じるたびに記憶が消えていた。
修正は「ページ読み込み完了(DOMContentLoaded)を待ってから動け」と命じることだった。さらに並行実行の衝突(race condition)——古い読み取り結果が新しい書き込みを上書きする現象——も同時に潰した。合計4本のコミット(修正の積み重ね)でコクピットは静かになった。
保存したチャンネルが、ブラウザを閉じても次に開けば戻ってくる。当たり前のことが、ようやく当たり前になった。
2つ目——コーヒーが毎週変わる。
コーヒージャズ(作業BGM)のYouTubeライブ配信は、毎週動画IDが更新される。曜日ごとに手動で調べ直し、コクピットに入力する。地味だが、確実に積み上がる作業だった。
その手間を機械に渡した。
PHPスクリプト(サーバー処理)がYouTubeの配信ページを自動で読みに行く。曜日ごとの動画IDを拾い、キャッシュ(一時保存庫)に蓄積する。ページを開くだけで、最新のIDが自動で適用される。さらにJST日付キャッシュで、同じ日の2回目以降はYouTubeへのアクセスをスキップする仕組みも入れた。
翌朝の珈琲は、Hiroが命じなくても出てくる。
日の終わりに、myhouse-guide(冒険者の家の案内書)も現実に合わせて書き直した。Google Tasks連携が「任意」ではなく「必須」であることを冒頭に明記し、コクピットの紹介セクションを新設した。施設の設計図と、実際の施設が、ようやく一致した。
この日のコクピットは、静かだった。チャンネルは消えなくなり、コーヒーは自動で動く。記憶と自律を手に入れた作業台は、明日も同じ場所で待っている。
—
§ 3
DAILY HABITS EXP
| カテゴリ | 入力値 | EXP | 備考 |
|---|---|---|---|
| 睡眠 | 6h | 0 | 7h未満 |
| 食事管理 | 普通 | 10 | |
| 環境整備 | なし | 0 | |
| 運動 | ウォーキング15453歩 | 25 | 30分以上 |
| 健康記録 | あり | 10 | |
| 学習 | なし | 0 | |
| 小計 | 45 EXP | ||
§ 4
WORK LOG ANALYSIS
| 作業内容 | カテゴリ | 規模 | 確定EXP |
|---|---|---|---|
| CJコーヒージャズ URL動的更新ボタン実装(PHP+YouTube scraping+Google Tasks連携) | 新機能実装 | 大 | 144 |
| CJ自動更新・日付キャッシュ実装(ページ読み込み時自動適用・JST日付切替) | 機能追加 | 中 | 80 |
| My Cockpit チャンネル消失バグ 根本修正(defer競合+race condition 2重修正) | バグ修正 | 大 | 150 |
| My Cockpit タイマー初期画像修正・アラーム回数変更 | 修正 | 中 | 60 |
| myhouse-guide 全面改訂・My Cockpit セクション追加・CH.undefinedバグ修正・別室リンク改善 | 改修 | 大 | 120 |
| Note旗艦記事タイトル画像 保管・JPEG変換 | 資産管理 | 小 | 15 |
| Day85 冒険手帳投稿(2026-06-20分) | 定型業務 | 中 | 70 |
| 小計 | 639 EXP | ||
§ 5
QUEST REWARDS
| Quest ID | クエスト名 | 進捗 | 報酬EXP | 備考 |
|---|---|---|---|---|
| 本日のクエスト報酬はありません。 | ||||
STATUS
REPORT
⚔ STATUS REPORT ⚔
2026-06-21
Lv31
Artisan
次のLvまで 3,321 EXP
HP
250 (+0)
名もなき商人QUEST ×1.1
MP
390 (+0)
無名の旅人BOOST ×1.0
EXP
1,179 / 4,500
88,173 → 88,979+806
基礎行動EXP45
業務EXP639
クエスト報酬0
行動EXP合計684
EXP BOOST × 1.179
Lv31 / Physical:1.00 / ENV:0.90
Lv31 / Physical:1.00 / ENV:0.90
実獲得EXP806
🎁 TODAY’S LOOT
— 今日の戦利品
- 💎 `defer`属性は「後読み」を指定するが、インラインコードが先に走ることで依存関数が未定義になる——`DOMContentLoaded`待機が唯一の正しい解
- 💎 並行実行の衝突(race condition)は「古い読み取りが新しい書き込みを上書きする」——非同期処理は直列チェーンで封じ込める
- 💎 PHPのYouTubeスクレイプでtitleはcontentId(動画ID)より先に出現する——後方8000バイト以内を検索することで安定取得できる
⚔ この冒険を見届ける
毎日更新中。フォローするか、ブックマークしてまた来てほしい。
📩 メルマガ準備中 — 開設時にお知らせします
