「iOS 8/Swift エンジニア勉強会@ヤフー」で発表してきました

10/18(土)にヤフー本社で開催された「iOS 8/Swift エンジニア勉強会@ヤフー」で発表してきました。

ヤフーの皆さんによるiOS8 / Swiftセッションあり、一般参加枠のLTありと大変充実したイベントでした。

以下に長谷川が気になった、刺さったポイントを資料に書かれていない内容をメインにまとめておこうと思います。

聞き違い、意図違いなどあれば長谷川までご連絡ください。

Twitter: @tomzoh
Facebook: hasegawa.tomoki

関連URL

iOS 8 / Swift 概要

  • 新卒3年目、iOSアプリ開発2年目の平松さんによる発表
  • WWDC2014はヤフーからは4名現地参加していたが平松さんは居残り組だった。
  • 日本でライブ動画を見ていてSwiftの発表でテンションアップ↑してた。
  • iOS8 / Swift発表からヤフーでは社内で積極的に情報交換していた。(当日版の資料には結構な数の参加者がいる勉強会の写真が付いていた)
  • Interactive Notificationはプッシュ通知の表示から直接アクションできる機能。メール返信など。後のヤフオクアプリでもInteractive Notificationで入札させる例が紹介されていた。
Swiftのテンション↑は長谷川もでした。↑↑ぐらい。
同名の別言語があって、翌日には「[swift間違い]swift ソースからインストール – Qiita」という悲劇もありましたね。(当該記事がなくなっちゃっているのではてブのリンクです。)

ActionExtensionは人のUIViewControllerが自分のアプリに表示されるということでレイアウト崩れとかが気になりそうですね。横画面を想定していないアプリのViewControllerが横画面のアプリに出てきちゃうとか。

Xcode6の新機能

  • iOSアプリ開発歴4年半の佐藤さんによる発表
  • Viewの階層構造の3D表示。シミュレータ起動してDebug View Hierarchyボタンクリック!
  • ライブレンダリング。自作クラスの見た目がInterface Builder上で反映される & 自作クラスのプロパティをInterface Builder上で設定できる。AppleのドキュメントによるとFramework化が必要だけどFramework化しなくても使える。
Viewの階層構造3D表示、素晴らしい。開発していると実行時にあるはずのViewが無くてどこいった?ということがあるけどこれなら一目瞭然。もうViewに紫色とかの背景色つけて探さなくて済むね!

ライブレンダリング、すごく魅力的だったけどFramework化必須ということで後回しにしてた。Framework化しなくていいなら今日から使うよ!と思いました。

既存アプリのiOS8対応

  • ヤフオクアプリ プロジェクトマネジャの西さんによる発表
  • ヤフオクアプリはiPhone, iPadで別アプリ。ユニバーサルではない。
  • iOS8対応を「問題箇所の修正」「新機能への対応」「画面サイズ対応」に切り分け前者2つを対応済。
  • iOS8対応で問題になった箇所の共有。
  • 回転時にレイアウトがくずれる。iOS7までは画面を回転してもwidthは短辺、heightは長辺の長さが帰ってきていた。iOS8ではwidthはその向きでの幅、heightはその向きでの高さが返される様になった。Delegateも「回転検知」ではなく「サイズ変更」になっている。
  • UITableViewの区切り線、iOS7からついた左マージンを0にする方法が変った。UITableViewのlayoutMarginsを0にする。
  • PUSH通知用デバイストークのの取り方が変った。iOS7以前向けとiOS8以降向けで分岐が必要。
  • iPadでUIImagePickerControllerやUIImagePickerControllerを使うとクラッシュする。dispatch_asyncで非同期で起動するとOK。原因調査中。
  • UITabBarに画像を使っていたがそれが表示されなくなった。UITabBarItemのsetFinishedSelectedImageがDeprecatedになった。
  • 新機能対応
  • Extension Today対応した
  • Extension内ではスクロール(UIScrollView, UITableView)が使えないので入札中のオークション3件を表示 & もっと見る、でアプリに飛ばす。
  • 同じくキーボードも使えないので自力で電卓キーを実装した。(長谷川のメモに無いのですがこれはInteractive Notificationの紹介だった気がします。「高値更新されました」って書いてあったので。)
  • かかった工数はiPhoneで制作3人日、「問題箇所の修正」4人日、「新機能への対応」4人日。iPadではそれを移植して「問題箇所の修正」3人日、「新機能への対応」1人日。
