Repository: yumemi-inc/daigirin-2025
Pull request #65: 川島「Swift と Java の相互運用」の記事を追加
Author: login: ykws
Labels: name: 執筆
Created: 2025-05-11T00:46:06Z | Merged: 2025-05-12T09:21:08Z



Diff:
diff --git a/book/manuscripts/images_kawashima/download_toolchain.png b/book/manuscripts/images_kawashima/download_toolchain.png
new file mode 100644
index 0000000..7f873c4
Binary files /dev/null and b/book/manuscripts/images_kawashima/download_toolchain.png differ
diff --git a/book/manuscripts/index.md b/book/manuscripts/index.md
index 574cb1a..bf24b99 100644
--- a/book/manuscripts/index.md
+++ b/book/manuscripts/index.md
@@ -17,6 +17,7 @@ class: exclude-hashira
 1. [大 AI エディター時代にあえて Neovim に移行したお話](kisaki.html)
 1. [知っているとちょっと嬉しいMetalの話](miharun.html)
 1. [Android アプリで RTL 言語対応をする（画像編）](akatsuki174.html)
+1. [Swift と Java の相互運用](kawashima.html)
 <!-- ここまで、記事の目次 -->
 1. [著者紹介](authors.html)
 
diff --git a/book/manuscripts/kawashima.md b/book/manuscripts/kawashima.md
new file mode 100644
index 0000000..401fa04
--- /dev/null
+++ b/book/manuscripts/kawashima.md
@@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> が開催され、Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、Swift と Java の相互運用について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、Swift と Java の相互運用をしたい動機についてです。
+
+Apple には、一日数十億件ものリクエストを処理する Java コードが多数存在します。Java のメモリ使用量に関して過去二十年間でかなり進歩したものの、それでも課題となるケースはあります。Swift に移行することでこれを軽減できることはわかっています。そこで、Java の相互運用性を Swift にもたらす取り組みが開始されました。C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今からおよそ十一年前の2014年9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。Objective-C とシームレスに相互運用できたので、Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します <span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>。もし、Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、SDKMAN では、唯一 Oracle だけが提供しています <span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>。ただし、LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした。
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、README に記載されているコマンドを実行します。実行するディレクトリは、clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`helloWorld()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+MySwiftLibrary.helloWorld();
+```
+
+Swift のコードは `function` を出力するコードが書かれています。
+
+```swift
+public func helloWorld() {
+  p("\(#function)")
+}
+```
+
+<hr class="page-break" />
+
+試しにこの部分を次のように書き換えます。
+
+```swift
+public func helloWorld() {
+  p("Hello, Swift from Java!!")
+}
+```
+
+再度実行すると、出力が書き換わることを確認できました！
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) Hello, Swift from Java!!
+```
+
+### Swift から Java
+
+Samples にある以下を試しました。
+
+- JavaKitSampleApp
+- JavaProbablyPrime
+
+いずれも `swift build` を実行すると、`redefinition of module 'JavaRuntime'` となってしまいビルドできません。
+
+`module JavaRuntime` を以下のコマンドで調べると、確かに二つ見つかるので、`JavaRuntime` と `JavaRuntime-tool` の両方に `JavaRuntime` が二重に定義されている事実は確認できています。
+
+```
+% find .build -name module.modulemap | xargs grep 'module JavaRuntime'
+
+.build/arm64-apple-macosx/debug/JavaRuntime.build/module.modulemap:module JavaRuntime {
+.build/arm64-apple-macosx/debug/JavaRuntime-tool.build/module.modulemap:module JavaRuntime {
+```
+
+Swift Package Manager の方で似たエラーに対してこれを解消する PR<span class="footnote">Fix duplicate modulemap errors with macro and plugin deps https://github.com/swiftlang/swift-package-manager/pull/8472</span> がマージされていました。おそらく 2025年5月7日の Development Release/6.2 には含まれてそうなのですが、確証が持てない状態です。
+
+この件に関しては冒頭で示した Issue を作成したので、出版するまでの間に問題が解決できているかもしれません。
+
+## おわりに
+
+ServerSide-Swift の発表の中で、繰り返し Java の専門家、特にパフォーマンスに詳しい人に OSS への参加を期待していると述べられていました。
+
+Swift というプログラミング言語が誕生しておよそ十年近く経ちましたが、Java にはおよそ三十年の歴史があって、数多くのサービス、プロダクトで今も動いています。一方で、求められるパフォーマンスも上がってきていてメンテナンス、チューニングが困難になったコードに対して Swift と相互運用できる選択肢が増えるのは、それらの寿命を延ばすことにつながります。Java は自分にとって二十年来の友人のような感覚を持っていて、Swift と Java がこのような形で繋がるのは非常に感慨深いです。
+
+今回 swift-java に入門するにあたってその情報源の少なさにとても苦労しました。Swift から Java の呼び出しに関しては解決できませんでした。繰り返しになりますが、**Early Development** なので、サービスやプロダクトに対して適用するのは慎重な判断が必要になります。見方を変えると、早期からライブラリの開発に参加できるチャンスとも言えます。
+
+興味を持たれましたら是非この OSS に参加してみてください！
diff --git a/book/vivliostyle.config.js b/book/vivliostyle.config.js
index ecac2c2..ba34f1d 100644
--- a/book/vivliostyle.config.js
+++ b/book/vivliostyle.config.js
@@ -25,6 +25,7 @@ module.exports = {
     'kisaki.md',
     'miharun.md',
     'akatsuki174.md',
+    'kawashima.md',
     // 会社紹介（必要なら以下をアンコメントして利用、掲載時は頒布イベントの出展要項に注意）
     // 'yumemi.md',
     // 著者紹介


Reviews:
user: login: mitsuharu
state: COMMENTED
author_association: COLLABORATOR
submitted_at: 2025-05-12T01:40:05Z
user: login: molpui0726
body: 重箱の隅をつつく程度しかありませんでした。
ご確認お願いいたします。
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T05:40:22Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:03:32Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:11:01Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:12:06Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:12:29Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:12:50Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:13:13Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:13:34Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:13:52Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:14:47Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:15:18Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:15:38Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:43:35Z
user: login: ykws
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:43:49Z
user: login: molpui0726
body: 僕が再確認した分はよかったです‼️
LGTM 出します、お疲れ様でした🙇
![LGTMoon 69342](https://github.com/user-attachments/assets/503ab744-0607-4d58-b2f9-06d8e78f4a15)

state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T06:48:18Z
user: login: mitsuharu
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-12T06:55:52Z
user: login: yumemi-kmoriya
body: 内容の細かい部分はわかりませんが、一読した感じ、気になるところは特にありませんでした。
ありがとうございます。
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T07:25:21Z

Review comments:
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: PDFを見ると「*2」が禁則処理を守ってないのが気になる。スペースが入っていないので、前後スペースでどうにかならないかな。
```suggestion
2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ <span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span> が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
```
created_at: 2025-05-12T01:28:33Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: 句読点と半角の間にスペースは不要です。
```suggestion
Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。Swift に移行することでこれを軽減できることはわかっています。そこで、Java の相互運用性を Swift にもたらす取り組みが開始されました。C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
```
created_at: 2025-05-12T01:32:58Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: 10年前で相対的ですが、本は来年以降も読めるので、年を付けると親切だと思いました。

```suggestion
今から10年前の2015年9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
```
created_at: 2025-05-12T01:35:12Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: 「*7*8」が何に掛かっているか、分かりづらいです。たとえば、
```suggestion
しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します <span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>。もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
```
created_at: 2025-05-12T01:36:49Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: 同様に「*13」の位置が気になります
created_at: 2025-05-12T01:38:24Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
path: book/manuscripts/kawashima.md
user: login: mitsuharu
body: MySwiftLibrary.helloWorld(); の前のインデントは要らないかも？
created_at: 2025-05-12T01:39:23Z
author_association: COLLABORATOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
# Swift と Java の相互運用
```
大技林ってタイトルをレベル1見出しにしないといけないってありましたっけ？
僕の勘違いかもしれません🙇
created_at: 2025-05-12T05:15:22Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在します。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
```
存在する が状態を表すので、下で使っているように 存在する と現在形で使ってよいと思いました。
created_at: 2025-05-12T05:32:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
`helloWorld()` と出力されていることが確認できます。
```
誤字？　下の表示そのままならこうでしょうか。
created_at: 2025-05-12T05:34:22Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした。
```
句点が抜けています。
created_at: 2025-05-12T05:34:51Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
+
+Swift のコードは `function` を出力するコードが書かれています。
+
+```swift
+public func helloWorld() {
+  p("\(#function)")
+}
+```
+
+<hr class="page-break" />
+
+試しにこの部分を次のように書き換えます。
+
+```swift
+public func helloWorld() {
+  p("Hello, Swift from Java!!")
+}
+```
+
+再度実行すると、出力が書き換わることを確認できました！
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) Hello, Swift from Java!!
+```
+
+### Swift から Java
+
+Samples にある以下を試しました。
+
+- JavaKitSampleApp
+- JavaProbablyPrime
+
+いずれも `swift build` を実行すると、 `redefinition of module 'JavaRuntime'` となってしまいビルドできません。
+
+`module JavaRuntime` を以下のコマンドで調べると、確かに二つ見つかるので、　`JavaRuntime` と `JavaRuntime-tool` の両方に `JavaRuntime` が二重に定義されている事実は確認できています。
+
+```
+% find .build -name module.modulemap | xargs grep 'module JavaRuntime'
+
+.build/arm64-apple-macosx/debug/JavaRuntime.build/module.modulemap:module JavaRuntime {
+.build/arm64-apple-macosx/debug/JavaRuntime-tool.build/module.modulemap:module JavaRuntime {
+```
+
+Swift Package Manager の方で似たエラーに対してこれを解消する PR<span class="footnote">Fix duplicate modulemap errors with macro and plugin deps https://github.com/swiftlang/swift-package-manager/pull/8472</span> がマージされていました。おそらく 2025年5月7日の Development Release/6.2 には含まれてそうなのですが、確証が持てない状態です。
+
+この件に関しては冒頭で示した Issue を作成したので、出版されるまでの間に問題が解決できているかもしれません。
+
+## おわりに
+
+ServerSide-Swift の発表の中で、繰り返し Java の専門家、特にパフォーマンスに詳しい人に OSS への参加を期待していると述べられていました。
+
+Swift というプログラミング言語が誕生しておよそ 10 年近く経ちましたが、 Java にはおよそ 30 年の歴史があって、数多くのサービス、プロダクトで今も動いています。一方で、求められるパフォーマンスも上がって来ていてメンテナンス、チューニングが困難になったコードに対して Swift と相互運用できる選択肢が増えるのは、それらの寿命を延ばすことにつながります。Java は自分にとって 20年来の友人のような感覚を持っていて、 Swift と Java がこのような形で繋がるのは非常に感慨深いです。
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
Swift というプログラミング言語が誕生しておよそ 10 年近く経ちましたが、 Java にはおよそ 30 年の歴史があって、数多くのサービス、プロダクトで今も動いています。一方で、求められるパフォーマンスも上がってきていてメンテナンス、チューニングが困難になったコードに対して Swift と相互運用できる選択肢が増えるのは、それらの寿命を延ばすことにつながります。Java は自分にとって 20年来の友人のような感覚を持っていて、 Swift と Java がこのような形で繋がるのは非常に感慨深いです。
```
してくる などの くる は補助動詞なので、ひらがながよいでしょうか。
created_at: 2025-05-12T05:38:14Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
+
+Swift のコードは `function` を出力するコードが書かれています。
+
+```swift
+public func helloWorld() {
+  p("\(#function)")
+}
+```
+
+<hr class="page-break" />
+
+試しにこの部分を次のように書き換えます。
+
+```swift
+public func helloWorld() {
+  p("Hello, Swift from Java!!")
+}
+```
+
+再度実行すると、出力が書き換わることを確認できました！
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) Hello, Swift from Java!!
+```
+
+### Swift から Java
+
+Samples にある以下を試しました。
+
+- JavaKitSampleApp
+- JavaProbablyPrime
+
+いずれも `swift build` を実行すると、 `redefinition of module 'JavaRuntime'` となってしまいビルドできません。
+
+`module JavaRuntime` を以下のコマンドで調べると、確かに二つ見つかるので、　`JavaRuntime` と `JavaRuntime-tool` の両方に `JavaRuntime` が二重に定義されている事実は確認できています。
+
+```
+% find .build -name module.modulemap | xargs grep 'module JavaRuntime'
+
+.build/arm64-apple-macosx/debug/JavaRuntime.build/module.modulemap:module JavaRuntime {
+.build/arm64-apple-macosx/debug/JavaRuntime-tool.build/module.modulemap:module JavaRuntime {
+```
+
+Swift Package Manager の方で似たエラーに対してこれを解消する PR<span class="footnote">Fix duplicate modulemap errors with macro and plugin deps https://github.com/swiftlang/swift-package-manager/pull/8472</span> がマージされていました。おそらく 2025年5月7日の Development Release/6.2 には含まれてそうなのですが、確証が持てない状態です。
+
+この件に関しては冒頭で示した Issue を作成したので、出版されるまでの間に問題が解決できているかもしれません。
path: book/manuscripts/kawashima.md
user: login: molpui0726
body: ```suggestion
この件に関しては冒頭で示した Issue を作成したので、出版するまでの間に問題が解決できているかもしれません。
```
読者目線だと出版するのは執筆者（ゆめみら）側なので、能動でよいと思います。
created_at: 2025-05-12T05:39:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。表現見直して調整しました cacca95306e0b6c4e720bfe30cd6112da13ed33b
created_at: 2025-05-12T06:03:31Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。手癖ですね。全体見直しました cacca95306e0b6c4e720bfe30cd6112da13ed33b
created_at: 2025-05-12T06:11:01Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。10年が適当だったので、年号明記しました 38cc9b40db51d9ded46f274c154c85010093ee54
created_at: 2025-05-12T06:12:05Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。見直しました 8e92beccc211e8ca8c11d7287e9a6e3df383326b
created_at: 2025-05-12T06:12:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
path: book/manuscripts/kawashima.md
user: login: ykws
body: 同じく見直しました 8e92beccc211e8ca8c11d7287e9a6e3df383326b
created_at: 2025-05-12T06:12:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。なくしました 5b7b71f944912d51f13f19185f6a925df0cf6434
created_at: 2025-05-12T06:13:13Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。表現見直しました 391d164397d227479f9cba0e9a8cba6587ddb9a6
created_at: 2025-05-12T06:13:34Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
path: book/manuscripts/kawashima.md
user: login: ykws
body: typo でした 391d164397d227479f9cba0e9a8cba6587ddb9a6
created_at: 2025-05-12T06:13:52Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
path: book/manuscripts/kawashima.md
user: login: ykws
body: ありがとうございます。修正しました 391d164397d227479f9cba0e9a8cba6587ddb9a6
created_at: 2025-05-12T06:14:47Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
+
+Swift のコードは `function` を出力するコードが書かれています。
+
+```swift
+public func helloWorld() {
+  p("\(#function)")
+}
+```
+
+<hr class="page-break" />
+
+試しにこの部分を次のように書き換えます。
+
+```swift
+public func helloWorld() {
+  p("Hello, Swift from Java!!")
+}
+```
+
+再度実行すると、出力が書き換わることを確認できました！
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) Hello, Swift from Java!!
+```
+
+### Swift から Java
+
+Samples にある以下を試しました。
+
+- JavaKitSampleApp
+- JavaProbablyPrime
+
+いずれも `swift build` を実行すると、 `redefinition of module 'JavaRuntime'` となってしまいビルドできません。
+
+`module JavaRuntime` を以下のコマンドで調べると、確かに二つ見つかるので、　`JavaRuntime` と `JavaRuntime-tool` の両方に `JavaRuntime` が二重に定義されている事実は確認できています。
+
+```
+% find .build -name module.modulemap | xargs grep 'module JavaRuntime'
+
+.build/arm64-apple-macosx/debug/JavaRuntime.build/module.modulemap:module JavaRuntime {
+.build/arm64-apple-macosx/debug/JavaRuntime-tool.build/module.modulemap:module JavaRuntime {
+```
+
+Swift Package Manager の方で似たエラーに対してこれを解消する PR<span class="footnote">Fix duplicate modulemap errors with macro and plugin deps https://github.com/swiftlang/swift-package-manager/pull/8472</span> がマージされていました。おそらく 2025年5月7日の Development Release/6.2 には含まれてそうなのですが、確証が持てない状態です。
+
+この件に関しては冒頭で示した Issue を作成したので、出版されるまでの間に問題が解決できているかもしれません。
+
+## おわりに
+
+ServerSide-Swift の発表の中で、繰り返し Java の専門家、特にパフォーマンスに詳しい人に OSS への参加を期待していると述べられていました。
+
+Swift というプログラミング言語が誕生しておよそ 10 年近く経ちましたが、 Java にはおよそ 30 年の歴史があって、数多くのサービス、プロダクトで今も動いています。一方で、求められるパフォーマンスも上がって来ていてメンテナンス、チューニングが困難になったコードに対して Swift と相互運用できる選択肢が増えるのは、それらの寿命を延ばすことにつながります。Java は自分にとって 20年来の友人のような感覚を持っていて、 Swift と Java がこのような形で繋がるのは非常に感慨深いです。
path: book/manuscripts/kawashima.md
user: login: ykws
body: 良いですね！ 391d164397d227479f9cba0e9a8cba6587ddb9a6
created_at: 2025-05-12T06:15:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
+==
+
+## はじめに
+
+2024年9月 ServerSide-Swift<span class="footnote">Swift & Interoperability - Tony Parker & Ben Cohen https://www.youtube.com/watch?v=wn6C_XEv1Mo</span> にて Apple から Swift と Java を相互運用するためのライブラリ<span class="footnote">Swift Java Interoperability Tools and Libraries https://github.com/swiftlang/swift-java</span>が公開されました。Swift Forum<span class="footnote">Java interoperability effort https://forums.swift.org/t/java-interoperability-effort/74969</span> もオープンになり、広く意見を募っています。また2025年3月 try! Swift Tokyo<span class="footnote">try! Swift Tokyo 2025 - Foreign Function and Memory APIs and Swift/Java interoperability https://www.youtube.com/watch?v=vgtzhTOhEbs</span> では最新情報について発表もありました。この記事では、 Swift と Java の相互運用に関する入門について書きます。
+
+お断りとして、執筆時点では、**Early Development**<span class="footnote">まだ開発初期段階であり、今後変更される可能性がある</span> です。おそらく出版された段階でもまだそうだと予想します。
+
+また Swift から Java の呼び出しは確認できましたが、 Java から Swift の呼び出しは執筆時点で確認できませんでした。この辺り開発段階によるものなのか、自環境によるものなのか切り分けができていないため、記事を読んでのフィードバックを歓迎します。 Issue<span class="footnote">JavaKitSampleApp fails with redefinition of module 'JavaRuntime' https://github.com/swiftlang/swift-java/issues/229</span> を立てているので、こちらに直接コメントをもらえると助かります。
+
+### 動機
+
+まず、 Swift と Java の相互運用をしたい動機についてです。
+
+Apple では、1日数十億件ものリクエストを処理する Java コードが多数存在しています。 Java のメモリ使用量に関して過去20年間でかなり進歩したものの、それでも課題となるケースはあります。 Swift に移行することでこれを軽減できることはわかっています。そこで、 Java の相互運用性を Swift にもたらす取り組みが開始されました。 C/C++ への移行でも軽減できるものの、メモリセーフな Swift を利用したいのが強い動機となっています。
+
+### 相互運用性の重要性
+
+さて、相互運用性はそこまで大事なものでしょうか？
+
+今から10年前の9月 Swift を利用してすぐにアプリをリリースできる状態になっていました。 Objective-C とシームレスに相互運用できたので、 Swift は高い生産性を出すことができたのです。既存のコードベースで新しい言語への移行を成功させる上で相互運用性は不可欠です。
+
+長く保守を続けてメンテナンスやチューニングが難しい状態のコードベースがここにあったとします。そこに新しく参画した人はこう言います。
+
+**「全部書き直した方が速い」**
+
+しかし、実際に全部書き直そうとして失敗したプロジェクトは数多く存在します。<span class="footnote">Netscape, Microsoft Access, Word for Windows のプロジェクトなど、大規模なリライトに失敗した事例としてしばしば言及されます https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/</span><span class="footnote">Windows Vista の開発においても、同様のリライトの試みとその失敗が見られます https://benbob.medium.com/what-really-happened-with-vista-an-insiders-retrospective-f713ee77c239</span>もし、 Swift と Objective-C に相互運用性がなく、当時 Objective-C のコードを全て Swift に書き換えていたらすぐにアプリをリリースすることはできなかったでしょう。もしかしたら、相互運用性があるにも関わらず、全部書き直すと判断をしてしまい、リリースできなかったり、できたとしても想定よりも大きくスケジュールが遅延したのではないでしょうか。
+
+また一気に置き換えると決断した場合、そのプロジェクトの期間は長くなり、古いコードベースと新しいコードベースのチームに分かれることがしばしばです。そこに分断が発生し、ましてや古い方をメンテナンスしたいメンバーの方が稀で偏りが生まれる可能性があります。
+
+一方、段階的であれば、ワンチームで既存のコードと新しいコードの両方を見ていくことになります。さらに問題のない部分はそのままでよく、パフォーマンスに問題のある部分だけを新しいコードに書き直すことができます。
+
+いずれにおいても、**段階的なアプローチ**を取る方が賢明です。
+
+現在およそ一億の Swift アプリがあり、これは Objective-C から Swift への移行が順調に進んでいることを示しています。この成功を踏まえて、 Swift に Java との相互運用性を持たせようという判断がされています。
+
+## 入門
+
+ここから Swift と Java の相互運用を実際に試していきます。
+
+swift-java のリポジトリにサンプルコードが用意されているので clone します。
+
+```
+git clone git@github.com:swiftlang/swift-java.git
+```
+
+### 必要なもの
+
+Swift から Java を呼び出す場合と Java から Swift を呼び出す場合とでは要求されるものが異なります。ここでは、一旦 Java から Swift に必要なものを列挙します。
+
+- Swift 6.x development snapshot
+- JDK 22
+
+<hr class="page-break" />
+
+#### Swift 6.x development snapshot
+
+Development Snapshot<span class="footnote">https://www.swift.org/install/macos/</span> から Toolchain<span class="footnote">Swift プログラムの開発・ビルド・デバッグに必要なツール群をまとめたもの https://www.swift.org/install/macos/package_installer/</span> release/6.2 をダウンロードしてインストールします。
+
+![](images_kawashima/download_toolchain.png)
+
+インストールに成功すると、次のコマンドで `6.2-dev` の Swift version が確認できます。
+
+```
+% xcrun --toolchain swift swift --version
+Apple Swift version 6.2-dev (LLVM 815013bbc318474, Swift 1459ecafa998782)
+Target: arm64-apple-macosx15.0
+Build config: +assertions
+```
+
+#### JDK 22
+
+JDK のバージョン指定があるため、 Java のバージョン管理ツールとして SDKMAN<span class="footnote">SDKMAN https://sdkman.io/</span> の利用をおすすめします。 SDKMAN のインストールや詳しい使い方は公式のドキュメントを参照ください。
+
+Java 22 は LTS<span class="footnote">Oracle Java SE Supportロードマップ LTS は 8, 11, 17, 21, 25 https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html</span> ではないため、 SDKMAN では、唯一 Oracle だけが提供しています。<span class="footnote">非常に紛らわしいですが、一見 Gluon と Liberica NIK も提供しているように見えましたが、それぞれ提供しているバージョン Gluon 22.1.0.1.r17 と Liberica NIK 22.3.5.r17 は、先頭の `22` ではなく、 `r17` の部分が JDK のバージョンなので JDK 22 ではなく JDK 17 です。知らないと罠です。</span>ただし、　LTS ではないため、時期によっては Oracle からも提供を終了している可能性もあるかもしれません。その場合は、 SDKMAN を利用せずに直接アーカイブをダウンロードしてインストールする必要があります。
+
+##### SDKMAN
+
+```
+sdk install java 22.0.2-oracle
+```
+
+なお README には JDK 22+ と書いてありますが、このあと実行する Samples は `JavaLanguageVersion.of(22)` と指定しているので 23 や 24 ではビルドできません。単純に `JavaLanguageVersion` の指定を 23 や 24 に変更しても他の依存関係が解消できずにビルドはできませんでした
+
+`JavaLanguageVersion` は `build.gradle` で次のように指定されています。
+
+```gradle
+java {
+    toolchain {
+        languageVersion.set(JavaLanguageVersion.of(22))
+    }
+}
+```
+
+##### アーカイブ
+
+Oracle のアーカイブページ<span class="footnote">https://www.oracle.com/java/technologies/javase/jdk22-archive-downloads.html</span>からダウンロードします。 SDKMAN と違ってパスの設定など必要になります。
+
+### Java から Swift
+
+環境が用意できたら、 README に記載されているコマンドを実行します。実行するディレクトリは、 clone した `swift-java/` 直下です。
+
+```
+./gradlew Samples:SwiftKitSampleApp:run
+```
+
+`hellowrold()` と出力されていることが確認できます。
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) helloWorld()
+```
+
+Java から Swift のコードを次のように呼び出しています。
+
+```java
+        MySwiftLibrary.helloWorld();
+```
+
+Swift のコードは `function` を出力するコードが書かれています。
+
+```swift
+public func helloWorld() {
+  p("\(#function)")
+}
+```
+
+<hr class="page-break" />
+
+試しにこの部分を次のように書き換えます。
+
+```swift
+public func helloWorld() {
+  p("Hello, Swift from Java!!")
+}
+```
+
+再度実行すると、出力が書き換わることを確認できました！
+
+```
+[swift][MySwiftLibrary/MySwiftLibrary.swift:27](helloWorld()) Hello, Swift from Java!!
+```
+
+### Swift から Java
+
+Samples にある以下を試しました。
+
+- JavaKitSampleApp
+- JavaProbablyPrime
+
+いずれも `swift build` を実行すると、 `redefinition of module 'JavaRuntime'` となってしまいビルドできません。
+
+`module JavaRuntime` を以下のコマンドで調べると、確かに二つ見つかるので、　`JavaRuntime` と `JavaRuntime-tool` の両方に `JavaRuntime` が二重に定義されている事実は確認できています。
+
+```
+% find .build -name module.modulemap | xargs grep 'module JavaRuntime'
+
+.build/arm64-apple-macosx/debug/JavaRuntime.build/module.modulemap:module JavaRuntime {
+.build/arm64-apple-macosx/debug/JavaRuntime-tool.build/module.modulemap:module JavaRuntime {
+```
+
+Swift Package Manager の方で似たエラーに対してこれを解消する PR<span class="footnote">Fix duplicate modulemap errors with macro and plugin deps https://github.com/swiftlang/swift-package-manager/pull/8472</span> がマージされていました。おそらく 2025年5月7日の Development Release/6.2 には含まれてそうなのですが、確証が持てない状態です。
+
+この件に関しては冒頭で示した Issue を作成したので、出版されるまでの間に問題が解決できているかもしれません。
path: book/manuscripts/kawashima.md
user: login: ykws
body: 提案の表現を採用させていただきました 391d164397d227479f9cba0e9a8cba6587ddb9a6
created_at: 2025-05-12T06:15:38Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
path: book/manuscripts/kawashima.md
user: login: ykws
body: はい。レベル1見出しにします。今までのフォーマットが `==` 表記だったのでそれに合わせてました
created_at: 2025-05-12T06:43:35Z
author_association: CONTRIBUTOR
diff_hunk: @@ -0,0 +1,183 @@
+---
+class: content
+---
+
+<div class="doc-header">
+  <h1>Swift と Java の相互運用</h1>
+  <div class="doc-author">川島慶之</div>
+</div>
+
+Swift と Java の相互運用
path: book/manuscripts/kawashima.md
user: login: ykws
body: `#` でもどちらでも良いはずです。
created_at: 2025-05-12T06:43:49Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-11T00:46:59Z
body: :page_facing_up: PDF が作成されました
[ダウンロード](https://github.com/yumemi-inc/daigirin-2025/actions/runs/14950667465/artifacts/3100182858)
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-12T00:36:31Z
body: :page_facing_up: PDF が作成されました
[ダウンロード](https://github.com/yumemi-inc/daigirin-2025/actions/runs/14961306646/artifacts/3102589600)
author_association: CONTRIBUTOR
user: login: ykws
created_at: 2025-05-12T06:16:54Z
body: @mitsuharu @molpui0726 レビューありがとうございます！　指摘事項修正しました！
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-12T06:17:18Z
body: :page_facing_up: PDF が作成されました
[ダウンロード](https://github.com/yumemi-inc/daigirin-2025/actions/runs/14965174170/artifacts/3103618096)
author_association: CONTRIBUTOR
user: login: github-actions[bot]
created_at: 2025-05-12T09:12:22Z
body: :page_facing_up: PDF が作成されました
[ダウンロード](https://github.com/yumemi-inc/daigirin-2025/actions/runs/14968370784/artifacts/3104604505)
author_association: CONTRIBUTOR