Android EmulatorからWSL2のサーバーにアクセスする

2023-02-08

Dominick VietorによるPixabayからの画像

#はじめに

最近は、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のポートフォワード機能

$ wsl -e hostname -I
172.27.24.129
$ netsh interface portproxy add v4tov4 listenaddress=* listenport=80 connectaddress=172.27.24.129

これでAndroid EmulatorからWSL2のサーバーにアクセスすることができました。一手間かかりますね。
そもそもdocker-composeだと手間がかからないので、便利ですが、dlvなどを使ってステップ実行などデバッグしたい場合は、WSL2のポートフォワード機能を使いたくなりますね。

#まとめ

今回は、Android EmulatorからWSL2のサーバーにアクセスできるようWindowsのポートフォワードを行う方法を紹介しました。

#参考リンク

下記の記事を参考にさせていただきました。

https://arubeh.com/archives/1749