try! Swift Tokyo 2024に行ってきました！

## はじめに
本田技研工業でiOSアプリ開発を担当している薄田です。
先月、[try! Swift Tokyo 2024](https://tryswift.jp/)が5年ぶりに開催されました。
自分は今回初めて参加させていただきました。参加から少し時間が空いてしまいましたが、イベントの内容や印象に残った点などを記載していこうと思います！

## イベントの概要
try! Swiftは
- カンファレンス: 1~2日目 
- ワークショップ: 3日目

という構成で3日間開催されます。
カンファレンスのスピーカーは海外から来られる方もとても多く、Hacking with Swiftの著者のPaul Hudsonさんや、The Composable Architectureの作成者であるBrandon Williamsさん、Stephen Celisさんも来日されていました。
その影響もあってか、参加者も海外の方々が多くみられました。
そして驚いたのが、英語での発表時には日本語にリアルタイムで通訳してくれるという点です。しかもありがたいのが、技術的な単語は無理に訳さずそのまま読み上げてくれるんですよね。(例えばObservableObjectっていう単語を"観察可能なオブジェクト"と訳さないとか)
このリアルタイム通訳のおかげでカンファレンス全体を楽しめました。

## 印象に残ったセッション
### Swiftで次世代のウェブサイトを構築しよう
スピーカーはHacking with Swiftの著者のHaPaul Hudsonさんです。
タイトルの通りですが、Swiftを使用してWebサイトを構築する手法を発表されていました。
最初はResult Builderを使用して
```swift
html {
    head {
        title("hoge")
    }
    body {
        ...
    }
}
```
といった感じで記述していき、HTMLを作成する方法を紹介していました。
しかし終盤に"これだとHTMLとSwiftをどちらも知っていないとWebを構築することができない"と問題提起。
SwiftUIを記述するような形でWebを構築できるジェネレータを作成しましたと発表がありました。
発表までの流れが綺麗だったためとても印象に残っています笑
リポジトリの中身を見ていくと以下のような記述でWeb画面を構築できるみたいです。これはもうSwiftUIですね...!! (SwiftUIはimportされていません)
```swift
Text("Working with content")
    .font(.title1)

Text("Ignite parses Markdown files in in your Content folder, automatically converting them to pages.")
    .font(.lead)

Text("""
You should create subfolders inside Content to represent different types of content. \
This might be by date, e.g. Content/2023, Content/2024, etc, by type, e.g. Content/articles, Content/tutorials, or whatever other approach you want.
""")

Text("When it come to rendering your articles, you have two options:")

List {
    "You can use YAML front matter to specify the layout to use for your content."
    "You can provide only one layout in your site, and it will be used if nothing else is specified."
}
.listStyle(.ordered(.default))
```
個人的にSwiftは大好きな言語なので、使用できる範囲が広がっていくことはとても嬉しいですね！
後ほど実際に使ってみようかなと思っています。
以下がジェネレータのリポジトリになります。

https://github.com/twostraws/Ignite

### アプリローカライゼーションの自動化
Nihongo, Nihongo Lessonsという日本語学習アプリの開発者であるChris Vasselliさんの発表になります。
Nihongoをローカライズしたことで収益がかなり伸びたことをきっかけに、積極的にローカライズに取り組んでいるとのことで、
- crowdinというサービスを使用したstringsファイルの自動翻訳
- AppDescriptionの翻訳
- XCUITestを使用したローカライズされた場合のUI表示確認

などの多くのTipsを紹介されていました。
弊社もさまざまな国へアプリを配信しているので、これらの知見にはとても興味がありました。
以下はプレゼンテーション資料へのリンクとなります。

https://speakerdeck.com/chrisvasselli/automation-for-localization-try-swift-2024

### 小さなアプリバイナリを構築する
kateinoigakukunことYuta Saitoさんの発表になります。
AppClipは15MBまでという制限があったり、AppStoreのネットワークでのダウンロードは200MBに制限されていたりすることから、アプリサイズを小さくするということは重要です。
Swiftのコンパイラがサイズを最適化するためにどのように動いているのか、メモリサイズ減らすためにどういったことを行うべきなのかを紹介されていました。

- Peripheryというライブラリなどを使用し、未使用コードを見つけ、削除する
- 依存するライブラリの数を減らす
- Public protocolを使用する場合は、PublicにするものとInternalにするもので2つのprotocolを分けて定義する

https://speakerdeck.com/kateinoigakukun/building-a-smaller-app-binary

## ワークショップ
### The Composable Architecture
The Composable Architecture(以下TCA)のメンテナーであるBrandon Williamsさん、Stephen Celisさんによるワークショップになります。
私がTCAを使い慣れていないこともあり、この機会に基礎から学びたく、こちらのワークショップへ参加させていただきました。
以下のリポジトリのstarting-pointディレクトリを編集していき、段階を踏んでcomplete-projectディレクトリの内容へ近づけていくような形でTCAの基礎を学んでいくようなやり方になっていました。
トピックごとにin-progressディレクトリへ作業状態をpushしてくれるので、つまづいてしまった場合でもすぐに追いつくことができました。

https://github.com/pointfreeco/TrySyncUps

また、try! SwiftのDiscordがあるのですが、そちらで質問を投稿するとリアルタイムでStephenさんや運営の方々が回答してくれていたので、作業中の疑問もすぐに解決できる状態でした。
TCAをしっかり基礎から学ぶことができて非常に満足でした...!!

## 終わりに
いくつかピックアップして紹介させていただきましたが、どの発表も非常に興味深く、多くの刺激を受けることのできるカンファレンスだと感じました。
来年もぜひ参加したいと思います！

## おまけ
### ノベルティ
try! Swiftでもらったノベルティを4つほど紹介します。
#### ロングTシャツ
try! SwiftのロゴとマスコットキャラクターのRikoちゃんがプリントされたロンTになります。可愛い。
部屋で過ごす時にスウェットだと暑いし、Tシャツはさすがに寒いし...っていう時期なので長袖っていうのが個人的にすごくありがたかったですね。部屋着として愛用しています。
![IMG_1382.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981389/593e534c-799d-87bc-4fc2-e172e89eec55.jpeg)

#### 参加者カード
デザインめっちゃ可愛くないですか...??ついついコレクションしたくなりますね！
![IMG_1385.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981389/622501e2-2ca9-2e8c-f564-c4e99b461fea.jpeg)

#### あずま袋
江戸由来のエコバッグことあずま袋。
デザインも可愛いですし、日本ならではのノベルティなので、海外の方からするといい記念品ですよね！
自分は近場への買い物の時に使用させてもらってます。
![IMG_1383.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981389/75bf2d53-c767-a1e3-3303-0cb8978733e7.jpeg)

#### お守り
型安全を祈願したお守りです。
Rikoちゃんが描かれており、可愛いですね。
これも海外の方の良い記念品になりそうです。
![IMG_1389.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981389/65f0dbea-3d21-1c14-4212-5fe697091c2c.jpeg)

![IMG_1388.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981389/9f458f37-dabe-fdc3-53e0-243bff43fee2.jpeg)