LIFULL Creators Blog

「株式会社LIFULL(ライフル)」の社員によるブログです。

LIFULLエンジニアインタビュー #0

LIFULL HOME'S事業本部 技術開発部 の冨田です。

LIFULLエンジニアのインタビューを通して、なかで働くエンジニアはどんな人なのか、どんなことをしているのか、を知ってもらうきっかけになればと思い、このような取り組みを始めました。

ゲスト紹介

本日のゲストはおなじく LIFULL HOME'S事業本部 技術開発部 の磯野さんです。

過去にはiOSアプリのLIFULL HOME’Sやオンプレミスからクラウドへのサーバ移行、Zipkinの導入なども担当され、現在はLIFULL HOME’Sを支えるアーキテクチャの刷新を担当しているエンジニアです。

f:id:LIFULL-tomitam:20170619095253j:plain:w320

目次

  • ゲスト紹介
  • 目次
  • 学生時代
  • LIFULL入社前
  • LIFULL入社後
  • 子どもが生まれてから
  • 技術のキャッチアップ方法
  • 育成と後輩エンジニアからの刺激
  • 好きな開発環境、言語など
  • 将来のビジョン
  • 次回予告
  • 編集後記
  • お知らせ
続きを読む

WWDC 2017 - LAST DAY -

こんにちは。iOS開発Gの池田です。
本日はとうとうWWDC最終日!

今回は最終日の様子、セッションについての内容、最後に昨日の夜にあったBashの様子について書きます。 (前回の記事はこちら)

出発

最終日!ということで、ちょっとした気合いを入れつつホテルを出たのですが、こんな日に限ってあいにくの雨模様。
ここ最近の晴れ具合であったり、UBERで乗せてもらった方から聞いた話からも雨降りはなかなかレアな気がします。
そんなレアな天候の中、VTA(Santa Clara Valley Transportation Authority)に乗って会場に向かいました。 f:id:LIFULL-ikedakz:20170610114436j:plain

会場の様子

WWDC最終日はセッションも少なく、ラボも早い時間で閉まってしまいます。
そんな事情もあるため今日はほとんど人いないんじゃ、、と思ってたのですが、全然そんなことなかったです。
多くの人で会場は賑わっています。 f:id:LIFULL-ikedakz:20170610114513j:plain

今日はアツく揺さぶられるセッションが午前中なかったため、作業スペースで開発作業を進めていました。
セッションの動画も流れています。 f:id:LIFULL-ikedakz:20170610114944j:plain

そうこうしているうちに午後のセッションの時間になり、セッションに参加してきました!

セッション

今回参加したセッションは、「Efficient Interactions with Frameworks」です。 このセッションでは、Foundation内のパフォーマンスについての話とStringのパフォーマンスについての話がされていました。

Foundation内のパフォーマンスについて

以下パフォーマンスの改善が行われているそうです。

NSCalendar

メモリの使用 、速度の改善

NSOperation / NSOperationQueue

速度の改善

Data

速度の改善

Stringのパフォーマンスについて

Stringのbridgingについて

SwiftでUILabelやUITextViewのtextを変数に入れる場合、textの実装部分でObjective-CのUILabelや、NSTextStorageが利用されておりそのコストについての話でした。
UILabelを利用する場合もUITextViewを利用する場合も暗黙的にbridgingが行われ、それに対するコストがかかります。
ここでUILabelは比較的小さなデータ量を扱うことが多いためあまり意識しなくて良いが、UITextViewはデータ量が大きくなることもあるため気にした方が良いとのことでした。
具体的にはUITextViewのtextの中に1MBを超える文字列を扱う場合はパフォーマンスを気にした方良く、こういった場合は計測した上でパフォーマンスに影響を及ぼしている場合、以下のようにcopyの処理がはしらないmutableStringを使うのが良いそうです。

var text = textView.textStorage.mutableString

ここに関してはAppleも解決策を探しているが現状見つかっていないので、パフォーマンスに影響を及ぼしている場合上記のような処理を検討するのがよいとのことでした。

