ファイルアップロード容量の購入機能を作るときに考えたこと
こんばんは
scrapboxのエンジニアをやっています
コメントがあればこのページに書き込んでいってください!

今日の話
1. Scrapboxのファイルアップロード機能について紹介
2. 容量の追加購入を買い切りにした理由
3. 実装の話
Scrapbox上に画像やpdfなど様々なファイルをアップロード出来る機能(1ファイル最大100MB)
ファイル名は全文検索の対象になっている
画像には
OCRが自動的にかかり、全文検索でヒットします
先日
pdf内のテキスト情報も検索できるようになりました
この機能で容量購入の必要性が増した

容量別にいらなかったけど投げ銭として使っていた
便利な機能だが、今までは容量を増やすことが出来ず制限がある状態だった
購入機能を実装する事でその制限が無くなりました!
ファイル容量について
個人の容量
ビジネス版プロジェクトを除く全てのプロジェクトは個人に紐付けられる
デフォルトで1人当たり1GB
例:プロジェクトAに300MB、Bに500MBアップロードした場合
300MB + 500MB = 800MB
が使用量
ビジネス版プロジェクトの容量
ビジネス版プロジェクトは、ユーザー毎ではなくプロジェクト単位でファイル使用量を合計する
個人の上限は存在しない
プロジェクトメンバー数 × 1GB
例:プロジェクトを5人で利用していて、ユーザーAが1GB、Bが2GB使っている場合
容量は5GB
1GB + 2GB = 3GB
が使用量
複数プロジェクトの決済をまとめている場合
(ユニークユーザー数 + 追加プロジェクト数) × 1GB
ファイル容量の確認/購入
右上のメニューのUser settingsのFile capacityタブから確認/購入が可能
追加購入は1GB 1,000円
サブスクリプション(定期購入)ではなく買い切りになります
購入機能の様子

x100 大人買いしたい
よくあるクラウドストレージのサービスはサブスクリプション形式が多い
サブスクリプションはいつか決済が停止したり、解約される物です
複数人で使っているプロジェクトで、あるユーザーが解約したらプロジェクト内のファイルが歯抜けに消える
それによってインターネットから情報が失われてしまう事態を避ける為に買い切り形式にしました
>インターネットから情報が失われてしまう事態を避ける
公開projectで参考にしていたページに埋め込まれていた画像やpdfなどがアクセス不可になることを避けられる
scrapboxは情報を蓄積していくツールなので消えずに残っていく方が嬉しい

買い切り式だと、サークル活動などでの経費申請とも相性良さそうですよね。
サブスク解約し忘れもないし、毎月経費申請したりする必要がない。
個人ですが忘れっぽいので解約し忘れがないの本当にありがたいです

スライド資料がアクセス不可能になったWebサービスあったなぁ🤔と思い出してしまった

「容量削らないと」ということもないので、ユーザとしてはかなり精神的に楽だと思いました。

こないだ「iCl○udのプラン変えて容量増やさないと」と言っている友達がいて大変そうだなになった。
普通に安く済んでたすかる

こちらから払うお金が少なすぎて逆に心配になるレベル()

1GB単位で増やせるというのもよいですよね。

実装の話
決済に成功/失敗するクレジットカードの番号や、開発環境用のアイテムなどのテスト環境が充実している
採用した理由
Apple PayやGoogle Payの導入が容易
決済の処理を全てStripe側に任せる事が出来て、セキュリティ的に安心
Add capacity
をクリックするとサーバー側でユーザーの情報などを元に決済画面のURLを作ってリダイレクトさせる
webhookを用いて決済が成功したことを受け取り、容量の値を反映させる
Scrapbox側でユーザーのカード情報などを保存しなくて済む
苦労したところ
多くの決済手段が提供されていて今回に適切な決済はどれか判断するのが難しい
最後に
「ユーザーが容量を増やせるようにしたい」という目的からエンジニア自らで色々調査して仕様を決めていきます
個人では滅多に実装することが無い決済機能を実装できて良い経験になった