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

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のポートフォワード機能について理解できていなかったなと感じたので、調べてみました。 アクセス可否を整理すると下記の図になります。

アクセス元ポート解放の仕方アドレスアクセス可否
WindowsWSLlocalhost
Windowsdockerlocalhost
Android EmulatorWSL10.0.2.2
Android Emulatordocker10.0.2.2

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のポートフォワードを行う方法を紹介しました。

参考リンク

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

https://arubeh.com/archives/1749