⚙️ Vault運用

2026-08-06_作業ログ

最終更新 2026年08月07日 / 90_Meta/Claude作業ログ/2026-08-06_作業ログ.md

作業ログ 2026-08-06

15:34 - /handoff 実行(全テーマ)

このセッションで扱ったテーマ(全部)

  1. SCALE LIST → SCALE CRM 連携の仕上げ — システム — 完了(実運用に乗った)
  2. NGリスト機能の新設 — システム — 完了
  3. セグメント画面・追加モーダルの作り込み — システム+判断 — 完了
  4. 不具合の修正(8件) — システム — 完了
  5. HPを増やす手段の検討 — 相談+データ — .jp は掘り尽くし・方針決着
  6. スクショ取り込みの体制構築 — システム — 完了(運用待ち)
  7. 部署・拠点データの整備 — システム+相談 — 完了
  8. 部署で会社を絞る機能 — システム+相談 — 完了
  9. SNS(LinkedIn/X/Instagram/Facebook)の取得 — 相談 — 未着手(次の一手)

テーマ別の詳細

1. SCALE LIST → SCALE CRM 連携の仕上げ

  • 大串が実際にテストして成功。デモ案件へ10件→5件→4件と入り、CRM側の実データで全項目が正しい形だと確認
  • セグメントは絞り込み条件から自動生成(大串判断)。同じ条件なら作り直さない(slFilters に条件を控える)
  • 均等抽出は常時オン(5項目=都道府県・大業界・中業界・売上・従業員)
  • 1回の上限 5,000 → 1,000件(大串「他の人のリスト奪っちゃう」)
  • 追加はワンタップ(確認ダイアログを撤去)。内訳は押す前に出す
  • 担当案件はユーザー管理でチェックボックスで割り当て(CRMの member_rows は書き換えない)

2. NGリスト機能(新設)

  • メニュー →「NGリスト」。案件ごとにカードで並ぶ
  • スプレッドシートの中身を貼り付けるだけ
  • 法人番号は自動で引く(会社名+住所から。先方にも大串にも書かせない)
  • 決まらない行は「確認が必要」として画面の上に出す
  • CRM追加時、その案件のNGは必ず外れる別案件では出る(大串の明言)
  • 実測: 会社名+住所だけの5行で4行が自動で埋まった

先方に書いてもらう項目(負担最小): 会社名 / 住所 / 電話番号 / ホームページURL / NG理由

3. セグメント画面・追加モーダル

  • 「リスト追加履歴」→ 「セグメント」 に作り替え(該当・追加ずみ・残りが見える)
  • 追加モーダルに内訳(選んでいる企業 ▶ 電話番号がない ▶ この案件で使用済み ▶ NGリスト = 追加できる)
  • 使用済みとNGは案件を選ばないと出せない(案件ごとにしか決まらない)
  • 完了モーダルは案A(数字を主役に・680px)

4. 直した不具合(8件)

真因
セグメントがCRMに現れない updated_atスペース区切りだった(CRMはISO)。文字列比較で常に「古い」判定
企業詳細リンクが崩れる /companies/… は誤り。正しくは /company?cn=…(CRM側120行も修正)
大業界のチェックが押せない チェックの絵が <label> 内にあり、label の既定動作を止めていた
中業界が外れない setLargeif (on) のときだけ描き直していた
連絡先情報タブの下線が動かない 選択表示は Mui-selected クラスが描いており style では動かない
無効な電話番号 000-0000-0000 が54件。CSV由来
空欄で1件だけ入る Math.max(parseInt("")||0, 1)1 になっていた
数え置きが除外を知らない 件数と一覧が食い違っていた

5. HPを増やす手段(相談・決着)

  • .jp 系のドメインは掘り尽くした(co.jp / or.jp / 汎用jp / ne.jp すべて完走)
  • 残るのは ed.jp・ac.jp・gr.jp・go.jp = 学校・団体・役所で営業対象外
  • これ以上クロールではHPを増やせない。残る手段は SalesNow の CSV とスクショの2つだけ
  • 大串の判断: 両方やる
  • 実測: SalesNow由来23万社でも電話番号は50.9%しかない(「充足率100%」は画面の印象)
  • 分母の違い: SalesNow 196万社 vs SCALE LIST 503万社(国税庁の全法人)

