畳むことになってしまい、大変残念なので記念にメモ
もともとはNTTレゾナントが主催するchallengers
というビジネスコンテストで入賞したのがきっかけで、このアプリを作ることになった。
仲間と作ったので、思い入れも多分にある。
使用言語
iOS側
Objective-C
ネイティブアプリという要件だったので。
サーバ側
Python 2.7.3
直近のプロジェクトで使っていたこともあり、ノウハウが蓄積されていたのでPythonを使うことにした。
使用ミドルウェア
iOS側
sqlite
ユーザの画像情報やfab(お気に入り)した情報を保存するために利用していた。
サーバ側
AWS DynamoDB
今回のようなfabしたり、されたりするアプリは複雑なデータベース操作をする必要がない。
データの出し入れが素早く行え、かつメンテナンスフリーなAWS DynamoDBは今回の開発にはもってこいだと思い採用した。
実際、予想通り応答性もよくトラブルも無かった。
twisted
apnsへpush通知を行う為に使用した。
ちなみにInstagram のスケール正攻法を参考にした
apache 2.4.3
使い慣れていたので。ただそれだけ。
使用フレームワーク及びライブラリ
iOS側
nimbus kit
画像の非同期取得とカスタムしたツールバーにバッチを表示させるために使用している。
AFNetworking
直接は利用していないが、nimbuskitを使うためには必須。
Reachability
端末の通信状況を監視するために利用している。
実際監視せずにアプリを申請したらリジェクトされたw
fmdb
SQLiteとのやりとりで使用した。
Facebook SDK ver3.0.7
このアプリはFacebook認証が必須。
最初はバージョン3.1系のSDKを使っていたのだが、ユーザ使用している端末がiOS6の場合、認証の挙動が以前(Facebookアプリを呼び出してからの認証)と違うため、ユーザが認証を拒否することが多かった為、3.0.7にダウングレードしたという経緯がある。
サーバ側
Django 1.4.X
使い慣れている上、DyanamoDBを利用するためのライブラリが揃っていたため、使用した。
django-storages
ユーザの画像をAmazonS3へ送信する為に使用した。
ほんの数行プログラムを追加するだけで、簡単にS3へ送信することが出来る。
boto
DynamoDBとのやりとりで使用。
その他の用途としては、サーバの設定情報を全部boto.cfgに書いていた。これがとても便利。
bpmappers
端末とサーバ間でやり取りするデータの差異をbpmappersで埋め合わせていた。
Dynamodb-mapper
Dynamodbを操作する際、このORマッパーを利用していた。
botoで直接操作するより楽。
DynamoDB-Mock
その名の通り、Dynamodbのモック。
単体テストでDynamodb代わりに使用していた。
django-dynamodb-sessions
Djangoのセッション機能はDynamodbをサポートしていないため、このライブラリを利用する必要がある。
pyapns
apnsへpush通知を送信する為に使用していた。
facebook-sdk
FQLを発行する為に使用した。
その他
サーバ構成はAWS CloudFormationを使って自動構築するようにしていた。
作成する要素は
- ELB×1
- autoscaling
- apiサーバ×1
- DynamoDB×13テーブル
といった感じのシンプルな内容。