Rangeについて

NSRangeとRangeに新しいイニシャライザが追加され、NSRangeやNSRegularExpressionを利用するときに便利になっています。
NSRangeとRangeの相互変換がイニシャライザででき第二引数にStringを指定できるようになっているため、「NSRangeを作成するために一旦StringをNSStringに変換する」のような処理が必要なくなっています。 Rangeに追加されたイニシャライザは下記です。

init?(NSRange, in: String)

文字列のレイアウトとレンダリングについて

テキストのレンダリングでパフォーマンスを上げる方法として3つのtipsが挙げられていました。

  1. 可能な限り標準のコントロールを利用する
  2. AutoLayoutのようなモダンなレイアウトプラクティスを利用する
  3. NSAttributedStringを利用している場合、確定しているattributesは明確に指定する

3.の具体例で挙がっていたのは、directionやlineBreakModeです。
確定しているなら指定しておいた方が推測のコストが省けるため、若干パフォーマンス改善するそうです。

The Bash

WWDCでは毎年Apple公式の打ち上げのような形で The Bash が開催されます。
Bash の会場では食事やお酒が無料で提供されており、最中には有名なアーティストのライブもあります。

下の写真は会場に向かう橋です。
開場の20分ほど前に行ったのですが列ができており順々に数十人のグループで区切って通されます。
いっぱい乗ると落ちるぞ、みたいなことを言っています。怖いです。
f:id:LIFULL-ikedakz:20170610121016j:plain

この橋を超えて会場に入りました。
開場直後に入ったので、ぼちぼち人が人がいる程度です。
f:id:LIFULL-ikedakz:20170610123859j:plain

食事やお酒が提供されています。 f:id:LIFULL-ikedakz:20170610124016j:plain

そしてアーティストライブの時間がやってきました!
今年のゲストはFall Out Boy!!!!
前の方では飛び跳ねて盛り上がっている人たちも!
すごくかっこいいライブでした!

徐々に日は落ち、お酒も入りみんなテンションが上がっています。
机の上で踊り出す人々も出てきました! f:id:LIFULL-ikedakz:20170610125424j:plain

大勢の人で盛り上がった Bash も22時頃でクローズし、公式の打ち上げ(っぽいイベント)も終了です。

最後に

1週間に渡り様々な発表、ラボが開催されたWWDCも今日で最終日です。
ですがエンジニアにとっては、発表された技術をどう活かしてどうサービスに繋げていくか、それを考えて作っていく日々が始まったばかりです。
WWDCで発表された技術、情報を素早くキャッチアップして今後に繋げていきたいと思います!

私たちの会社でもWWDCの素早いキャッチアップに繋がるよう共有会を開催しますので、ぜひいらしてください! lifull.connpass.com

WWDC最終日の記事は以上となります!
ありがとうございました! f:id:LIFULL-ikedakz:20170610130950j:plain

WWDC 2017 - DAY FOUR -

昨日の記事に引き続きこんにちは。iOS開発Gの塙です。 4日目ともなると現地のエンジニアは今回発表された機能の実装をだいぶ進めているみたいです。 外のベンチにはただ空を眺めている方、俯く方、頭を抱える方。十人十色です。美しいですね。

皆さんも実装が詰まって何時間も考える時があると思います。 そんな時WWDCでは問題解決をしてくれるスペシャリストが待機している場所があるのです。 今回はその場所の話とセッションの話をメインで書きたいと思います。

f:id:LIFULL-hanawat:20170609151658j:plain

これは通称"小田原"と呼ばれているオレンジジュースで、ほぼ毎年WWDCで配られています。ジョブスが好きだったとか。ではまずセッションのお話から。

Focus Interaction in tvOS 11

今回KeynoteではAmazon Prime Videoの話しかされなかったtvOSですが、API Referenceを見るとそれなりに変更があったので聴きに行きました。 セッションの席がガラガラですね、大丈夫でしょうか。

