Pocket

※本記事は、エンジニアのためのWebマガジン「CodeIQ MAGAZINE」の記事をReadWrite Japanにご提供頂いたものです。

DeNAで取り組んできた非ゲームの新規事業開発。その新規サービスの中で、iOS開発にフォーカスして、利用頻度の高かったライブラリやサービスをランキング形式でお届けします。

紹介してくれるのは、DeNAエンターテインメント事業本部でiOS/サーバ周りを担当している沖津貴智さんです!
by 馬場美由紀 (CodeIQ中の人)

DeNAにおけるiOSアプリ開発

DeNA沖津です。DeNAでは、エンターテインメント事業本部という部署を新設し、非ゲームの新規事業開発に取り組んできました。
1年以上経過した現在、十数のサービスを開発し、リリース・運用を行ってきました。社内のGithub Enterprise上には、たくさんのプロジェクトのリポジトリが作成されており、エンジニア全員が自由に閲覧・プルリクエストを送れる環境にあります。
詳しくは、デブサミ2014「DeNAにおけるゲーム以外の新規事業の立ち上げ方」のスライドを参考にしてください。
新規サービスですが、アーキテクチャに関してはすべてリードエンジニアが決定します。ほとんどのプロジェクトにおいては、開発開始時に、その時点で最もモダンな構成を採用するケースが多いです。
今回はその中でもiOS開発にフォーカスして、利用しているライブラリやサービスをご紹介していきたいと思います。

iOSエンジニアのオープンソースライブラリ利用頻度ランキング

DeNAでは、iOSのライブラリ管理は、オープンソース・社内ライブラリにかかわらずすべてCocoaPodsで管理しています。今回は、十数のプロジェクトのPodfileを勝手に覗いて、オープンソースライブラリの利用ランキングを勝手に出してみました。

1位 AFNetworking

AFNetworking https://github.com/AFNetworking/AFNetworking

afnetworking

iOSのスーパーハッカーであるMattt Thompsonさんの代表作、HTTPネットワークライブラリ AFNetworkingです。サーバとHTTP通信が必要な環境下においてその威力を発揮してくれます。ほとんどのiOSプロジェクトで利用されていたため、ほとんどのエンジニアが迷いなく利用していることがわかりました。

2位 SDWebImage
SDWebImage https://github.com/rs/SDWebImage

sdwebimage

画像のダウンロードを非同期でよしなにやってくれるライブラリです。これとAFNetworkingがあれば、サーバからリソースを取得する部分をすべて簡単に非同期化できるため、メインスレッドが不用意にブロックされることがなくなったり、NSOperationQueue等を利用した複雑なスレッド処理からも解放されます。
それ以上に便利なのが、画像のキャッシュの仕組みで、キャッシュ先にディスクやメモリなど保存先を複数選べることももちろんですが、有効期限の設定や削除の仕組みがデフォルトでよくできており、パラメータを変更せずとも適切なキャッシングをしてくれます。AFNetworking同様、迷わず利用されているライブラリの一つです。
@ninjinkunさんがまとめられた素晴らしいスライドがありますのでこちらを参照すればSDWebImageの素晴らしさがより理解できると思います。
素晴らしいスライドありがとうございます!

3位 BlocksKit
BlocksKit https://github.com/zwaldowski/BlocksKit
いろいろ面倒なDelegateをBlockで記述できるBlocksKit。1位のAFNetworkingから3位のBlocksKitまでは、ほぼ同一の利用率となってました。完全に定番ですね。
今年はじめにバージョン2.0へのメジャバージョンアップがあり、その時にすべてのメソッドにbk_* のプレフィックスが追加されました。バージョン1.0系を利用していたプロダクトはアップデートが少し面倒ですが、iOS全体としてカテゴリに追加するメソッドにはプレフィックスが付与される傾向にあるようなので、余裕があるときに対応しておきたいところです。

4位 MagicalRecord
MagicalRecord https://github.com/magicalpanda/MagicalRecord
CoreDataへアクセスする際の記述を容易に書けるようになるO/Rマッパーです。CoreDataを利用するアプリケーションのほとんどは、MagicalRecordを利用する傾向にあるようです。著者自身もよく利用してます。もはやNSFetchRequestを利用した書き方を忘れてしまっているぐらいです。(※だだし依存は禁物です)
BlocksKit同様、バージョン3.x以降ではメソッド名にプレフィックス(MR_*)を付与する必要がありますので、こちらも早めの移行をしたほうがよさそうです。
(MagicalRecord/Shorthandを利用することでしばらくは回避可能です)
こちらのマンガボックスの記事も参考にしてください。

5位 CocoaLumberjack
CocoaLumberjack https://github.com/CocoaLumberjack/CocoaLumberjack
ログ出力用のライブラリです。ログ出力に関しては、本ライブラリがDeNA内でデファクトスタンダートになっているようです。著者自身も使っていますが、出力先をXcodeのコンソールだったり、MacOSXのConsole.appだったり、それら複数だったり、様々な出力に対応しているのが良いです。
MacOSXのConsole.appに出力した場合、端末をUSB接続してXcodeのメニュー Window > Organizer を実行し、左カラムより対象のデバイスのコンソールを開くことでログを確認することができます。

organizer

また、iPhone構成ユーティリティMacWinを利用してログを確認することもできます。
こちらはWindowsにも対応しているため、非エンジニアの方(例えばQA業務の方)も実機確認中にログを確認することができるようになります。エビデンスにも利用できるため非常に便利です。

iphone_configuration

