WWDC15 参加レポート Day5 AppSearchとフィッシャーマンズワーフ編
大島 雅人
こんにちは、大島です。
6/8から1週間WWDCに参加してきました。今回は最終日のレポートです。最終日ともなると慣れとともに疲れもたまってきます。この日はホテルの朝食を食べながら自分のPCでセッションを見ながら1日をスタートさせました。
前回までの記事はこちら
- WWDC15 参加レポート Day0 出発までの準備編
- WWDC15 参加レポート Day1 Keynote徹夜編
- WWDC15 参加レポート Day2 ラボに行ってみた編
- WWDC15 参加レポート Day3 GitHubに行ってきた編
- WWDC15 参加レポート Day4 SwiftとUITestingとThe Bash編
Advanced NSOperations
発表はDave Delogさんです。個人的にTwitterアカウントをフォローしたり、StackOverflowでコメントを見かけたりとAppleの有名人だと勝手に思っております。WWDC期間中に何度かすれ違いましたが蝶ネクタイとカラフルなシャツがシンボルのようでとても目立っていました。生で見れて嬉しかったです!
そんなDaveさんのこのセッションは、実在するWWDCアプリを題材にNSOperation
でのフロー制御についてでした。WWDCアプリはサーバーからのデータ取得や、各WWDCセッションのFavorite機能、フィードバックコメント機能、Videoストリーミングとダウンロード機能、通信がなくても使えるようにCoreDataにデータを保存するなど様々な要素が詰まっています。また、認証一つをとってもAppleID認証、CloudKit認証など複数のサーバーに対して行わなければなりません。それらの処理の依存関係をNSOperation
を使ってフロー制御しているという内容です。実在するアプリの説明なのでイメージが湧きやすいのでオススメなセッションです。できることならソースコードも見たいですが・・
このセッションとは関係ない話ですが、今までお恥ずかしながらCloudKitはiCloudにつないで単にドキュメント保存するだけのフレームワークかと思っていましたが、Baasのようなフレームワークだったということを知りました。AWSからもCognitoが出ていますが2-Tierアーキテクチャのサーバーレスな世界が少しずつ近づいてきているような気がします。Swift2.0からオープンソースになるということで各種Baasの処理をSwiftでカスタマイズできるようになったりしたら面白いですね。
昼はフィッシャーマンズワーフへ
5日目にもなると余裕が出てきたので昼に少し遠出をしてみようかということになり、同僚とフィッシャーマンズワーフにお昼ご飯を食べに行ってきました。正直なところ、ダウンタウンは汚く、高い建物も多いのでそれほど最高な街だなーとは思いませんでしたが、フィッシャーマンズワーフは自分のイメージ通りのサンフランシスコでした。遠くには海が見え青空が広がり、アメリカンなカラフルなお店がたくさん並んでおり最高な街並みでした!
ピア38という商業ゾーン的なところをお散歩しながら名物のクラムチャウダーを食べました。すごくおいしいんですが、でかすぎてメインまで食べ切れませんでした(笑)。
App Search and Spotlight Lab
ラボのためにSearchAPIを試しにコーディング
会場に戻ってきたあと、Search APIの要素であるNSUserActivity
やCSSearchableItem
について実装方法を聞きに行くためデモアプリを実装していました。デモアプリの作りとしてはテーブルビューでレシピ一覧があり、タップするとレシピ詳細画面に遷移するだけの簡単なアプリです。こんなアプリがあったときにどのように実装するのがよいのか?ということを聞いてみました。例によって話しても伝わらないと思ったので、Question1から4までコード上に以下のようにコメントで書きました。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Question1: Where to instance a NSUserActivity in best place?
// Question2: What purpose of NSUserActivity?
let activity = NSUserActivity(activityType: "jp.co.recruit-mp.SearchAPISample")
activity.title = "Recipe"
activity.keywords = ["recipe", "cooking", "menu"]
activity.userInfo = [
"id" : "001",
"description" : "あああ"
]
activity.contentAttributes = [
"contentDiscription": "ほげほげほげほげほげ",
"thumbnailData": UIImage(named: "aaaa")!,
"relatedUniqueIdentifier": "recipe001"
]
activity.eligibleForPublicIndexing = true
activity.becomeCurrent()
// Create an attribute set for an item that represents an image.
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeImage as String)
attributeSet.title = "レシピ"
attributeSet.contentDescription = "ほーげほーげふががあがが"
// Question3: What should I set the uniqueIdentifier here?
let item = CSSearchableItem(uniqueIdentifier: "recipe001", domainIdentifier: "jp.co.recruit-mp.SearchAPISample", attributeSet: attributeSet)
// Index the item.
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { (error) in
if let e = error {
// Question4: When do errors ocurred?
print(e.localizedDescription)
} else {
print("search item indexed")
}
}
return true
}
ラボに突入
まず自分で実装していて気づいたのは、NSUserActivity
とCSSearchbleItem
は独立して使えるということです。単にiPhoneやiPad内でSpotlight検索したいだけならCSSearcheItem
を登録するだけでOKです。
次にNSUserActitivy
をどの単位で作成するかということですが、今回のようなレシピ一覧アプリではレシピごとにkeywords
が変わったりする(例えば材料に肉が使われてたり、野菜が使われたり)ので、今回で言えばレシピ一覧でレシピをタップしたときにNSUserActivity
を作るといいかもという話でした。さらに言えば、レシピ詳細でLikeボタンや口コミの投稿したときなどユーザーが行動した単位がよいということを言っていました。ただ今回の担当者の方の英語がとても速くほとんど聞き取れなかったので微妙なところです。。詳しい方がいたら教えていただきたいです。
次にこれもよくあることだとは思うのですが、例えばデータをサーバー側で管理している場合に、サーバー側に新しくデータが追加された場合はどうなるのかということを聞きました。アプリ側でNSUserActivity
が作られなければPublic Indexされないというなら、アプリを立ち上げてもらわないとダメなんじゃないかと思ったからです。
これに関しては、セッションでも語られていましたがWebサイト側にPublic Index用のmetaタグを書いておけばAppleのクローラーが巡回してとりにきてインデックスしてくれるとのことでした。私がちゃんとセッションを見ていなかったのでちゃんと見てから行けばよかったと反省しています。一方で、Webサイトのmetaタグでインデックスできてしまうのなら、NSUserActivity
はなんのためにあるんだろうか・・というところは謎のままですが、少し理解が進んだように思います。とにかくこのSearch APIは、今後対応が必要なことの一つだと感じました。
ちなみに、今回担当していただいた方は、イタリア語?のようななまりがありスピードも速くほとんど聞き取れませんでした。。私が分からなそうな顔をしていたので表現を変えて説明してくださるのですが、やっぱり速くて聞き取れなく申し訳ない気持ちでいっぱいでした。
WWDC終了
金曜日のセッションは15時半ごろに終了します。この頃になると会場も人も少なくなってきていました。セッションが終わったあとは会場の有線LANゾーンで、帰りの飛行機で見るためのセッションビデオをダウンロードしていました。1GBオーバーのビデオがなぜか1分弱でダウンロードできるので専用サーバーが会場にあるんじゃないかという説が流れていました。
ある程度ダウンロードし終えたあと会場をくまなく回ってみて写真をとったりして会場をあとにしました。これで私の初のWWDCが終わりました。今年は確か約70%が初参加の参加者だったそうです。1)keynoteで言ってたけどうろ覚え一度も行ったことがない人はきっと来年も当たりやすいような気がします。
最後となりましたが、WWDCへの参加を承諾して頂いた関係各位に感謝しています。弊社ではWWDC以外にもGoogle I/O、Adobe Maxなど海外のカンファレンス参加が奨励されています。そういった制度にご興味を持った方は中途の方も新卒の方も是非ご応募頂ければと思います!ほぼ旅行記のようなレポートですが読んでいただいた方もありがとうございました!
脚注
↑1 | keynoteで言ってたけどうろ覚え |
---|