回転の取扱がサイズ変更という扱いになったのはシンプルで良さそうだと思いました。回転って過去のiOSバージョンの推移でいろいろ変ってイヤな目にあってきたので…。でもきっとこれはこれで苦労するのでしょうね。

iOS8、何もしなくて良いかと思ったら意外といろいろ変っていて面倒ですね。上記に無いところだと位置情報の取り方とか、アプリ内課金周りも既存コードに手を入れる必要があるレベルの変更が加わっていたりします。

Extension(Widget)

  • 新卒3年目の田鍋さんによる発表。
  • Extensionはメインとなるアプリの付属物として実装する。
  • メインとなるアプリのプロジェクトにAdd – New – TargetしてApplication Extensionを追加する。
  • 画面上からスワイプして表示されるたびにviewDidLoad, viewWillAppear, viewDidAppearが呼ばれる。
  • viewDidLoadはドキュメントでは呼ばれないことになってるが呼ばれている。
  • Widgetからアプリを起動するにはいつものカスタムURIスキームではなくNSExtensionContextのopenURLメソッドにて。
  • Widgetと本体の通信はAppGroup経由のNSUserDefaultsで。
Widgetについてコンパクトにまとまっていて良いプレゼンでしたね。比較的使いやすいので近々に試してみようと思いました。

スライド中に長谷川のTwitterアイコンがちょくちょく出てきて長谷川的に盛り上がりました。

Extension(Document Provider)

  • 新卒2年目、iOS開発歴4年目の大西さんによる発表。
  • スライドがよく出来ていてポケーっと見ていたら最後まで楽しく聞けました。
とか言いつつ実は発表が迫って自分の資料の直しをしていてメモ取る余裕が無かったというのも…。

ImportとExportはiOS7時代にもよく見られた動きなので理解がしやすいし実装もしやすそうですね。

オトナのHomeKit 羽田 健太郎

  • 社会人1年目の羽田さんの発表。
  • HomeKit。家電と接続してコントロール。WiFiまたはBLEを使う。
  • GoogleもNearbyで同じ様なことをしようとしている。
  • HomeKit対応デバイス
  • スマートデバイス用ウェザーステーション natatmo。部屋に置いておくと温度、湿度、CO2濃度、騒音レベルなんかを測定してくれる。
  • august。BLEドア鍵。
  • hue。電球。(これは一足先に話題になりましたね。)
  • HomeKitではHMHome – HMZone – HMRoomで空間を定義し、その中に個別のデバイスがHMAccessoryとして存在する。スライドはその階層構造を磯野家の例で説明。
  • デバイスは要MFi。でもHomeKit Accessory Simulatorアリ。
  • 家に彼女と帰ってきてiPhoneで鍵を開けるとライトがムーディな色になるデモ。
  • なお会場が一番ウケたネタは最後の「HomeKitの学習のために、会社に聞いてみよう。」「経費で家買っていいですか」だった、ということをご報告しておきます。(公開スライドに無いから…)
  • ご本人による解説エントリも上がっています。
    【iOS8】【homekit】200人の前でラジオボタンが動くだけのデモしました
笑わせるぞー!という思いの詰まったプレゼンでしたね。いいと思います。こういうの好きです。
(今のままでも十分面白いけど資料の作りと進行をもうちょっと工夫するとドカンとウケるプレゼンになる気がしますね。)

