Edited at

try! Swift Tokyo 2019 参加レポート(初日)

try! Swift Tokyo 2019の初日の参加レポートになります。

参加レポート(二日目)


イベント概要

try! Swift はSwift言語での開発における最新の応用事例について集まる国際コミュニティです(公式サイトより)。

iOSに関するものが多いですが基本的にはSwiftであればサーバーでも、当然macOSも対象になります。

Swiftに関して最も大きいイベントの一つと言ってよいイベントです。

Twitter にて最新情報が発信されています。


リンク

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


レポート(初日)


スケジュール

Start Time
Overview
Speaker

10:00
native macOS application、またはAppKitの世界
1024jp

10:25
⚡️🎤脱Swiftリテラル初心者
Yuki Aki

10:35
アクセシビリティのためのカラーコントラスト
Liz Marley

11:30
Swift Light
Jon-Tait Beason

11:55
⚡️🎤限定的なimportの明示とその効果
Tomoya Hirano

12:05
protocol/extensionにジェネリクスを入れたい
Hikaru Yoshimura

12:30
Keypath入門
Benedikt Terhechte

14:30
テストケースでMemory Leakを発見する
Nobuo Saito

14:55
⚡️🎤PixarのようなグラフィックをSwiftで実現する
Michael Petrie

15:05
ARKitのアプリを作ろう
Namrata Bandekar

15:30
⚡️🎤Introducing to SourceKit-LSP
Ryo Izumi

15:40
Swift Server Update
Tom Doron

16:35
SwiftのアプリでCやC++、Objective-Cのフレームワークを使おう
Cecilia Humlelu

17:00
⚡️🎤MachObfuscator
Kamil Borzym

17:10
Siri ShortcutsとNSUserActivityによるエンゲージメント推進
Nic Laughter

17:35
try Prototype!
Maxim Cramer

※「⚡️🎤」は Lightning Talk です(念のため)


native macOS application、またはAppKitの世界

発表者はCotEditorなどを開発した方で、iOSが登場する前からmacOSアプリを開発してきたそうです。

iOSとmacOSのアプリの違い、ネイティブアプリとはどういうことか、というテーマでCotEditorの開発を実例に紹介してくれました。

ネイティブアプリとは、「特定のシステムに向けて設計・ビルドしていること」で、言語やフレームワークということではなく、OSの特性に合わせて、操作性は標準に準拠して作られているべきとしており、AppleのMazipanプロジェクトも単なるエミュレータと断じています。

最近はWeb系の言語でアプリが作れたり、AndroidとiOSでデザインまで合わせる場合があったりもしますが、あらためてネイティブアプリらしさということを意識し、AppleのHuman Interface Guidelinesもチェックしてよいアプリを作るよう心がけねばと思いました。


アクセシビリティのためのカラーコントラスト

色は強力なコミュニケーションツールで、好きな色を使いつつもコントラスト比率を意識してよいアプリにしましょうという主旨の発表です。

HIGにもコントラスト比率についての言及があるそうです。

Color Contrast Checkerというコントラスト比率を計算するツールも紹介してくれています。

Appleの最近の潮流としてダークモードを挙げていて、iOSにも取り入れられるのではないか、その際にはテキストやテーブルの背景色などのデフォルト定義についても変化があるのではないかとのことでした。


Swift Light

Glowforgeという3Dレーザープリンターの会社の方で、プリントするデザインを編集するiOSアプリにてどのようにSwiftを活用しているかというものでした。

込み入った画像周りの処理なので情報がなくて苦労したようです。


protocol/extensionにジェネリクスを入れたい

Scalaエンジニアで型システムを研究していたとのことで、その辺りがテーマになっています。

リストに任意の型を詰め込みたいが、Anyのリストでできるものの型が失われてしまう。

そこで、異なる型を格納できるリスト(=Heterogeneous List(HList))の実装方法について検討したというもの。

HListは中の値と型を対応付けて覚えておくことができるというもので、プロトコルエクステンションでは型を拡張できるので実現できるようですがSwiftの型推論がまだ途上で込み入った実装になってしまうとか。

高度な内容で中盤からほとんどついていけてなかったです。。

しかしながらこういう言語仕様をハックするような話題はワクワクします。

ちなみに、こちらにScalaでの実装についてもまとめているのを見つけました。


Keypath入門

Swift4で追加されたKeypathの紹介。