※ LIFULL HOME’S アプリはtvOSにも対応しています。

最新バージョンではCoreBluetoothFlyoverに対応しております。AppleTVをお持ちの方はぜひダウンロードしてみてください。

f:id:LIFULL-hanawat:20170609151917j:plain

Focus Update Notifications

  • Focusに対して更新処理が走る時に通知を受け取れるようになった
  • Focusの移動に失敗した場合の通知も追加されている
static let UIFocusDidUpdate: NSNotification.Name

static let UIFocusMovementDidFail: NSNotification.Name

Protocol Extensions

UIFocusItemプロトコルが拡張されて、自身が今Focusされているか確認できます。

var isFocused: Bool { get }

UIFocusEnvironmentプロトコルが拡張されて、自身が他のFocusEnvirionmentに含まれているか確認できます。

func contains(_ environment: UIFocusEnvironment) -> Bool

Focus Animations

Focusの移動時にアニメーションを定義できます。

// for focusing item
func addCoordinatedFocusingAnimations(_ animations: ((UIFocusAnimationContext) -> Void)?,
                           completion: (() -> Void)? = nil)

// for unfocusing item
func addCoordinatedUnfocusingAnimations(_ animations: ((UIFocusAnimationContext) -> Void)?,
  completion: (() -> Void)? = nil)

Runs the specified set of animations together with the system animations for adding focus to an item.

今まで下記のようにやっていた処理との違いはシステムの定義したアニメーションと一緒に行うかどうかでしょうか。

func didUpdateFocus(
  in context: UIFocusUpdateContext,
    with coordinator: UIFocusAnimationCoordinator) {

  if context.nextFocusedView is Self {

    coordinator.addCoordinatedAnimations({
      // Focused Animation
    }, completion: nil)

  } else if context.previouslyFocusedView is Self {

    coordinator.addCoordinatedAnimations({
      // Unfocused Animation
    }, completion: nil)
  }
}

またFocusの移動スピードに合わせてアニメーションの早さを調節されるそうです。

Custom Focus Sounds

  • フォーカス移動時に流れる音をカスタマイズできるようになった
  • UIFocusSystemというクラスが追加されたことによって可能になった

UIFocusSystem

現在のユーザーインタフェース上にあるフォーカスの状態を管理するクラス。 今まではupdateFocusIfNeededのように自身のフォーカスの更新しかできませんでしたが、このクラスは全てのフォーカスの更新ができます。

func requestFocusUpdate(to environment: UIFocusEnvironment)

func updateFocusIfNeeded()

また、現在フォーカスされているオブジェクトやどのFocusEnvirionmentに含まれているかもチェックもできます。

weak var focusedItem: UIFocusItem? { get }

class func environment(_ environment: UIFocusEnvironment,
  contains otherEnvironment: UIFocusEnvironment) -> Bool

その中にひとつだけフォーカス時の音を変更するメソッドがあります。 ローカルのサウンドファイルのURLと識別子を指定するだけでアプリ内にグローバルに反映されます。ただし、サウンドファイルは30秒未満でなくてはいけません。

class func register(_ soundFileURL: URL,
  forSoundIdentifier identifier: UIFocusSoundIdentifier)

下記のようなサウンドの調整も行われるようです。

  • スピードに合わせて音量が変更される
  • フォーカスの移動方向(左右)によっても異なる

また、オブジェクトがフォーカスを更新するタイミングでカスタムとデフォルトとなしの切り替えもできます。例えばサイズの異なるオブジェクトになる場合は音を変えるというのは良いプラクティスだそうです。

// UIFocusEnvironment Protocol
optional func soundIdentifierForFocusUpdate(in context: UIFocusUpdateContext) -> UIFocusSoundIdentifier?

Support for SceneKit

SceneKitとSpriteKitでもフォーカスを扱えるようになった UIFocusItemの継承クラスにSKNodeSCNodeが追加されている。

Focus Update Logging

