読者です 読者をやめる 読者になる 読者になる

yashigani?.days

週刊少年ジャンプについてだらだら書きます

Hatena Engineer Seminar #4で「はてなのiOSアプリとSwift」という発表をしました #hatenatech

2/7に開催されたHatena Engineer Seminar #4 @Tokyoで「はてなiOSアプリとSwift」という発表をしてきました.

現在,はてなiOSアプリ開発ではSwiftを標準的に採用しており,その経験を紹介した形です. 発表スライドはこちらから御覧ください.

Swift with apps by Hatena // Speaker Deck

補足

例に使っているコードについて

例としてあげたSwiftのコード例は冗長なものですが,型推論できずコンパイルできなかったので意図に助長な実装にしています. 推論がキチンと働けばsortedに与えるclosureの引数は省略することができます.

func latestHotentry(bookmarks bs: [Bookmark]) -> Bookmark? {
// 仕様どおりに型推論されればこれでよい
    return bs.filter { $0.isHotentry }
             .sorted { $0.bookmarked.compare($1.bookmarked) == .OrderedDescending }.first
}

スライドでも言及していますが,主にclosureまわりは推論が弱い印象があります.

Objective-Cの例について,改行を盛っているという意見があるかもしれません. その意見は全くもって正しくて,スライドの都合上可読性のため意味的には無駄な改行を入れています. しかし,実際に実装するにあたっても可読性のために同じようなところに改行を入れるとおもいます.

懇親会で質問されたこと

覚えている範囲ですが,懇親会で質問されたことを紹介します.

はてなにはモバイルアプリのエンジニアは何人くらいいるのか

現状アプリ開発を担当しているのは4人です. ちなみに現在開発に関わってはいませんが,スキルを持っているエンジニアはあと3人いるので,スマート会は7人で構成された組織です.

ReactiveCocoaは使っていないのか

使っていません. ReactiveCocoaはかなり大きく複雑なライブラリですし,実装を大きく変えてしまいますので,依存があまりに大きいです. iOSアプリ開発は毎年変化がかなり激しいので,できるだけ依存は減らしたいのであえて採用していません. 一方で,スライドで紹介したMantleはやっていることが小さい(JSONからモデルへのマッピング)ので取り替えが難しくありません. そういうものは積極的に採用しています.

感想

長時間なだけでなく,発表の内容も幅広くバラエティに富んでいたので参加者のみなさんはさぞ疲れただろうとおもいます. にも関わらず,最後まで真剣に聞いていただきありがとうございました!

追記

Twitter経由で質問をもらったので追記します.

このようにHTTPのレスポンスを抽象化して,genericsで解決すると楽です.

https://github.com/cockscomb/Swift-APIClient-Sample/blob/060ba8e9cb4e9924a071d7b3adf533bbb2832bc3/APIClient/APIClient.swift#L60-L78

この戦略については,「はてなエンジニアアドベントカレンダー2014」でid:cockscombが詳しく紹介しています.