Skip to content

Latest commit

 

History

History
351 lines (251 loc) · 29.2 KB

File metadata and controls

351 lines (251 loc) · 29.2 KB

cafe-wifi-okawari

test License: MIT macOS 15+

日本語 | English

カフェの無料 Wi‑Fi が時間切れになったとき、規約への再同意と再接続を自動で行う macOS 用ツールです。認証画面を操作し直す手間を減らし、作業を続けやすくします。

  • 再接続を自動で — 初回は自分で規約に同意。以後の時間切れには、バックグラウンドで再接続します。
  • 状態はメニューバーで — コーヒーカップのアイコンから接続状態を確認できます。
  • macOS 標準機能で動作 — 追加ソフトや管理者権限は不要です。

再接続が完了するまでは通信が一時的に止まります。対応する Wi‑Fi と利用条件を確認してお使いください。

対応している Wi‑Fi

Wi2 と USEN(USPOT-02)の「規約に同意するだけ」の無料 Wi‑Fi を対象にしています。

お店 SSID 状況
ドトール・エクセルシオール DOUTOR_FREE_Wi-Fi 動作確認済み
すかいらーくグループ(ガストなど) .Wi2_Free_at_【SK.GROUP】 動作確認済み
タリーズ tullys_Wi-Fi 動作確認済み
カフェ・ド・クリエ 公式の案内なし 動作確認済み
スターバックス at_STARBUCKS_Wi2 動く見込み
ルノアール・ミヤマ珈琲 Renoir_Miyama_Wi-Fi 動く見込み
コメダ珈琲 Komeda_Wi-Fi 未確認

「動作確認済み」は、初回の同意の記録と時間切れ後の自動再接続を実店舗で確認したものです。店舗数・回数・試験条件は DESIGN.md の §7 にあります。「動く見込み」は確認済みのお店と同じ仕組みのもの、「未確認」はタリーズと同じ方式でまだ実店舗で試していないものです。

  • すかいらーくグループの一部のブランドは、Wi‑Fi の提供を終了しています
  • ルノアール・ミヤマ珈琲の1日3時間の上限は延長できません
  • カフェ・ド・クリエは SSID と時間制限が公開されていません

会員登録・メール登録・アンケートが必要な Wi‑Fi(マクドナルドなど)には対応していません。

タリーズ・コメダ(USEN)は、導入したあとに同意したお店から対象になります(USEN について)。

動作環境

macOS 15 以降(標準の /usr/bin/jq を使います)。Apple Silicon・Intel のどちらでも動きます。動作確認は macOS 27 で行いました。

利用前に確認してください

本ツールは非公式です。Wi2・USEN および各店舗による公認・推奨はなく、作者は自動の再同意について提供者の許諾を得ていません。対応一覧は技術的な確認状況を示します。

  • 初回はご自身で規約を確認し、同意してください。以後は規約画面やお知らせを表示せず、同意を自動で送り直します。この動作を理解し、自動の再同意を希望する場合にお使いください。
  • 提供者の規約と店舗のルールで認められた範囲で利用してください。自動操作の扱いが不明な場合は、提供者に確認できるまで通常の接続方法を使ってください。利用上限や必要な手続きの回避には使わないでください。
  • 同意の判定・接続先の識別・規約変更の検知には限界があります。店舗ごとの初回同意を保証するものではありません。
  • 規約変更、利用上限・停止の表示、中止の要請、失敗の継続がある場合は使用を止めてください。停止・削除は zsh ~/.local/bin/cafe-wifi-okawari-ctl uninstall を実行します。

導入前に「利用上の注意と自動同意について」の全文をお読みください。

導入と使い方

ログイン中のユーザー権限で動きます。通信先は接続確認用の Apple のページと Wi‑Fi の認証先で、作者のサーバーへ情報を送ることはありません。ID・パスワード・メールアドレスは扱いません。処理は公開されたスクリプトで確認でき、不要になったら削除コマンドで常駐処理を解除できます。

1. 導入する

