2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

swift-java を動かしてみよう

Posted at

Swift と Java を相互運用するための swift-java が発表されたのが2024年10月であれから1年ほど経過しました。

発表の中では、Apple のサービスでサーバサイドリクエストを処理する Java のコードを徐々に Swift に置き換えて、相互運用していく動機について語られていました。この辺りの動機付けに関しては、ゆめみ大技林'25に寄稿しているので参照してもらえたらと思います。

技術書典マーケットとBOOTHどちらからでも無料でダウンロードできます。

今年の iOSDC Japan 2025 のパンフレット記事に入門記事を書きました。執筆時からも少しずつ変わっているため、この記事では改めて現状についてキャッチアップしていきます。

パンフレット記事に収まりきらなかった環境構築の記事も内容の更新が必要です。

swift-java の README には、環境構築について現状に合わせて反映されており、こちらを参照するのが良いです。

筆者の環境は以下の通りです。JDK のインストールに筆者は使い慣れている SDKMAN を選択しました。Swift 6.2 が必要で、macOS 15.6 以上が必要になります。JDK は swift-java で利用する機能によって異なりますが、すべてを確認する場合は 25 が必要になります。他のツールについてはミニマムバージョンについて調べていません。

Name version requirements
macOS 26.1 15.6 or later
Ruby 2.6.10p210 -
Homebrew 4.6.20 -
SDKMAN 5.20.0 -
JDK 25.0.1-amzn 25
Swiftly 1.1.0 -
Swift 6.2.1 6.2
jemalloc 5.3.0 -

この環境で以下の実行を確認できます。

テストを実行する

主にコントリビュートする際に、変更したコードに合わせてテストが用意されています。

Swift の実装をテストする

swfit test

Java の実装をテストする

./gradlew test

古い build キャッシュが残っている場合、テストに失敗することがあります。その場合は、以下のキャッシュを削除して再実行します。

rm -rf .build

筆者の環境では SwiftJavaExtractFFMSampleApp のテストが失敗したので、このキャッシュも削除しました。

rm -rf Samples/SwiftJavaExtractFFMSampleApp/.build

サンプルコードを実行する

サンプルコードを実行して動作を確認できます。

swift-java jextract

swift-java jextract 機能を利用して Swift のコードを Java に統合します。

Swift -> Java

Swift のプロセスとして実行します。

cd Samples/SwiftJavaExtractFFMSampleApp && ./ci-validate.sh

例えば、以下の Swift の実装を変更すると反映されるのが確認できます。

Swift のコード変更の一例です。

- p("\(#function)")
+ p("\(#function) --- Changed!!")

上記コード変更を適用した場合の実行結果の差分です。

-[swift][MySwiftLibrary/MySwiftLibrary.swift:29](helloWorld()) helloWorld()
+[swift][MySwiftLibrary/MySwiftLibrary.swift:29](helloWorld()) helloWorld() --- Changed!!

上記 Swift のコードを Java から呼んでいる箇所は以下になります。

Java -> Swift

Java プロセスとして実行します。コードの実体としては同じなので、変更点は同様に反映されます。

./gradlew Samples:SwiftJavaExtractFFMSampleApp:run

JavaKit

マクロを利用して Java のインターフェースを Swift で実装します。

cd Samples/JavaKitSampleApp && ./ci-validate.sh

例えば、以下の Swift の実装を変更すると反映されるのが確認できます。

Swift のコードから @JavaMethod のマクロを探すと Java のインターフェースを Swift で実装している箇所が見つかります。

ベンチマーク

Swift 実装のベンチマークを実行する

cd Benchmarks && swift package benchmark

jemalloc が必要だったので追加でインストールしました。

brew install jemalloc

Java 実装のベンチマークを実行する

cd Samples/SwiftJavaExtractFFMSampleApp && ./gradlew jmh

参考

swift-java は Swift SDK for Android の基盤にもなっていて Android 向けには六日目の記事が詳しくておすすめです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?