try! Swift Tokyo 2019 参加レポート（二日目）

[try! Swift Tokyo 2019][tryswift]の二日目の参加レポートになります。

[参加レポート（初日）][day1]

# イベント概要

[try! Swift][tryswift] はSwift言語での開発における最新の応用事例について集まる国際コミュニティです（公式サイトより）。
iOSに関するものが多いですが基本的にはSwiftであればサーバーでも、当然macOSも対象になります。
Swiftに関して最も大きいイベントの一つと言ってよいイベントです。
[Twitter][tryswiftconf] にて最新情報が発信されています。

# リンク

[こちら][document]に発表資料や文字起こしの情報をまとめて頂いているので、資料についてはそちらを参照していただけると幸いです。

# レポート（二日目）

## スケジュール

| Start Time | Overview | Speaker |
|:----------:|:---------|:-------:|
|10:00|[魔法の法則][intro01]|[Dave DeLong][speak01]|
|10:25|[⚡️🎤ポートレートモードを自作しよう][intro02]|[Rina Kotake][speak02]|
|10:35|[Swiftでソーシャルネットワークをつくろう][intro03]|[Ian Partridge][speak03a],[David Okun][speak03b]|
|11:30|[Swift Hardware Hacking][intro04]|[Sally Shepard][speak04]|
|11:55|[⚡️🎤SwiftSyntax で便利を実現する基礎][intro05]|[Yuki Kokubun][speak05]|
|12:05|[Swift type metadata][intro06]|[Yuta Saito][speak06]|
|12:30|[モバイルのデザインシステムを構築する][intro07]|[Kristina Fox][speak07]|
|14:30|[Swiftにおける音の成形][intro08]|[Adam Bell][speak08]|
|14:55|[⚡️🎤iOS端末を利用した心理学研究の背景と展望][intro09]|[Yuto Mizutani][speak09]|
|15:05|[SwiftCheckで始めるProperty-based Testing][intro10]|[Yusuke Hosonuma][speak10]|
|15:30|[⚡️🎤All about linking libraries][intro11]|[Kishikawa Katsumi][speak11]|
|15:40|[賢者のString][intro12]|[Michael Ilseman][speak12]|
|16:35|[アセンブリ、君ならできる！][intro13]|[Andrew Madsen][speak13]|
|17:00|[⚡️🎤Swiftコンパイラにコントリビュートする][intro14]|[Yusuke Kita][speak14]|
|17:10|[Core Dataを守るために][intro15]|[Donny Wals][speak15]|
|17:35|[次へつなごう— Extending a hand to the next generation of Apple developers][intro16]|[Mayuko Inoue][speak16]|
※「⚡️🎤」は Lightning Talk です（念のため）

## 魔法の法則

Brandon Sandersonという作家の提唱する魔法の法則がエンジニアリングにも当てはまる（高度な技術は魔法と同じ）ので紹介するという内容。

- 第一法則：作者が魔法で満足の行くように葛藤を解決する能力は、読者がその魔法をどれだけよく理解しているかに正比例する
- 第二法則：制限は権力よりも重要
- 第三法則：新しいものを追加する前に、すでに持っているものを拡張する

第一法則は利用者が理解できないものは満足に至らないので、わかりやすさ・ガイド・適切なエラーメッセージを意識しましょうということ。
第二法則は制限は創造性を掻き立てるのでパターンに従って制約を入れると良いということ。
第三法則は奥深さや新たな発見の面白さを提供するということのようです。

UI/UXの話を魔法に例えたとも言えますが、自分たちが開発し提供しているサービスがユーザーにとっては「魔法」であり、また「魔法」らしくあるべきと考えることによって、日々の仕事についても少し違った視点で捉えられるのではないかと思いました。

<!-- ## ⚡️🎤ポートレートモードを自作しよう -->

## Swiftでソーシャルネットワークをつくろう

[Kitura][kitura]のエンジニアがKituraを使ってSwiftでソーシャルネットワークのバックエンドを作る紹介でした。
Swiftはその特性からマイクロサービスとも合い、Swift5からはPythonなどの動的言語も呼び出せるようになり、エコシステムも充実してきているとのこと。
Emojijurnalのデモにて実際に開発する様子も示してくれました。

前日もサーバーアプリケーション開発に関する登壇がありましたが、この１，２年でもかなり進化しているようです。いろいろ学びがありそうなので触ってみたいです。

## Swift Hardware Hacking

