見出し画像

try! Swift TOKYO 2019 私的まとめ #tryswiftconf #tryswifttokyo

毎年参加させて頂いているのですが、社内向けレポートついでに今年からnoteにまとめてみます。(なんだかんだでめっちゃpostが遅くなりましたが…)

あんまり写真取れなかったので、参加者様のツイートを貼らせていただきますmm

概要

- 2016年から開催されており、今回が4回目
- 国外でもニューヨーク、バンガロール(インド)、サンノゼでも開催されている
- 今年はカンファレンス2日間、ワークショップ1日間
- iOSDCはiOSに関する国内事例が多く、try!SwiftはSwift言語に特化したコアな内容が中心
  - 最近はサーバーサイドSwiftや構文解析の話がHotな印象
  - といっても、エンジニアとしての心がけの話やデザイナー向けの内容もあり

会場の様子

ブース

アプリの技術構成が見れるの、とても面白いです👀

何気にこのチートシートが一番もらって嬉しかったかもしれないw

🙌

ランチ

お弁当。美味しゅうございました。

個人的に気になったトーク

native macOS application、またはAppKitの世界

iOSとmacOSのアプリにおけるUI上の違いについてが理解できる内容
WWDCでMarzipan(iOSとmacOSとのUIフレームワークの統合)に関する発表が予告されている今、まさに把握しておきたい内容でした

- iOSはディスプレイに対して1つのアプリケーション
  - それに対して、macOSは複数のアプリが表示される
- iOSよりもmacOSは他のアプリとのUIの統一性が求められる
  - アプリのエゴを捨て、macOSのUIGを尊重しましょう

また、iOSでは考慮してなかった機能を実装する必要があるという話も出ました

- タイトルバーが掴める(ように伝わるUIにする)
- ファインダーのようにファイルのD&Dに対応する

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

「文字が薄くて読みにくい」「背景が濃くて読みにくい」その線引きはどこにあるのかという話。

Web Content Accessibility Guidelines (WCAG) 2.0 にそのことが触れられている

1.4.3 Contrast (Minimum): The visual presentation of text and images of text has a contrast ratio of at least 4.5:1, except for the following: (Level AA)
Large Text: Large-scale text and images of large-scale text have a contrast ratio of at least 4.5:1;

WebAIM: Color Contrast Checker というこのコントラスト比を算出してくれるWebツールやAPIも存在するようです(計算式が気になる)

実はHIGにも同様な記載があるようです。

Keypath入門

keyPathを使って設定画面UIをキレイに構成できる事例の紹介
keypath全然使ったことなかったので、勉強になった。

(個人的には以下の記事の方がkeyPathの便利さを感じられたかなと)
Swift4のKeyPathを学ぶ - Qiita

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

メモリリーク(循環参照)を防ぐ方法
「コードレビューで防ぐ」
「handlerでweakを徹底するコーディングルールにする」
「Lintにdelegateならweakにしてくれ!というチェックを入れる」
「MemoryGraphDebuggerを使う」
などあるが、どれも時間がかかるし漏れもある…

tarunon/XCTAssertNoLeak: Provides assert function that check memory leak in Swift.

Mirror という型の情報を参照・操作できるApple公式のAPIを利用し、循環参照するかどうかをチェックできるライブラリを作ったよ。という話。

でもSwift 4.2だとMirror自体にメモリリークする不具合があるよ!(恐ろしい…)

⚡️🎤Introducing SourceKit-LSP

Official page for Language Server Protocol
Microsoftが提供。クライアントがIDE、サーバーサイドが言語のイメージ。

SourceKit-LSPはAppleが提供している
apple/sourcekit-lsp: Language Server Protocol implementation for Swift and C-based languages

幅広いIDEで言語を理解して使えるようになる
vim-lspでvim上でswift言語の補完、ページジャンプ、エラーの診断ができる

try Prototype!

エンジニアに自問自答させる内容。
(プロトタイプっていうからサービスのPCDA的な話かと思ったら違った。)