-UIFocusUpdateLoggingEnabled=YESの設定をXcode上で行うとフォーカスに関するログを吐く。

UIFocusDebugger

フォーカスをデバッグするためのクラスが追加されました。 po UIFocusDebugger.foo()でFocusの状態を見たり検証したりできます。

  • status(): フォーカスされているオブジェクトに関する情報
  • simulateFocusUpdateRequest(from: _): 特定のFocusEnvirionmentからフォーカスの更新を試せる
  • checkFocusability(for: _): Focusできるかチェックできる(できない場合は理由も分かる)
  • help(): 使用できるコマンド(メソッド)全部出してくれる

結構やりたかったことや実装が面倒だった部分が解消されている気がします。何より捉えにくいフォーカスをデバッグしやすくなったのは嬉しいです。

qiita.com

Lab

普段実装で躓いたことはありませんか?ない人なんていないですよね。 このWWDC期間中であれば、そのUIKit、Foundation、iOS、watchOS…などの開発者に相談できるんです。 そこで答えが出ないなら諦めがつきますもんね。頭を抱えて作業が進まない状況を無くせます。

f:id:LIFULL-hanawat:20170609151720j:plain

ラボにも色々な種類があり、昨日の記事で紹介したUIデザインラボもその中のひとつです。 基本的に技術系のラボは予約はいらず、その場でじっくり実装しながら聞いたりできます。

Design and Accessibility

  • User Interface Design
  • Accessibility Design

App Store

  • App Review
  • Apple Developer Program Support
  • Apple Marketing Communications
  • Business and Marketing
  • Export Compliance
  • iTunes Connect
  • Search Ads

Podcast

  • Apple Podcasts Studio

Develop

  • Core Image Lab
  • Source Control, Simulator, Testing, and Continuous Integration with Xcode Lab
  • Game Center Lab
  • Installer Lab
  • ClockKit and WatchKit Lab, etc…

もっともっとあります。キリがないくらい様々な技術情報のラボがあります。 え?英語が話せない?もちろん私も話せません。ですが、最初の質問を準備していけばあとはノリとコードで伝わります。 私は質問していく時に毎回このようなフォーマットで持って行きました。

    func foo() {
        /*
         ここに現状の実装の説明とやりたいことを書く
         */
        doSomething()
    }

    func bar() {
        /*
         ここにトライしたけどダメだったことを書く
         実装はコメントアウトしておく
         */
        // doAnything()
    }

Appleのデベロッパーと話せる機会なんてそうそうないのでWWDCに行くときはぜひ質問を投げに行ってみてください。 では、最終日も楽しく元気に学びましょう。

f:id:LIFULL-hanawat:20170609151742j:plain

今日はよくわからないファミレスのような場所で書いています。このタコスのようなポテト素敵な味がします。アディオス。

WWDC 2017 - DAY THREE -

こんにちは。iOS開発Gの塙です。 本日でWWDCは3日目です。早いですね。イベントも中盤まで差し掛かり、デベロッパーの血と汗の結晶である技術情報がウェブ上にチラホラ出て来ていますね。感謝の気持ちを忘れずに根こそぎ吸い上げていきましょう。前日の記事はこちらです。

「What’s New in WatchOS4」と「What’s New in Foundation」のセッションがあったのでwatchOS4とSwift4について書きたいと思います。が、その前に今回も会場の様子をお伝えしたいと思います。

WWDCは期間中食事を無料で提供してくれます。今日のお昼ごはんはサラダです。野菜はいいぞ。味については触れませんが、日本って本当に食に恵まれているんだなあと思いました。味については触れませんよ。

f:id:LIFULL-hanawat:20170608152040j:plain

もちろんドリンクも無料です。お財布が寂しい私は毎日歓喜してます。コーヒーは(おそらく)スターバックスでとっても美味しいです。一体何リットルのコーヒーがこの会場に運ばれているのでしょうか。なんとなく恐怖です。

f:id:LIFULL-hanawat:20170608152006j:plain