6. スクショ取り込みの体制

  • scripts/ocr/ocr.swift … macOS標準の Vision で読む(日本語対応・追加インストール不要・1枚1.5秒)
  • scripts/import_screenshots.py … フォルダのスクショを読んで企業データに反映
  • 保存先: ~/Pictures/Screenshots/SalesNowスクショ/
  • Claude に画像を渡さない(画像1枚=数千文字ぶん。数百枚でセッションが潰れる)
  • 実測: 14枚→237行、227行の会社が確定
  • いま撮っている一覧には電話番号の列が無いので0社しか増えない。
    「代表電話番号」の列を出して、中小企業が写る絞り込みで撮る必要がある

7. 部署・拠点データの整備

  • 部署名を洗い直し 40.6% → 71.6%clean_divisions.py
  • .ne.jp 完走 → HP 349,022(+868)/電話 211,420(+237)
  • 連絡先情報タブを参考と同じ形に(部署名/部署カテゴリ/電話番号/住所+絞り込み)
  • 人物情報パネルは出さない(1件も持っていない・LinkedIn等が出どころ)
  • 住所の列は用意した(division_contacts.address)。中身はこれからクロールで埋める

8. 部署で会社を絞る機能

  • 大串の考え「探しているのは会社。部署は条件」に合わせ、画面を分けず絞り込みの1項目にした
  • 3層で持つ: カテゴリ(営業/人事・採用…)/(営業部・営業所…)/部署名
  • 型は表記ゆれ対策(大串「法人営業部と営業部の違い的な」)。
    「東京営業所356 / 大阪営業所285…」が全部「営業所」に。91%がまとまった
  • 一覧に「部署・拠点」の列。絞った部署が先に出る
  • 実測: 営業部がある会社287社/「人事」を含む会社55社

9. SNS取得(次の一手・未着手)

  • 大串「LinkedInの情報も本来は取りたい。XとかInstagram、facebookとか」
  • Facebook 1,306社・X 1,009社は既に持っているcompany_contacts にあり絞り込みでも使える)
  • LinkedIn・Instagram は未取得
  • 座組みの検討はこれから

このセッション全体の大串FB(重要なやつ全部)

  • 「探しているのは会社」 — 部署・拠点で画面を分ける参考の作りは微妙。絞り込みの条件にすべき
  • 「企業が重複していても違う案件だったら全く問題ない」 — 全案件横断の除外は誤り。案件ごとに判定
  • 「もう一回全く同じ絞り込みすることなんてない」 — 保存条件・共有・検索条件設定を全撤去
  • 「件数は最初から1000件入れず、空白にしておくべき」 — 上限を初期値にすると確かめずに持って行く
  • 「文章ってより 電話番号のない企業▶◯件 とかそういう形式がいい」 — 説明文より引き算が見える形
  • 「ラベルの部分で y-ogushi とアルファベットやだ」 — メアドの頭でなく日本語の表示名
  • 「自分でクリックして更新とか押さないよね?」 — 版は自動で入れ替わるべき
  • 「法人番号は会社名と所在地が分かればいける認識」 → 正しい。うちは国税庁データそのものを持っている
  • 「NGリストの項目は極力先方負担かけたくない」 — 5項目で十分
  • スクショ作戦は工数を考えずやる — ただし電話番号の列を出して撮らないと増えない

