はじめに
KINTOテクノロジーズでは開発端末としてWindows、Macを選択することができ
Macに関してはIntelチップ搭載のMacBook Proが貸与されます。
2021年はApple M1 Pro、Maxチップ搭載のMacBook Proが発売されたこともあり
開発端末にApple Silicon M1が増えることに開発者一同熱い眼差しを向けています。
今回は開発端末の選択肢に増えるであろうApple Silicon M1の技術検証時に発生したエラーのお話です。
事象
KINTOテクノロジーズのいくつかのシステムではSpring Boot 2.5.0が利用されています。
今回技術検証をしたシステムは、テストコード内で外部サービスのAPIを利用する部分でテスト効率化のために
Spring WebFluxを利用していました。
Spring WebFluxではデフォルトでNettyが利用されますが、Spring Boot 2.5.0ではバージョンを指定しない場合、
io.netty:netty-resolver-dns-native-macos:4.1.63.Final
が依存関係として利用されます。
このバージョンがApple Silicon M1に対応していなかったため
io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProviderがロードできないエラーが発生しました。
ERROR io.netty.resolver.dns.DnsServerAddressStreamProviders - Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS.
対応
1.Spring Bootを最新バージョンに上げましょう。
2021/11/19にSpring Boot 2.6がリリースされましたが、依存バージョンを確認すると netty-resolver-dns-native-macos は 4.1.70.Finalとなっており、Apple Silicon M1に対応したものがデフォルトで利用されます。
2. 依存バージョンを指定しましょう。
プロダクション環境で運用されているシステムの場合、バージョンアップは計画的に実施されるケースが多いため
すぐにSpring Bootの最新バージョンに上げるのは難しいと思います。
その場合はnetty-resolver-dns-native-macosの依存バージョンを指定しましょう。
dependencies {
testImplementation 'io.netty:netty-resolver-dns-native-macos:4.1.70.Final:osx-aarch_64'
}
最後に
ミドルウェアのバージョンアップは計画的に。
参考