Q: Why are you a developer?
「なぜあなたは開発者なのですか?」
Q. Who do you write code for?
「誰のためにコードを書いてますか?」
Q. What do you do when technology changes?
「技術が変わった時、あなたはどうする?」
Q. When writing code, how do you factor in how long it needs to last?
「コードを書く時、その寿命はどのくらいと思っていますか?」
Q. What has held you back from shipping your work?
「リリースに弊害したものは何ですか?」
Q. How often do you test?
「どのぐらい頻繁にテストをしますか?」

⚡️🎤ポートレートモードを自作しよう

2次元にも深度を持たせたい!

Deep Learning ... 例えばMask R-CNNを使うのは…うまくいかなかった
物体検出、セグメンテーションをMask R-CNNで理解してみる (初心者) - Qiita

GrabCutを使う
OpenCV: Interactive Foreground Extraction using GrabCut Algorithm

色漏れ(ジャギ)を防ぐため、画像修復アルゴリズム Inpainting を使う
OpenCV: Image Inpainting

被写界深度を設定させる(ここは手動…?)

まさかの2次元&全自動ってわけではなかったようですが、画像検出・修復技術を知れたのはよかった。

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

サーバーサイドSwiftフレームワークKituraを使ったデモ

とにかくデモがかっこよかった…(Visual Studio Codeのテーマらしい)
OpenAPI使いつつなのが、イケイケですね

シミュレータをSplit Viewで表示しているのどうやってやるんだ?と思ってたら、以下で有効になるようです。

   defaults write com.apple.iphonesimulator AllowFullscreenMode -bool YES

Swift type metadata

metadata ... 型情報を保持している仕組み

これを使って関数ポインタの入れ替えを行うと、method swizzlingできるようになるらしいです。
(正直わからん…😅 高校生の発表とは思えん)

Stub系のSDKの仕組みがなんとなくわかった…気がします

「大いなる力には大いなる責任が伴うということです。」という言葉があった通り、サービス側が気軽に導入すべき内容じゃなさそうだなと思いました。(やるとしてもテストのためだけ)

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

"Atomic Design" 小さいパーツからアプリの大枠のDesignを決める
本も出てますね Webコンポーネント寄りの話ですが)

メリットは「開発の効率化」「サービスのブランドスタイルの向上」
再利用できるView(Cell)を考える → 開発も楽になる

SwiftCheckで始めるProperty-based Testing

Example-based - バグが起きそうなものを入力する。
Property-based - 入力値を決めない。入力がどんなのでも通るはずのこと=性質を考える

SwiftCheck で Property-based Test を行う

例えば配列を反転するメソッドをテストする場合は…

   // Example-based
   let xs = [1,2,3,4,5]
   XCTAssertEqual(xs.reversed(), [5,4,3,2,1])
   
   // Property-based
   property("数が変わらない") <- forAll { (xs:[Int]) in
       return xs.reversed().count == xs.count
   }
   
   property("2回実行で元に戻る") <- forAll { (xs:[Int]) in
       return xs == xs.reversed().reversed()
   }

結局はExample-basedは外せないし、漏れも出そう(実際上だと不十分)ですが、テストコードを書く上での考え方として面白かったです。

懇親会

飲み物(お酒)とお食事が出ました 🍻

パフォーマンスも😳

感想

毎年コアな内容が多いtry!swiftですが、わりと今年はフリーダムな感じでした!
サーバーサイドSwift、画像処理、やってみた系、UI…それぞれ登壇者の得意分野をお話されてて楽しめました。

海外からの参加者も多く、英語のトークも沢山ありますが、レシーバーで日本語訳を聞けるので安心です。
(毎年思うのですが、通訳さんがすごいです。技術的な内容はもちろん、演出で早口になる部分も訳して貰えたり…)

自分のtry!

- Server Side Swiftやりたい!Swagger使ってイケイケな開発したい!
- マジパン情報収集する!
- Bitriseの人とお話したけど、英語話せない以前に全然使ったことなくて申し訳ない気持ちになったので使ってみる!

この記事が気に入ったらサポートをしてみませんか?