🥳

Google Drive API で超簡易的な共有サービスを作ってみた

2023/10/20に公開

結婚式や懇親会で撮影した写真について、主催の方から「撮影された写真送ってください!」とお願いされたことはないでしょうか。

私自身、ここ数ヶ月のうちに幾つかの式に参列させていただいて
「この写真どうやって共有しよう」 「Googleドライブだとマイドライブの容量食うのでは?」
「オーナー権限を受け入れてもらうのも手間かな」 「L●NEで送ったら画質落ちる?」
と、もやもやしていました🤔💭

そんな時、 Google Drive API の存在を知り、「これ使えるんちゃう!!!???」となりました。
今回は超簡易的な共有サービス(?)開発を通して、Drive API を検証したことを記事にまとめました。

Image

リポジトリ

https://github.com/hfuruya/p-share

内容

  • 指定の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 を採用しています。

理由としては

からです。

docker-compose.yml は以前構築していたものをベースにしました。
https://github.com/hfuruya/rocky-lamp-base

本番環境について

検証も兼ねて、実際に自分で試してみました。
今回のサービス規模は検証レベルなので、
安価かつ個人的に別で使用しているサーバーと共存する形で
ConoHa Wing へデプロイし、関係者にURLを共有しました。

設定メモ

ConoHa では PHPのバージョン、php.ini を以下のように設定する必要があります。
ConoHa Wing - php.ini の設定箇所

upload_max_filesize=500M
post_max_size=500M
memory_limit=500M
display_errors=off

デモ

https://photo-share.play-overflew.com/?id=demo
※予告なく公開を終了する可能性があります
※アップロードされた画像は一定時間毎に全て削除されるようにしています

所感

記念すべき Zenn 初投稿!🎉
個人でのゲーム開発の息抜きにサクっと作ってみました。

細かな改善ポイントは色々とありますが、
とりあえず やりたかったこと は試せたのでヨシ!

アップロードした画像サイズのまま関係者に共有し、
かつ各々のユーザーのドライブ容量を食わないようにできました😤

日常の疑問や課題を形にできるのは楽しいですね。
ぜひみなさんも試してみてください!

Discussion