物販もやっています。WWDC限定の商品があるので毎年1,2日目には品薄状態になってしまいます。iOSエンジニアはここのTシャツをドヤ顔で着るのがスマートだと思います。

f:id:LIFULL-hanawat:20170608151937j:plain

毎年近場で行われているAltConfというApple製品のデベロッパーカンファレンスがあります。私は去年このイベントをメインで参加していました。なぜなら無料だからです。受付の方、お茶目ですね。

f:id:LIFULL-hanawat:20170608151917j:plain

AltConfはスポンサーの企業が会場内にブースを作り、グッズや製品を置いて客寄せしています。このTシャツはもちろん無料です。寝巻きに最適です。

f:id:LIFULL-hanawat:20170608152025j:plain

本日はUser Interface Design Labという予約制のラボ(相談に乗ってくれるブース)に行って来ました。近年では毎朝7時に当日の予約が開始されるのですが、1~2分で満席になるというとても貴重なラボなのです。WWDCに行く場合はぜひチャレンジしたほうがいいと思います。

f:id:LIFULL-hanawat:20170608152057j:plain

なんとなくWWDCに行った時のイメージが湧きましたか?湧きましたね。ということでwatchOS4とSwift4(一部)を紹介したいと思います。

watchOS4

Core ML

iOSと同様に機械学習モデルを扱えるようになるフレームワークが追加されました。 watchOSは近年スポーツや健康管理の機能強化をしているので、そのデータと機械学習を組み合わせて面白いことができそうですね。

SiriKit

こちらもiOSと同様にSiriKitのIntent Domain(できること)に「List nad Notes」が追加されました。サードパーティ製アプリのメモやタスクをSiriから登録できます。

また下記のIntent Domainに追加された機能もiOSと同じですね。

  • Ride Booking : キャンセルとフィードバック機能
  • Payments : 送金とアカウント検索機能

HomeKit

こちらもまたまたiOSと同様に下記のトリガーが追加されました。

  • HMSignificantTimeEvent : 日の出/日没時間
  • HMCalendarEvent : 特定の日時
  • HMDurationEvent : タイムインターバル(繰り返し時間)
  • HMCharacteristicThresholdRangeEvent : 接続されたデバイスの出力する値の範囲(温度や明度など)
  • HMPresenceEvent : ユーザーの有無

Apple Pay

こちらもまたまたまたiOSと同様に支払い情報と認証エラーをハンドリングできるようになりました。

ここまで読んでいてがっかりされている方が多いと思います。私もアプリのストリーミングでセッションを聞いていて、途中でそっとスリープボタンを押そうとしてしまいました。ただ、次のアップデートは夢があると思います。

Core Bluetooth

ついにwatchOSにCore Bluetoothが追加されました。Apple Watchから様々な機器を操作できるようになりますね。ただし下記の制限があります。

  • セントラル(見つけに行くデバイス)のみ可能
  • ペリフェラル(見つけて貰うデバイス)は2台まで
  • 接続インターバルの時間は フォアグラウンド : 30ms / バックグラウンド : 120ms
  • バックグラウンドでは接続のみ可能(スキャンはできない)
  • ペリフェラル側はアプリが停止したら接続解除される

Swift4

様々なアップデートがある中で、私のまわりで最もザワついた項目であるCodableのみ取り上げたいと思います。

Codable

Swiftのstructやenumを簡単にシリアライズ/デシリアライズできるようになりました。

struct Person: Codable {

  enum Child: String, Codable {
    case son, daughter
  }

  let name: String
  let age: Int
  let children: [Child]
}

let person = Person(name: "Foo", age: 10, children: [.son, .daughter])
let data = try? JSONEncoder().encode(person)

デコードもできます。JSONデータを外部ライブラリを使用してパースしなくて済みますね。

let person = try? JSONDecoder().decode(Person.self, from: data)

少し詳しくQiitaに投稿したのでご確認いただければと思います。 qiita.com

