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経由で質問をもらったので追記します.
@yashigani MantleをSwiftで使うと、NSArrayで毎回キャストが面倒になった記憶があるのですが、そこらへんはどうにかできるんですか?
— let m={(x:Int)in ~x} (@matuyuji) 2015, 2月 9
このようにHTTPのレスポンスを抽象化して,genericsで解決すると楽です.
この戦略については,「はてなエンジニアアドベントカレンダー2014」でid:cockscombが詳しく紹介しています.