アニマネ開発日誌

アニメアプリのアニマネの開発日誌です。

iOS9のATSになるべくお金を掛けずに対策する

みなさん初めまして。 アニマネというアニメ好き向けのiPhoneアプリを開発しているid:animaneです。

アニマネとはアニメの番組表やニュースを提供しているiPhoneアプリです。

app.animane.net

ここでは開発中のメモや裏話的なものを記録したいと思い始めてみました。 Qiitaにするか迷ったけど、グダグダと文章を書くならこっちかなと思い、ブログを選択しました。

ということで、初回はiOS9のATSについてです。 アニマネで対策を検討中なので、この場を借りてまとめてみます。

ATSとは?

iOSアプリ開発者であれば説明不要と思いますが、Xcode7で開発したiOS9からはSSL通信が必須になるというやつです。 特定のサーバーだけであればさして問題ではないのですが、色々なホストに接続しているとやっかいです。

対処方法

詳しいやり方は検索すればすぐに見つかるので省きますが、下記になります。

  1. ATSをオフにする。
  2. ATS適用の除外ホストを指定する。
  3. (Web閲覧のみ) SFSafariViewControllerを使う
  4. 利用している通信経路全てでSSLを導入する。

1と2はそのうちリジェクトされるようになると思うので、アニマネでは3と4で対策していく予定です。

3については下記も参考になります。

iOS9 - ATS対策 外部ページの表示にはSFSafariViewController - Qiita

アニマネで対策が必要な箇所

  • ニュース記事の閲覧
  • お知らせ、アップデート情報の表示
  • JSON、messagepack、画像等

ニュース閲覧はSFSafariViewControllerを使うとして、残り2つはSSL化が必要。 自サーバーなので、SSLの証明書を2つ用意すればいいんだけど、できればお金を掛けずにやりたい。

というのが今回の主な主旨です。

SSL/TLSに対応する方法

普通に証明書を取得する

一番単純な方法ですね。 アニマネの場合はお知らせ/アップデート情報の表示は独自ドメインサイトなので、この方法をとることになりそうです。

ドメイン認証のみのRapidSSLならさくらが良さそう感じ。

SSL(サーバ証明書)|さくらインターネット

ただ、1つのサーバーで使える証明書は、事実上一つのドメインだけという制約があります。 (ポート変えるとか、ロードバランサーやリバースプロキシかますとか、SNI使うとか色々方法はありますが、ここでは割愛します。)

普通の企業であれば、ドメインの数だけ証明書を用意するだけなのですが、個人ではあまりお金を掛けたくない。

ということで、SSLに対応する方法をもう少し考えてみます。

無料の証明書を取得する。

無料で証明書も取得できるようで、下記のページがよくまとまっています。

無料SSL証明書 | J-Stream CDN情報サイト

この中だと、まともに使えそうなのはLet’s EncryptとStartSSLかな。

上記であれば問題なく使えそう。

速度的に問題がなければ、無料の証明書で十分かなと考えています。

静的ファイルはSSL対応のホスティングを利用する

さすがに共有ホスティングサービスの共有SSLの利用はサービス的に不安なので、 (そもそも規約で静的ファイルのみの配信は許可していないケースが多そう) ある程度信頼性が高いサービスで探してみました。

CloudFlare

無料で使えるCDNとしてはわりと有名かと思います。

Home | CloudFlare | The web performance & security company

使ったことはなかったけど、調べてみると中々とよさそう。 アニマネの場合、画像はキャッシュされてもよいが、JSONなどのデータファイルは常にデータが更新されるため、キャッシュされると困ります。

cloudflareの場合は拡張子で判断しているようで、その点も問題なさそうでした。

uzulla.hateblo.jp

SNIを使っているので、無料でSSLも提供できるみたいですね。 証明書の内容は酷いようですが。。。

アニマネの場合はATSの問題だけなので、ATSでも使えるならCloudFlareを使うのは有効な対策と言えそうです。

Amazon S3

Amazon S3 (クラウドストレージサービス ) | アマゾン ウェブ サービス(AWS 日本語)

説明は不要と思いますが、Amazonのストレージサービス。 こちらもRestAPIでSSLが提供されています。

が、2015/9/18時点ではATSに対応していない模様。。。

【iOS9】Amazon S3のHTTPSを対応させる方法 - Qiita

S3自体は有料ですが、従量課金のためアニマネレベルのアクセスでは無料同然です。 堅牢性や今後のトラフィック増も考慮すると、十分な候補に上がります。

アニマネでのATS対応方針

ニュース記事の閲覧

SFSafariViewControllerを使ってATSに対応します。

お知らせ、アップデート情報の表示

無料のSSLを取得してみて、問題なさそうであればそのまま使います。 サービスに影響があるようなら、さくらあたりの安い証明書を導入しようかと思います。

JSON、messagepack、画像等

CloudFlareとS3を比較してみようと思います。 本来ならCloudFlareとAmazon CloudFrontを比較するべきですが、 コストを掛けないというのがお題なので、S3のSSL配信と、CloudFlareの速度を比較してみます。

比較結果はまたそのうちお伝えできるかと。

ちなみに、アニマネは現在メジャーバージョンアップを進めてまして、 Xcode6でガリガリ作っているので、ATS対策はもう少し先になりそうです。