使い方に関しては、クラスメソッドさんの解説ページが詳しいのでこちらを参照してみてください。クラスメソッドさんのサイトは情報が充実してまして非常に参考になります!

6位 MBProgressHUD
MBProgressHUD https://github.com/jdg/MBProgressHUD

progress

プログレスビューを表示するライブラリです。
これも古くから使われている定番ですね。
プログレスビューはアプリケーションの個性につながるので独自デザインで表現したいところですが、MBProgressHUDのデザインは昔から馴染みのあるデザインのため、ユーザにとっては安心感が生まれるので個人的には好きです。
そういう意図があってのランキング上位なのかどうかは不明です(ただただ楽をしたいだけかもしれません)

7位 AFJSONRPCClient
AFJSONRPCClient https://github.com/AFNetworking/AFJSONRPCClient
AFNetworking上で動作するJSON-RPCクライアントライブラリです。DeNAの新規サービスは、クライアント-サーバ間のやりとりにJSON-RPCが採用されるケースが多いため、ランキング上位に入っています。

8位 TTTAttributedLabel
TTTAttributedLabel https://github.com/mattt/TTTAttributedLabel

ttt

こちらもMattt Thompsonさんの代表作である TTTAttributedLabel です。文字装飾用のライブラリです。
iOSにおいては昔から文字装飾が非常に大変だったんですが、このライブラリのおかげでかなり助けられました。iOS6以降、標準で NSAttributedString が追加されて 本ライブラリの役割は終えたかとも思いましたが、文字の高さ計算が期待通りではなかったり、文字をリンクさせる場合はロジックが複雑になってしまったり、iOS5で利用できないなど、結局TTTAttributedLabelに頼るケースが多かったと記憶しています。
弊社での利用頻度が高いのもそのあたりが影響していると想像できます。
iOS7以降は、NSAttributedStringが比較的使いやすくなってきたため、これから新規開発をする場合には積極的にNSAttributedStringを利用するのがよいと思われます。

とても活用している開発支援サービス

iOS Developer Enterprise Program
iOS Developer Enterprise Program https://developer.apple.com/jp/programs/ios/enterprise/

iosdev

iOS Developer Enterprise Program は、組織内の社員やメンバーに配布することができるiOSアプリケーション開発を行うことができるライセンスです。年間参加費 24,800円がかかります。
iOS開発において、開発途中のアプリケーションを社内の人に使ってもらってフィードバックを得たり、QAで実機テストする機会はとても多いと思います。
通常、開発途中のiOSアプリケーションを実機にインストールする場合は、インストール対象の実機のUDIDの登録が必須であり、TestFlight等のサービスを利用して、UDIDの取得・登録を効率化していると思います。
また、さらに面倒な制約として、1アプリケーションあたり(厳密には1AppIDあたり)100デバイスまでの制限があります。弊社のような2000人規模の会社の場合、UDIDの登録も非常に煩わしいのですが、この100デバイス制限にすぐに引っかかってしまいます。
そういった場合に非常に便利なのが、iOS Developer Enterprise Program です。iOS Developer Enterprise Program を利用することで、以下の恩恵を得られることができます。
UDIDの登録が不要
100デバイス制限がない(無制限に配布が可能)
ライセンスの契約には、少々手間がかかりますが、会社で一つライセンスを持っておけば、年間参加費24,800円以上の効果は見込めます。おすすめです。

Crittercism
Crittercism http://www.crittercism.com/

critter

アプリのクラッシュ解析のサービスです。有料プランで利用しています。アプリケーションのクラッシュレポートをリアルタイムで検知し、デバッグに役立たせることができます。AppStoreにリリースしているバイナリのdSYMファイルをアップロードすることで、クラッシュ時のスタックトレースを詳細に把握することができます。
どのバージョンでどの程度クラッシュしたかなどの統計情報もみれるため、「スタックトレース解析 -> デバッグ -> リリース -> クラッシュの減少を確認する」という当たり前のサイクルを効率的に行うことができます。
クラッシュの減少が数値化されるのは直しがいもあって非常に楽しいですね。同様のサービスでcrashlyticsというサービスがありますが、こちらは無料プランが充実しているようです。

まとめ

ランキングに関しては、定番ライブラリの利用頻度が高い傾向にあることがわかりました。あまり面白みのないランキングになってしまった気もするのですが、逆に言うと堅実なアプリケーション開発を心がけているようにも感じます。
次回はただのランキングではなく、おすすめライブラリをご紹介します。 また、開発支援サービスに関しても同様にどんどん紹介していきたいと思いますので、ご期待ください!
DeNAエンジニアブログでも、最新技術や開発事例について発信しています。⇒「MobageDevelopersBlog」「Technology of DeNA

—-
寄稿者プロフィール 沖津貴智氏
沖津貴智氏株式会社ディー・エヌ・エー エンターテインメント事業本部所属のiOSエンジニア。「Mobage」「横浜DeNAベイスターズ関連アプリ」「comm」等の開発に関わり、現在はエンターテインメント事業本部で、新規事業のiOS/サーバ周りを担当してます。
Twitter:@okitsu
Facebook:okitsu.takatomo
—-

記事出典:CodeIQ MAGAZINE

<CodeIQ MAGAZINE関連記事>
作りたいアプリ・機能を一発逆引き!iOS SDK機能、フレームワーク概要まとめ #iOS8 #DeNA
iOS 8で解禁されたカスタムキーボードを作ってみよう #iOS8 #DeNA
2作りたいアプリ・機能を一発逆引き!iOS SDK機能、フレームワーク概要まとめ #iOS8 #DeNA

Pocket