アカウントを特定できる情報は、本文では伏せ、スクリーンショットでは不透明に隠しています。操作の説明や赤枠は残しています。
🙋 こんな人に向けた記事です

CodexやClaude Codeを使って、Xへの投稿もAIに任せたい。開発者のページで「アプリ」は作ったけれど、そのあと何をすれば自分のアカウントにつながるのか分からない。そんな方へ、実際の画面を使って手順を紹介します。
ぼくも、自分の発信用アカウントをつなぐところから始めました。途中では「許可」を押したのに止まる場面もありました。
※用語の補足①「API(エーピーアイ)」=アプリ同士がやり取りするための窓口です。人が投稿ボタンを押す代わりに、プログラムがこの窓口を使います。
🎯 この記事を読むと、できるようになること

Xの開発者のページで認証設定を直し、自分のXアカウントで「許可」を押すところまでの流れが分かります。
2026年10月6日に、せどりの発信用アカウント([アカウント名は非掲載])で実際に行った作業です。実際の投稿は、まだしていません。
なお、この記事では開発者アカウント・アプリ・接続用プログラムは用意済みの状態から始めます。プログラム自体を配布する記事ではありません。
✅ 完成したときの状態

今回使ったプログラムは、最後に次の1行を出しました。
投稿先の名前と固有IDを照合し、専用接続を保存しました。投稿はしていません。「名前と固有ID(アカウントの番号)を照合」とは、つながった先が本当に自分のアカウントかを確かめたという意味です。
この文は、ぼくの接続用プログラムが出す表示です。Xの公式画面に、全員同じ文が出るわけではありません。
🧰 始める前に用意するもの

開発者アカウントとアプリ:今回は、Xの開発者アカウントとアプリ1つを作成済みでした。これらの新規作成は、この記事では扱いません。
支払い方法:登録済みで、今回のアカウントには無料クレジット20ドルが付いていました。自動チャージはオフでした。全員に同じ残高が付くという意味ではありません。
Macと接続用プログラム:Python 3と、鍵を保存するプログラム・Xにつなぐプログラムを用意していました。
ここは大事です。下に出てくる `save_client_from_clipboard.py` と `x_transport.py` は、MacやPythonに最初から入っているものではありません。今回用意した専用プログラムです。手順5以降のコマンドは、そのファイルがあるフォルダで動かした実例として載せています。名前だけを入力しても動きません。
自分のプログラムを使う方は、保存方法・接続を待つ場所・アカウントの確認方法を、先にそのプログラムの説明で確かめてください。
💰 XのAPIは、使った分を支払う仕組みです。今回は接続先の確認で、自分のアカウント情報を1回読み取りました。2026年10月6日に公式料金表で確認した単価は、1件0.010ドルでした。これはアカウント情報の読み取り単価で、接続作業全体や今後の投稿が無料という意味ではありません。
🪜 手順

手順1:開発者のページで、自分のアプリを開く
用意済みのX開発者のページを開きます。左のメニューから「アプリ」を開き、自分のアプリの行を押します。

赤枠の行を押します。アプリ名の前半は、アカウントの番号が入っていたため隠しています。
アプリの中の「キー」の画面で「OAuth 2.0」の欄を探し、「認証設定」へ進みます。
手順2:「認証設定」で、2か所を選び直す
最初は「読む」と「ネイティブアプリ」が選ばれていました。今回のプログラムに合わせて、2か所を選び直しました。

① アプリの権限:「読み取りと書き込み」を選びました。投稿に必要な権限を準備するためです。DMは使わないので、「読み書きおよびダイレクトメッセージ」は選びませんでした。
② アプリの種類:「ウェブアプリ、自動化アプリまたはボット」を選びました。今回のプログラムが、秘密の鍵を使って接続する形だからです。画面では「機密クライアント」と表示されます。
ただし、画面の①には「OAuth 1.0aの権限」と書かれています。今回使ったOAuth 2.0では、プログラムが要求する権限と、手順6の許可画面も確認が必要です。①を選ぶだけで、すべてのプログラムが投稿できるようになるわけではありません。
手順3:アドレスを2つ入れ、「変更を保存する」を押す
画面を下へ進めて、③と④を入れます。

③ コールバックURI/リダイレクトURL:今回は、次のアドレスを入れました。
http://localhost:8767/callback/※用語の補足②「コールバック」=「許可」を押したあと、Xが返事を届ける場所です。`localhost` は「このパソコン自身」という意味です。今回のプログラムは、このアドレスで返事を待ちます。
③は、自分の接続用プログラムに書かれたアドレスと完全に一致させます。最後の `/` も含めます。上の番号やアドレスを、別のプログラムにそのまま流用しないでください。
④ ウェブサイトURL:自分のサイトのアドレスを入れました。画像に写っているのは、今回使った公開サイトです。
⑤ 変更を保存する:③と④を確認してから押します。
手順4:保存されたかを確かめる
保存後、もう一度「認証設定」を開きます。