例として、アプリの設定用structが2つあり、型もそれぞれ異なるがprotocolで編集処理をまとめたい。これをKeypathを用いて解決することをゴールとして話を進めるという流れ。

前提としてKeypathの仕様についての説明をした上で、上記の課題についてコードで順を追って説明して、最後に関連オープンソースライブラリとしてKueryKeyPathKitを紹介してくれました。

Keypathについては知らなかったのであとから調べて何となくは理解できたものの、今回紹介されていたコードは多少消化不良です。。

機会を見つけて使ってみたいです。


テストケースでMemory Leakを発見する

よくクロージャでselfを使う際にweakをいれてなくて循環参照参照してしまう場合があるが、これを規約やコードチェックで防ぎ切ることは難しい。

これをMirror(リフレクション)とweakを使って検出できるようにしようというものでした。

出来たのがXCTAssertNoLeakで、ユニットテストでリークを検出できるようになります。

Swift4.2については言語側の問題で機能しなかったり、Mirrorを使いこなすための工夫など難しい部分がありますが技術的に学びがありました。

例ではViewContorollerを使用していましたが、これはメルカリのMicroViewContorollerの考え方が前提になるのかなと思いました。

(FatViewControllerではXCTestを書くこと自体が厳しいのでは)


ARKitのアプリを作ろう

ARKitを使ったアプリの紹介です。

平面を検知して門を作って表示してくれる「PORTAL」、道路にお絵かきする「ARSKETCH」。

(ストアにはなさそうなのでサンプルかもしれません)

基本的な機能や実装上の注意点だけでなくパフォーマンスについても言及していました。

興味はあるものの実装したことはなかったので面白かったです。

やはりパフォーマンスが重要で、アンカーの制限、フレームレートを落とすなどチューニングが必要になるようです。


Swift Server Update

Swiftでのサーバーアプリケーション開発の近況について話してくれました。

IBM、Vapor、Amazon、Appleなどで使われていて、KituraVaporなどのライブラリがあります。

データベース周りはまだ混在していて、ロギングの一貫性というところにも課題があるようです。

The Swift Server Work Group(SSWG)がIBM、Apple、Vaporにより発表され、DBやネットワーク処理などのライブラリの開発を進めているとのことです。

Kotlinも同じような動きがあったり、スマホアプリ開発にサーバー系の言語の適用する流れもあったり、技術が広がっていて面白いですね。ライブラリも充実してきているとのことで、ちょっとしたサーバーアプリケーションの開発にSwiftを使ってみるとかはやってみたいです。


SwiftのアプリでCやC++、Objective-Cのフレームワークを使おう

C、C++、Objective-Cで作られたライブラリを用途に応じてうまく使っていこうという話です。Swiftから直接C++は呼べないのでObjective-Cを中継するとか、Cのヘッダーが読めないのでmodulemapを作るなどの実践的なテクニックを紹介しています。

アプリの開発を生花に例えて使用する各種言語やライブラリを枝や花に例えていたのが印象的でした。以前C++のライブラリをさらにObjective-Cでラップして部品としてフレームワークを作っていたことがありますが、いろいろな背景やしがらみがある中でギリギリつながって、それでもちゃんと動いているところはすごいなと思ってました(言語仕様やコンパイラ、互換をとる仕組みなどが)。


Siri ShortcutsとNSUserActivityによるエンゲージメント推進

iOS12から追加された、Siri Shortcutsの導入方法についてのチュートリアルの紹介です。

簡単に導入できるということを伝えつつ、Tipsを示してくれていました。

Siri関連はいままでまったく食指が動かず知識もなかったので改めて調べてみましたが、これはなかなか面白い機能ですね。ただ、導入紹介の記事などをみてもあまり利用者はいないようで、もともとSiriが日本人に合うのかというところが課題になりそうです。


try Prototype!

プロトタイプを開発するデザイナーの方による発表で、いくつかの質問から各々が自身のデベロッパーとしてのマインドセットを再構築しましょうというものでした。


  • あなたはなぜデベロッパーなのか

  • 誰のためにコードを書いていますか

  • テクノロジーが変化したときあなたはどうしますか

  • コードを書くときどれくらいの期間使用されるものと考えますか

  • あなたのコードをリリースする際の阻害要因はなんですか

  • どれくらいの頻度でテストしますか

組織やプロダクト、自身の考え方によっても変わってくると思うのでたまには立ち止まって上記の質問について考えを巡らせることも必要と感じました。

try! Swift Tokyo 2019 参加レポート(二日目) に続きます。