[{"data":1,"prerenderedAt":1577},["ShallowReactive",2],{"content-/1password-mcp-codex-secrets-layer":3,"all-pages-for-dir":1575,"og-image-/1password-mcp-codex-secrets-layer":1576},{"id":4,"title":5,"body":6,"category":1553,"description":1554,"extension":1555,"meta":1556,"navigation":852,"ogImage":1557,"path":1558,"project_name":1559,"published":1560,"publishedAt":1561,"seo":1562,"stem":1563,"tags":1564,"todo":1573,"unpublished":1560,"updatedAt":1561,"__hash__":1574},"pages/2026-05/2026-05-22/1password-mcp-codex-secrets-layer.md","1Password Environments MCP — Codex / Claude Code に「秘密を見せずに環境変数を任せる」レイヤーが来た",{"type":7,"value":8,"toc":1519},"minimark",[9,29,36,40,47,78,88,92,95,104,115,189,196,204,213,240,247,254,268,334,339,373,405,408,422,435,442,451,513,523,526,543,552,556,564,567,581,591,595,598,651,660,664,667,674,680,695,698,704,714,719,726,748,751,760,764,770,790,800,804,819,822,826,833,866,877,884,890,909,915,930,940,947,953,988,991,995,1015,1019,1121,1149,1152,1261,1264,1267,1315,1319,1324,1357,1360,1369,1383,1386,1433,1436,1453,1456,1476,1479,1508,1515],[10,11,12,13,17,18,28],"p",{},"2026年5月20日に、1Password が OpenAI Codex 向けに ",[14,15,16],"strong",{},"Environments MCP サーバー","を公開した。記事は ",[19,20,24],"a",{"href":21,"rel":22},"https://1password.com/blog/1password-trusted-access-layer-for-openai-codex",[23],"nofollow",[25,26,27],"code",{},"1password.com/blog/1password-trusted-access-layer-for-openai-codex","。",[10,30,31,32,35],{},"ニュースだけ読むと「また MCP の連携先が増えた」程度に見えるが、中身を追うと ",[14,33,34],{},"AI コーディング環境で秘密情報を扱う設計が一段変わる","話だった。普段から 1Password を使っていて、かつ Claude Code / Codex に作業を任せる頻度が増えている人ほど効いてくる。自分用のメモを兼ねて整理しておく。",[37,38,39],"h2",{"id":39},"ひとことで何が変わったか",[10,41,42,43,46],{},"軸は「",[14,44,45],{},"誰が叩くインターフェースか","」で見ると分かりやすい。",[48,49,50,65],"ul",{},[51,52,53,60,61,64],"li",{},[14,54,55,56,59],{},"CLI 版 (",[25,57,58],{},"op run"," 等)",": アプリの起動コマンドや CI から叩く。Vault の中身を",[14,62,63],{},"実行プロセスへ直接注入","する",[51,66,67,70,71,74,75],{},[14,68,69],{},"MCP 版（今回の新機能）",": Codex / Claude Code 等の ",[14,72,73],{},"AI エージェントが叩く","。Environment の作成・変数名の棚卸し・不足変数の検出ができ、",[14,76,77],{},"値そのものは AI のコンテキストに出ない",[10,79,80,81,83,84,87],{},"つまり今回の発表は「",[25,82,58],{}," の置き換え」ではなく、",[14,85,86],{},"ブラウザ版 Codex のように CLI を叩けないクライアントや、AI エージェントに環境構築作業まで投げたい場面に、同等の操作を渡せる層を足した","、という位置付けになる。",[37,89,91],{"id":90},"誤解されがちなこと-mcp-は-cli-api-の部分集合","誤解されがちなこと — MCP は CLI / API の部分集合",[10,93,94],{},"ここは混同が多いので先に言っておく。",[96,97,98],"blockquote",{},[10,99,100,103],{},[14,101,102],{},"MCP でできることは、基本的に CLI / API でも全部できる。"," 逆は成り立たない（CLI でできて MCP に出ていない操作は普通にある）。",[10,105,106,107,110,111,114],{},"理由はシンプルで、MCP は AI クライアントが呼び出せるツールスキーマを並べた",[14,108,109],{},"ラッパー","にすぎず、その実体は 1Password のバックエンド API / ローカルの op CLI を叩いている。",[14,112,113],{},"MCP を入れたから新機能が増えた、ではない","。「CLI を直接叩けない AI クライアント（ブラウザの Codex 等）からでも、同じ操作の安全なサブセットに触れる」というアクセス経路の話だ。",[116,117,118,134],"table",{},[119,120,121],"thead",{},[122,123,124,128,131],"tr",{},[125,126,127],"th",{},"クライアント",[125,129,130],{},"利用できる経路",[125,132,133],{},"主な使い方",[135,136,137,156,167,178],"tbody",{},[122,138,139,143,153],{},[140,141,142],"td",{},"開発者（人）+ ターミナル",[140,144,145,146,149,150,152],{},"CLI（",[25,147,148],{},"op",", ",[25,151,58],{},"）",[140,154,155],{},"起動コマンドへ秘密注入",[122,157,158,161,164],{},[140,159,160],{},"Claude Code / Codex CLI（ローカル）",[140,162,163],{},"CLI でも MCP でも可",[140,165,166],{},"値の利用は CLI、管理操作は MCP が便利",[122,168,169,172,175],{},[140,170,171],{},"ChatGPT 上の Codex（ブラウザ）等",[140,173,174],{},"MCP のみ",[140,176,177],{},"環境構築操作の遠隔実行",[122,179,180,183,186],{},[140,181,182],{},"CI / Cloudflare Workers 等",[140,184,185],{},"CLI / Service Account",[140,187,188],{},"自動化パイプライン",[10,190,191,192,195],{},"なので「自分が使うべきは CLI か MCP か」を悩む必要はなく、",[14,193,194],{},"両方入れて、用途で使い分ける","のが正解。Web 版を使わない人は MCP に手を出さなくても困らない場面が多い。",[37,197,199,200,203],{"id":198},"なぜこれが要るのか-env-を-ai-に渡したくない問題","なぜこれが要るのか — ",[25,201,202],{},".env"," を AI に渡したくない問題",[10,205,206,207,212],{},"Codex や Claude Code に多くの作業を任せるほど、",[14,208,209,211],{},[25,210,202],{}," や設定ファイルに置いた秘密情報が事故の温床になる","。具体的には次のような場面がじわじわ増える。",[48,214,215,225,228,237],{},[51,216,217,220,221,224],{},[25,218,219],{},"pnpm dev"," を AI に立ち上げさせるために ",[25,222,223],{},".env.example"," を読ませる",[51,226,227],{},"API 連携のデバッグで「サーバーのレスポンス見せて」と指示してログを丸ごと貼り付けさせる",[51,229,230,233,234,236],{},[25,231,232],{},".gitignore"," の調整で ",[25,235,202],{}," の中身がうっかり差分に出る",[51,238,239],{},"セッションログがクラウドに残る環境で、トークンが要約・キャッシュに紛れ込む",[10,241,242,243,246],{},"「読み取り禁止ルール」を CLAUDE.md に書いて防ぐのが一番手堅いが、それでも完全には防ぎきれない。",[14,244,245],{},"そもそも AI のコンテキストに秘密値を載せない","仕組みがあれば、ルールに頼らずに済む。CLI / MCP どちらも同じ思想で動いている。",[37,248,250,251,253],{"id":249},"既存の-op-run-でできていたこと","既存の ",[25,252,58],{}," でできていたこと",[10,255,256,257,263,264,267],{},"先に CLI 版の整理。1Password CLI の ",[19,258,261],{"href":259,"rel":260},"https://www.1password.dev/cli/secrets-environment-variables/",[23],[25,262,58],{}," は、シェルから起動するアプリのプロセスに、Vault の中身を",[14,265,266],{},"実行時だけ","注入する。",[269,270,275],"pre",{"className":271,"code":272,"language":273,"meta":274,"style":274},"language-shell shiki shiki-themes vitesse-light vitesse-light","# Secret Reference 記法\nexport GITHUB_TOKEN=\"op://development/GitHub/credentials/personal_token\"\nop run -- gh pr list\n","shell","",[25,276,277,286,312],{"__ignoreMap":274},[278,279,282],"span",{"class":280,"line":281},"line",1,[278,283,285],{"class":284},"sxvE3","# Secret Reference 記法\n",[278,287,289,293,297,301,305,309],{"class":280,"line":288},2,[278,290,292],{"class":291},"stQ0i","export",[278,294,296],{"class":295},"s4oTP"," GITHUB_TOKEN",[278,298,300],{"class":299},"shFtX","=",[278,302,304],{"class":303},"sMJiu","\"",[278,306,308],{"class":307},"sdGka","op://development/GitHub/credentials/personal_token",[278,310,311],{"class":303},"\"\n",[278,313,315,318,321,325,328,331],{"class":280,"line":314},3,[278,316,148],{"class":317},"senZ8",[278,319,320],{"class":307}," run",[278,322,324],{"class":323},"snbK4"," --",[278,326,327],{"class":307}," gh",[278,329,330],{"class":307}," pr",[278,332,333],{"class":307}," list\n",[10,335,336,338],{},[25,337,202],{}," ファイルでまとめて指定する書き方もできる。",[269,340,343],{"className":271,"code":341,"language":273,"meta":342,"style":274},"AWS_ACCESS_KEY_ID=\"op://development/aws/Access Keys/access_key_id\"\nAWS_SECRET_ACCESS_KEY=\"op://development/aws/Access Keys/secret_access_key\"\n","title=\"prod.env\"",[25,344,345,359],{"__ignoreMap":274},[278,346,347,350,352,354,357],{"class":280,"line":281},[278,348,349],{"class":295},"AWS_ACCESS_KEY_ID",[278,351,300],{"class":299},[278,353,304],{"class":303},[278,355,356],{"class":307},"op://development/aws/Access Keys/access_key_id",[278,358,311],{"class":303},[278,360,361,364,366,368,371],{"class":280,"line":288},[278,362,363],{"class":295},"AWS_SECRET_ACCESS_KEY",[278,365,300],{"class":299},[278,367,304],{"class":303},[278,369,370],{"class":307},"op://development/aws/Access Keys/secret_access_key",[278,372,311],{"class":303},[269,374,376],{"className":271,"code":375,"language":273,"meta":274,"style":274},"op run --env-file=\"./prod.env\" -- aws s3 ls\n",[25,377,378],{"__ignoreMap":274},[278,379,380,382,384,387,389,392,394,396,399,402],{"class":280,"line":281},[278,381,148],{"class":317},[278,383,320],{"class":307},[278,385,386],{"class":323}," --env-file=",[278,388,304],{"class":303},[278,390,391],{"class":307},"./prod.env",[278,393,304],{"class":303},[278,395,324],{"class":323},[278,397,398],{"class":307}," aws",[278,400,401],{"class":307}," s3",[278,403,404],{"class":307}," ls\n",[10,406,407],{},"ポイントは3つ。",[409,410,411,414,417],"ol",{},[51,412,413],{},"プレーンテキストの値はディスクにもプロセスリストにも残らない",[51,415,416],{},"プロセスが終われば環境変数も消える",[51,418,419,421],{},[25,420,58],{}," は PTY を挟んで stdout に値が出てもマスクする",[10,423,424,427,428,430,431,434],{},[14,425,426],{},"「アプリ実行時の秘密注入」用途では今でもこれが最強","で、",[25,429,219],{}," や ",[25,432,433],{},"aws"," のような日常の起動コマンドはこれで足りる。",[37,436,438,439,441],{"id":437},"mcp-版が-op-run-と被らない理由","MCP 版が ",[25,440,58],{}," と被らない理由",[10,443,444,445,447,448,28],{},"ここからが本題。MCP 版は ",[25,446,58],{}," の置き換えではない。",[14,449,450],{},"役割がずれている",[116,452,453,467],{},[119,454,455],{},[122,456,457,459,464],{},[125,458],{},[125,460,461,463],{},[25,462,58],{},"（CLI）",[125,465,466],{},"Environments MCP",[135,468,469,480,491,502],{},[122,470,471,474,477],{},[140,472,473],{},"主な用途",[140,475,476],{},"アプリ起動時の秘密注入",[140,478,479],{},"AI による Environment の作成・棚卸し",[122,481,482,485,488],{},[140,483,484],{},"値の参照者",[140,486,487],{},"アプリのプロセス",[140,489,490],{},"アプリのプロセス（AIではない）",[122,492,493,496,499],{},[140,494,495],{},"名前の参照者",[140,497,498],{},"開発者本人",[140,500,501],{},"AI エージェント",[122,503,504,507,510],{},[140,505,506],{},"操作の承認",[140,508,509],{},"シェル実行で暗黙承認",[140,511,512],{},"操作ごとに 1Password の明示承認プロンプト",[10,514,515,516,519,520,522],{},"つまり MCP 版は「",[14,517,518],{},"Codex / Claude Code に環境構築タスクを投げる","」ための層であって、",[25,521,58],{}," を捨てる話ではない。",[10,524,525],{},"公式の記述だと、MCP 経由で Codex は次のことができる。",[48,527,528,534,537,540],{},[51,529,530,531,533],{},"Environment の作成（プロジェクト初期化時の「",[25,532,202],{}," の代わり」役）",[51,535,536],{},"変数名のリスト、不足変数の検出",[51,538,539],{},"リポジトリ内に紛れ込んだ平文 secret のスキャン候補出し",[51,541,542],{},"ステージ（dev / staging / prod）への横展開",[10,544,545,548,549,551],{},[14,546,547],{},"そのいずれの操作でも、値そのものは AI のコンテキスト・ターミナル・ファイルに出ない","。値の参照は最終的なアプリプロセス（=実行時）に限定される、という設計。",[25,550,58],{}," と同じ「Just-in-Time」思想が、AI エージェントの操作面まで延長された格好だ。",[37,553,555],{"id":554},"セキュリティ上の意味-永続的な認証情報はすでに侵害されている","セキュリティ上の意味 — 「永続的な認証情報はすでに侵害されている」",[10,557,558,563],{},[19,559,562],{"href":560,"rel":561},"https://siliconangle.com/2026/05/20/1password-extends-openai-collaboration-codex-mcp-server-just-time-credential-access/",[23],"SiliconANGLE のインタビュー記事","で 1Password CTO の Nancy Wang が「永続的な認証情報は既に危険にさらされている」と言い切っているのが、今回の方向性をよく表している。",[10,565,566],{},"AI が触る環境では、",[48,568,569,572,575],{},[51,570,571],{},"セッションログがどこかに蓄積される",[51,573,574],{},"プロンプトキャッシュに値が残りうる",[51,576,577,578,580],{},"ローカルの ",[25,579,202],{}," を読ませた瞬間に、その値はモデルが「知っている」状態になる",[10,582,583,584,587,588,590],{},"という前提が崩せない。だったら",[14,585,586],{},"最初から「短期間しか有効でない・タスク終了時に消える」前提で発行する","しかない。1Password は同じ思想で Cursor、Browserbase、Perplexity の Comet ブラウザ等とも統合を広げており、AI 向けの secrets 取り扱いは「常時有効な API キーを ",[25,589,202],{}," に貼る」モデルから「タスクスコープでジャストインタイム発行」モデルへ寄っていく流れに見える。",[37,592,594],{"id":593},"自分の使い分け方針暫定","自分の使い分け方針（暫定）",[10,596,597],{},"CLI 版と MCP 版の役割が違うので、両方入れて使い分ける。",[48,599,600,618,627,633,645],{},[51,601,602,613,614,617],{},[14,603,604,606,607,606,609,612],{},[25,605,219],{}," / ",[25,608,433],{},[25,610,611],{},"gh"," 等の起動コマンドや CI"," → ",[25,615,616],{},"op run --env-file=./dev.env --"," で起動。これは人間が叩くか CI が叩くかで、AI を介す必要がない",[51,619,620,623,624,626],{},[14,621,622],{},"AI に値を見せたくないが、AI が書いたコードを動かしたい"," → 出力は AI、起動は ",[25,625,58],{}," の組み合わせで分業",[51,628,629,632],{},[14,630,631],{},"新規プロジェクトの環境初期化"," → 必要な変数の洗い出しと Environment への登録を Codex / Claude Code に MCP 経由で任せる",[51,634,635,638,639,641,642,644],{},[14,636,637],{},"平文 secret の棚卸し"," → 既存の ",[25,640,202],{}," を MCP 経由で Environment に移し、リポジトリから ",[25,643,202],{}," を抜く",[51,646,647,650],{},[14,648,649],{},"ブラウザ版 Codex で作業"," → CLI を叩けないので MCP 一択",[10,652,653,655,656,659],{},[25,654,58],{}," の CLI フローと、MCP で AI に任せる管理フローが、",[14,657,658],{},"Environment という同じ単位を共有する","のが効いている。AI が触るのは「名前」と「構造」だけ、人間と CI とアプリが触るのが「値」、という分担になる。",[37,661,663],{"id":662},"税理士会計士の実務に置き換えると","税理士・会計士の実務に置き換えると",[10,665,666],{},"ここはフォロワー視点での余談。",[10,668,669,670,673],{},"会計事務所で API トークンが増える局面は、freee / マネーフォワード / e-Tax / 銀行スクレイピング系のサービスを横串で叩き始めるとき。",[14,671,672],{},"「便利な顧問先別 Bot」を AI に書かせ始めた瞬間に、トークンの管理が一気に怖くなる","のは、コードを書く人と書かない人の境目に立つ人ほど実感しやすいはず。",[10,675,676,677,679],{},"そこで ",[25,678,58],{}," と MCP 版の組み合わせは、",[48,681,682,685,688],{},[51,683,684],{},"顧問先ごとの API トークンを 1Password の Vault / Environment で分離",[51,686,687],{},"AI に「freee の月次 import スクリプトのひな形を書いて」と頼むとき、トークンの値そのものは AI に渡さない",[51,689,690,691,694],{},"実行は ",[25,692,693],{},"op run -- python monthly_import.py"," でローカルから",[10,696,697],{},"という分業を、ルールではなく仕組みで縛れる。「顧客の機密データを AI に直接見せたくないが、便利は享受したい」という、いまの実務で一番モヤッとする部分にきれいに刺さる構造だと思う。",[37,699,55,701,703],{"id":700},"cli-版-op-を-windows-に入れて使い始める手順",[25,702,148],{},") を Windows に入れて使い始める手順",[10,705,706,707,713],{},"ここからは MCP ではなく、まず手元で確実に動く ",[14,708,709,710,712],{},"1Password CLI（",[25,711,148],{},"）の導入","を書く。デスクトップアプリの 1Password がすでに入っている前提。",[715,716,718],"h3",{"id":717},"_1-インストール","1. インストール",[10,720,721,722,725],{},"Windows なら ",[25,723,724],{},"winget"," で入る。",[269,727,731],{"className":728,"code":729,"language":730,"meta":274,"style":274},"language-powershell shiki shiki-themes vitesse-light vitesse-light","winget install AgileBits.1Password.CLI\n# もしくは\nwinget install --id 1Password.1PasswordCLI\n","powershell",[25,732,733,738,743],{"__ignoreMap":274},[278,734,735],{"class":280,"line":281},[278,736,737],{},"winget install AgileBits.1Password.CLI\n",[278,739,740],{"class":280,"line":288},[278,741,742],{},"# もしくは\n",[278,744,745],{"class":280,"line":314},[278,746,747],{},"winget install --id 1Password.1PasswordCLI\n",[10,749,750],{},"確認：",[269,752,754],{"className":728,"code":753,"language":730,"meta":274,"style":274},"op --version\n",[25,755,756],{"__ignoreMap":274},[278,757,758],{"class":280,"line":281},[278,759,753],{},[715,761,763],{"id":762},"_2-デスクトップアプリと-cli-を連携させる","2. デスクトップアプリと CLI を連携させる",[10,765,766,767,28],{},"これが一番重要なステップ。",[14,768,769],{},"マスターパスワードを毎回入力したくないなら、デスクトップアプリ側で CLI 連携を有効化する",[409,771,772,775,781,787],{},[51,773,774],{},"1Password デスクトップアプリを開く",[51,776,777,778],{},"設定（Settings） → ",[14,779,780],{},"開発者（Developer）",[51,782,783,786],{},[14,784,785],{},"「Integrate with 1Password CLI」"," にチェック",[51,788,789],{},"Windows Hello / 生体認証で承認を求められたら許可",[10,791,792,793,795,796,799],{},"これで ",[25,794,148],{}," コマンドを叩いた瞬間にデスクトップアプリが指紋認証を要求してくる。シェルセッションごとに ",[25,797,798],{},"op signin"," を打つ必要が消える。",[715,801,803],{"id":802},"_3-動作確認","3. 動作確認",[269,805,807],{"className":728,"code":806,"language":730,"meta":274,"style":274},"op vault list\nop item list --vault Personal\n",[25,808,809,814],{"__ignoreMap":274},[278,810,811],{"class":280,"line":281},[278,812,813],{},"op vault list\n",[278,815,816],{"class":280,"line":288},[278,817,818],{},"op item list --vault Personal\n",[10,820,821],{},"ここまで動けば成功。Vault 名は自分の環境に合わせる。",[715,823,825],{"id":824},"_4-secret-reference-を取得する","4. Secret Reference を取得する",[10,827,828,829,832],{},"ブラウザ的に開かなくても、CLI から参照記法（",[25,830,831],{},"op://...","）が取れる。",[269,834,836],{"className":728,"code":835,"language":730,"meta":274,"style":274},"# アイテムの詳細を見て、フィールド名を確認\nop item get \"GitHub\" --vault Personal\n\n# Secret Reference をクリップボードへコピー（GUI でもよい）\n# デスクトップアプリのフィールド右クリック → \"Copy Secret Reference\"\n",[25,837,838,843,848,854,860],{"__ignoreMap":274},[278,839,840],{"class":280,"line":281},[278,841,842],{},"# アイテムの詳細を見て、フィールド名を確認\n",[278,844,845],{"class":280,"line":288},[278,846,847],{},"op item get \"GitHub\" --vault Personal\n",[278,849,850],{"class":280,"line":314},[278,851,853],{"emptyLinePlaceholder":852},true,"\n",[278,855,857],{"class":280,"line":856},4,[278,858,859],{},"# Secret Reference をクリップボードへコピー（GUI でもよい）\n",[278,861,863],{"class":280,"line":862},5,[278,864,865],{},"# デスクトップアプリのフィールド右クリック → \"Copy Secret Reference\"\n",[10,867,868,869,872,873,876],{},"GUI からコピーするほうが早い。フィールドを右クリックして ",[14,870,871],{},"「秘密参照をコピー（Copy Secret Reference）」"," を選ぶと、",[25,874,875],{},"op://Personal/GitHub/credential"," のような文字列がクリップボードに入る。",[715,878,880,881,883],{"id":879},"_5-op-run-で最小の動作確認","5. ",[25,882,58],{}," で最小の動作確認",[10,885,886,889],{},[25,887,888],{},".env.template","（コミットしてよい、値は参照だけのファイル）を作る。",[269,891,894],{"className":271,"code":892,"language":273,"meta":893,"style":274},"GITHUB_TOKEN=\"op://Personal/GitHub/credential\"\n","title=\".env.template\"",[25,895,896],{"__ignoreMap":274},[278,897,898,901,903,905,907],{"class":280,"line":281},[278,899,900],{"class":295},"GITHUB_TOKEN",[278,902,300],{"class":299},[278,904,304],{"class":303},[278,906,875],{"class":307},[278,908,311],{"class":303},[10,910,911,912,914],{},"これを ",[25,913,58],{}," で実行コマンドに渡す。",[269,916,918],{"className":728,"code":917,"language":730,"meta":274,"style":274},"op run --env-file=\".env.template\" -- gh auth status\nop run --env-file=\".env.template\" -- gh pr list\n",[25,919,920,925],{"__ignoreMap":274},[278,921,922],{"class":280,"line":281},[278,923,924],{},"op run --env-file=\".env.template\" -- gh auth status\n",[278,926,927],{"class":280,"line":288},[278,928,929],{},"op run --env-file=\".env.template\" -- gh pr list\n",[10,931,932,933,935,936,939],{},"実行中だけ ",[25,934,900],{}," が解決された値として注入され、プロセスが終われば消える。",[25,937,938],{},"echo $env:GITHUB_TOKEN"," で値を見ようとしても 1Password 側でマスクされる（PTY 経由のマスキング）。",[715,941,943,944,946],{"id":942},"_6-既存の-env-を移行する","6. 既存の ",[25,945,202],{}," を移行する",[10,948,949,950,952],{},"すでに平文の ",[25,951,202],{}," がある場合、次の順で移行する。",[409,954,955,960,968,976,983],{},[51,956,957,959],{},[25,958,202],{}," の各値を 1Password に登録（Vault / Item / Field を決める）",[51,961,962,964,965,967],{},[25,963,888],{}," を作って ",[25,966,831],{}," 参照に置き換える",[51,969,970,972,973,975],{},[25,971,232],{}," で ",[25,974,202],{}," を除外（既に除外されているか確認）",[51,977,978,979,982],{},"起動コマンドを ",[25,980,981],{},"op run --env-file=\".env.template\" -- \u003Ccommand>"," 形式に切り替える",[51,984,577,985,987],{},[25,986,202],{}," を削除",[10,989,990],{},"ここまで来ると、リポジトリにもディスクにも平文の秘密値が無い状態になる。AI に repo 全体を読ませても事故らない。",[37,992,994],{"id":993},"cli-を税理士会計士の-rpa-用途で使う-申告のお知らせ収集フロー実走済み","CLI を税理士・会計士の RPA 用途で使う — 申告のお知らせ収集フロー（実走済み）",[10,996,997,998,1000,1001,1006,1007,1010,1011,1014],{},"ここからは ",[25,999,148],{}," CLI と Chrome DevTools MCP / ",[19,1002,1005],{"href":1003,"rel":1004},"https://github.com/agent-browser",[23],"agent-browser"," を組み合わせて、",[14,1008,1009],{},"e-Tax の「申告のお知らせ」を顧問先ごとに自動収集する","フローの設計図。",[14,1012,1013],{},"最初は仮説で書いたが、ログインフォームまで実際に DOM を叩いて検証し、フロー図を修正した版","を載せる。",[715,1016,1018],{"id":1017},"実走で分かったこと先に結論","実走で分かったこと（先に結論）",[116,1020,1021,1031],{},[119,1022,1023],{},[122,1024,1025,1028],{},[125,1026,1027],{},"確認項目",[125,1029,1030],{},"結果",[135,1032,1033,1043,1053,1064,1075,1087,1098,1106],{},[122,1034,1035,1038],{},[140,1036,1037],{},"法人ログイン URL（固定）",[140,1039,1040],{},[25,1041,1042],{},"https://login.e-tax.nta.go.jp/login/reception/loginCorporate",[122,1044,1045,1048],{},[140,1046,1047],{},"個人ログイン URL（固定）",[140,1049,1050],{},[25,1051,1052],{},"https://login.e-tax.nta.go.jp/login/reception/loginIndividual",[122,1054,1055,1058],{},[140,1056,1057],{},"利用者識別番号の input",[140,1059,1060,1063],{},[25,1061,1062],{},"name=oStUserId"," (type=tel, maxLength=16)",[122,1065,1066,1069],{},[140,1067,1068],{},"暗証番号の input",[140,1070,1071,1074],{},[25,1072,1073],{},"name=oStPassword"," (type=password)",[122,1076,1077,1080],{},[140,1078,1079],{},"disabled / readOnly",[140,1081,1082,1083,1086],{},"どちらも false。JS で ",[25,1084,1085],{},".value"," 設定可",[122,1088,1089,1092],{},[140,1090,1091],{},"ログインボタン",[140,1093,1094,1097],{},[25,1095,1096],{},"disabled=false"," 初期から押下可能",[122,1099,1100,1103],{},[140,1101,1102],{},"フォーム送信",[140,1104,1105],{},"標準的な HTML form。input イベントで値反映",[122,1107,1108,1111],{},[140,1109,1110],{},"ブラウザ拡張機能",[140,1112,1113,1116,1117,1120],{},[25,1114,1115],{},"extension-is-installed=54"," が検知される → ",[14,1118,1119],{},"マイナンバーカード認証ルート用","。ID/PW 方式では拡張機能なしでもフォーム表示・入力は可能",[10,1122,1123,1134,1135,1138,1139,972,1142,1144,1145,1148],{},[14,1124,1125,1126,1129,1130,1133],{},"つまり ID / 暗証番号方式のログインなら、",[25,1127,1128],{},"oStUserId"," と ",[25,1131,1132],{},"oStPassword"," を埋めるだけで自動入力できる構造","。Chrome DevTools MCP の ",[25,1136,1137],{},"fill_form"," や agent-browser でも、",[25,1140,1141],{},"evaluate_script",[25,1143,1085],{}," 直接代入 + ",[25,1146,1147],{},"input"," イベント発火でも通る。",[715,1150,1151],{"id":1151},"修正版フロー",[269,1153,1157],{"className":1154,"code":1155,"language":1156,"meta":274,"style":274},"language-mermaid shiki shiki-themes vitesse-light vitesse-light","flowchart TD\n    A[人間が Claude Code に指示\u003Cbr/>「顧問先 N 社の申告のお知らせを収集して」] --> B\n    B[Claude Code が顧問先リスト yaml を読む\u003Cbr/>e-Tax 認証方式: id_pw or マイナカード] --> C\n    C{認証方式で分岐}\n    C -->|id_pw 方式| D1[op item get で\u003Cbr/>oStUserId 16桁 と oStPassword を取得]\n    C -->|マイナカード方式| D2[自動化対象外\u003Cbr/>人間に通知して手動運用]\n    D1 --> E[Chrome DevTools MCP で\u003Cbr/>login.e-tax.nta.go.jp/login/reception/loginCorporate を開く]\n    E --> F[fill_form で oStUserId / oStPassword を注入\u003Cbr/>※ AI のコンテキストには値が出ない]\n    F --> G[ログインボタンを click\u003Cbr/>uketsuke.e-tax.nta.go.jp へ遷移]\n    G --> H[メッセージボックスを navigate\u003Cbr/>「申告のお知らせ」一覧を取得]\n    H --> I[PDF / 一覧 HTML を顧問先別ディレクトリへ保存\u003Cbr/>取得日時と件名を index.csv に追記]\n    I --> J[ブラウザコンテキストを破棄\u003Cbr/>環境変数のプロセスも終了 → 値は消える]\n    J --> K[Claude Code が収集結果を要約\u003Cbr/>「N 社中 M 社で新着あり」]\n    D2 --> K\n\n    style D1 fill:#e8f5e9,stroke:#2e7d32\n    style F fill:#e8f5e9,stroke:#2e7d32\n    style J fill:#fff3e0,stroke:#e65100\n","mermaid",[25,1158,1159,1164,1169,1174,1179,1184,1190,1196,1202,1208,1214,1220,1226,1232,1238,1243,1249,1255],{"__ignoreMap":274},[278,1160,1161],{"class":280,"line":281},[278,1162,1163],{},"flowchart TD\n",[278,1165,1166],{"class":280,"line":288},[278,1167,1168],{},"    A[人間が Claude Code に指示\u003Cbr/>「顧問先 N 社の申告のお知らせを収集して」] --> B\n",[278,1170,1171],{"class":280,"line":314},[278,1172,1173],{},"    B[Claude Code が顧問先リスト yaml を読む\u003Cbr/>e-Tax 認証方式: id_pw or マイナカード] --> C\n",[278,1175,1176],{"class":280,"line":856},[278,1177,1178],{},"    C{認証方式で分岐}\n",[278,1180,1181],{"class":280,"line":862},[278,1182,1183],{},"    C -->|id_pw 方式| D1[op item get で\u003Cbr/>oStUserId 16桁 と oStPassword を取得]\n",[278,1185,1187],{"class":280,"line":1186},6,[278,1188,1189],{},"    C -->|マイナカード方式| D2[自動化対象外\u003Cbr/>人間に通知して手動運用]\n",[278,1191,1193],{"class":280,"line":1192},7,[278,1194,1195],{},"    D1 --> E[Chrome DevTools MCP で\u003Cbr/>login.e-tax.nta.go.jp/login/reception/loginCorporate を開く]\n",[278,1197,1199],{"class":280,"line":1198},8,[278,1200,1201],{},"    E --> F[fill_form で oStUserId / oStPassword を注入\u003Cbr/>※ AI のコンテキストには値が出ない]\n",[278,1203,1205],{"class":280,"line":1204},9,[278,1206,1207],{},"    F --> G[ログインボタンを click\u003Cbr/>uketsuke.e-tax.nta.go.jp へ遷移]\n",[278,1209,1211],{"class":280,"line":1210},10,[278,1212,1213],{},"    G --> H[メッセージボックスを navigate\u003Cbr/>「申告のお知らせ」一覧を取得]\n",[278,1215,1217],{"class":280,"line":1216},11,[278,1218,1219],{},"    H --> I[PDF / 一覧 HTML を顧問先別ディレクトリへ保存\u003Cbr/>取得日時と件名を index.csv に追記]\n",[278,1221,1223],{"class":280,"line":1222},12,[278,1224,1225],{},"    I --> J[ブラウザコンテキストを破棄\u003Cbr/>環境変数のプロセスも終了 → 値は消える]\n",[278,1227,1229],{"class":280,"line":1228},13,[278,1230,1231],{},"    J --> K[Claude Code が収集結果を要約\u003Cbr/>「N 社中 M 社で新着あり」]\n",[278,1233,1235],{"class":280,"line":1234},14,[278,1236,1237],{},"    D2 --> K\n",[278,1239,1241],{"class":280,"line":1240},15,[278,1242,853],{"emptyLinePlaceholder":852},[278,1244,1246],{"class":280,"line":1245},16,[278,1247,1248],{},"    style D1 fill:#e8f5e9,stroke:#2e7d32\n",[278,1250,1252],{"class":280,"line":1251},17,[278,1253,1254],{},"    style F fill:#e8f5e9,stroke:#2e7d32\n",[278,1256,1258],{"class":280,"line":1257},18,[278,1259,1260],{},"    style J fill:#fff3e0,stroke:#e65100\n",[10,1262,1263],{},"緑のノードが 1Password が効くポイント。橙のノードは「値を絶対に残さない」境界。",[715,1265,1266],{"id":1266},"設計のキモ",[48,1268,1269,1282,1294,1301,1308],{},[51,1270,1271,1274,1275,1278,1279,152],{},[14,1272,1273],{},"顧問先別の認証情報を Vault で分離","し、Item 名を顧問先コードと一致させる（例: Vault ",[25,1276,1277],{},"eTax-Clients","、Item ",[25,1280,1281],{},"client-0001",[51,1283,1284,1285,1287,1288,1290,1291,1293],{},"Item の field は ",[25,1286,1128],{},"（識別番号16桁）、",[25,1289,1132],{},"（暗証番号）の2本に固定。フォーム input の name と一致させると ",[25,1292,58],{}," 経由の注入がそのまま使える",[51,1295,1296,1297,1300],{},"Claude Code は ",[25,1298,1299],{},"op item list --vault eTax-Clients"," で**「顧問先コード・Item 名の対応」だけ読む**。値は読まない",[51,1302,1303,1304,1307],{},"実際のブラウザフォーム入力は ",[25,1305,1306],{},"op run -- python collect.py"," のように起動側で値を注入。Python スクリプト → Chrome DevTools プロトコルで input に値を流し込む",[51,1309,1310,1311,1314],{},"取得した「申告のお知らせ」PDF はファイル名に顧問先コードを付与して ",[25,1312,1313],{},"data/etax/\u003Cclient>/YYYY-MM-DD.pdf"," に保存",[715,1316,1318],{"id":1317},"コード例最小","コード例（最小）",[10,1320,1321,1323],{},[25,1322,888],{},"（コミット可、値は参照だけ）:",[269,1325,1327],{"className":271,"code":1326,"language":273,"meta":893,"style":274},"ETAX_USER_ID=\"op://eTax-Clients/$CLIENT_CODE/oStUserId\"\nETAX_PASSWORD=\"op://eTax-Clients/$CLIENT_CODE/oStPassword\"\n",[25,1328,1329,1343],{"__ignoreMap":274},[278,1330,1331,1334,1336,1338,1341],{"class":280,"line":281},[278,1332,1333],{"class":295},"ETAX_USER_ID",[278,1335,300],{"class":299},[278,1337,304],{"class":303},[278,1339,1340],{"class":307},"op://eTax-Clients/$CLIENT_CODE/oStUserId",[278,1342,311],{"class":303},[278,1344,1345,1348,1350,1352,1355],{"class":280,"line":288},[278,1346,1347],{"class":295},"ETAX_PASSWORD",[278,1349,300],{"class":299},[278,1351,304],{"class":303},[278,1353,1354],{"class":307},"op://eTax-Clients/$CLIENT_CODE/oStPassword",[278,1356,311],{"class":303},[10,1358,1359],{},"起動コマンド:",[269,1361,1363],{"className":728,"code":1362,"language":730,"meta":274,"style":274},"CLIENT_CODE=client-0001 op run --env-file=\".env.template\" -- python collect_messages.py\n",[25,1364,1365],{"__ignoreMap":274},[278,1366,1367],{"class":280,"line":281},[278,1368,1362],{},[10,1370,1371,1372,606,1375,1378,1379,1382],{},"Python 側は ",[25,1373,1374],{},"os.environ[\"ETAX_USER_ID\"]",[25,1376,1377],{},"os.environ[\"ETAX_PASSWORD\"]"," で受け取り、Playwright / Chrome DevTools プロトコルでフォームに流す。スクリプト自身も値を ",[25,1380,1381],{},"print"," しない・例外メッセージに含めないようにマスクする。",[715,1384,1385],{"id":1385},"仮説段階で外したリスクと残ったリスク",[48,1387,1388,1395,1401,1408,1417,1427],{},[51,1389,1390,1391,1394],{},"✅ ",[14,1392,1393],{},"「ID/PW フォーム自体は自動入力できるか」"," → DOM 検証で OK と判明",[51,1396,1390,1397,1400],{},[14,1398,1399],{},"「ログインボタンが初期 disabled で、特殊な活性化条件があるか」"," → 初期から有効",[51,1402,1403,1404,1407],{},"⚠️ ",[14,1405,1406],{},"マイナンバーカード認証必須の顧問先"," → ID/PW 方式で代替不可。カードリーダー / スマホ認証が要るため自動化対象外。顧問先リストに認証方式フラグを付けて分岐するしかない",[51,1409,1403,1410,1413,1414],{},[14,1411,1412],{},"e-Tax の利用規約で第三者による自動操作が許容されるか"," → 税理士は「税務代理権限の範囲内」での代理ログインが認められているが、自動化 RPA については明文の許可は無い。",[14,1415,1416],{},"実運用に乗せる前に顧問先ごとの代理権限と国税庁ヘルプデスクへの照会が必須",[51,1418,1403,1419,1422,1423,1426],{},[14,1420,1421],{},"メッセージボックスの DOM 構造"," → ログイン後の ",[25,1424,1425],{},"uketsuke.e-tax.nta.go.jp"," 側は未検証。次のステップで実顧客アカウント（自社）でログインして DOM を確認する必要あり",[51,1428,1403,1429,1432],{},[14,1430,1431],{},"セッション再ログインの頻度・キャプチャの有無"," → 同じく次回検証",[715,1434,1435],{"id":1435},"次のアクション",[48,1437,1438,1441,1444,1450],{},[51,1439,1440],{},"自社の e-Tax 法人アカウント（テスト用）でログインまでやり、メッセージボックス側の DOM を確認",[51,1442,1443],{},"「申告のお知らせ」PDF のダウンロードリンク取得方法を確認",[51,1445,1446,1447,152],{},"利用規約・税務代理権限の整理（",[14,1448,1449],{},"法務確認が先で、コードはその後",[51,1451,1452],{},"確認できたら、このフロー図を「PoC 済み」に格上げして別記事に切り出す",[37,1454,1455],{"id":1455},"利用条件のメモ",[48,1457,1458,1465,1473],{},[51,1459,1460,1461,1464],{},"個人アカウント・ビジネス・エンタープライズで利用可能（Enterprise は ",[14,1462,1463],{},"Environments のベータポリシーを有効化","する必要あり）",[51,1466,1467,1468,1472],{},"セットアップ手順は ",[19,1469,1471],{"href":21,"rel":1470},[23],"1Password Marketplace"," のリスティングから辿る",[51,1474,1475],{},"ローカル MCP 接続のため、1Password デスクトップアプリのインストールが前提",[37,1477,1478],{"id":1478},"まとめ",[48,1480,1481,1487,1490,1496,1502],{},[51,1482,1483,1486],{},[14,1484,1485],{},"MCP は CLI / API の部分集合","。ターミナルで自分で叩ける環境では CLI で十分なケースが多い",[51,1488,1489],{},"MCP の存在意義は「CLI を叩けないクライアント（ブラウザ版 Codex 等）からも安全な操作を渡せる」こと、と「AI エージェントに環境構築作業を任せる」こと",[51,1491,1492,1493,64],{},"AI には変数の名前と構造だけを見せ、",[14,1494,1495],{},"値はプロセス起動時に注入",[51,1497,1498,1499,1501],{},"「",[25,1500,202],{}," を AI に読ませない」をルールではなく仕組みで実現できる",[51,1503,1504,1505,1507],{},"税理士・会計士の RPA 用途（申告のお知らせ収集等）も、Vault 分離 + ",[25,1506,58],{}," 注入の組み合わせで「顧客の認証情報を AI に見せない」分業が組める",[10,1509,1510,1511,1514],{},"CLI 版はまず ",[25,1512,1513],{},"winget install AgileBits.1Password.CLI"," → デスクトップアプリで「Integrate with 1Password CLI」をオンに、までやれば数分で動く。次の節で実走して、申告のお知らせ収集フローの仮説図を更新する。",[1516,1517,1518],"style",{},"html pre.shiki code .sxvE3, html code.shiki .sxvE3{--shiki-default:#A0ADA0;--shiki-dark:#A0ADA0}html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .sMJiu, html code.shiki .sMJiu{--shiki-default:#B5695977;--shiki-dark:#B5695977}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .snbK4, html code.shiki .snbK4{--shiki-default:#A65E2B;--shiki-dark:#A65E2B}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":274,"searchDepth":288,"depth":288,"links":1520},[1521,1522,1523,1525,1527,1529,1530,1531,1532,1543,1551,1552],{"id":39,"depth":288,"text":39},{"id":90,"depth":288,"text":91},{"id":198,"depth":288,"text":1524},"なぜこれが要るのか — .env を AI に渡したくない問題",{"id":249,"depth":288,"text":1526},"既存の op run でできていたこと",{"id":437,"depth":288,"text":1528},"MCP 版が op run と被らない理由",{"id":554,"depth":288,"text":555},{"id":593,"depth":288,"text":594},{"id":662,"depth":288,"text":663},{"id":700,"depth":288,"text":1533,"children":1534},"CLI 版 (op) を Windows に入れて使い始める手順",[1535,1536,1537,1538,1539,1541],{"id":717,"depth":314,"text":718},{"id":762,"depth":314,"text":763},{"id":802,"depth":314,"text":803},{"id":824,"depth":314,"text":825},{"id":879,"depth":314,"text":1540},"5. op run で最小の動作確認",{"id":942,"depth":314,"text":1542},"6. 既存の .env を移行する",{"id":993,"depth":288,"text":994,"children":1544},[1545,1546,1547,1548,1549,1550],{"id":1017,"depth":314,"text":1018},{"id":1151,"depth":314,"text":1151},{"id":1266,"depth":314,"text":1266},{"id":1317,"depth":314,"text":1318},{"id":1385,"depth":314,"text":1385},{"id":1435,"depth":314,"text":1435},{"id":1455,"depth":288,"text":1455},{"id":1478,"depth":288,"text":1478},"dev","2026年5月20日に1Passwordが発表した OpenAI Codex 向け Environments MCP サーバー。MCP は CLI/API の部分集合であり、ブラウザ版 Codex のように CLI を叩けないクライアントに同等の操作を渡すための層。CLI版 op run の運用と Windows での導入手順、AI コーディング環境で .env を AI に渡さない設計を整理する。","md",{},null,"/1password-mcp-codex-secrets-layer","misc-dev",false,"2026-05-22T00:00:00.000Z",{"title":5,"description":1554},"2026-05/2026-05-22/1password-mcp-codex-secrets-layer",[1565,1566,1567,1568,1569,58,1570,1571,1572],"1Password","MCP","OpenAI Codex","Claude Code","secrets management","op CLI","AIコーディング","Windows","memo","2GSX6shbxa0baaTlgki2SFSO5E6Tq1JiqKKJfxzPlwQ",[],"https://log.eurekapu.com/og/blog/1password-mcp-codex-secrets-layer.png?v=2026-05-22T00%3A00%3A00.000Z&title=1Password%20Environments%20MCP%20%E2%80%94%20Codex%20%2F%20Claude%20Code%20%E3%81%AB%E3%80%8C%E7%A7%98%E5%AF%86%E3%82%92%E8%A6%8B%E3%81%9B%E3%81%9A%E3%81%AB%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%82%92%E4%BB%BB%E3%81%9B%E3%82%8B%E3%80%8D%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%8C%E6%9D%A5%E3%81%9F&author=Kei%20Komatsu&sig=964b1a87c929d064",1782528841245]