「読み取りと書き込み」「ウェブアプリ、自動化アプリまたはボット」と、入力したコールバックのアドレスが残っていることを確かめました。
手順5:Client IDとClient Secretを、チャットに貼らず保存する
保存後、Client IDとClient Secretを確認しました。この画面は、秘密の値が写るため記事には載せていません。
※用語の補足③「Client ID・Client Secret」=作ったアプリを識別する番号と、そのアプリだけが持つ秘密の鍵です。特にClient Secretは、人に見せない値です。今回は両方ともチャットに貼らず保存しました。
コピーした値を、用意済みのプログラムで直接保存しました。鍵の文字自体は、コマンドに書きません。
python3 save_client_from_clipboard.py client_idpython3 save_client_from_clipboard.py client_secret画面に出るのは「client_id:保存しました」のように、項目名と成功・失敗だけです。保存後は、今回のプログラムがクリップボードを空にします。
⚠️ コピー履歴を残すアプリを使っていると、履歴側には鍵が残ることがあります。保存後、その鍵をコピーした履歴も消します。クリップボードを空にするだけで、別アプリの履歴まで消えるわけではありません。
手順6:接続用プログラムを動かし、Xの「許可」画面を出す
今回は次のコマンドを動かしました。
python3 -u x_transport.py connectプログラムがXの許可画面のアドレスを出します。そのアドレスを、つなぎたいアカウントでログインしているブラウザで開きます。
今回のプログラムは10分間待つ作りでした。この10分は、Xのすべての許可画面に共通する制限ではありません。

今回は表示が [アカウント名は非掲載] であることを確認しました。皆さんは、ご自分のつなぎたいアカウントになっているかを確かめてください。
①「I trust this app」にチェックを入れます。自分で用意したアプリで、要求している権限も確認できたためです。
②「Authorize app」を押します。①にチェックを入れると押せるようになります。
右側には、アプリができることが表示されています。投稿する権限など、必要な内容があるかを確認します。知らないアプリや、目的に合わない権限には許可を出しません。
「Stay connected to your account until you revoke access」は、接続を継続するための権限を求める表示です。ただし、一度許可すれば永久に接続が保証されるわけではありません。鍵の期限や更新の失敗などで、再接続が必要になることもあります。
手順7:「Received.」と出たら、プログラムの画面に戻る
許可を押すと、ブラウザに次の表示が出ました。

「受け取りました。設定の画面に戻ってください」という意味です。
ここで終わりにせず、プログラムの画面(ターミナル)へ戻ります。今回は、先ほど載せた「照合し、専用接続を保存しました」の行まで確認しました。
🔍 つながったかを確かめる方法

ブラウザの「Received.」は、返事を受け取った表示です。それだけで、正しいアカウントへの接続まで確認できたとは決めません。
今回のプログラムでは、接続先の名前と番号が、予定していたアカウントと一致しているかを確かめました。別のアカウントなら止まる作りです。
自分のプログラムでも、どのアカウントにつながったのか、接続情報を保存できたのかを確認できる表示を探してください。
🧗 今回、実際につまずいたところ

つまずき1:許可したのに「X通信結果を確認できません」で止まった
1回目は「Received.」まで出たのに、プログラムが止まりました。
停止:X通信結果を確認できません。再送せず記録を確認してください記録を読むと、このMacのPythonが、通信の安全を確かめるための「証明書の束」を見つけられていませんでした。エラー名は `CERTIFICATE_VERIFY_FAILED` です。
Xの設定を何度も変えるのではなく、証明書の束の場所を教えて動かしました。今回、プログラム自体は書き換えていません。
SSL_CERT_FILE="$(python3 -c 'import certifi;print(certifi.where())')" python3 -u x_transport.py connect`certifi` は、証明書の束を用意するPythonの部品です。上の方法は、その部品が入っていた今回の環境で使った対処です。安全確認を無効にする方法ではありません。
1回目は接続用の鍵を受け取る前に止まりました。もう一度許可を押し直し、接続できました。作業全体の請求額は、この記事では確認していません。
つまずき2:「許可」画面のアドレスが出てこない
プログラムを裏で動かしたとき、アドレスがすぐに表示されませんでした。Pythonが表示をため込んでいたためです。
`python3 -u` で動かしました。`-u` は「ため込まず、すぐ表示する」という指定です。
つまずき3:Client IDを取り違えて保存していた
最初に保存したClient IDが、画面の値と違っていました。
正しい値をコピーし直し、今回の保存用プログラムの入れ替え指定(`--replace`)を付けて1回だけ保存し直しました。Client Secretは変更しませんでした。
⚠️ 気をつけること

Client Secretや接続後の鍵は、チャット・メモ・公開スクリーンショットへ出しません。「許可」後に戻ってきたアドレスにも、一時的な秘密の文字列が含まれることがあるため、そのまま共有しません。
今回のプログラムが10分で待ち切れになった場合は、新しく動かし直して、新しい許可画面を開きます。古いアドレスを繰り返し使いません。
許可したアプリの権限は、Xの設定にある「アプリとセッション」で確認・取り消しができます。
📝 まとめ

次は、どんな文章を投稿するか、人が確認するタイミングをどこに置くかを決める段階です。
鍵をつなぐことと、投稿を任せることは別です。ぼくもまずは、1件の投稿を確認しながら試す準備へ進みます。今回の記事で、その前に必要だった画面の操作と、止まった理由を残しました。








