Android EmulatorからWSL2のサーバーにアクセスする
2023-02-08
#はじめに
最近は、Windowsで開発することも増えてきました。その理由は、WSL2の存在です。
UbuntuをWindows上で動かすことができるので、WindowsでLinux上と遜色ない開発体験が得られるようになったからです。
とはいえ、たとえば、Xが必要な場合や、Androidの開発においては、HostOSのWindowsで開発しています。
今回は、Android EmulatorからWSL2のサーバーにアクセスする方法を紹介します。
#動機
仕事柄、バックエンドの開発とフロントエンド(WebやAndroid)の開発を同時に行うことが多いので、ローカルで両方動かしてE2Eのテストをしたいです。
Windowsだと、WSL2のUbuntuでGoのサーバーの開発をすることがあります。フロントエンドはAndroidの場合はWindowsのHostOS上で開発しています。これは、WSL2上でAndroid Emulatorを動かすことが一般的でないからです。
E2Eのテストをしようとすると、Android EmulatorからWSL2のサーバーにアクセスする必要があります。
通常、MacやLinuxの場合は、10.0.2.2
でアクセスできますが、Windowsの場合は、10.0.2.2
ではWSL2のサーバーにアクセスできませんでした。
一方、WSL2でdocker-composeでPORTをHostOSにマッピングしている場合は、10.0.2.2
でアクセスできました。
この現象に遭遇して、そもそもWSLのポートフォワード機能について理解できていなかったなと感じたので、調べてみました。
アクセス可否を整理すると下記の図になります。
アクセス元 | ポート解放の仕方 | アドレス | アクセス可否 |
---|---|---|---|
Windows | WSL | localhost | :white_check_mark: |
Windows | docker | localhost | :white_check_mark: |
Android Emulator | WSL | 10.0.2.2 | :x: |
Android Emulator | docker | 10.0.2.2 | :white_check_mark: |
#WSL2のポートフォワード機能
- WSL2のIPアドレスを確認
$ wsl -e hostname -I
172.27.24.129
- 確認したIPアドレスで、Windowsのポートフォワードを行う
$ netsh interface portproxy add v4tov4 listenaddress=* listenport=80 connectaddress=172.27.24.129
これでAndroid EmulatorからWSL2のサーバーにアクセスすることができました。一手間かかりますね。
そもそもdocker-composeだと手間がかからないので、便利ですが、dlvなどを使ってステップ実行などデバッグしたい場合は、WSL2のポートフォワード機能を使いたくなりますね。
#まとめ
今回は、Android EmulatorからWSL2のサーバーにアクセスできるようWindowsのポートフォワードを行う方法を紹介しました。
#参考リンク
下記の記事を参考にさせていただきました。