Home Kit Accessory SimulatorはXcodeメニューからXcode → Open Developer Tool → More Developer Tools…として「Hardware IO Tools for Xcode」をダウンロードして実行です。

で、内容は電子工作スキーとして非常に興味深い話。何か作りたいけどMFiはハードルが高い。電子工作向けの開発キット的なMFi商品が出るのを待つかな…。

虚数は作れる!Swiftで学ぶ複素数

このセッションは非常に(Swift以外の部分も)高度なので他の発表とは違うスタイルでご紹介しています。カッコ内は長谷川の感想です。
  • SmartSearch責任者 & iOS黒帯の佐野さんによる発表
  • x + yiの形で表現される複素数をSwiftで実装してみよう、というお話。
  • まずは複素数を表すComplex型の実装。
  • SwiftのStructで「複素数」を表すComplex型を定義。Dobuleの要素xとyを持たせる。
  • Complex型の演算子を1つ1つ実装していく。
  • 資料P11、==の実装。xとyをそれぞれ比較する。
  • 資料P12、+, -, (DoubleとComplexの)*の実装。-については前置演算子も。話としてはすごく単純。
  • ここまででComplex型どうしの加減算とDoubleとComplexの乗算が出来る様になる。
  • 資料P14~P16は非Complex型との演算のための実装。
  • 資料P21~P23でComplex型どうしの乗算の実装。実装してから各種法則が成り立つことを確認。
  • 後半は作った複素数をビジュアライズするお話。
  • 今までの x + yi の形でなく、複素数を絶対値と偏角で表現する方法(極表示)の実装。
  • 資料P35~P36、極表示でのかけ算。複素数の積は「絶対値の積」x「偏角の和」。(おもろい。)
  • 資料P38、複素平面 ComplexPlane をクラス定義。Swiftではクラスのインスタンスに付けた[]の動作を定義できるのでそれを使って複素数を ComplexPlane のインスタンスに追加・参照できる様にしている。
  • (デモがすごく面白いので動かしてみることをお勧めします。)
  • 複素数が美しい話。
  • (ここで長谷川脱落。高校時代にやってる気がするんだけどなあ。)
  • (勉強しておくので佐野さん、こんど教えてください!)
  • 資料P51のグラフはMacの標準アプリのGrapherで描いているとのこと。(カッコいいですね。)
前半については事前に別の資料や実装を見ていたからなんとか追いつけたけど現地でいきなり見たら追いつけなかったと思います。Twitterのタイムラインを見ると爆速でみんなを置き去りにしていた感も。(笑)

佐野さんの複素数に対する愛がビンビンに伝わるプレゼンで、すごく楽しそうに発表されていました。

後半のデモは教育用に良さそう。数学とか物理って紙の上で現象を想像するというプロセスが必ずあるので、それがビジュアライズされると学習の助けになるでしょうね。

次回予告のプレゼンも楽しみです。でもそれぞれ1時間ぐらいは必要な気がしますね。

LT: SwiftでSioriを開発した体験記

  • Wantedlyの杉上さんの発表。
  • SioriをiOS8リリース日にリリースした話。
  • Swiftで作った。
  • コード量はObjective-C比較で60%ぐらい。enumが強力で嬉しい。
  • CrashlyticsがSwift部分でうまく動かず困り中。
  • Swiftはプログラマによって書き方に幅が出るのでコード規約を作った。
長谷川もXcode BetaでSwiftを触っていたのですがBetaを重ねる度にちょっとずつ仕様に変更があって追従に苦労したのでプロダクト開発でそれをやっているとさぞかしきつかっただろうなあ、と思いました。

LT: 「オプショナル型。」

長谷川の発表です。
6月のSwift発表から今まであちこちでSwiftについて発表してきたのですがOptionalについてはこれが完全版だと思っています。

