Tailscale 経由でスマホから Happier にアクセスする方法:ポート開放なしで HTTPS 接続
ポートを開けたり LAN の IP に頼ったりせずに、スマホから Happier へ安定した HTTPS リンクでアクセスするための設定。
- CLI
- 0.2.17
- プレビュー ref
- a2c45c8
セルフホストした Happier スタックに初めてスマホからアクセスすると、わかりにくいブラウザの制約に引っかかることがよくあります。
http://localhost なら問題なく動きます。
ところが、次のようなアドレスに切り替えた途端に:
http://192.168.x.x:PORThttp://100.x.y.z:PORT(Tailscale の IP)
一部のブラウザは、それを セキュアコンテキスト として扱わなくなります。
Happier はセキュアコンテキストが必要なブラウザ機能(WebCrypto)を使っているため、「読み込めるのに何かがおかしい」という失敗が実際に起こります。
安定して動く設定は Tailscale Serve です。tailnet の中からだけアクセスできる HTTPS の *.ts.net URL が手に入ります。
要点
- パソコンとスマホに Tailscale をインストールします。
- Happier スタックで Serve を有効にします(
hstack tailscale enable)。 - 表示された
https://*.ts.netの URL をスマホで開きます。
よくある方法とそのトレードオフ
-
LAN の IP + ポート:手軽ですが HTTPS ではなく、セキュアコンテキストの要件を満たせないことがあります。
-
Tailscale の IP + ポート:デフォルトではやはり HTTPS ではないため、同じ問題にぶつかります。
-
Tailscale Serve:インターネットにポートを開けずに、本当にほしい HTTPS の URL が手に入ります。 トレードオフ:各デバイスに Tailscale をインストールしてサインインしておく必要があります。
Happier を初めて使う場合(概要と入手方法)
Happier は、Claude Code、Codex、OpenCode などの AI コーディングエージェント向けの オープンソースのコンパニオンアプリ(モバイル / Web / デスクトップ)です。
ここでのワークフローは、信頼できるマシンで Happier を動かし、安定した HTTPS リンクでスマホからアクセスするというものです。
セットアップ:
- スマホから Happier を使う方法
- GitHub: https://github.com/happier-dev/happier
- インストール / ダウンロード: https://github.com/happier-dev/happier#how-it-works
- Discord(コミュニティとサポート): https://discord.gg/W6Pb8KuHfg
ここで HTTPS が重要な理由(セキュアコンテキストの制約)
ブラウザは http://localhost を安全なものとして扱いますが、任意の http://<ip>:<port> は同じようには扱いません。
そのため、リモートアクセスには HTTPS が必要です。
Tailscale Serve は、これを手間をかけずに解決します。tailnet の中でだけ使える HTTPS の URL を用意してくれます。
手順:Happier で Tailscale Serve を有効にする
Happier を動かしているマシンで:
- Tailscale をインストールしてサインインします。
- 次を実行します。
hstack tailscale enable
hstack tailscale url- URL をコピーします。
スマホで:
- Tailscale をインストールし、同じ tailnet にサインインします。
- Safari / Chrome で URL を開きます。
ヒント:iOS の Safari では「ホーム画面に追加」を使うと、よりアプリに近い感覚で使えます。
自動化(任意)
Serve がすでに設定されていれば、hstack start は正規リンクや共有リンクに https://*.ts.net の URL を優先して使えます。
セルフホストのサーバーでは、HAPPIER_PUBLIC_SERVER_URL を設定しておくと、ディープリンクや QR コードが HTTPS の URL を指すようになります。
トラブルシューティング
症状:ページは読み込めるが、動作がおかしい(暗号や認証の問題)
考えられる原因:
- HTTPS ではなく、LAN や Tailscale の IP に素の HTTP でアクセスしている
対処:
- Tailscale Serve に切り替え、
https://*.ts.netの URL を使う