現在「保留」、進捗 80%。工程は全9件中 7件完了。
残りの工程: slnm_lacoco.py修正 / 本番反映
最新報告「slnm_lacoco.py修正」(2026-05-25 23:08:40)
負荷があり、他のジョブに影響などのため
ASPデータの取得タスクをメンテンナンス
現状の負荷を下げる
https://gyazo.com/9b6571bfb3398adfe757d24471d3acd5
https://plus-creative.xyz/nakata/asp_data/
https://plustest:plussp@data-organizing.com/
中田
現状反映未設定
/var/www/html/_asp_referrer
/var/www/html/_asp_data_get
タイミングを見てテスト確認後、
ディレクトリをリネームし反映
Claude
asp_data_get / asp_referrer の両ディレクトリで、Python と shell のハードコード機密値を .env_asp に切出し。
.env_asp (chmod 600) を _lib_env.py の env() で読込。shell は set -a; . .env_asp; set +a で読込https://plus-creative.xyz/nakata/conoha_server_plus/report/
.env_asp 経路に整合
中田
ソースの整理をしてアップ。
https://github.com/PLUS-Company/asp_data_get
https://github.com/PLUS-Company/asp_referrer
→ファイル、ソース整理中
ファイル構成などが整ったら共有
中田
使用しているソースをGitHubにアップし、そこで管理する設定に切り替える
1.現ソースのダウンロード
2.現ソースの整理(.envなど切り分け)
3.リポジトリ作成( asp_data_getとasp_referrerの2種)
4.ソースのアップ
中田
https://plus-creative.xyz/nakata/conoha_server_plus/report/
00概要 / システム全体像
01アーキテクチャ
02サーバ環境(ConoHa VPS)
03受け先サイト環境(PHP / SQLite)
04cron 一覧(3 本)
05取得スクリプト #1: asp_data_get
06取得スクリプト #2: asp_referrer
07受け先サイト #1: ASPデータ(plus-creative.xyz)
08受け先サイト #2: ASP Referrer(data-organizing.com)
09データフロー / 連携先一覧
10運用・メンテナンス手順
11トラブルシューティング
12リスク・改善点
13アーカイブ ダウンロード
14ローカル取得状況
中田
必要ライブラリ/ファイルの設置と構成を更にわかりやすく記述する
以下conohaサーバーでPLUS社関連のcronです。
その関連ファイルを
/Users/nakatafumito/dev/htdocs/conoha_server_plus/conoha_data
にダウンロード。
利用していないバックアップや不要ファイルもあるため、実際に使用しているものを揃える。
またその内容について
/Users/nakatafumito/dev/htdocs/conoha_server_plus/reportにindex.phpで作成。
cron:
[nakata@160-251-6-246 ~]$ crontab -l
MAILTO=
中田
中田
Claude
前提読み: comment_id=1054(同タスク内)に「ファイル構成・ログ・直近実行結果・打ち手候補」を投稿済み。本コメントはその続編。
ConoHa上の /var/www/html/asp_data_get/ 配下14スクリプトを driver.quit() / try-finally の有無で分類:
| スクリプト | try/finally | driver.quit() | 残留リスク |
|---|---|---|---|
| slnm_a8.py | 部分的 | 0回 | あり |
| slnm_a8_2.py | 部分的 | 0回 | あり |
| slnm_a8_3.py | 部分的 | 0回 | あり |
| slnm_a8_4.py | 部分的 | 0回 | あり |
| slnm_felma.py | 部分的 | 0回 | あり |
| slnm_a8_5.py | 権限600で読めず | ? | ? |
| slnm_accesstrade.py | あり | あり | 低 |
| slnm_afib.py | あり | あり | 低 |
| slnm_janet.py | 無 | あり(try外) | 例外時残留 |
| slnm_janet_200xxxx ×4 | 無 | あり(try外) | 例外時残留 |
| slnm_tgafi.py | あり | あり | 低(リファレンス) |
| slnm_lacoco.py | あり | あり | 低(Phase 1修正済) |
結論: driver.quit() を一度も呼んでいない a8 / a8_2 / a8_3 / a8_4 / felma の 5本 + 1(a8_5 想定)= 6本 が、観測された残留6本と数が一致。
/home/claude/asp_data_get_bak/20260427/slnm_a8_5.py のみ権限 -rw------- (600 / owner: nakata) で claude ユーザーから読めず未バックアップリストア手順(claude → nakata 権限が必要):
ssh conoha
sudo -u nakata cp -p /home/claude/asp_data_get_bak/20260427/<filename> /var/www/html/asp_data_get/<filename>
リファレンスは slnm_tgafi.py(既に options=options + try/finally + driver.quit() の最適化済み形)。
Options() 生成箇所に追加:options.add_argument("--disable-dev-shm-usage")options.add_argument("--disable-gpu")options.add_argument("--window-size=1280,720")webdriver.Chrome(chrome_options=options) → webdriver.Chrome(options=options) に統一try: ... finally: try: driver.quit() except Exception: pass で囲うslnm_a8.py から1本だけパッチ → ConoHa上で単体実行 → 成功 + プロセス残留なしを確認janet_200xxxx)に try/finally 追加asp_data_get.sh 一括実行 → output.txt とプロセス残留チェックssh conoha "ps aux | grep -E 'chrome|python.*slnm' | grep -v grep; echo '---'; free -h"
output.txt は 毎回 rm -f → 上書き で履歴が残らない。Phase 2 着手前に asp_data_get.sh のリダイレクト先を output_$(date +%Y%m%d).txt 等にローテーション化するのが筋(comment_id=1054 の打ち手 C)。観察期間を要する Phase 2 効果検証のため先に整備するのが望ましい。
slnm_lacoco.py line 178:
TypeError: 'in <string>' requires string as left operand, not float
原因: lacoco_sales_datas の link_name に float 値が混入。
修正案(型ガード):
if isinstance(data.get('link_name'), str) and link_name in data['link_name']:
これは Phase 1 のスコープ外として残されている案件。Phase 2 と独立して着手可能。
ssh conoha で接続。User: claude / Port: 2122)/var/www/html/asp_data_get/(owner: nakata)asp_data_get.sh が冒頭で pkill -f chromedriver → 14本順次実行 → send_mail.pyoutput.txt(毎回上書き、履歴なし)lifework.link/task_manage への投稿は 必ず https://lifework.link/task_manage/api/?action=comment.create + role: admin で行う。HTML フォーム経由(/task_manage/detail/?id=XXX への POST)は class=user 扱いで「対応者 未読」になる事故がある(2026-04-27 / comment_id=1053 の誤投稿で確定)。memory に feedback として保存済み。
中田
メモ
asp_referrer:
/var/www/html/asp_referrer/data-organizing_asp_referrer_get.sh
[conohaVPS:160.251.6.246]
asp_data_get:
/var/www/html/asp_data_get/asp_data_get.sh
[conohaVPS:160.251.6.246]
asp_referrer:
https://data-organizing.com/
[sv16152.xserver.jp]
asp_data_get:
https://plus-creative.xyz/nakata/asp_data/
[plus-x9.xsrv.jp]
Claude
/var/www/html/asp_data_get/ (owner: nakata)asp_data_get.sh — pkill chromedriver/chrome → 14本のslnm_*.pyを順次実行 → send_mail.py--disable-dev-shm-usage / --disable-gpu / --window-size=1280,720 反映済み/var/www/html/asp_data_get/output.txt の 1ファイル単独rm -f output.txt → { ... } >> output.txt 2>&1 で上書きFile "slnm_lacoco.py", line 178, in <module>
if link_name in data['link_name']:
TypeError: 'in <string>' requires string as left operand, not float
07:44 起動の chromedriver が 6本残っている:
nakata 812716/812798/812879/812963/813044/813127 chromedriver --port=...
swap 使用 170MB / 全体 mem 510MB available。
Phase 1 で driver.quit() を保証したのに残留している ← lacoco以外の13本がオプション/quit保証未対応のままだから。lacoco は14番目(最後)なので、6本残るのは a8 系/felma/janet 系の可能性が高い。
| 課題 | 現状 |
|---|---|
| lacoco TypeError | 未解決(line 178 / link_name が float)。Phase 1のスコープ外 |
| Chromedriver残留 | lacoco 1本だけ修正でも他13本が原因で発生継続 |
| ログ保存 | 上書き運用で履歴なし → 観察期間の意味が薄い |
if isinstance(data.get('link_name'), str) and link_name in data['link_name']:)個人的には C → A → B の順が筋がいい(観察基盤を先に作らないと B の効果検証ができない)。
/var/www/html/asp_data_get/ (owner: nakata)asp_data_get.sh — pkill chromedriver/chrome → 14本のslnm_*.pyを順次実行 → send_mail.py--disable-dev-shm-usage / --disable-gpu / --window-size=1280,720 反映済み/var/www/html/asp_data_get/output.txt の 1ファイル単独rm -f output.txt → { ... } >> output.txt 2>&1 で上書きFile "slnm_lacoco.py", line 178, in <module>
if link_name in data['link_name']:
TypeError: 'in <string>' requires string as left operand, not float
07:44 起動の chromedriver が 6本残っている:
nakata 812716/812798/812879/812963/813044/813127 chromedriver --port=...
swap 使用 170MB / 全体 mem 510MB available。
Phase 1 で driver.quit() を保証したのに残留している ← lacoco以外の13本がオプション/quit保証未対応のままだから。lacoco は14番目(最後)なので、6本残るのは a8 系/felma/janet 系の可能性が高い。
| 課題 | 現状 |
|---|---|
| lacoco TypeError | 未解決(line 178 / link_name が float)。Phase 1のスコープ外 |
| Chromedriver残留 | lacoco 1本だけ修正でも他13本が原因で発生継続 |
| ログ保存 | 上書き運用で履歴なし → 観察期間の意味が薄い |
if isinstance(data.get('link_name'), str) and link_name in data['link_name']:)個人的には C → A → B の順が筋がいい(観察基盤を先に作らないと B の効果検証ができない)。
Claude
/var/www/html/asp_data_get/ に書込権限なし(Permission denied)SERVER/key/conoha/20201011180445.pem)→ 書込権限確保| 項目 | 値 |
|---|---|
| Chrome | 86.0.4240.75 |
| ChromeDriver | 86 |
| selenium | 3.141.0 |
--headless=new 使用可否 |
不可(Chrome 109+必須)→ --headless 維持で確定 |
options=options 新API |
動作OK(selenium 3.141でも通る) |
driver.close() のみ組/var/www/html/asp_data_get/_bak/20260423/slnm_lacoco.py.original に cp -a で保全--disable-dev-shm-usage / --disable-gpu / --window-size=1280,720webdriver.Chrome(chrome_options=options) → webdriver.Chrome(options=options)try: ... finally: driver.quit() で囲んで例外時quit保証driver.quit()(単独行)は finally に移動したため削除asp_data_get.sh とは独立)=== BEFORE: chrome processes: 0 ===
=== RUN slnm_lacoco.py ===
データがないので、スクレイピングしてアップロードします
スクレイピングします
before
after
Traceback (most recent call last):
File "slnm_lacoco.py", line 178, in <module>
if link_name in data['link_name']:
TypeError: 'in <string>' requires string as left operand, not float
=== elapsed: 19s ===
=== AFTER RUN: chrome processes: 0 === ← 残留ゼロ確認
TypeError は既知(別タスク #2135)。ポイントは 例外時でも driver.quit() が finally で確実実行された点。旧コードでは L172 の TypeError 発生で L163 の単独 driver.quit() に到達せずプロセス残留していた。
Phase 2(残り13本への一括適用)は lacoco の数日観察後に判断。
# 07:50 以降に確認
ssh conoha "ps -ef | grep -c chrome; free -h; tail -30 /var/www/html/asp_data_get/output.txt"
chromedriver プロセスだけ残るパターン vs chrome 本体も残るパターン)cp _bak/20260423/slnm_lacoco.py.original ./slnm_lacoco.py2〜3日運用観察 → 中田側から Phase 2 の GO/NO-GO を投げてもらう。
中田
修正箇所を特定。lacocoは既に driver.quit() が存在するので(L163)、主な改善は以下4点:
L163 の driver.quit() は finally に移動
TypeError部(L172)はdriverスコープ外のため触らない(別タスク #2135)。修正版を作成
Claude
Phase 1(lacoco単体試験)完了。結果は成功。
/var/www/html/asp_data_get/_bak/20260423/slnm_lacoco.py.original/var/www/html/asp_data_get/slnm_lacoco.py (7,212 → 7,518 bytes)/Workspace/20260423/asp_data_get_chromedriver_fix/--disable-dev-shm-usage / --disable-gpu / --window-size=1280,720webdriver.Chrome(chrome_options=options) → webdriver.Chrome(options=options) (新API統一)try:...finally: driver.quit() で囲み、例外時にも必ず quit される形にdriver.quit() は finally に移動したので削除| 項目 | 値 |
|---|---|
| 実行前 chromeプロセス | 0 |
| 実行中 | before → after(driver起動)→ CSV DLまで正常 |
| TypeError発生行 | L178(try外)。別タスクで対応予定 |
| 実行後 chromeプロセス | 0 ← driver.quit() が finally で確実に呼ばれた |
| 実行時間 | 19秒 |
| swap 変化 | 164MB → 164MB(単体なので変化なし) |
--headless=new は不可。--headless 維持で確定options=options 新API は正常動作作業開始時のサーバ状態で ps -ef | grep chrome = 6プロセス残存(前回実行終了から3時間経過後)。
原因: driver.close() のみで driver.quit() が呼ばれないスクリプト(a8系5本+felma等)が終了処理で chromedriver プロセスを殺せていなかったため。
Phase 2 で同じパッチを残り13本に適用すれば、asp_data_get.sh 全体として swap 消費が下がる見込み。
残り13本への適用順(lacocoと同じ3つの修正のみ):
1. driver.close() のみで driver.quit() 未呼出の組(swap残留の主犯): slnm_a8, _2, _3, _4, _5, slnm_felma
2. 既に driver.quit() はあるが古いAPI の組: slnm_accesstrade, slnm_afib, slnm_janet(×5)
3. 既に新APIで修正済み: slnm_tgafi(追加するなら disable-dev-shm-usage 等の3行のみ)
着手判断待ち。Phase 2 続行可否を返してほしい。
Claude
サーバ状態(現時点)
- uptime 15日、load 0.00、Mem 147MiB/818MiB、Swap 178MiB/2GiB
- 今朝07:44の実行直後スナップショット。プロセス残存なし(pkill効いてる)
- 既に asp_data_get.sh 先頭に pkill -f chromedriver 入り
スクリプト構成(15本、全部 nakata ユーザー所有・パス /var/www/html/asp_data_get/)
- slnm_a8 / _2 / _3 / _4 / _5 / felma / accesstrade / afib / janet×5 / tgafi / lacoco
- 全て Selenium+Chromedriver。構造はほぼ同一
共通する重い原因(grep結果から確定)
| 症状 | 該当ファイル |
|---|---|
| driver.close() のみで driver.quit() 未呼出(プロセス残存) | slnm_a8.py, slnm_felma.py ほか(a8系5本・felma など) |
| chrome_options=options(Selenium 4で削除済みの旧API) | tgafi以外の13本 |
| --disable-dev-shm-usage / --disable-gpu / --headless=new 未指定 | 全15本 |
| try/finally でdriver保証なし | tgafi以外 |
tgafi.py だけは既に options=options と try/except/finally: driver.quit() に改修済(コメント「chrome_options → options に修正」あり)。これが良いテンプレートになる。
lacoco の TypeError は別タスク。今回はChromedriver調整のみに限定する。
options = Options()
options.add_argument('--headless=new') # Chrome 109+前提で置換、ダメなら '--headless'
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage') # 追加
options.add_argument('--disable-gpu') # 追加
options.add_argument('--window-size=1280,720') # 追加
driver = webdriver.Chrome(options=options) # chrome_options= を廃止
try:
...既存処理...
finally:
try: driver.quit()
except: pass
| リスク | 対応 |
|---|---|
| --headless=new がサーバChrome未対応 | Phase 0でバージョン確認、旧ならfallbackで --headless のまま |
| selenium旧版で options=options が通らない | Phase 1のfelmaで即検知、通らなければ pip show で selenium バージョン確認し判断 |
| 本番cronと手動実行が衝突 | 07:40〜08:00は避ける |
| nakataユーザー権限(claudeでsshしてる) | スクリプトは nakata nakata 所有。書き込みに sudo 必要かは Phase 0最初で touch で試す。失敗したら作業手順を切り替える |
この3点合意できたらPhase 0から動く。
Claude
コメント#1042の調査結果をもとに、残り2項目の解釈を整理。着手前の方針確認用。
TypeError: in <string> requires string as left operand, not floatin 演算子を使っている箇所がある。Lacoco側のレスポンス仕様変更で、以前は文字列だった値が数値型で返ってきている可能性が高い。str(value) への明示キャスト、または数値比較への切り替えdriver.quit() とプロセス kill を徹底。--headless=new / --disable-dev-shm-usage / --no-sandbox 等のメモリ抑制オプションを付与(堅実)タスク441は進捗60%。前半3項目(負荷調査・最適化・ログイン設定)は完了済み。この2件が残りの実作業で、完了後にチェックリスト #1987「動作確認・負荷テスト」へ進む。
着手の許可が出てから実作業に入る。
中田
ASP発生額収集:
asp_data_get/asp_data_get.sh
毎日 朝07:40
Selenium + Chrome で15スクリプト逐次実行。A8(5種)・Felmat・AccessTrade・AfiB・Janet(4種)・TGAFI・Lacoco
ASPリファラー取得:
asp_referrer/asp_referrer_get.sh
毎日 (daily CSV生成あり)
A8/AfiB/Felmat/Lacoco のリファラーデータ取得。curlベースで軽量
最も重いのは asp_data_get.sh
Chromedriver を毎回6プロセス起動してSeleniumでスクレイピング。今日07:44に実行された痕跡あり(output.txt 07:47更新)。swap 212MB消費の主因はこれの可能性が高い。
slnm_lacoco.py
TypeError: 'in
lacoco の結果取り込みが失敗している
中田
https://pub.a8.net/a8v2/media/loginAction.do
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
plus03のみ取得できていなかった。
アカウント情報に変更あったか?
ログインスクリプトエラーか?
中田
https://data-organizing.com/report_check.php?date=2026-04-12
負荷となっている 確定情報停止(承認・キャンセル)の送信停止
→crontab コメント化
中田
Claude
【2026-03-31 作業内容】
■ report_check.php 新規作成(旧report_test.php)
- report.phpのメインテーブル下に以下2セクションを追加
1. データ未取得のスクリプト一覧(asp/accountがDBに存在しない場合に表示)
- asp_dataの発生額が0 → OK(成果なし)
- asp_dataの発生額が0超 → NG(取得漏れ)
2. 総合判定テーブル
- report.php合計 vs asp_data合計を比較
- 一致 → 「完璧」表示、不一致 → 差額表示
■ asp_dataサイト(plus-creative.xyz/nakata/asp_data/)
- status00〜03.phpに合計行を追加
■ ページ間遷移
- report.php → report_check.php リンク追加(日付引き継ぎ)
- report_check.php → report.php 戻りリンク追加
アップロードはユーザー側で実施予定。
Claude
パスワード変更後から不動作。対象スクリプト:
- /var/www/html/asp_referrer/data-organizing_asp_referrer_get.sh
- /var/www/html/asp_referrer/data-organizing_confirm_asp_referrer_get.sh
cat /var/log/cron.log | tail -50
bash /var/www/html/asp_referrer/data-organizing_asp_referrer_get.sh
スクリプト内のID/PW記述箇所を確認:
grep -n "password\|passwd\|login\|user" /var/www/html/asp_referrer/data-organizing_asp_referrer_get.sh
ls -la /var/www/html/asp_referrer/
chmod +x が必要なケースset -x # シェルスクリプト先頭に追加
exec >> /var/log/asp_referrer_debug.log 2>&1
実行結果を /var/log/asp_referrer_debug.log に出力して原因を絞り込む
run-parts等)パスワード変更後の不動作なので、スクリプト内の認証情報が古いままの可能性が最も高い。Step 1→3を優先的に確認する。
中田
test
Claude
アカウント情報(パスワード)を変更後、不具合発生。
asp_referrerのスクレイピングがうまく実行されない。
原因を調査し、修正、様子を見ていく。
Claude
タスク情報を補完しました。
中田
本日、以下ページのAfiB以下が自動取得がとまっていた
https://plus-creative.xyz/nakata/asp_data/
JANet(pp1037642)
JANet(pp2005790)
JANet(pp2005141)
JANet(pp2007625)
JANet(pp2007788)
TGaffi(plus-tg)
調査、修正対応
python3 /var/www/html/asp_referrer/data-organizing_lacoco_pluslacoco_referrer_get.py
ソース確認ポイント
- ブラウザの起動
- ログイン
- レポートページ遷移
- CSVダウンロード
- CSVデータ取得
- データのAPI送信