質問: 前提 --- 最近、とある新規サービスの開発に参画し、エンジニアサイドは自分一人という状況にあります。 とはいえ、経験も浅く、要件定義に関しては不安も多く、今回質問させていただきました。 前提として、プロジェクトの構成は以下のような形です。 * 企画・営業(プロマネ含む) 3人 * デザイナー(少しフロントのコーディングできる) 1人 * エンジニア(バックエンドをRailsで開発する) 1人 企画が既に煮詰まりつつあるところに参画したため、ある程度、企画サイドから想定するサービスの仕様は作られており、エンジニアの自分としてはその企画を見つつ、現実的なところとリスクと照らし合わせながら要件定義を立てつつ実装を進め始めています。 とはいえ、明らかにセキュリティ面や倫理的にリスクが高いであろう部分もあり、エンジニアとしても無責任な実装をしてサービス運用時に問題となることは避けたいと考え、要件定義の段階で企画サイドへの助言をしたい部分があります。 Instagramの情報をクローリングするリスクと対策 ---------------------------- サービスの仕様的に、Instagramの特定のアカウントのフォロー・フォロワー一覧を取得しなくてはいけない部分やInstagramに投稿されたメディアの特定のタグを検索して表示する部分があります。 その要件に対して企画側が想定している実装として以下のような認識であることがわかりました。 * いち早く当サービスをリリースしたいが、Instagram APIの審査の厳しいと聞いているので結構時間がかかりそう。なら、いっそのことクローリングして各種情報を取ってくる実装にしたい。 * Instagram側にログインしないと取れない情報もあるのでInstagramの`ID`, `Password`も当サービスに入力してもらって、クローラーでログインの上、情報を取ってくればいいのでは。 ### リスクと感じる点 * ユーザーのInstagramのプレーンな`ID`, `Password`を当サービスで情報保持することは限りなくアウトと感じる(家計簿アプリなどの銀行連携と同じようにユーザーとしてもそれらを入力させることで不信感を抱く可能性が高い) * 一度暗号化して保存して, クロールのたびに復号化して利用するということも可能と思う * しかし、他サービスの認証情報を保持することのリスクは非常に高いという認識 * クロールすることのコストは高いと感じていて、ユーザー数と比例して処理が発生するため運用がつらいのではないか ### 自分が企画サイドへ助言したいこと * InstagramのWebAPI利用の審査は厳しいが、自らもその審査項目を満たせるように努力して認可を得るよう尽くしたい * その上で、WebAPIの申請をし、公式APIから各種情報を取ってくるような実装を可能としたい * APIにはサンドボックスモードがあることも伝え、API利用申請時に開発中の当サービスのUXやユースケースをInstagramの審査機関側に適切に伝えられるようなプロトタイプを組めるよう開発を進めていくことも押さえる ### お聞きしたいこと 今回のケースは、みなさんならどのように解決しますでしょうか? 何か説得力に欠ける、であったり、そもそもクロールはサービスを運用していく上で倫理的にまずいであったり、そういった先を見据えての意見などがいただけると有難く存じます。
回答: 「他人のサービスのID/Pass」を預かるというのも一発アウトに近いものと感じますが、それに加えてInstagramのクローリングは**規約違反**です(利用規約)。 > > 10. Instagramは、自動装置などを使って本サービス上のあらゆるコンテンツ(利用者のプロフィールや写真を含みますが、これに限定されません)を巡回、収集、キャッシングしたり、これにアクセスしたりすることを禁止しています(ただし、標準的な検索エンジンプロトコルまたはInstagramが明示的に認めている検索エンジンが使用する技術を用いる場合を除きます)。 > > > 仕事としてやる以上、「規約違反でいつInstagram側にブロックされるかわからない」のでは手を付けないほうが賢明です。