ターミナルを開き(⌘+スペースで「ターミナル」と入力)、次のどちらかの1行を貼り付けて Enter を押してください。

方法A: 公開版を入れる(推奨)

最新の公開版を一時フォルダに取得して導入します。新しい版に更新するときも、同じ1行を実行します。

cd "$(mktemp -d)" && curl -fsSLO https://github.com/hiroaki-com/cafe-wifi-okawari/releases/latest/download/cafe-wifi-okawari.tar.gz && tar -xzf cafe-wifi-okawari.tar.gz && zsh cafe-wifi-okawari/install.sh

方法B: Git で入れる

Git を使っている人向けです。入るのは公開版ではなく main の最新です。更新は、そのフォルダで git pull && zsh install.sh を実行します。

git clone https://github.com/hiroaki-com/cafe-wifi-okawari.git && cd cafe-wifi-okawari && zsh install.sh

どちらも Installed: と出れば完了です。メニューバーにコーヒーカップが出て、Mac を再起動しても自動で動き始めます。

2. お店の Wi‑Fi で、最初の1回だけ自分で同意する

お店の Wi‑Fi(DOUTOR_FREE_Wi-Fi など)につなぐと、macOS が認証画面を開きます。規約を読み、いつもどおり「同意する」を押してください。

通信できるようになると、本ツールがそのお店を「自分で同意したお店」として記録します。記録されると、メニューバーのアイコンをクリックしたときの印が緑になります。

  • ドトール・ガスト・スターバックス・ルノアールなど(Wi2): 導入前に同意を済ませていても、導入の直後に記録されます
  • タリーズ・コメダ(USEN): 導入したあとに同意したお店だけが対象です(下の「USEN について」)

USEN について

初めてのお店では、本ツールの導入後、Wi‑Fi につないでから5分以内に認証画面で同意してください。導入前に同意を済ませていた場合は、次に認証画面で同意したときから対象になります。

送信内容や規約変更への対応は「USEN での同意と送信内容」にあります。

3. あとはそのまま使う

以後は何もしなくてかまいません。時間切れ(ドトールでは約60分)のたびに、本ツールが自動で同意し直します。

自分で同意(初回だけ)
  → 約60分後に時間切れ。認証画面に戻され、通信が止まる
  → 本ツールが気づく(最大10秒)
  → 同意を送り直す。数秒で通信が戻る
  → 次の時間切れも同じように繰り返す

自動で戻ったときはダイアログを出しません。メニューバーのアイコンに10分間 ✓ が付きます。通信が止まっている間に起こりうることは「使うときの注意」にまとめています。

メニューバーのアイコン

本ツールの状態は、メニューバーのコーヒーカップで見られます。湯気を Wi‑Fi に見立て、矢印で「おかわり」を表したアイコンです。本ツールのファイルを読むだけで、通信はしません(書くのは、下の USEN のチェーンを覚えておくファイルだけです)。

意味
カップ 動作中
カップ ✓ 10分以内に自動で再接続した
カップ ! この Wi‑Fi で対応が要る
カップ … macOS が認証画面での同意を待っている
薄いカップ 停止中。./install.sh で戻ります

クリックすると、今の Wi‑Fi の名前・自動再接続が有効か・次の時間切れの目安・直近の出来事3件が出ます(メニューは英語のみ)。名前の左の印は、緑が自動再接続が有効、黄が次の時間切れかご自身の同意を待っている、赤が再接続に失敗、灰が働いていない(未同意・未接続・停止中)ことを表します。MAC アドレス・IP アドレスは出さないので、画面共有に写っても差し支えありません。

  • ! は、最初の1回だけ自分で同意するときと、再接続に失敗して認証画面を確かめるときに出ます。どちらかはメニューに出ます
  • … は対応している Wi‑Fi に限らず、認証画面のある Wi‑Fi ならどこでも出ます。認証画面が出なければ、ブラウザで http://captive.apple.com を開いてください
  • USEN の Wi‑Fi では、チェーンが分かれば Tully's (USEN)、分からなければ USEN と出ます。macOS のシステムログにある一部を伏せた Wi‑Fi 名から見分け、その名前は保存しません。店舗名は出しません(実店舗で確認したのはタリーズのみ)
  • 時間切れの目安は、お店の制限時間を60分として、今の接続先での最後の認証から求めます。認証画面を通らずにつなぎ直したとき(スリープからの復帰など)は出ません。本ツールを削除して入れ直しても、同じ接続のうちは前の認証から求めます。詳しい条件は DESIGN.md の §3.2 にあります

