Google Drive API で超簡易的な共有サービスを作ってみた
結婚式や懇親会で撮影した写真について、主催の方から「撮影された写真送ってください!」とお願いされたことはないでしょうか。
私自身、ここ数ヶ月のうちに幾つかの式に参列させていただいて
「この写真どうやって共有しよう」 「Googleドライブだとマイドライブの容量食うのでは?」
「オーナー権限を受け入れてもらうのも手間かな」 「L●NEで送ったら画質落ちる?」
と、もやもやしていました🤔💭
そんな時、 Google Drive API の存在を知り、「これ使えるんちゃう!!!???」となりました。
今回は超簡易的な共有サービス(?)開発を通して、Drive API を検証したことを記事にまとめました。
リポジトリ
内容
- 指定のGoogleドライブへ「画像」のアップロードが可能
- mimeType の設定次第で、画像以外も可能
- ユーザータイプを判断可能
- 一般ユーザー or 管理者ユーザー
- URLに付加された auth_code で判断
- 管理者ユーザーのみ
- アップロードされた内容を削除可能
- ページャーで指定件数ずつ表示
ざっくり構成
- PHP 8.1
- データベースなし
- 要件的には特になくても問題ない。インスタンス立てるコストやオーバーヘッドも考慮
- フレームワークなし
- PHPの仕組みを改めて整理するためなし
- URLを知っている人は誰でもアクセスできる
- 信頼している人にしか送らないのでOK
- 複雑なパラメータを付加しているので検証レベルであれば問題ない(YouTubeやGoogleドライブの「リンクを知っている人にだけ共有」のイメージ)
- Google Cloud で「新しいプロジェクトを作成」し、「認証情報を作成」する
- Drive API を有効化する
- OAuth 2.0 クライアント ID を作成し、
client_secret_hogehoge.json
をダウンロードする - サービスアカウント を作成し、
service-account-credentials.json
をダウンロードする
Drive API の処理について
以下の公式ドキュメントを参考に設定しました。
ローカル開発環境について
開発PC : Macbook Air 上に Docker Desktop をインストールし、
OS は Rocky Linux 9 を採用しています。
理由としては
- CentOSの創設者である Gregory Kurtzer 氏 が関わられており、今後普及しそうだなと感じた
- 2032年3月末までサポートしてもらえる
からです。
docker-compose.yml は以前構築していたものをベースにしました。
本番環境について
検証も兼ねて、実際に自分で試してみました。
今回のサービス規模は検証レベルなので、
安価かつ個人的に別で使用しているサーバーと共存する形で
ConoHa Wing へデプロイし、関係者にURLを共有しました。
設定メモ
ConoHa では PHPのバージョン、php.ini を以下のように設定する必要があります。
upload_max_filesize=500M
post_max_size=500M
memory_limit=500M
display_errors=off
デモ
※アップロードされた画像は一定時間毎に全て削除されるようにしています
所感
記念すべき Zenn 初投稿!🎉
個人でのゲーム開発の息抜きにサクっと作ってみました。
細かな改善ポイントは色々とありますが、
とりあえず やりたかったこと は試せたのでヨシ!
アップロードした画像サイズのまま関係者に共有し、
かつ各々のユーザーのドライブ容量を食わないようにできました😤
日常の疑問や課題を形にできるのは楽しいですね。
ぜひみなさんも試してみてください!
Discussion