自分でやらかしたこと(同じ轍を踏まない)

  • 退化チェックが落ちたのにデプロイした&& でつないだのに走った)。以後チェックとデプロイは分けて実行
  • コメントに参考システム名を書いて退化チェックを落とした。コメントも成果物
  • 「会社と役所を分ける」を提案したが、実測したら役所は1.6%しかなく不要だった。目立つ例で判断しない
  • 括弧を片方だけ落として「本社(総務部」と余計に汚くした。括弧は対で見る
  • 「委員会」「組合」を部署じゃないと判定して捨てていた

追記(〜2026-08-07 未明)— SNS取得・スクショ取り込み・詳細ページ

10. SNS(LinkedIn/X/Instagram/Facebook/YouTube)— 完了

scripts/crawl_sns.py を新設し、企業HP 348,091社のヘッダー・フッターから公式アカウントを読んだ。

本番 着手前
Instagram 63,986社 0
Facebook 約42,000社 1,694
X 35,163社 1,308
YouTube 25,224社 0
LinkedIn 1,770社 0
  • 取り違え防止: 共有ボタンは形で落とす/1ページに2つあったら採らない/3社以上に出るアカウントは捨てる/LinkedInは会社ページのみ
  • 速くするにはプロセスを分ける(解析がCPU律速・GIL)。スレッド24→56で遅くなった--shard i --of 4 で2.5倍
  • 実らなかった角度: PR TIMES・Wantedly に企業の公式SNSは載っていない。JSON-LD sameAstwitter:site は上積み僅少。深掘りは+5,377社(2.6%)
  • 数が入らない真因は率でなく母数。届くのはHPが分かっている348,091社=全法人の6.9%
  • 次の一手=SNS側からの逆引き(大串「ログインが要るSNS側からの逆引きはゆくゆくやりたい」)

11. スクショ取り込み — 受託開発 2,803社 → 11,190社

大串が受託開発12,695件を948枚で送付。読み取り15,507行→会社決定15,380行(99.2%)→12,807社に反映。
電話番号あり8,450社(着手前2,597社)。

「本番のデータは正しいのに画面の件数だけ古い」を3つ同時に踏んだ:

  1. 業界の列を読めていなかった(OCRが見出しを途中で切る/隣とまとめて1つの文字にする)
  2. 数え置きの更新が索引名の衝突で毎回失敗index idx_facet already exists)。「更新した」と報告していたが実際は毎回落ちていた
  3. 数え置きは手元DBを数えるのに、取り込みは本番D1にしか書いていなかった

その他: 入れ先が5→11項目/写り込んだ日付を電話番号として読んでいた/業界名に従業員数がくっつき「受託開発0人」が150社入った。

OCRの生データを取っておくdb/screenshot_ocr.json)。解析結果を取っておくと読み取りを直すたびに20分の読み直しになる(2回やった)。

撮影の約束(memory scale-list-screenshot-progress に記録):
中業界を1つずつ/「メインで取り組んでいる業界のみで検索する」のチェックは必ず入れたまま(外すと枚数が4倍。中業界を持つ104,362社中67,255社=64%がサブ業界を平均3.19個持つ)/撮る列は7つ(企業名・企業HP・法人番号・代表電話番号・大業界・中業界・売上)。

12. 企業情報タブA案/部署と拠点の分割

  • 企業情報タブを3案出してA案(数字を先に見せる)を採用。連絡先情報タブは参考と同じまま(大串明言)
  • 一覧の「部署・拠点」を「部署」「拠点」の2列に分割(基準=部署カテゴリ「拠点」14,862件)

大串FB(このセッション)

  • 「Salesnowのデータが正よ。めっちゃ正確だもん」→ 業界は参考システムの値で上書き
  • 「連絡先情報はSalesnowと配置も全く同じで、項目とか情報量も同じだからね」→ 連絡先タブは作り替えない
  • 「この部署と拠点っていうのわけて欲しい」
  • 「ログインが要るSNS側からの逆引きはゆくゆくやりたい」

自分のやらかし(同じ轍を踏まない)

  • 「更新した」と報告したが、実際は索引名の衝突で毎回失敗していた。反映系は必ず結果を数えて確かめる
  • 掃除SQLが不十分REPLACE(industry_mid,'人','') で数字が残り「受託開発0」になった)。文字を消すのでなく RTRIM(値, '0123456789人名,') で端から落とす
  • 同じ「索引名の衝突」不具合が sync_contacts_to_d1.pyrefresh_facets.py2か所にあった。1つ直したら同じ形を横断で探す

判断待ち(次セッションへ)

  • 部署のFAX行(106行・17社)を直通から外すか残すか
  • 業界以外(電話・HP・売上・従業員)も参考システムの値で上書きするか