3月2日から3月4日にかけて、try! Swift Tokyo 2017というSwiftの技術カンファレンスが開催されました。
タイミング的な問題で個人でチケットを買ったのですが、会社の業務として参加してきました。
https://www.tryswift.co/tokyo/jp
Swiftも昨年9月13日にバージョン3.0がリリースされどんどん改善が進んでいます。Swift Programming Language Evolution
多くのiOS開発者がSwift 2.3からマイグレーションを行う必要がありましたが、
今までのObjective-CやCocoa系フレームワークのルールをひきづっていた様々な規則などが削除されたり、swift standard libraryのように洗練されたりし、よりモダンになりました。
そんな中、世界中からSwift開発者が会場に集まり、言語仕様やアプリの話だけではなく、
機械学習やServerSide Swift、プロダクト作りにおけるモチベーションの話など多岐に渡る様々なジャンルの話を聞けました。
try! Swift Tokyo 2017
前回のtry! Swift Tokyo 2016の時は渋谷でしたが、今回は新宿(最終日のハッカソンやワークショップは神田)で開催されました。
今回は732人が参加し、去年の536人より多いようです。
去年より参加者が増えました!! #tryswiftconf pic.twitter.com/MuVee3G6rQ
— にわタコ (@niwatako) 2017年3月2日
発表は英語もしくは日本語で行われますが、通訳用のレシーバーを受け取れば、同時通訳で問題なく聞くことができました。(どうやらIT専門の翻訳企業のようです)
また、朝食やコーヒー、昼食の弁当が振舞われました。
Coffee and snacks are placed at the back of the hall. Feel free to have it!#tryswiftconf pic.twitter.com/uNP6ZynX7C
— try! Swift (@tryswiftconf) 2017年3月1日
try! Swiftのキャラクター
これ聞き逃してたのですが、 名前 Riko
に決まったそうです。
try! Swift Bird の名前はどれがよいですか?What should we name the try! Swift bird?
— try! Swift (@tryswiftconf) 2017年3月2日
Meet Riko 👏👏👏 Thank you @yucovin for the design & @zen_prog for the name! #tryswiftconf pic.twitter.com/P7Ukte8rl6
— try! Swift (@tryswiftconf) 2017年3月3日
今年も、 id:niwatako によるまとめがあります。ありがたいです。
tl;dr
- スライドへのリンクは、公開されているもののみ挙げてます。try! SwiftのSlack等参加者にのみ公開されているものは除いてます。
- Android/Linux/Raspberry Piなど様々なプラットフォームで動作する事例が紹介されていた
- クライアントサイドだけでなく、機械学習、コマンドラインツール、サーバサイドなどの事例も増えてきた
- Swiftは型システムが強力で安全性に寄与し、表現力豊かに実装できる
- 色覚異常のカラーフィルターは、iOS 10の設定で実は用意されている!
- ドキュメントに書かれていることを鵜呑みにせず試してみるのは大切(マイナーバージョンの違いでも)
- レイヤードアーキテクチャや実装などの発表で、反論があることを織り込み済みで説明してるのはすごい
- C言語の資産をSwiftから扱える。必要であれば移植することも考えられる。
- コマンドラインツールとして作成する場合、コンパイルして実行することの他に、スクリプト言語のように実行することも可能
- 技術以外に、チームの生産性の話やプロダクトづくりのプロセス、体験談なども聞けた
- 関数などの動作確認で、依存対象をグローバルな
strut Environments
で定義してまとめるのは副作用やco-effectも減らせるし、差し替えられるし良い - Swift Enumの様々な活用事例が多くのセッションで挙げられていた
- 値も格納できる(Associated Values)
- indirectで再帰的にenumを格納できる(LinkedListの事例)
- 処理の状態管理(ViewやAPIのリクエストなど)
- まとまりのないフラグ管理を減らせる
- Result型の成功ORエラーの表現(APIレスポンスなど)
- 返り値をわかりやすく(Emailのドメイン部分の分割結果の返り値の事例)
ネームプレート
カンファレンスバッグ
1日目
8時30受付開始で、会場に入りネームプレートや翻訳用レシーバーを受け取りました。
9時45から開会しました。
ちなみに会場の前の方の席は机がありましたが、後ろの方の席は椅子のみしか用意されてませんでした。
Swift開発者が知りたかったけど聞きにくい機械学習のすべて
最初のセッションとしてスタートしました。
機械学習はUI Designと似ていると話していたのが印象に残っています。
- 何がワークするか証明できない
- 直感で始まる
- Refined through experiment(経験を通じて洗練される)
- 98%正しければ成功
SwiftのPointy Bits
Swiftの安全性とは、クラッシュからの安全性とかではなく予期せぬ挙動を防ぐためのものと説明されてました。
言語の安全性サポートの恩恵を受けずに自分でコントロールするには、UnsafeAPIで直接メモリアドレスを扱うようにもできます。
直接アドレスを扱うケースとして2通り挙げられます。
- C言語のライブラリを扱う
- パフォーマンスの向上
アプリを新次元に導く3D Touch
機能対応するとAppStoreのフィーチャーに乗る可能性があると言っていました。(3D Touch 対応 App)
簡単に実装できるので、よく使われる機能のショートカットとして最適で、アイデア次第では有効に活用されると思われます。
- Home Screen Quick Actions
- Widget(Today Extensions)
- Peek & Pop
- Custom UIPreviewInteractions
- Notification Content Extensions
SwiftのWeb APIとアプリをともに構築する
ネイティブアプリを運用する上でのWeb API設計の話をされてました。
- APIバージョニング
- 呼び出すべきアクションをAPI側でコントロールする RFC 5988 - Web Linking
- APIの仕様書
Realmを使ってコラボレーションアプリを作る
ユースケースを介してRealm Mobile Platformsの紹介がありました。
話の内容も有意義だったのですが、スライド表紙の英語日本語両対応のレイアウトが素晴らしかったです。
独自のツールを構築する
ReactNativeを導入した背景やどのような場合にReactNaviveを使うのが良いか説明されてました。
- Web開発者とエッセンスを共有できる
- 凝ったアニメーションなどないアプリで、APIから取得したデータを表示するアプリに導入するのが良い
2日目
9時受付で、机のある席を確保したかったので早めに会場入りしました。
テスト可能なコードを書くということの2つの側面
興味深い発表の一つでした。
出力のテストは、実行した後の状態を確認する必要あり、
実行した時の副作用よって状態を確認するのが難しくなります。戻り値を返すなど副作用をコードの境界付近に移動することが必要となります。
入力において、実行するために特定の状態を必要とするのを、co-effectと呼ぶのだが(≒DI)、これを扱う良い方法に、それらをstructにまとめてしてしまうという方法を紹介していました。
これによって一箇所にまとめられ動作確認しやすくなります。
struct Environment {
let apiService: ServiceProtocol
let cookieStorage: HTTPCookieStorageProtocol
let currentUser: User?
let dataType: DateProtocol.Type
...
let mainBundle: BundleProtocol
let scheduler: SchedulerProtocol // Reactive.Scheduler
let reachability: ReachabilityProtocol // 通信状態のシグナルはグローバル
let userDefaults: UserDefaultsProtocol
}
iOSにおけるDocument IndexingとApp Search
アプリ内部への誘導、CorespotlightやUniversal LinksのAssociation、Mobile Safari検索の有用な知見を聞くことができました。
スタートアップのSwift
メディアに掲載されて多くのユーザに使われるようになった時の大きな変化を、どのように対応していったかの知見を聞くことができました。Parse.comからの移行をどのようにしたかコードベースで説明されていました。
下記のエピソードはプロダクトを作る時にとてもためになる話でした。
- ユーザーの声を聞くためにSlackを使ったり、TestFlightでベータテスト
- ユーザーに会って実機デバックしてエラーを直す
- さっさと作って、Swiftの機能によってどんどん改善していく(guardキーワードの利用やProtocolの利用など)
きちんと型付けされたメッセージ
コードの可読性についての話で、可読性についてのベストプラクティスというのではなく、色々な視点ややり方があるというのを示してとても考えさせられる話でした。
チームの生産性を改善するために決断疲れを最小化する
チームの生産性を改善する方法を、Pivotal Labsでの日常の働き方を通じての話で説明されてました。
ペアプロやランチ時のテックトークなどを行なっているなど試みなどの話から、ファイルをどこに置くべきかやコードの分割方法などの細かい方法の話まであり、
個人的には仕事のやり方などにすぐに取り入れられるものが多いなという点で学びが多い発表でした。
Client-Side Deep Learning
このセッションでは、取得済みの学習データ(Trainingは基本的にCloud側)を元に、ユーザの手元で高速に、オフラインでも動作するというデモを見せていただきました。
昨年の木製のネームプレートをかざすとSwiftと認識されてました。
try! Swift iOS アプリ
今回も 公式アプリ が配信されていました。
Apple WatchやWidget、3D Touchなどの機能も使われています。
ソースコードはgithubにあります。
画像や講演・セッション、タイムテーブル情報などのリソースデータをアプリとは別々に管理していて、
コードから扱いやすくするエクステンションともに、CocoaPodsでアプリから利用できるようにしているのはアイデアとして良いなと思いました。
感想
- 可読性のあるコードを書いたりテストしやすいコードを書くための考え方などのポイントを聞けたのはよかった
- 人によって流儀・主義主張が違うものだなと思った
- UIはコードで書くかとかStoryboardでとか(チーム作業でコンフリクト辛いとかコード読み解くのが辛いとか)
- View側ではモデルレイヤーの詳細を漏れなくする(DTO, POSOs)
- 責務を分ける・レイヤが増える
- 定期的にカンファレンスに参加すると自分の考えが更新・洗練されるので参加してよかったなと思いました
- 同時翻訳すごい(IT専門の翻訳業者らしい)
- After partyの会場が、貴族の仮面舞踏会のような感じの会場でした。
Slides
- 20170302 tryswift tasting_tests
- Building a Swift Web API and Application Together // Speaker Deck
- Craft Collaborative Apps with Realm (JP 🇯🇵 + EN 🇺🇸) // Speaker Deck
- Providing Better Feedback in Real-time Object Detection Apps // Speaker Deck
- UXエンジニアとしての働き方 // Speaker Deck
- Swift Outside the Box // Speaker Deck
- Startup Swift // Speaker Deck
- A Neatly Typed Message // Speaker Deck
- 忙しい人のためのApp Transport Security | try! Swift Tokyo 2017 #tryswiftconf Day2-8 - niwatakoのはてなブログ
- Color Me Surprised! Architecting a Robust Color System in Swift // Speaker Deck
- Server-Side Swift as a Live Example // Speaker Deck
- SwiftMocks.pdf
- Minimizing Decision Fatigue to Improve Team Productivity
- Client-Side Deep Learning
- Scaling Open Source Communities trySwift Tokyo // Speaker Deck
- Lessons In Swift Error Handling And Resilience // Speaker Deck
- 👾&⌚️ // Speaker Deck
参考・言及されていたリンク等
Swift開発者が知りたかったけど聞きにくい機械学習のすべて
Swift on Android
アプリを新次元に導く3D Touch
Pixcels、プロセスと情熱
Unsafe Swiftの安全性
クックパッドアプリのテストを味わう
データレイヤを分離する
UIをSwiftyに書く
SwiftのWeb APIとアプリをともに構築する
- RFC 5988 - Web Linking
- https://github.com/kevinswiber/siren
- GitHub - kylef/WebLinking.swift: Swift implementation of web linking (RFC5988)
- GitHub - kylef/Frank: Frank is a DSL for quickly writing web applications in Swift
- GitHub - kylef/heroku-buildpack-swift: Heroku build pack for Swift
- Kyle Fuller
楽しく便利なSwiftチャットボット
独自のツールを構築する
テスト可能なコードを書くということの2つの側面
誰もが知りたいSequenceとCollectionのすべて
Swiftで堅牢なカラーシステムを構築する
- XCode Tip: Color Palette
- iPhone、iPad、iPod touch で「ディスプレイ調整」を使う - Apple サポート
- GitHub - lauraragone/Stranger-Themes: A try! Swift Tokyo 2017 sample project illustrating how to update an app's theme
サーバサイドSwiftの実例
モックオブジェクトをより便利にする
チームの生産性を改善するために決断疲れを最小化する
Client-Side Deep Learning
- GitHub - shu223/iOS-10-Sampler: Code examples for new APIs of iOS 10.
- MetalPerformanceShaders | Apple Developer Documentation
オープンソースコミュニティをスケールさせる
- Danger - Stop Saying "You Forgot To…" in Code Review
- https://github.com/fastlane/fastlane/issues
- GitHub - fastlane/issue-bot: This bot is responsible for commenting on GitHub issues that haven't had any activity