ファイルをアップロード・ダウンロードできるWebアプリを公開しました
以降、UL=アップロード、DL=ダウンロードと省略します。
はじめに
趣味関係で開発・メンテナンスしている JS 製のツールを GoogleDive で配布していたのですが、代替サービスを探していました。探す中で作れそうだ・作ってみたいと思い、2022 年 8 月にサイトを公開しました。
※自ツール配布のためだけのサイトであり、また悪意のあるファイルを他者に UL されると困るので、サイト URL と GitHub リポジトリは非公開です。
どんなサービス
.zip
ファイルを説明文とともに UL し、また DL できるサービス。UL にはユーザー登録を必要とし、DL は非登録ユーザーでも可能。
.zip
ファイルの種別やサイズ、最終更新、ダウンロード数、説明文を閲覧できる。
利用規約に同意すると、DL 可能となる。
利用状況
基本的に月上旬に 1 回、不具合などあればマイナーアップデート版と言った風にしています。※メンテナンス・開発を引き継ぐ前から、日時ベースのバージョン管理となっていました。
開発
利用した技術・サービス
サイトデザイン等は省力化のために Tailwind CSS Components を参照しました。
- React, TypeScript, TailwindCSS
- Firebase
- Hosting, Firestore Database, Storage
Form components
signup や login 認証やファイル UL 時のフォームに必要なコンポーネントを react-hook-form
を使って作成しました。また、ファイル UL の為のドロップゾーンは react-dropzone
を利用しましたが、コードが長いので割愛します。
PasswordInput.tsx
認証機能
ユーザー登録を私のみに制限するために、メールアドレス・パスワードによる Firebase 認証を選択し、.env
で設定されたメールアドレスのみ使えるようにしました。
zod
バリデーションのために react-hook-form
の zodResolver
を利用しました。
Signup
Signup.tsx
Firestore database
ファイル UL の際に追加情報として入力するファイルの説明文やサイズ、contentType などを保存する先として、Firestore を利用しました。本来であれば userID などを追加すべきかと思いましたが、登録可能ユーザーを私のみに制限しているので楽をしました。
Storage
UL された .zip
ファイルを保存するために利用しました。
CORS Error
Firebase Storage を利用する際にあたって、CORS の設定をしました。
ブラウザで直接データをダウンロードするには、Cloud Storage バケットに対してクロスオリジン アクセス(CORS)を構成する必要があります。
ウェブで Cloud Storage を使用してファイルをダウンロードする
- ウェブで Cloud Storage を使用してファイルをダウンロードする | Cloud Storage for Firebase
- クロスオリジン リソース シェアリング(CORS)の構成
- gsutil をインストールする | Cloud Storage | Google Cloud
おわりに
当初はドメイン代程度の赤字でも良いと思っていました。現在では毎日の粗食 1 杯程度の広告収入由来の利益は出ており、運用コストを抑えることのできる Firebase に感謝したいです。