[速報レポート] try! Swift TOKYO 2017 2日目 午前Ⅱ #tryswiftconf

はじめに

こんぬづは、あちらこちらの勉強会などで設計の話をしていたからか、try! Swiftでも設計の話にお呼ばれされて混ぜてもらえるのが嬉しくて楽しくて仕方ない田中です!

本日はtry! Swift 2日目です!この記事では午前Ⅱのまとめをお届けします。

↓カンファレンスに参加するたびに増えるドッグタグ的な何か。

IMG_8772

「様々な場面でSwiftを使う」 Yusuke Ito

色々なプラットフォーム、様々な場面でSwiftを使いたいことがあります。しかし、現時点で、Apple以外のプラットフォームでは、ライブラリーが少ないなど、すぐ実用的に実装することが難しいことがあります。CのライブラリーやSwiftのライブラリーを使いながら、様々な場面でSwiftを実用的に使うための試みと、サーバーサイドにおける事例を紹介します。

スライド

[スライドは後ほど掲載します]

説明

  • Appleのプラットフォーム以外でのSwift利用の話
  • Swiftはオープンソースになり、macOS, Linux(Ubuntu)でも動作する
  • Appleプラットフォーム以外のSwift
    • Web API以外にもDaemonやUtilityやToolとしても利用されるSwift
  • なぜSwiftを使うのか
    • サーバーサイドにおいてはNode.jsやRubyなどのScripting言語を使うことが多い
    • Swiftは型を使った堅牢な書き方などができて安全だから良い
  • Swift Based Web Crawler
    • 我々白ヤギコーポレーションではWeb CrawlerをSwiftで書くことを決めた
    • これまではPythonなどを使っていた
    • Swiftの発展を鑑みて、Swiftを利用することを決めた
    • HTMLを取得・パースして、データベースに保存したり
    • APIサーバーもIn-House用に作っていて、これは保存設定を行う
  • Swiftを使ったWeb Crawlerを作るのに必要なもの
    • HTTPクライアント
    • パーサー
    • MySQL Library
    • S3 Client
    • gRPCやProtocol Buffers Library
    • 日本語用エンコード機能
  • SwiftとC言語
    • SwiftはLLVMベース
    • Cライブラリを扱うことができる
    • Swift Package ManagerではCのコンパイルに対応している
  • 再度Swiftを使ったWeb Crawlerを作るのに必要なもの
    • HTTPクライアント、AWS S3 Client
      • libcurl (C based)
    • パーサー
      • libxml2 (C based)
    • MySWL Library
      • C based mysqlconnector
    • 日本語用エンコード機能
    • gRPC
      • grpc/ grpc0swift
  • 最近のステータス
    • テストを含んだコードベース
      • Crauler: 10000行くらい
      • in-house library: 9000行くらい
    • Unit Testも問題なく動いている
  • 次のステップ
    • プロダクション環境への移行

〜話は変わって〜

  • ラズパイなどのミニコンピュータ上での話
    • Swift for ARM and Raspberry Pi(Linux board computer)
    • 多くのデバイスをコントロール
    • Swiftライブラリ連携
    • 全てSwiftで書ける!
  • 気圧をはかるガジェットとサービス
    • Linux board
    • Air Pressure Sensor
    • Post to Slack Server
    • 全てSwiftで書ける
    • 一時間ごとに気圧や温度をSlack上にpost
  • Controlling I2C bus
  • (コード紹介)
  • Porting Library to Swift
    • 欲しいライブラリが無いかもしれない(またはSwift対応されていないかもしれない)
      1. Cライブラリを探す
      • Swiftでラップする
      • 機能拡張したければSwiftで書けばよい
      • e.g.) libcurl, libxml, mysqlconnector
      1. Node.js, Python, Ruby...などから似たライブラリを探す
      • Swiftに移植する
      • さらに拡張したければSwiftで書けばよい
      • e.g.) NKF
  • Swiftのバージョン
    • Snapshotの違いでビルドが安定しなくて大変だった
    • 最近は安定してきてだんだん楽になってきている
  • Tokyo Server-Side Swift Meetup - connpass
  • Swift Package Manager(SPM)について
    • CarthageやCocoapodsのようなもの
    • プロジェクトの作成などもできる
  • まとめ
    • Swiftは素晴らしい
      • 安全
      • オープンソース
      • Cライブラリとの連携がラク
      • 対応するプラットフォームが多い
  • 「小さなプロジェクトからServer Side Swiftを始めてみてはいかがでしょうか!」
  • その他

「VRの革新と新たなユーザー体験」 Artis Birzins

拡張現実(AR)と360度シューティング技術はゲーマーや高価なパイロット訓練室を超越しています。現実のアプリケーションは、顧客と接する新しいチャネルを提供し、新しい体験を提供し、すでに複数の業界で実現されています。では、いくつかのエキサイティングな事例を見ていきましょう。

スライド

[スライドは後ほど掲載します]

説明

  • VRをいかにゲームやエンターテイメント以外に利用できるかを考えています。
  • Moving Beyond Games
    • 360度カメラとビデオ
    • Apple AR?
  • Retail
    • Alibaba VR shopping
    • 家でヘッドセットを使ってニューヨークに旅行に行ける
  • Real Estate(不動産)
    • 下見のコストがかかる
    • すでに導入している不動産が海外にはある
  • Car Dealership
    • Jaguar, Volvo, Audi, Honda, Volkswagen
    • テストドライブをVRで行う
    • Virtual showrooms
    • 自動車ディーラーには様々なメリットがある
      • 店舗の削減
  • News and Media
    • 360度ビデオによるブロードキャスティング
    • The New York Times
  • Sports
    • VR skateboarding by Tokyo Institute of Technology
    • 怪我を避けることができるメリットがある
  • 「VRには様々な可能性がある」
  • www.meetup.com/VRHubTokyo

