
try! Swift TOKYO 2019 私的まとめ #tryswiftconf #tryswifttokyo
毎年参加させて頂いているのですが、社内向けレポートついでに今年からnoteにまとめてみます。(なんだかんだでめっちゃpostが遅くなりましたが…)
#tryswiftconf わいわい pic.twitter.com/KylISf3kJ6
— Sho Aoki (@shoaooki) March 21, 2019
あんまり写真取れなかったので、参加者様のツイートを貼らせていただきますmm
概要
- 2016年から開催されており、今回が4回目
- 国外でもニューヨーク、バンガロール(インド)、サンノゼでも開催されている
- 今年はカンファレンス2日間、ワークショップ1日間
- iOSDCはiOSに関する国内事例が多く、try!SwiftはSwift言語に特化したコアな内容が中心
- 最近はサーバーサイドSwiftや構文解析の話がHotな印象
- といっても、エンジニアとしての心がけの話やデザイナー向けの内容もあり
会場の様子
ブース
皆さまに好評でした!明日もブースに来てくださいね〜
— Rei Tanabe (@nabe_rey) March 21, 2019
gooood Technology Stack board!!:) #tryswiftconf pic.twitter.com/fBffvvAo0X
アプリの技術構成が見れるの、とても面白いです👀
#tryswiftconf 2日目ですね!メインホール前のLINEブースでは昨日と違うデザインのステッカーをお配りしています。HTTPステータスコード入りのLINEキャラステッカーです。200👌 500🙅 数量限定ですのでお早めにどうぞ! pic.twitter.com/eqSDAsSjaq
— LINE Developers (@LINE_DEV) March 22, 2019
サイバーエージェントは、try! Swift TOKYO2019のプラチナスポンサーを務めています。ブースではアンケート実施や、サービスを実際に手に取っていただけるコーナーなどを用意しています。みなさん、遊びにきてください!#tryswiftconf pic.twitter.com/RZ7kab68MI
— CyberAgentDevelopers (@ca_developers) March 21, 2019
クックパッドは、本日より開催される try! Swift Tokyo にゴールドスポンサーとして協賛しています。
— Cookpad Tech Life (@cookpad_tech) March 21, 2019
ブースではランチキャンペーンのご案内とグッズをお渡ししています!
会場には15名ほどクックパッドのメンバーがおりますので、見かけた際にはぜひお声がけください🤝#tryswiftconf pic.twitter.com/xMjs1mEaKI
DeNA ブースでは「Swift デバッグの道具箱 LLDB の使い方」という展示と、@DeNAxTech をフォローいただいた方に「LLDB for Swift cheat sheet」などのノベルティをお配りしてます!ぜひお越しください!!#tryswiftconf pic.twitter.com/NPh8fPv0xq
— DeNA Tech (@DeNAxTech) March 22, 2019
何気にこのチートシートが一番もらって嬉しかったかもしれないw
try! Swift TOKYO、本日もブースにてお待ちしております!
— 株式会社ZOZOテクノロジーズ (@zozotech) March 22, 2019
ファッションチェックアプリにトライして下さった方には、ノベルティーをプレゼントしています!!#tryswiftconf pic.twitter.com/DOer78FGGn
あなたのファッションは176いいねされそうです! https://t.co/FJPMcfwSEn #tryswiftconf #zozotech
— Sho Aoki (@shoaooki) March 21, 2019
🙌
ランチ
Today’s our lunch box! Part 1
— try! Swift Tokyo (@tryswiftconf) March 1, 2018
Chicken&Rice(鶏めし) 🐓Makunouchi(彩り幕の内弁当)🍱, Cooked-rice Makunouchi (炊き込み幕の内), Chirashi-sushi (ちらし寿司) #tryswiftconf pic.twitter.com/L95VbyGRhq
お弁当。美味しゅうございました。
個人的に気になったトーク
native macOS application、またはAppKitの世界
iOSとmacOSのアプリにおけるUI上の違いについてが理解できる内容
WWDCでMarzipan(iOSとmacOSとのUIフレームワークの統合)に関する発表が予告されている今、まさに把握しておきたい内容でした
- iOSはディスプレイに対して1つのアプリケーション
- それに対して、macOSは複数のアプリが表示される
- iOSよりもmacOSは他のアプリとのUIの統一性が求められる
- アプリのエゴを捨て、macOSのUIGを尊重しましょう
たしかにこれiPhoneアプリだと考慮しないわ。
— entaku | CBcloudで物流系アプリサービスなど作る (@entaku19890818) March 21, 2019
iPhone has one window only.
But Mac has many windows.
#tryswiftconf pic.twitter.com/ir3ssSMdH4
また、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も存在するようです(計算式が気になる)
#tryswiftconf
— entaku | CBcloudで物流系アプリサービスなど作る (@entaku19890818) March 21, 2019
今見たらガイドラインにめっちゃ書いてあるやん
Strive for a minimum contrast ratio of 4.5:1, although 7:1 is preferred because it meets more stringent accessibility standards. For additional design guidance, see Color.https://t.co/9CXlnc9xbn
実は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?
「どのぐらい頻繁にテストをしますか?」
⚡️🎤ポートレートモードを自作しよう
#tryswiftconf pic.twitter.com/mgK0XBmSzt
— SatoTakeshi 【4/14技術書典6 け01 Fluid Interface本】 (@hatakenokakashi) March 22, 2019
2次元にも深度を持たせたい!
Deep Learning ... 例えばMask R-CNNを使うのは…うまくいかなかった
→ 物体検出、セグメンテーションをMask R-CNNで理解してみる (初心者) - Qiita
GrabCutを使う
→ OpenCV: Interactive Foreground Extraction using GrabCut Algorithm
色漏れ(ジャギ)を防ぐため、画像修復アルゴリズム Inpainting を使う
→ OpenCV: Image Inpainting
被写界深度を設定させる(ここは手動…?)
まさかの2次元&全自動ってわけではなかったようですが、画像検出・修復技術を知れたのはよかった。
Swiftでソーシャルネットワークをつくろう
次は@dokun24 によるデモ #tryswiftconf pic.twitter.com/PkXv1Z7a49
— Kyoko Nishito (@KyokoNishito) March 22, 2019
サーバーサイドSwiftフレームワークKituraを使ったデモ
とにかくデモがかっこよかった…(Visual Studio Codeのテーマらしい)
OpenAPI使いつつなのが、イケイケですね
Websocketを使ってwebから更新 #tryswiftconf pic.twitter.com/Pe9wskw9P8
— Kyoko Nishito (@KyokoNishito) March 22, 2019
シミュレータをSplit Viewで表示しているのどうやってやるんだ?と思ってたら、以下で有効になるようです。
defaults write com.apple.iphonesimulator AllowFullscreenMode -bool YES
Swift type metadata
metadata ... 型情報を保持している仕組み
これを使って関数ポインタの入れ替えを行うと、method swizzlingできるようになるらしいです。
(正直わからん…😅 高校生の発表とは思えん)
Stub系のSDKの仕組みがなんとなくわかった…気がします
「大いなる力には大いなる責任が伴うということです。」という言葉があった通り、サービス側が気軽に導入すべき内容じゃなさそうだなと思いました。(やるとしてもテストのためだけ)
モバイルのデザインシステムを構築する
"Atomic Design" 小さいパーツからアプリの大枠のDesignを決める
(本も出てますね Webコンポーネント寄りの話ですが)
メリットは「開発の効率化」「サービスのブランドスタイルの向上」
再利用できるView(Cell)を考える → 開発も楽になる
デザインの統一性はブランドの向上にもつながる。AtomicDesignはそこまでの話も含んでたのね。 #tryswiftconf
— Sho Aoki (@shoaooki) March 22, 2019
デザインシステムを途中から導入する際、デザイナーがプロジェクト内の既存のすべてのコンポーネントを全部把握して整理するのは難しいので、「これとこれ似てますけどどう整理しますか」と提案するのはエンジニアの大事な役目だと思ってる#tryswiftconf
— takasek (@takasek) March 22, 2019
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は外せないし、漏れも出そう(実際上だと不十分)ですが、テストコードを書く上での考え方として面白かったです。
懇親会
Day2お疲れ様でした #tryswiftconf
— shima@wwdc (@shima_1212) March 22, 2019
楽しかった pic.twitter.com/hetgafPLB0
パーティー🎉ターイム!
— 図師JJ👩週5でflutter開発 (@MHTcode_Rebecca) March 22, 2019
まもなく開始!#tryswiftconf pic.twitter.com/ikkbpEyiJf
今年もかわいいケーキ🎂あった😀 #tryswiftconf pic.twitter.com/ZWMEFXUUXY
— ものくろ@WWDC19 (@monoqlo) March 22, 2019
飲み物(お酒)とお食事が出ました 🍻
#TomOliverConf after party show! #tryswiftconf pic.twitter.com/PNNWn7QKeM
— Yasuhiro Inami (@inamiy) March 22, 2019
パフォーマンスも😳
感想
毎年コアな内容が多いtry!swiftですが、わりと今年はフリーダムな感じでした!
サーバーサイドSwift、画像処理、やってみた系、UI…それぞれ登壇者の得意分野をお話されてて楽しめました。
海外からの参加者も多く、英語のトークも沢山ありますが、レシーバーで日本語訳を聞けるので安心です。
(毎年思うのですが、通訳さんがすごいです。技術的な内容はもちろん、演出で早口になる部分も訳して貰えたり…)
自分のtry!
- Server Side Swiftやりたい!Swagger使ってイケイケな開発したい!
- マジパン情報収集する!
- Bitriseの人とお話したけど、英語話せない以前に全然使ったことなくて申し訳ない気持ちになったので使ってみる!