「Hide from Menu Bar」はアイコンを終了します。次のログインか、導入の手順をもう一度実行すると戻ります。本ツール自体は、どちらの場合も動いたままです。アイコン自体が不要なら、導入の手順で Enter を押す前に --no-menubar を付けて入れ直してください(アイコンだけを消します)。

動いているか確かめる

ふだんはメニューバーのカップを見れば十分です。カップが出ていて、お店の Wi‑Fi で名前の左の印が緑なら、自動再接続が有効です。

ターミナルで詳しく確かめる
zsh ~/.local/bin/cafe-wifi-okawari-ctl status

表示は英語で、次のようになります。

Service          loaded (LaunchAgent local.cafe-wifi-okawari)
Schedule         every 10 s, and whenever the network settings change
Program          /Users/you/.local/bin/cafe-wifi-okawari
Version          1.0.0
Last exit code   0 (412 runs since loaded)
Menu bar         running
Current network  gateway 0:0:5e:0:1:1 (doutor), accepted: auto re-authentication on
Accepted         1 network (brand: doutor)
Last auth        2026-05-12 10:05:12 (12 min ago), consent recorded on doutor
Next time-out    around 11:05, in 47 min (if the shop's limit is 60 minutes)
Log              /Users/you/Library/Logs/cafe-wifi-okawari.log (1 line)

Recent log:
  2026-05-12 10:05:12 consent recorded net=… doutor (online)

おもな項目の意味は次のとおりです。

項目 意味
Menu bar メニューバーのアイコンが動いているか(running・not running・not installed)
Current network 今つないでいる接続先が同意済みか。接続先はゲートウェイの MAC アドレスで見分けます。USEN の Wi‑Fi を見張っている間はその旨が出ます
Last auth ご自身の同意が記録されたか、認証画面での同意を確かめたか、自動で同意し直した最後の時刻。接続先は問いません
Next time-out 今の接続先での最後の認証から求めた、次の時間切れの目安。メニューバーと同じ条件のときだけ出ます(初めての USEN の Wi‑Fi では、メニューバーがチェーンを見分けたあと)

ログの各行の意味は「困ったとき」にあります。

こんなときは

  • 別のお店に行ったとき: Wi‑Fi につないで認証画面が出たら、2 と同じくご自身で同意してください
  • 「最初の1回だけ…同意してください」というダイアログが出たとき: 記録していないお店で時間切れになりました。本ツールは何も送っていないので、認証画面でご自身で同意してください。認証画面は、Wi‑Fi につなぎ直すか、ブラウザで http://captive.apple.com を開くと表示されます
  • 「自動で再接続できませんでした」「自動再接続を止めました」というダイアログが出たとき: 同じく認証画面を確認し、必要ならご自身で同意してください。原因はログで確かめられます(困ったとき)
  • 更新したいとき: 導入の手順をもう一度行ってください。同意の記録は残ります。新しい版を知りたい場合は、GitHub の Watch → Custom → Releases で通知を受け取れます
  • 使うのをやめたいとき: zsh ~/.local/bin/cafe-wifi-okawari-ctl uninstall で削除できます(削除)

仕組み

全体の構成は次のとおりです。macOS 標準の launchd が、本体とメニューバー表示の2つを起動します。

launchd [macOS 標準]
起動管理
|
+-- cafe-wifi-okawari.sh [導入時に追加]
|   接続監視・自動再認証
|   |
|   +-- Apple [通信先]
|   |   疎通確認・認証画面の検知
|   |
|   +-- Wi2 サーバー / USEN 店内機器 [通信先]
|   |   認証先
|   |
|   +-- macOS の接続情報・システムログ [macOS 標準]
|   |   参照
|   |
|   +-- 状態ファイル・ログ [実行時に生成]
|       同意・試行結果など
|
+-- menubar.js [導入時に追加]
    常駐・アイコン・メニュー表示
    |
    +-- menubar.sh [導入時に追加]
        表示する状態を判定
        |
        +-- 状態ファイル・ログ [実行時に生成]
        |   参照
        |
        +-- 接続情報・システムログ [macOS 標準]
        |   参照
        |
        +-- launchd の本体登録状態 [macOS 標準]
            参照
  • macOS 標準の zsh・curl・jq・launchd・JavaScript for Automation で動きます。接続状態を10秒ごとに確認し、時間切れを見つけてから再認証します。制限時間の長さに合わせた設定は不要です
  • 導入時にスクリプトを ~/.local/bin/cafe-wifi-okawari にコピーし、ログインユーザーの LaunchAgent として登録します。管理者権限(sudo)は使いません
  • この Mac の MAC アドレス・IP アドレスは、ログにもメニューにも出しません
  • 接続先は、店内の Wi‑Fi ルーターの MAC アドレスとブランド(doutor など)の組で見分けます。同じブランドの店どうしで同じ値になることがあるため、店舗を一意に見分けられるとは限りません
  • Wi2 の Wi‑Fi かどうかは、Wi‑Fi から配られるドメイン名(wi2.ne.jp)で見分けます。ほかの Wi‑Fi では、つないでから5分間だけ、macOS と同じく Apple の captive.apple.com で認証画面の有無を確かめます(USEN の Wi‑Fi を見つけるため)。自宅など関係のない Wi‑Fi に同意を送ることはありません
  • ダイアログは、macOS の言語設定に合わせて日本語か英語で表示されます。install.sh(cafe-wifi-okawari-ctl)のメッセージとメニューバーは英語です

使うときの注意

時間切れのたびに、通信が少し止まります

時間切れ(ドトールでは、同意または再認証から約60分ごと)になると、再認証が済むまで通信が止まります。気づくまでに最大10秒、同意を送ってから通信が戻るまでに数秒かかるので、止まるのは長くても十数秒が目安です(実測: ガスト・タリーズで約6秒)。

Wi‑Fi は切れず、IP アドレスも変わりません。多くのアプリは通信が戻れば自動で続きますが、止まっている間の影響はアプリによって異なります。たとえば次のようなことがあります。

  • ビデオ通話・オンライン会議: 映像や音声が固まる、「再接続中」になる、退出扱いになる
  • 画面共有・ライブ配信: 相手に届く画面や配信が止まる、配信が切れる
  • 大きなファイルのアップロード・ダウンロード: 失敗する(途中から再開できないアプリでは、最初からやり直しになる)
  • SSH・リモートデスクトップ・オンラインゲーム: 接続が切れる

大事な通話・配信・発表の前は、メニューバーか cafe-wifi-okawari-ctl status で次の時間切れの目安を確かめて予定を組むか、テザリングなど別の回線をお使いください。本ツールは時間切れを見つけてから再認証するため、先回りして認証し直すことはしません。

ダイアログが出るのは、つながっていないときだけです

自動で再接続できたときはダイアログを出しません(メニューバーのアイコンに ✓ が付き、ログにも記録します。cafe-wifi-okawari-ctl status で確認できます)。1時間ごとに画面に割り込まないためです。ダイアログが出るのは次の場合だけで、どれもインターネットにつながっていないときです。

  • 最初の1回の同意が必要なとき
  • 自動で再接続できなかったとき(失敗が続く間に1回)
  • 認証が続けて拒否され、自動の再同意を止めたとき
  • USEN の規約の文面が変わり、自動の再同意を止めたとき

ダイアログは画面の中央に出て、2分で自動的に閉じます。macOS は常駐処理からの通知を表示しないため、画面右上の通知は使えません。通知ではないので、集中モード(おやすみモードなど)でも表示され、画面共有や画面収録にも写ります。

自動では戻せない場面

  • 時間切れのあとに Wi‑Fi につなぎ直したとき(スリープからの復帰、電波の途切れ、Wi‑Fi のオフ・オンなど): macOS が認証画面を開き、同意するまでその Wi‑Fi をほかのアプリに使わせないため、本ツールは何もできません。認証画面でご自身で同意してください。次の時間切れからは、また自動で戻ります
  • USEN で macOS が先に認証画面を開いたとき: 以後は本ツールから送れません。認証画面でご自身で同意してください(USEN について)
  • スリープ中: 本ツールは動きません。復帰したときにすでに時間切れで、Wi‑Fi がつながったままなら、約10秒以内に再認証します
  • 1日の利用時間の上限に達したとき(ルノアールなど): 再認証は受け付けられず、通信は戻りません
  • VPN・iCloud プライベートリレーの使用中: 認証画面に戻されたことを正しく判定できないことがあります

そのほか

  • 通信の暗号化: 無料 Wi‑Fi の通信は暗号化されていません。本ツールはつなぎ直すだけなので、大事な通信は HTTPS や VPN で守ってください
  • 利用規約: サーバー側の利用時間・回数の制限を解除する機能はなく、MAC アドレスの偽装や多重接続もしません。規約画面を表示せずに同意を再送する点については、「利用上の注意と自動同意について」をお読みください
  • 非公式のツールで、上記の各社とは関係ありません。各社の仕様が変わると動かなくなることがあります。規約・法令との関係の検討は DESIGN.md の §4 にあります

削除

zsh ~/.local/bin/cafe-wifi-okawari-ctl uninstall

メニューバーのアイコンと、同意した接続先と、見張っている USEN の Wi‑Fi の記録も削除されます。ログ(~/Library/Logs/cafe-wifi-okawari.log)は残るので、不要なら手動で削除してください。

困ったとき

まず次のコマンドで動作を確かめてください。通信はしません。常駐処理が登録されていなければ、終了コード 1 で終わります。表示の見方は「動いているか確かめる」にあります。

zsh ~/.local/bin/cafe-wifi-okawari-ctl status
  • 認証画面が出たら、規約や案内を確認し、ご自身で同意してください。画面が出なければ、ブラウザで http://captive.apple.com を開いてください。
  • 自動停止や失敗が続く場合は、通常の認証画面で利用上限・利用停止・規約変更などを確認してください。停止が必要な場合は zsh ~/.local/bin/cafe-wifi-okawari-ctl uninstall を実行します(利用上の注意)。
  • 詳しく調べる場合は、下のログ一覧を開いてください。
ログの読み方・メッセージ一覧

ログを見るには次のコマンドを使います。記録されるのは、何かが起きたときだけです。

tail ~/Library/Logs/cafe-wifi-okawari.log
ログ 意味
consent recorded net=… (online) 本ツールが何も送っていないのに Wi2 の Wi‑Fi で通信できたため、ご自身で同意した接続先として記録しました。次の時間切れからは自動で再認証します
consent recorded net=… 認証画面を見たあとにご自身で同意されたので、上と同じく記録しました
consent pending net=… 記録していない接続先で認証画面を見ました。ご自身で同意されるのを待っています
captive login seen net=… 認証画面での同意をシステムログで確かめました。記録のない Wi‑Fi では(つないでから5分以内の同意)、この Wi‑Fi を24時間見張り、USEN のものなら最初の時間切れから同意を送ります(チェーンが分かれば、次の時間切れの目安の起点にもします)。同意済みの Wi‑Fi では(同意から1分以内に確かめたとき。net=… doutor のようにブランドが付きます)、次の時間切れの目安の起点にするだけです
consent recorded net=… usen (captive login) 見張っていた Wi‑Fi が USEN(USPOT-02)だと確かめたので、入店時の同意を記録しました。続けて同意を送ります
consent recorded net=… usen 同意待ちの USEN の Wi‑Fi で、認証画面での同意をシステムログで確かめたので記録しました
terms changed net=… usen USEN の規約の文面が前と違ったので、送らずに自動の再同意を止めました。ダイアログが出ます。認証画面で規約を読み、ご自身で同意し直すと再開します
re-authenticated api=ok probe=ok net=… t=Ns 自動で再認証しました(同意を送り始めてから N 秒で通信が戻りました)
network changed net=… 再認証やブランドの確認の途中で、別の回線(テザリングなど)に切り替わりました。その回は成功とも失敗とも数えず、同意済みとしても記録しません
login failed xN api=ng probe=ok 本ツールの認証は失敗しましたが、別の経路(macOS の認証画面など)で通信は戻りました
login failed xN api=… probe=ng 再認証できず、通信も戻っていません。ダイアログが出ます。1日の利用時間の上限(ルノアールなど)に達したときもこうなります
auto stopped net=… rejected x3 認証サーバーが3回続けて同意を受け付けなかったため、この接続先での自動の再同意を止めました(利用上限・利用停止・条件の変更などの可能性があります)。ダイアログが出ます。認証画面を確認し、ご自身で同意し直すと再開します
redirect failed xN curl=… http=… 認証サーバーに届きませんでした(タイムアウト・障害)。ダイアログは出ません
redirect failed xN http=… to=… / no session_id 認証サーバーの応答が想定と違いました(仕様変更の可能性があります)。記録済みの接続先ではダイアログが出ます
portal unknown xN Wi2 の Wi‑Fi か記録済みの接続先で Wi2 以外の認証画面が出たか、USEN の形の誘導先の画面が USPOT-02 のものではありませんでした。何も送りません
portal check failed xN USEN の画面を確かめられませんでした(通信の失敗か、200 以外の応答)。何も送りません
portal mismatch xN mac=… ip=… この Mac 以外の端末(MAC や IP アドレスが違う)向けの認証画面だったため、何も送りません
not free wi-fi xN Wi2 の Wi‑Fi ですが、「規約に同意するだけ」の無料 Wi‑Fi ではありません。何もしません
probe failed xN net=… curl=… http=… Wi2 の Wi‑Fi・記録済み・同意待ちの接続先で、接続の状態を確かめられませんでした(curl が 0 以外なら通信失敗、http は想定外の応答)。何も送りません

失敗が続くと、試す間隔を 30秒 → 60秒 → … → 最大30分 と広げます。失敗は毎回ログに記録します(接続の状態を確かめられない失敗だけは 1・2・4・8… 回目)。ダイアログは失敗が続く間に1回だけです(拒否が続いて自動の再同意を止めるときは、もう1回出ます)。別のお店に移ると、前のお店での待ち時間を引き継がずにすぐ試します。

不具合・動作の報告

報告テンプレートから、不具合報告か動作報告を選んでください。日本語・英語のどちらでも構いません。macOSのバージョン、CPU、ツールの版(不明でも可)、Wi2 / USEN / 不明、操作の順番と結果があれば報告できます。実際の時間切れ後に自動で戻ったか、手動で同意したか、模擬試験だけかを区別してください。

Issueは公開されます。ログ全文・cafe-wifi-okawari-ctl status の出力・画面画像・通信の記録は添付しないでください。status とログには接続先や時刻が含まれ、メニューにも時刻が出ます。タイトル・本文にも、MAC・IP(ゲートウェイを含む)、SSID、店舗名・所在地、来店日時・行動時刻、ユーザー名・個人のファイルパス、認証URL・Cookie・トークンを書かないでください。

エラーを伝える場合は、上のログ一覧にある種類(例: probe failed)と数値の curl・http コードだけを手で記入してください。ログの行全体や応答本文は不要です。手元の記録はそのまま残して構いません。投稿前にプレビューで非公開情報がないか確かめてください。

開発

zsh test/run.sh   # 模擬の curl などで分岐を確かめる(実際の Wi‑Fi にはつながない)

設計・安全性・検証状況は DESIGN.md にあります。

ライセンス

MIT