[{"data":1,"prerenderedAt":208},["ShallowReactive",2],{"content-/analyst-target-price-ticker-mismatch":3,"all-pages-for-dir":186,"related-/analyst-target-price-ticker-mismatch":187,"og-image-/analyst-target-price-ticker-mismatch":207},{"id":4,"title":5,"body":6,"category":165,"concepts":166,"description":167,"extension":168,"meta":169,"navigation":170,"ogImage":166,"path":171,"project_name":172,"published":173,"publishedAt":174,"seo":175,"source":176,"stem":177,"tags":178,"todo":166,"unpublished":173,"updatedAt":166,"__hash__":185},"pages/2026-09/2026-09-19/analyst-target-price-ticker-mismatch.md","韓国株だけ目標株価が出なかった原因は、ティッカーの取引所接尾辞だった",{"type":7,"value":8,"toc":155},"minimark",[9,13,17,20,24,27,30,38,41,44,47,58,77,81,84,91,94,97,100,103,117,120,123,126,133,136],[10,11,5],"h1",{"id":12},"韓国株だけ目標株価が出なかった原因はティッカーの取引所接尾辞だった",[14,15,16],"p",{},"そういえば、と思い出した。\nLINE に届くポートフォリオ通知の銘柄カードで、SK ハイニックスだけ目標株価と乖離率が出ていない。\nMicron、NVIDIA、AMD、SNDK のカードには2行とも並んでいる。\nその4銘柄はたしか金融データサービスAから取っていたはずで、だとすると SK ハイニックスはそこで取れなかったということなんだろうか。",[14,18,19],{},"そこを確かめるところから Claude Code に追わせた。",[21,22,23],"h2",{"id":23},"目標株価はどこから来ているのか",[14,25,26],{},"まず、目標株価と乖離率がどこに出ているのかをコードで探させた。\napps/web 側には見当たらず、見つかったのは LINE 通知の銘柄カードのほうだった。\n目標株価、乖離率、データの基準日の3つがそこに並んでいる。",[14,28,29],{},"値の出どころは金融データサービスAではなかった。\nGAS（Google Apps Script）が書き出す JSON で、取得元は別の金融データサービスBだった。\n最初の疑問は、前提のところで外れていたことになる。",[14,31,32,33,37],{},"試しに1件だけ取らせてみると、",[34,35,36],"code",{},"000660.KS"," の目標株価は金融データサービスBから返ってきた。\n値そのものは取れる。\nでは、なぜカードに出ないのか。",[21,39,40],{"id":40},"どの関数を実行すればいいのか",[14,42,43],{},"値が取れるなら、GAS を一度回してみるのが早い。\n「これ私の方で GAS を実行して、うまくいくかどうか見たらいいんすかね」と聞いたら、それがいちばん早いと返ってきた。",[14,45,46],{},"ただ、どの関数を実行すればいいのかが分からない。\nエディタは開いていたので、Chrome DevTools で見てもらうことにした。",[14,48,49,50,53,54,57],{},"ここで一度つまずいている。\nNode に MSYS 形式のパス（",[34,51,52],{},"/c/Users/...","）を渡して失敗した。\n前にも踏んでいる罠なので、",[34,55,56],{},"C:/"," 形式に直してもらって先へ進んだ。",[14,59,60,61,64,65,68,69,72,73,76],{},"読んでもらった結果、実行すべき関数は ",[34,62,63],{},"mainDailyJob"," だった。\nコメントに「トリガーにはこれを設定」とあり、中で ",[34,66,67],{},"fetchAndWriteNvdaData"," を呼んでいる。\nただし、手で実行するのは勧められなかった。\n全銘柄を取り終えると ",[34,70,71],{},"sendLineSummaryIfConfigured"," が走り、",[34,74,75],{},"message/broadcast"," でボットの友だち全員に「アナリスト予想サマリー」が飛ぶ。\n今朝の分と同じものがもう1通届くことになる。",[21,78,80],{"id":79},"多分ね成功してますよ","「多分ね、成功してますよ」",[14,82,83],{},"止められはしたものの、こちらはもう実行したあとだった。\nそう伝えて、GAS の JSON を取り直させた。",[14,85,86,87,90],{},"実際、GAS 側は成功していた。\n全40銘柄を取り終えて ",[34,88,89],{},"send_data"," に書き込むまで、2分ほど待つことになった。",[14,92,93],{},"待ったあとで、出力 JSON の切り出しを誤るという寄り道が1回入った。\n凝った切り出しはやめて、プレビューの中で「目標株価」「乖離率」が出る銘柄を数えるだけの方法に切り替えてもらった。",[14,95,96],{},"数えた結果は4枚。\nLINE には送らない dry-run で、目標株価の行が付いたカードは Micron などの米国株4枚だけだった。\nGAS は書き込めているのに、SK ハイニックスのカードには相変わらず出ない。",[21,98,99],{"id":99},"実行済みなのに出ない理由",[14,101,102],{},"ここで自分は、実行の順番を取り違えていた。\n「まだあなたの方で実行してないですもんね」と言ったのだが、そうではなかった。",[14,104,105,106,108,109,112,113,116],{},"GAS が ",[34,107,36],{}," の行を書き込んだあと（08:00 ごろ）に、dry-run は回してもらっていた。\nそのとき JSON も取り直している。\n通知スクリプトは毎回その URL を読みに行く作りで、",[34,110,111],{},"fetchAnalystSummary"," はキャッシュせずに ",[34,114,115],{},"fetchJson(config.url)"," を呼ぶ。\n新しい値は、確かに読まれている。",[14,118,119],{},"それでもカードに出ないのは、値が無いからではなく、名前が合わずに結びつかないからだった。\n通知スクリプトと同じ手順で照合してもらうと、引くキーによって結果が変わる。\n取引所の接尾辞が付いたままのキーで引いていたので、行はあるのに引き当たらない。",[21,121,122],{"id":122},"照合キーの取引所接尾辞",[14,124,125],{},"直したのは、照合キーから取引所の接尾辞を外す1点だけだった。\nテストを2件足して全件回すと、66件すべて通った。\n差分の規模と、改行コードが崩れていないかまで確かめてもらってから、LINE には送らない dry-run を回させた。\nSK ハイニックスのカードに、目標株価と乖離率の行が付いている。",[14,127,128,129,132],{},"そこまで見てから、コミットと push を頼んだ。\n",[34,130,131],{},"8e5f9f4","（fix: アナリスト予想の照合キーから取引所の接尾辞を外し、韓国株のカードにも目標株価を出す）で、origin/master との差は無くなった。",[21,134,135],{"id":135},"学び",[137,138,139,143,146,152],"ul",{},[140,141,142],"li",{},"「出ない」の原因は、値が無いか、値が結びつかないかのどちらかになる。今回は後者だった。GAS 側の成功を確かめただけでは、切り分けは終わらない。",[140,144,145],{},"自分は「まだ実行していないから出ない」と推測したが、外れていた。実行済みかどうかは、実行した側に時刻で確かめさせるほうが早い。",[140,147,148,149,151],{},"Node に MSYS 形式のパスを渡すと失敗する。何度目かの再発なので、最初から ",[34,150,56],{}," 形式で渡す。",[140,153,154],{},"出力の切り出しに凝って失敗したら、数えるだけの方法に落とす。今回は「目標株価」「乖離率」が出る銘柄を数えただけで、4枚しかないという判断が付いた。",{"title":156,"searchDepth":157,"depth":157,"links":158},"",2,[159,160,161,162,163,164],{"id":23,"depth":157,"text":23},{"id":40,"depth":157,"text":40},{"id":79,"depth":157,"text":80},{"id":99,"depth":157,"text":99},{"id":122,"depth":157,"text":122},{"id":135,"depth":157,"text":135},"dev",null,"ポートフォリオ通知のカードで SK ハイニックスだけ目標株価と乖離率が出ない。GAS は全40銘柄を書き込めているのに出ないので、値ではなく照合キーの不一致を疑い、取引所の接尾辞を外して直した。","md",{},true,"/analyst-target-price-ticker-mismatch","financial-data",false,"2026-09-19T00:00:00.000Z",{"title":5,"description":167},"make-diary","2026-09/2026-09-19/analyst-target-price-ticker-mismatch",[179,180,181,182,183,184],"GAS","金融データAPI","LINE通知","ティッカー","SKハイニックス","デバッグ","MVO3HeUbK6xE8SWPO2Y011PQMiR51xPmF3jMdi0xvO0",[],[188,192,196,200,204],{"title":189,"path":190,"publishedAt":191},"株価の終値が2つのソースで食い違う。取得元を一本化し、為替の検算を予約した日","/stock-price-source-and-fx-check","2026-09-16T00:00:00.000Z",{"title":193,"path":194,"publishedAt":195},"海外株の円換算が約定直後にマイナスに見える理由をウォーターフォール図で整理し、ポートフォリオ記録と株価通知も追随させた","/foreign-stock-fx-waterfall-and-portfolio-sync","2026-09-15T00:00:00.000Z",{"title":197,"path":198,"publishedAt":199},"LINE通知の銘柄カードに「最高値比」を足し、リポジトリのコミットを整理した","/daily-chain-notification-card-and-repo-tidying","2026-09-04T00:00:00.000Z",{"title":201,"path":202,"publishedAt":203},"決算ビートモニタリングにソフトウェア枠を新設し、Snowflakeを追加した","/beat-monitoring-add-software-category","2026-09-03T00:00:00.000Z",{"title":205,"path":206,"publishedAt":203},"自作 Chrome 拡張の使い勝手を詰める：未入力件数のバッジと、動画の保存先が違っていた話","/chrome-extension-ux-and-download-path","https://log.eurekapu.com/og/blog/analyst-target-price-ticker-mismatch.png?v=2026-09-19T00%3A00%3A00.000Z&title=%E9%9F%93%E5%9B%BD%E6%A0%AA%E3%81%A0%E3%81%91%E7%9B%AE%E6%A8%99%E6%A0%AA%E4%BE%A1%E3%81%8C%E5%87%BA%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E5%8E%9F%E5%9B%A0%E3%81%AF%E3%80%81%E3%83%86%E3%82%A3%E3%83%83%E3%82%AB%E3%83%BC%E3%81%AE%E5%8F%96%E5%BC%95%E6%89%80%E6%8E%A5%E5%B0%BE%E8%BE%9E%E3%81%A0%E3%81%A3%E3%81%9F&author=Kei%20Komatsu&sig=0acfa99637476255",1789885491398]