では残り2日間楽しみながらたくさん学んでいきたいと思います。アディオス。 f:id:LIFULL-hanawat:20170608151900j:plain 宿泊先のホテルです。ちょっとカッコつけてみました。

WWDC 2017 - DAY TWO -

こんにちは。iOS開発Gの池田です。
本日はWWDCの2日目です!
今日(6/6)から金曜日(6/9)まで新OS、新機能の技術的なセッションやラボが目白押しです。

今回は会場の様子を少しとセッションについて、最後おまけです。
(前回の記事はこちら)

会場の様子

会場内の休憩&個人作業スペースです。
みんな思い思いにソファーや机に座って作業をしています。
この写真は人が少ない時間帯に撮りましたが、セッションの合間や昼の時間にはごった返します。
ちょっと見えづらいですが2枚目の写真の中央下部あたりではセッションのリアルタイムストリーミングも行われています。 f:id:LIFULL-ikedakz:20170607175511j:plain f:id:LIFULL-ikedakz:20170607175422j:plain

セッションについて

私が参加したセッションは、以下3つです。
それぞれポイントになる内容を振り返ります。

  • Your Apps and Evolving Network Security Standards
  • Introducing Core ML
  • Introducing ARKit

Your Apps and Evolving Network Security Standards

ATSで「信頼されない」、「信用される」を分ける基準が話されていました。
具体的には以下のように信頼する・信頼しないの基準が分かれます。
[×] 信頼されない
[○] 信頼される

Encryption

[×] RC4 3DES-CBC、AES-CBC
[○] AES-GCM、ChaCha20-Poly1305

Cryptographic Hashes

[×] MD5、SHA-1
[○] SHA-2 Family

Public Key

[×] < 2048-bit RSA
[○] ≧ 2048-bit RSA、Elliptic Curves

Protocols

[×] httpプロトコル、SSLv3、TLS 1.0、TLS 1.1
[○] httpsプロトコル、TLS 1.2+

Revocation

[×] No checking
[○] OCSP Stapling

Introducing Core ML

Core MLでは様々な機械学習ライブラリで作成したモデルをアプリ内に統合して、ある入力に対する出力を予測する機能を提供できます。

対象OS

macOS High Sierra以上、iOS11以上、watchOS4以上、tvOS11以上

Core MLの良いところ

機械学習の処理、データのやりとりがデバイス内で完結するため、以下のメリットがあります。

  • ユーザーのプライバシーを侵害しない
  • データのコストが必要ない
  • サーバーのコストが必要ない
  • 通信環境等によらず、いつでも使える

モデルについて

モデルは入力を受けて予測の結果を出力するFunctionのようなものだ、という話でした。
入力には、画像やテキスト等が用いられ、出力として予測結果を得ます。
デモの中では花(バラ等)の画像をモデルに入力し、文字列として予測結果出力していました。

Core ML Tools

pythonで作られているモデル変換ツールでオープンソースです。
有名な機械学習ライブラリのモデルをCore ML用のモデルに変換することができます。

Core ML導入の手順

デモの中でCore MLの導入手順を一通りやっていました。
導入手順は以下5手順です。

  1. オープンソースの機械学習ライブラリでモデルを作成する
  2. Core ML ToolsでCore ML用のモデルにコンバートする
  3. できたモデルをプロジェクトにドラッグアンドドロップする
  4. Core ML用モデルのターゲットを設定する
     (自動でSwiftファイルが生成される。)
  5. 生成されたモデルの結果出力メソッドを利用して実装する

Introducing ARKit

ARKitでは、iOSデバイスのカメラに写っている現実の映像とSceneKit、SpriteKit等で作成した仮想現実の物体を同時に表示し、あたかも現実に仮想現実の物体があるように見せることができます。
こちらのARKitは今回の発表の中でもなかなか興味深い新機能だと思います。
日本にいる弊社の新卒エンジニアがサンプルを使って早速試してました!

対象OS

iOS11以上(A9プロセッサ以上)