Raspberry Pi上で動くSwiftアプリを開発して猫の貯金箱（猫ちゃん銀行）を作った紹介です。
プリコンパイルされたSwiftをRaspberry Piにインストールして、GPIOの制御やセンサーの読み取りを行ったり、データシートやサンプルのCのコードを参考にして、、などなど。

こういう趣味でできるDIYでSwiftを学ぶのは楽しそうです。
モノづくりはこうあるべきかなと。

<!-- ## ⚡️🎤SwiftSyntax で便利を実現する基礎 -->

## Swift type metadata

実行時に型情報を保持するためのType metadataという仕組みについて。
普段開発する際に気にすることはないがSwift内部ではmetadataが使われている。
enumのケース数など。理解を深めるためにはSwiftの中身を読むと良い。
動的な情報にアクセスして操作することが出来、[Reflection][reflection]、[Runtime][runtime]、[HandyJSON][handyjson]、[StubKit][stubkit]はmetadataを使ったライブラリとのこと。

一昨日高校を卒業したばかりでメルカリでインターンしててtry!swiftに英語で登壇、ということだけで十分すごいことですが、内容的にもとても濃いものでした。
metadataを使うこと自体がグレーなようで、資料も少なく上記ライブラリを使うのもそれを承知の上である必要がありそうです（すでに導入しているライブラリで使っていたりする可能性はどうなのでしょう）。

## モバイルのデザインシステムを構築する

自社開発で得た知見の共有としてのモバイルデザインシステムの紹介です。
デザインシステムとは、再利用可能な一連のデザイン部品を作ることで大規模なデザインの管理を行えるようにする、ということになります。
[Bradfrost氏のブログ][atomicdesign]が参考になるとのこと。
デザイナーだけでなくエンジニア、ひいてはユーザーにもメリットがあるもの。
ノウハウや考え変え方についても紹介してくれています。

レゴブロックに例えて説明していたのは言い得て妙です。
自社でも同様の取り組みを進めているので意義も内容もすんなり入って来ました。

## Swiftにおける音の成形

iOSで音声を扱う方法についての発表。
Core Audioは強力だが複雑。。
[AudioKit][audiokit]というライブラリは容易に扱えるということで、このライブラリの使い方の紹介をされていました。

全体を通して音によるデモが多く、楽しい内容でした。
この辺りに疎いのでライブラリを活用できる気はしませんでしたが。。

<!-- ## ⚡️🎤iOS端末を利用した心理学研究の背景と展望 -->

## SwiftCheckで始めるProperty-based Testing

Property-based Testingというテスト手法の紹介です。
関数が満たすべき論理的性質を記述し、ランダムな入力値を生成させてテストを行うというもので、HaskellのQuickCheckが大元になっているそうです。
XCTestのテストはExample-based Testingと呼ばれ、入力と期待値を明確にする必要があり、動作を保証するためにどれだけテストを書けばよいのか悩む場面があります。
Property-based Testingに役立つライブラリとして[SwiftCheck][swiftcheck]の使い方を説明してくれました。

最近巷でテスト技術について盛り上がりを見せていますが、Property-based Testingは知りませんでした。
どちらが良いというよりは、特性とテスト対象からExample-based Testingとの使い分けがうまくできるとより効果が見込めそうです。

<!-- ## ⚡️🎤All about linking libraries -->

## 賢者のString

AppleでSwift Standard Libraryを担当している方による、SwiftのString型にまつわるお話です。
Stirng型に求められる性質、各国の言語による違いの対応、Stirng型の進化についてなど。
Swift5で文字列補間がカスタマイズ可能になるという紹介もしてくれました。

String型はもっともよく使われる型の一つですが、まだまだ進化しているというのは驚きました。

## アセンブリ、君ならできる！

Swift開発者でもアセンブリを学ぶことによってデバッグに役立つ、というものです。
基本的な用語説明に始まり、実際に処理が進む様子を丁寧に説明してくれました。
また、実際にクラッシュした際に活用できそうなコマンドも紹介しています。
有料ツールですが、[Hopper Disassembler][hopperapp]というリバースエンジニアリングツールもあるそうです。

いつもアセンブリの画面を見ると何も情報が得られなかったか、、となっていましたが光明がありそうに思えたのは収穫です。機会が来たら試してみます。

<!-- # ⚡️🎤Swiftコンパイラにコントリビュートする -->

## Core Dataを守るために

近年、Realmなどが好まれるようになりCore Dataは嫌厭されがちだが、最近は改良されてきていてそれほど悪いものではない、というのが主旨になります。
１０年前はひどくコードも多かったが最近はコードもほとんど書かなくて良くなっている（自動生成されたり）。
モデルの定義はGUIで設定でき、軽微な変更であればマイグレーションの処理を書かなくても平気だったりするそうです。また、パフォーマンスの計測にはInstrumentsを使うそうです。

