🙆‍♀️

開発者として、Instagram フォロワーデータエクスポートの課題をどう解決したか

に公開

概要​

この記事では、俺が SNS 関連ツールの開発を進める中で、Instagram フォロワーデータのエクスポート機能を実装する際に直面した問題、それを一つ一つクリアしていった過程、そして開発の末に得られた知見をシェアします。特に「データ取得の安定性」「ユーザーの利便性」「メモリ負荷の制御」といった開発現場で必ず遭遇する課題に焦点を当てて話すので、同じように SNS データを扱う開発者には参考になる内容になっています。​

対象読者​

この記事は以下の方を対象にしています。​
SNS データを活用したツール開発に従事しているエンジニア​
Instagram の API やデータ取得ロジックの実装で困っている開発者​
ユーザーが使いやすいデータエクスポート機能を作りたいが、具体的なアプローチが分からない新人〜中級エンジニア​
大規模なデータ処理でメモリ不足の問題に直面したことがある開発者​

開発のきっかけ:なぜ Instagram フォロワーエクスポート機能を作ろうと思ったか​

俺たちのチームは、主に中小企業向けの SNS 運用支援ツール「EasyComment」を開発・運用しています。約 1 年前、多数のユーザーから「Instagram のフォロワーリストを簡単に Excel で整理したい」「フォロワーの属性を分析するために、ユーザー名やプロフィール URL を一括で取得したい」というフィードバックが寄せられました。​
最初は「Instagram Graph API を使えば、これらのニーズは満たせるだろう」と安易に考えていました。しかし、実際に API の仕様を調べて試してみると、想定外の壁にぶつかりました。それが、俺たちに「自前でフォロワーエクスポート機能を開発する」という決断をさせたきっかけになります。​

開発で直面した 3 つの大きな課題​

課題 1:Instagram の API 制限と認証の複雑さ​

Instagram Graph API には、データ取得の範囲や頻度に厳しい制限があります。例えば、ビジネスアカウントであれば一部のデータを取得できますが、プライベートアカウントのフォロワー情報は原則取得不可です。さらに、API を使用するためには Facebook Developers の審査を通過しなければならず、審査には数週間かかることもあり、ユーザーの緊急なニーズに応えるのが難しい状況でした。​
俺たちは、一旦 API を使う方向を保留し、「ユーザー自身がアクセスできる範囲内でデータを取得する方法」を模索し始めました。この時、OAuth 認証を活用することで、ユーザーの Instagram アカウントに安全に接続できることに気づきました。OAuth を使えば、ユーザーがパスワードを直接入力する必要がなく、アカウントの安全性を担保しつつデータにアクセスできるので、これを基盤に開発を進めることにしました。​

課題 2:大規模データの取得時に発生するメモリ不足​

開発を進めていくと、次に「フォロワー数が 10 万件を超える大きなアカウントで、データ取得中にメモリ不足が発生する」という問題が浮上しました。最初の設計では、取得したデータを一度にメモリに格納してから CSV ファイルに出力するようにしていたため、データ量が多くなると PC のメモリリソースを圧迫し、処理が途中で止まることが多発しました。​
この問題を解決するために、俺たちは「ストリーミング処理」のアプローチを導入しました。具体的には、データを一定量(例:1000 件ごと)ずつ取得し、取得するたびに即座にファイルに書き込み、メモリから解放するようにロジックを修正しました。これにより、メモリの使用量を大幅に削減し、10 万件以上のデータでも安定してエクスポートできるようになりました。​
開発者としての小技をシェアすると、Python でこの処理を実装する際は「csv.writer」を使い、データを逐次書き込むようにすると効果的です。以下に簡単なコード例を示します。​
import csv
import requests

def export_followers_streaming(api_url, output_file):
# ストリーミングでデータを取得(1000件ごとにページング)
page = 1
with open(output_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
# ヘッダーを書き込み
writer.writerow(['username', 'profile_url', 'follow_date'])

    while True:
        response = requests.get(f"{api_url}?page={page}&limit=1000")
        data = response.json()
        if not data['followers']:
            break  # データがなくなったら終了
        
        # 取得した1000件を逐次書き込み
        for follower in data['followers']:
            writer.writerow([
                follower['username'],
                follower['profile_url'],
                follower['follow_date']
            ])
        page += 1

この方法で、メモリの負荷を抑えながら大規模データを処理できるようになりました。​

課題 3:ユーザーが使いやすいインターフェースの設計​

技術的な課題だけでなく、「ユーザーが簡単に操作できるか」という点も重要でした。初期のバージョンでは、データ取得の設定(取得件数、出力形式など)が複雑で、多くのユーザーから「操作が分からない」というフィードバックがありました。​
俺たちは、ユーザーヒアリングを重ねた結果、「最小限の操作でエクスポートできるようにする」を目標にインターフェースをリニューアルしました。具体的には、以下の改善を行いました。​
「Instagram アカウントに接続」ボタンを画面中央に大きく配置し、認証フローを 1 ステップで完了できるようにする​
取得件数の設定を「全件取得」「1000 件まで」「5000 件まで」の 3 択に簡素化​
エクスポート中に進捗バーを表示し、ユーザーに「いつ終わるか」を明確に伝える​
これらの改善により、ユーザーの操作ミスが大幅に減り、「使いやすい」という評価が増えました。​

開発した機能:Instagramフォロワーエクスポーター

上記の課題を一つ一つ解決していく過程で、俺たちは「EasyComment」に「Instagramフォロワーエクスポーター」機能を追加することに成功しました。この機能は、これまで話してきた開発経験をすべて凝縮したもので、以下の特徴を持っています。​
安全な認証: OAuth 認証を採用し、ユーザーの Instagram パスワードを保管しないため、アカウントの安全性を最大限に担保​
プライベートアカウント対応: ユーザー自身がアクセス可能なプライベートアカウントのフォロワーデータも取得可能​
大規模データ対応: ストリーミング処理により、10 万件以上のフォロワーデータでもメモリ不足を起こさず安定してエクスポート​
使いやすい操作: 3 ステップ(アカウント接続→取得件数選択→エクスポート)で完了し、初心者でも簡単に使える​
多様な出力形式: CSV(Excel で開ける)以外に、JSON 形式での出力にも対応し、開発者がデータ処理しやすいようにしています​
実際にユーザーに提供してから、「API を使う手間が省けて助かった」「プライベートアカウントのデータも取得できるのは非常に便利」といったフィードバックを多数いただき、当初の開発目標を達成できたと感じています。​

開発を通じて学んだことと今後の課題​

今回の機能開発を通じて、俺は「ユーザーのニーズを深く理解することが、技術的な課題を解決するキーになる」ということを改めて感じました。最初は API を使うことに固執していましたが、ユーザーが「簡単」「安全」「速く」というニーズを優先することで、新しい解決策を見つけることができました。​
ただし、今後解決しなければならない課題も残っています。例えば、Instagram の仕様が変更になると、データ取得ロジックも修正する必要があり、その維持管理が今後の課題の一つです。また、一部のユーザーから「フォロワーの投稿内容まで分析したい」という要望もあり、今後はこうした機能拡張も検討していきたいと思っています。​
最後に、同じように SNS データを扱う開発者の方に質問があります。Instagram の仕様変更によってデータ取得ロジックが突然動かなくなった場合、どのように迅速に対応していますか? 俺たちは現在、仕様変更を検知するモニタリングシステムを検討していますが、良いアイデアがあればコメントで教えていただけると嬉しいです。

Discussion