Posted at

try! Swift Tokyo 2017 に参加した&リンク集

More than 1 year has passed since last update.

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人より多いようです。

発表は英語もしくは日本語で行われますが、通訳用のレシーバーを受け取れば、同時通訳で問題なく聞くことができました。(どうやらIT専門の翻訳企業のようです)

また、朝食やコーヒー、昼食の弁当が振舞われました。


try! Swiftのキャラクター

これ聞き逃してたのですが、 名前 Riko に決まったそうです。

今年も、 id:niwatako によるまとめがあります。ありがたいです。

http://niwatako.hatenablog.jp/search?q=tryswift


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のドメイン部分の分割結果の返り値の事例)



ネームプレート

IMG_0017.jpg

カンファレンスバッグ

IMG_0018.jpg


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の紹介がありました。

話の内容も有意義だったのですが、スライド表紙の英語日本語両対応のレイアウトが素晴らしかったです。

image


独自のツールを構築する

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


参考・言及されていたリンク等


Swift開発者が知りたかったけど聞きにくい機械学習のすべて


Swift on Android


アプリを新次元に導く3D Touch


Pixcels、プロセスと情熱


Unsafe Swiftの安全性


クックパッドアプリのテストを味わう


データレイヤを分離する


UIをSwiftyに書く


SwiftのWeb APIとアプリをともに構築する


楽しく便利なSwiftチャットボット


独自のツールを構築する


テスト可能なコードを書くということの2つの側面


誰もが知りたいSequenceとCollectionのすべて


Swiftで堅牢なカラーシステムを構築する


サーバサイドSwiftの実例


モックオブジェクトをより便利にする


チームの生産性を改善するために決断疲れを最小化する


Client-Side Deep Learning


オープンソースコミュニティをスケールさせる


👾 & ⌚️