自分の場合は、古くはSQLiteをほぼライブラリなしで使うような使い方をしており、そこからCore Dataを経ることなくRealmに移行してきたので悪い面も改良されたということもいまいちピンときていませんが、試しに使ってみるのも良いかもしれません。

## 次へつなごう— Extending a hand to the next generation of Apple developers

Netflixで働いている方で、通訳なしで日英両言語での発表でした。
テック業界の多様性の問題と将来への展望についてというのがテーマです。
人種的な多様性がなく自身もマイノリティーであることに気づき、iOSエンジニアになる敷居の高さや出る杭は打たれる社会に疑問を感じて来たそうです。
そんな状況に対し２つの提言をしています。

- イメージを作る（求める生活は？強みは？楽しめることは？）
- あなたのことを知ってもらう（話してみる）

テック業界は多様性に富んだグローバルな世界に映りがちでありながら実際にはまだまだ多様性に乏しいというのは、日本はまだしもアメリカでもそうだとは思いませんでした。
己を知り、発信していくことで「次へつなぐ」というのは素晴らしいことだと感じました。

[day1]:https://qiita.com/takayuki/items/2e237cdefb768dfca671
[tryswift]:https://www.tryswift.co/events/2019/tokyo/jp/
[tryswiftconf]:https://twitter.com/tryswiftconf
[document]:https://qiita.com/mishimay/items/32e59b589c49e21702b9

[intro01]:https://www.tryswift.co/events/2019/tokyo/jp/#laws-of-magic
[speak01]:https://twitter.com/davedelong
[intro02]:https://www.tryswift.co/events/2019/tokyo/jp/#portrait
[speak02]:https://twitter.com/koooootake
[intro03]:https://www.tryswift.co/events/2019/tokyo/jp/#social-network
[speak03a]:https://twitter.com/alfa
[speak03b]:https://twitter.com/dokun24
[intro04]:https://www.tryswift.co/events/2019/tokyo/jp/#hardware
[speak04]:https://twitter.com/mostgood
[intro05]:https://www.tryswift.co/events/2019/tokyo/jp/#swiftsyntax
[speak05]:https://twitter.com/orga_chem
[intro06]:https://www.tryswift.co/events/2019/tokyo/jp/#metadata
[speak06]:https://twitter.com/kateinoigakukun
[intro07]:https://www.tryswift.co/events/2019/tokyo/jp/#design-system
[speak07]:https://twitter.com/krstnfx
[intro08]:https://www.tryswift.co/events/2019/tokyo/jp/#sounds
[speak08]:https://twitter.com/b3ll
[intro09]:https://www.tryswift.co/events/2019/tokyo/jp/#psychology
[speak09]:https://twitter.com/expensive_man
[intro10]:https://www.tryswift.co/events/2019/tokyo/jp/#property-based
[speak10]:https://twitter.com/tobi462
[intro11]:https://www.tryswift.co/events/2019/tokyo/jp/#library
[speak11]:https://twitter.com/k_katsumi
[intro12]:https://www.tryswift.co/events/2019/tokyo/jp/#string
[speak12]:https://twitter.com/Ilseman
[intro13]:https://www.tryswift.co/events/2019/tokyo/jp/#assembly
[speak13]:https://twitter.com/armadsen
[intro14]:https://www.tryswift.co/events/2019/tokyo/jp/#contribution
[speak14]:https://twitter.com/kitasuke
[intro15]:https://www.tryswift.co/events/2019/tokyo/jp/#coredata
[speak15]:https://twitter.com/DonnyWals
[intro16]:https://www.tryswift.co/events/2019/tokyo/jp/#hand-to-the-next
[speak16]:https://twitter.com/hellomayuko

[kitura]:https://www.kitura.io/index.html
[prometheus]:https://prometheus.io/
[grafana]:https://grafana.com/
[reflection]:https://github.com/Zewo/Reflection
[runtime]:https://github.com/wickwirew/Runtime
[handyjson]:https://github.com/alibaba/HandyJSON
[stubkit]:https://github.com/kateinoigakukun/StubKit
[atomicdesign]:http://bradfrost.com/blog/post/atomic-web-design/
[audiokit]:https://github.com/audiokit/AudioKit
[swiftcheck]:https://github.com/typelift/SwiftCheck
[hopperapp]:https://www.hopperapp.com/