iPhoneでSMSのワンタイムコードをCI・QAに渡す方法
Fwrd · · 更新:
SMSのワンタイムコードをCIやQAの自動化に取り込むには、コードを受け取るSIMをチーム用のiPhoneに入れ、ショートカットの「メッセージ」のオートメーションで、コードのSMSを1通ずつFwrdに渡します。Fwrdは、それをご自分のHTTPS WebhookへJSONで投稿します。あとはCIのジョブが、そのエンドポイントから最新のコードを読み取り、サインイン画面に入力します。
必要なもの: コードを受け取る番号のSIMを入れた、iOS 26以降のiPhone。ショートカットアプリ(最初から入っています)。Fwrd。そして、CIから読み取れる公開のHTTPSアドレスです。ステージング用のルートや、n8nのワークフローなどが使えます。FwrdはIPアドレスと、.localや.internalの名前を受け付けず、ログイン用のヘッダも送らないので、アドレスに長い秘密の文字列を含めてください。
SMSのコードは、なぜ自動化しにくいのですか?
SMSのコードは、実行環境ではなく電話に届くため、パイプラインから読める場所へ誰かが運ぶまで、CIが止まってしまうからです。
多くのチームでは、こうしたチェックを書く人が、コードを受け取る自分の電話しか持っていません。Fwrdを入れたチーム用のiPhoneなら、その電話が、パイプラインから読めるものになります。
チーム用のiPhoneが向くのは、どんなときですか?
向いているのは、コードが特定のキャリアの番号に届く必要がある場合です。サインインするサードパーティのサービス、すでに会社の電話に紐づいたステージングのアカウント、番号の種類によって処理が変わる流れなどです。TwilioのLookupのドキュメント(2026年10月17日に確認)によると、アプリは携帯電話の番号と、固定されないVoIP番号を見分けられます。後者は、オンラインで取得する仮想番号と説明されています。チーム用のiPhoneのSIMはキャリアの本物の番号なので、お客様の場合と同じようにコードが届きます。
トレードオフは、電話1台は番号1つで、電源とオンラインの状態を保つ必要があることです。以降のセクションで、どちらも説明します。
iPhoneのSMSのコードをCIに送る手順
Fwrdに、コードだけを残すWebhookの送り先を追加し、続けて、コードのSMSをFwrdに渡す「メッセージ」のオートメーションを作ります。エンドポイント側の詳細は、Webhookのガイドで説明しています。
FwrdにWebhookを追加します。 Fwrdを開き、「+」をタップして「Webhook」を選びます。「設定」欄に、エンドポイントのHTTPSアドレス全体を貼り付け、「テストメッセージを送信」をタップしてエンドポイントにフィールドを見せたら、チェックマークで保存します。
コードだけを残します。 同じ送り先で、「転送するSMS」の「一部のSMSのみ」を選び、「コードらしいもの」をオンにします。4〜8桁のコードを含むSMSが残ります。条件は1つなので、無料プランでも使えます。
「メッセージ」のオートメーションを作成します。 iOS 27では、ショートカットを開き、「ライブラリ」>「オートメーション」の順にタップして、「+」をタップします。「ショートカットを説明」が表示されたら「編集」をタップします。「オートメーション」>「メッセージ」の順にタップし、「差出人」を「メッセージ」に変更して、code(またはサービスのSMSに含まれる単語)を入力します。iOS 26では、「オートメーション」タブを開き、「+」をタップして「メッセージ」を選び、「メッセージが次を含む」にその単語を入力します。
確認なしで実行されるようにします。 iOS 27では、トリガーの横の矢印をタップし、「実行前に確認」がオフになっていることを確認します。ⓘ>「プライバシー」で、「ロック中に実行を許可」がオンになっていることを確認します。iOS 26では「すぐに実行」を選び、「次へ」>「新規ショートカットを作成」の順にタップします。
Fwrdのアクションを追加します。 「転送」で検索し、「メッセージをすべての送り先に転送」を追加します。「メッセージ」を「ショートカットの入力」に設定します(iOS 26では「ショートカットの入力」>「メッセージ」)。戻るをタップして保存します(iOS 26では「完了」)。
CIでコードを読み取ります。 エンドポイントで、受け取った本文を、届いた時刻とともに保存します。実行がコードを要求した後は、それ以降に受け取った最新のSMSを定期的に取得し、正規表現で数字を取り出します。
これで完了です。 コードのSMSが、iPhoneのロック中でもロック解除中でも、自動的にエンドポイントへ届きます。
エンドポイントは何を受け取りますか?
届いたままのSMSの本文を、contentとtextの両方に入れたJSONを、POSTで受け取ります。タイムスタンプは含まれないため、時刻はご自分の側で記録してください。
{
"content": "Your verification code is 482913",
"text": "Your verification code is 482913"
}
同じSMSに対する送信は、すべて同じIdempotency-Keyヘッダを持つため、重複は取り除けます。送信がタイムアウトしたり、429や5xxのエラーになったり、接続が切れたりすると、Fwrdは最大2回まで再送します。15秒以内に2xxの応答があれば配信済みとして扱い、リダイレクトは拒否されます。Fwrdの「設定」で「差出人を含める」をオンにし、Fwrdのアクションで「差出人」を選ぶと、本文にsenderフィールドも加わります。同じ番号に複数のサービスからSMSが届く場合に便利です。
この方法でできないこと
- 1つの番号で、同時に扱えるのは1回の実行だけです。 同じ番号でコードを要求する並列のジョブは、互いのコードを読んでしまうことがあります。サインインの手順を順番待ちにするか、コードを要求した実行に対応付けてください。
- 無料プランは、毎月15件までです。 それを超えると翌月までコードが届かなくなり、忙しいパイプラインではすぐ上限に達します。Fwrd Proなら上限がなくなります。料金は、米国で月額$4.99、または年額$29.99です。
- 受信専用です。 FwrdはiPhoneからSMSを送れないため、CIのためにSMSを送ることはできません。
- 電話の電源とオンラインの状態が必要です。 再起動後は、誰かが一度ロックを解除するまで転送が待機します。また、3日間ロックを解除しないiPhoneは自動的に再起動します。充電しておき、誰かが手に取れる場所に置いてください。
- Fwrdのアクションは、有効なすべての送り先に届きます。 同じ電話が別の送り先にも転送している場合は、代わりに「メッセージを送り先に転送」を使い、Webhookを選んでください。
- 新着のSMSだけです。 オートメーションを作る前に届いたコードは送られません。
パイプラインではなく人がコードを必要とする場合は、チームの2FA共有:SMSコードをSlackやTeamsへで、その設定を紹介しています。
自動化でのSMSのコードについてのよくある質問
SeleniumやPlaywrightは、SMSのコードを直接読めますか?
いいえ。ブラウザの自動化では、電話のメッセージは見えません。まず、何かがSMSを電話の外へ運ぶ必要があります。たとえば、ショートカットのオートメーションとFwrdで、スクリプトが取得するWebhookへ投稿する方法です。
コードはFwrdのサーバーを通りますか?
いいえ。Fwrdにはアカウントも、自前のサーバーもありません。SMSはiPhoneからご自分のHTTPSエンドポイントへ直接送られ、アドレスはiPhoneのキーチェーンに保存されます。
ショートコードの送信元でも動きますか?
はい。オートメーションは送信元ではなくSMSの内容で一致を判断するので、連絡先にない短い番号からのコードも、codeのような単語で一致します。
n8nのワークフローをエンドポイントにできますか?
はい。POSTに設定したWebhookノードを追加して、その本番用のURLを使い、ワークフローを公開してください。公開しないと応答しません。手順は、iPhoneのSMSをZapier、Make、n8nに送る方法で紹介しています。
SMSのコードを、CIが読める場所へ
Fwrdは、チーム用iPhoneに届く条件に合うSMSを、ご自分のHTTPS WebhookへJSONで投稿します。アカウントは不要で、Fwrdのサーバーも通りません。毎月15件まで無料で始められます。
毎月15件まで無料。Fwrd Proなら、転送とフィルタの上限がなくなり、「転送しない」リストも使えます。料金は月額$4.99、または年額$29.99で、年額プランには対象の方向けに7日間の無料トライアルがあります。
iPhone · iOS 26以降