資料の補足を少し…

  • Optional Chainingで?を付けた変数は依然としてOptional型です。なので、例えばString型を引数として取る関数のパラメタにするにはForced UnwrapなりOptional Bindingなりして元の型に戻してあげる必要があります。
  • 初めて資料を見る方は「まとめ」をまず見てから、頭から流しても良いかと思います。
  • デジタルサーカスでは好奇心旺盛で行動力のある仲間を常に募集しています。
  • オフィスは表参道と外苑前の中間ぐらいなので近くにいらっしゃる場合は是非オフィスに遊びに来て下さい。(長谷川、外出も多いのでTwitterなりFacebookなりで事前ご連絡ください。)

LT: dsgarage さん

  • @dsgarageさんの発表
  • SceneKitのお話。
  • 普段Unityを使っているがUnity書きから見てSceneKit(Metal?)は魅力的。
自分の発表の直後だったのと、自分のメインの守備範囲外のお話だったのでメモをあまり取れず…。

Metal、パフォーマンスが出るとして、iOSとAndroid(とその他のデバイス)のマルチデバイスで開発できて、素材などのエコシステムが出来上がっているUnityとどう戦うのかが気になりますね。(UnityがMetal対応のコードを吐く様になるのかな。)

LT: Swift-JSON

  • @dankogaiさんの発表
  • SwiftからJSONを扱うためのライブラリSwift-JSONの紹介。
  • 同じ様な機能のSwiftyJSONがあってGitHubでは10倍ぐらいのスターが付いている。
  • それでもSwiftyJSONで実装されていない「Type Checking」や「Schema as Class」を使いたかったので作った。
出だしからdankogai節が炸裂する勢いのあるプレゼンでしたね。楽しく見ました。

この発表のSwift-JSONSwiftyJSONと並んで早くからリリースされていたライブラリです。

Swiftで既存のJSONパースライブラリを使うと結果が(Arrayでなく)NSArrayで帰って来て大変です。なのでPureSwiftのライブラリが必要とされていて、長谷川もここ数ヶ月はそういったライブラリを見ていました。

LT: Flat Designの裏にあるもの

  • @nakajijapanさんの発表
  • JenkinsのJobs
  • 夏休みの宿題、CloudKitの紹介。
  • Flat Design。そもそもAppleはFlat Designとは言っていない。
  • Material Honesty: 工業製品は素材に忠実であるべきだ
  • iPhone出始めの頃に流行った、画面に表示したオブジェクトの下に反射を描く様な表現は本来のディスプレイの表現ではない。
iOS7が出た頃にさかんに議論されていたお話をあらためて、という発表。

Material Honestyまわりは読み応えがあるので是非資料を見てみてください。

LT: もしiOS8のキーボードがガジェットのSDKを搭載したら

  • @niwatakoさんの発表
  • iPhoneのジャケットみたいに取り付ける工業用バーコードリーダー AsReader を販売している。
  • 従来はAsReader専用にSDKを提供してアプリを作って貰う必要があった。
  • iOS8からはカスタムキーボードが解放されたのでキーボードとしてAsReaderを使えるのではないか。
  • 作ってみたら動いた。Appleの申請に通るかはこれから。
なるほど!と思わされたよく出来た発表。内容も面白いけどスライドも良い出来でした。「略してもしガジェ」が何故か小声なのが個人的にツボ。

キーボードアプリには可能性がありそうですね。起動中のアプリとの連携で何ができるか調べてみようと思いました。

発表は以上です。

楽しく新しい発見もあった良いイベントでした。終了後の勝手懇親会的なのにも運良く参加できて楽しくみなさんとお話させて頂きました。

謝辞 & 感想

こんな機会を与えて下さった主催のヤフー株式会社さま、ありがとうございました。
そして登壇者のみなさま、スタッフの皆様、そして参加者のみなさま、お疲れさまでした & ありがとうございました。

なお、司会の鈴置さんの進行やしゃべりがすごい「ちゃんとした」感を高めていたことを申し添えておきます。お疲れ様でした。(あまりにちゃんとしててプロ司会者かと思いました。ほんとにプロだったら失礼!)