トラッキング

iOSデバイスの移動、回転に伴って仮想現実の物体も移動、回転、縮小をします。
現実に物体があるのと同じような動作をするのでカメラを通した映像には実際物体があるかのように見えます。

平面の認識

カメラの映像を通して現実にある床等の平面を認識します。
仮想現実の物体は認識した平面の上に乗っているように見えるよう位置調整されます。

光の予測

現実の映像が暗いと仮想現実の物体が暗くなる、仮想現実の物体が光っていると現実の映像が明るくなる等、現実と仮想現実が相互に光の干渉を行います。

デモ

デモは2つ行われていました。

1つ目は仮想のカップ、花瓶のような物体を現実の映像内に配置するデモです。
現実のテーブルの平面が仮想の物体に影響を及ぼし、テーブル上にカップや花瓶が乗る様子が見れました。

2つ目は仮想のカメレオンがテーブル上に乗っているデモです。
このデモでは、カメレオンの周りを回るようにカメラを操作すると、カメレオンの顔かリアルタイムでカメラの方を見る様子が見れました。
カメレオンがその場にいてまるでこっちを見ているかのように見えるデモです。
現実と仮想現実が繋がっているように感じられる感覚が強いデモで、それをたった1台のiPhoneでやっていると考えると、未来感があるデモでした。

おまけ

会場の前の広場でWWDC参加者限定のパーティがやっていたので、ちょろっと参加してきました。
バンドの演奏もやっており、バンド前ではダンスをしている方も♪
多国籍な会で私はロシアの男性エンジニアの方と、元々日本にしばらく住んでいた女性エンジニアの方などちょこちょこ交流してきました。
1時間弱の短い時間でしたが大変楽しい夜でした!
本日は以上です!それでは! f:id:LIFULL-ikedakz:20170607180450j:plain

WWDC 2017 - DAY ONE -

こんにちは。iOS開発Gの塙 is in California です。

本日から開催されたWWDC 2017ですが、みなさんKeynoteはご覧になったでしょうか?まだですよね?はい、では開演までの流れと共にKeynoteの内容をお送りしたいと思います。

7:30AM

同じホテルの参加者は5:00AMから会場に並んでいる中、我々はゆっくり起床して優雅にVTA(Santa Clara Valley Transportation Authority: 路面電車)に揺られながら会場に向かいました。

f:id:LIFULL-hanawat:20170606185755j:plain f:id:LIFULL-hanawat:20170606185757j:plain

8:30AM

会場に着くとそこには長蛇の列が…と思いましたがそこまで待つこともなくスムーズに入場口まで行けました。

f:id:LIFULL-hanawat:20170606185839j:plain

9:00AM

会場内に入れました。中にも長蛇の列が続いており、なかなか前に進まなくなってきました。きっとみんな無料提供の朝食にガッついていたのだと思います。ちなみに私は出遅れてしまい朝食が品切れになってしまったのでりんごをひとつだけ頂きました。ひもじい。

f:id:LIFULL-hanawat:20170606185926j:plain

9:30AM

ついに公演の行われるホール内に到着しました。すごい、すごい熱気です。開発者も報道陣も皆鼻息が荒いです。私も先ほど頂いたりんごを食べながら鼻息荒くしてました。

f:id:LIFULL-hanawat:20170606185929j:plain

10:00AM

ついにKeynoteが始まりました。大きな発表としては以下のようになりましたね。

macOS High Sierra

  • Apple File System(APFS)を採用したことによりファイルの読み書きがかなり早くなりました。
  • Metal VRに対応したことでVRコンテンツを開発/プレイすることができます。

iOS11

  • コントロールセンターが1画面になり、操作性が向上しました。
  • MusicアプリにSNS要素が加わり、友人などのプレイリスト/再生履歴の閲覧が可能になりました。
  • ARKitでARコンテンツの開発が可能になりました。
  • Core MLで機械学習モデルを利用した開発が可能になりました。
  • MusicKitでAppleMusicのおすすめ情報やランキングなどを取得できるようになりました。
  • ApplePayで個人間の支払い機能が追加されました。
  • Siriの翻訳機能が追加されました。(日本は未対応)
  • AppStoreのデザインが刷新、新たにToday/Games/Appタブが追加されました。