「iOSにおけるDocument IndexingとApp Search」 Kateryna Gridina

私たちはプログラマとして、自分たちの製品のプロモーションに興味を持ち、ユーザには簡単で楽しい経験をしてほしいと考えています。それでもApp Storeには毎日無数の新しいアプリが登場し、ユーザが私たちのアプリをダウンロードしても、デバイス上の数十ものアプリの中で見失われる可能性があります。しかし当然ながら、ユーザが私たちのプロダクトを忘れずに定期的かつ積極的に使うことを望んでいます。私たちは多くのトリックや技を使えます。そのうちの1つはApp Indexing機能で、Zalandoで積極的に使っています。それは素晴らしい結果を示して見事に機能し、SpotlightやWebでアプリをより使いやすく、認識しやすくしました。この講演では、ZalandoのiOSアプリでApp Search機能をどのように使っているのかを説明し、さまざまなタイプのコンテンツ向けのApp Search機能を紹介し、経験と実例を共有します。私たちのさまざまなアプローチを示すことで、開発者が私たちのミスを防ぎ、成果をもたらしてほしいと考えています。

スライド

[スライドは後ほど掲載します]

説明

  • Core Apotlight APIについて
    • Core Apotlight API
      • 膨大な量のデータをindexingする際に便利!
    • CSSearchableItem Properties
      • 重要な属性を紹介します
      • expirationDate。有効期限を設定するとIndexから自動で破棄される
      • attributeSet
      • uniqueIdentifier
    • Best Practicies
      • 非同期にItemをIndexingする
      • コンテンツは最新バージョンにしてください
    • iOS 10からの機能
      • iOS 10 からはSearch Extensionの中からコンテンツを検索してアクセスすることができる?
    • beginBatch()はbackgroundスレッドで動作する
    • CSSearchableItemIndexDelegateをどうやってテストするか?
    • PhoneCallやNavigationに対応するには
      • attributes.supportsPhoneCall = true
      • attributes.supportsNavigation = true
  • NSUserActivityについて
    • コンテンツをいつみることができるかをindexingする
    • privateとpublicなindexingがある
    • Best Practices
      • support Handoff
    • How to check if NSUserActivity is public?
      • There is no way :)
  • Web Markupについて
    • Web Markup
      • Web related
      • Apple Web Crawler indexing
      • public
    • How to engage?
      • add Universal Links
  • there is no way to redirect content from another website

「スタートアップのSwift」 Mo Kudeki

スタートアップのチームはまだ小さいですが定期的に重要なプロダクトの変更をする必要があります。そのため慌ててコードを書いては書き直してということになる可能性があります。幸いなことにあなたたちにはSwiftがついています。このトークではHey! VINAというアプリをMVP(Minimun Viable Product)から1日に数千ユーザーが使うアプリにするまでのここ1年でSwiftを習得した教訓と、どの言語の特徴が大胆に動きつつも不安定さを避け、安定してアプリを提供するための柔軟さをもたらしたかを紹介します。

スライド

説明

  • Swiftの現場での経験を話します。
  • バックグラウンド
    • スタートアップでSwiftを初学者から始めた話
    • MVP(Most Viable Product)が成長してスタートした
    • 女性の友情を育むEarlyというアプリを作った
    • 当時のコードには問題があった
    • 6ヶ月というスピードとのトレードオフ
  • ビギナーを抱えたチーム
    • Parse + Swift (And lots of Cocoapods)
    • Parseを使うことで時間の節約になった
    • まずはPush Noticationの問題に取り掛かった
    • うまくいかず誰も説明してくれない状況にフラストレーションを抱えた
  • 100K User in 2 Weeks
    • そんな状況は想定していなかった
    • もちろん現状のアプリで対応することはできなかった
    • Requests / Minの戦い
    • Request数に制限を加えて対応した
    • アプリはロサンゼルスなどに限定した
    • アプリの評価は悪くなった
    • しかし受けた取材がうまく広がっていった
    • SlackとTestFlightを使って、アプリのファンを対象にβテストを行った
    • クラッシュを再現するために、実際にテスターと会って直ビルドしてデバッグを行った
    • let userName = user["firstName"] as! Stringによるクラッシュ
    • リクエスト数の上限を超えてしまってfirstNameを取得することができずにクラッシュしていた
    • if letを使ってうまくUnwrap Optionalしてあげることで解決した
    • この問題はSwift開発者であれば当然最初から対応すべきことだったが、ビギナーだったので気づくことができなかった
    • Optionalへの対応を知見として得ることができて、アプリを安定させることができるようになった
  • Scrapping it
    • そしてParseとサヨナラするときがきた...(サービス停止するから)
    • Parseからの移行、マイグレーション
    • Parse移行においてif parse {} else {}みたいにネストが深くなり、リーダブルでなくなっていった
    • 複数バージョンに対応する関数を作る
    • 関数をProtocolに切り出してバージョン対応
    • protocolを設けることでDocumentationが捗った
  • ここまでSwiftの良いところを挙げてきました
  • しかしよくないこともあり、例えばCocoapodsライブラリへの依存などです。
  • 6 Monthという期間を振り返って
    • 素早く学ぶ
    • 素早くバグに気づく
    • 素早く改善する
    • そして何が大切かということにフォーカスする