watchOS4

  • Siriがメインの時計盤インタフェースが追加されました。
  • 映画トイストーリーに出てくるキャラクターの時計盤インタフェースが追加されました。
  • Workoutがトレーニングマシンと連携、よりパーソナライズされたデータを扱えるようになりました。

tvOS11

  • 沈黙状態だった、Amazon Prime Videoがついに見られるようになりました。

iMac Pro

  • GraphicにはRadeon Vega graphics、プロセッサは最大18コア、メモリは最大128GB、27inchで5Kとなりとてもハイスペックです。

HomePod

  • Siriを搭載した高性能スピーカー、音楽だけでなく天気やカレンダーの情報などAIとして機能します。
  • HomeKitと連帯しているためiPhoneでの操作も簡単に行えます。
  • 特に音の良さを公演中は推していて、かなりの時間力説していました。

魅力的なデバイスやAPIが盛りだくさんですね。特にARKitはゲームだけでなくライフスタイルアプリにも親和性が高いので開発者の心を擽ります。ただ、HomePodが蚕のマユにしか見えないです…

また、デベロッパーサイトの「What’s New iOS11」を読んでLIFULL HOME'Sだけでなく、様々なアプリに活用できるのではないかなと思った、気になる機能追加をまとめたのでこちらに載せたいと思います。

What’s New iOS11 気になる機能追加まとめ


バーコードの生成と読み取りをサポート

  • バーコードの検出や作成をサポートするAPIを追加

iOSでドラッグ&ドロップをサポート

  • PCのカーソルで行うようなアイテムのドラッグ&ドロップ移動が可能になった
  • 異なるアプリ間のドラッグ&ドロップも可能(iPadのみ)

ドキュメントブラウザ

  • クラウドまたはローカルに保存されたドキュメントファイルを表示できる

画像認識

  • 顔、バーコード、テキスト、画像の水平線や長方形の領域を検出できる
  • 機械学習用のフレームワークを使用して任意の学習モデルを使用できる
  • ビデオ内のオブジェクトを認識して追尾できる

SiriKit

  • QRコードを使用して支払いや連絡先の交換が可能になった
  • メモの追加、予定やリマインダーの追加が可能になった
  • 乗車キャンセルとフィードバック機能が追加された
  • アカウント検索と送金機能が追加された

ライブメッセージ

  • 動的なメッセージ表示できる機能が追加された

High Efficiency Video Coding(HEVC)対応

  • とっても綺麗な動画エンコーディング

High Efficiency Image Format(HEIF)

  • とっても綺麗な画像エンコーディング

Live Photoの編集

  • Live Photoにループやバウンスなどのエフェクトが追加された
  • Live Photoなどの特定の種類のメディアライブラリを提示できるようになった

Core Bluetooth frameworkの改良

  • L2CAPチャンネルをサポート
  • Bluetoothのリセットと再起動時にセッションの復元ができるようになった

Core NFC

  • NFCタグを検出/読み込みが行える

少し技術的なことも追記したものをQiitaにアップロードしたので合わせてこちらもよろしくお願いいたします。では二日目も元気に頑張りたいと思います。アディオス。

qiita.com

「Developer's Living - tvOSアプリ開発 -」を開催しました!

こんにちは。iOS版LIFULL HOME'Sアプリ開発を担当している高橋です。

f:id:LIFULL-takahasy:20170602160037j:plain

今年の3月にtvOS版LIFULL HOME'Sアプリをリリースすることができました。 そこで得たノウハウを他の開発者の方々に共有したく、「Developer’s Living - tvOSアプリ開発 -」を開催しました! 今回はその内容についてレポートしたいと思います。

続きを読む