generated at
ファイルアップロード容量の購入機能を作るときに考えたこと

こんばんは
balarbalarです
scrapboxのエンジニアをやっています
Nota Tech Conf 2022 Spring Day2(2022/4/27)の発表資料です
コメントがあればこのページに書き込んでいってください!balar

今日の話
1. Scrapboxのファイルアップロード機能について紹介
2. 容量の追加購入を買い切りにした理由
3. 実装の話

Scrapbox上に画像やpdfなど様々なファイルをアップロード出来る機能(1ファイル最大100MB)
詳しくは/help-jp/ファイルアップロードに書いてある
ファイル名は全文検索の対象になっている
画像にはOCRが自動的にかかり、全文検索でヒットします
先日pdf内のテキスト情報も検索できるようになりました
便利そうutgwkkyosiderteyoda7mgn901meganii
超良いakixmtane0412yamanokutakker
たぶん論文とかデータシートとか管理するのに便利。あとワクチンの接種票とかshokai
この機能で容量購入の必要性が増したmtane0412
容量別にいらなかったけど投げ銭として使っていた
便利な機能だが、今までは容量を増やすことが出来ず制限がある状態だった
購入機能を実装する事でその制限が無くなりました!
ファイル容量について
個人の容量
ビジネス版プロジェクトを除く全てのプロジェクトは個人に紐付けられる
デフォルトで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円
サブスクリプション(定期購入)ではなく買い切りになります
決済方法はクレジットカードの他にはApple PayGoogle Payにも対応している

購入機能の様子
hiroshi x100 大人買いしたい

容量の追加購入を買い切りにした理由
よくあるクラウドストレージのサービスはサブスクリプション形式が多い
サブスクリプションはいつか決済が停止したり、解約される物です
解約後にアクセスが出来なくなり、デッドリンク(=リンク切れ)になってしまう
複数人で使っているプロジェクトで、あるユーザーが解約したらプロジェクト内のファイルが歯抜けに消える
それによってインターネットから情報が失われてしまう事態を避ける為に買い切り形式にしました
>インターネットから情報が失われてしまう事態を避ける
尊すぎるyamanokutakkerdaiiz
公開projectで参考にしていたページに埋め込まれていた画像やpdfなどがアクセス不可になることを避けられる
scrapboxは情報を蓄積していくツールなので消えずに残っていく方が嬉しい
hata6502買い切り式だと、サークル活動などでの経費申請とも相性良さそうですよね。
サブスク解約し忘れもないし、毎月経費申請したりする必要がない。
個人ですが忘れっぽいので解約し忘れがないの本当にありがたいですteyoda7
スライド資料がアクセス不可能になったWebサービスあったなぁ🤔と思い出してしまったakix
「容量削らないと」ということもないので、ユーザとしてはかなり精神的に楽だと思いました。mgn901
こないだ「iCl○udのプラン変えて容量増やさないと」と言っている友達がいて大変そうだなになった。
隠せてない伏せ字で草takkerteyoda7Mijinko_SD
普通に安く済んでたすかるyosider
こちらから払うお金が少なすぎて逆に心配になるレベル()mgn901
1GB単位で増やせるというのもよいですよね。mgn901

実装の話
Stripeを利用
webサイトに決済機能を設置できるサービス
決済に成功/失敗するクレジットカードの番号や、開発環境用のアイテムなどのテスト環境が充実している
採用した理由
Apple PayやGoogle Payの導入が容易
決済の処理を全てStripe側に任せる事が出来て、セキュリティ的に安心
Add capacity をクリックするとサーバー側でユーザーの情報などを元に決済画面のURLを作ってリダイレクトさせる
webhookを用いて決済が成功したことを受け取り、容量の値を反映させる
async_paymentといった機能もある
Scrapbox側でユーザーのカード情報などを保存しなくて済む
苦労したところ
多くの決済手段が提供されていて今回に適切な決済はどれか判断するのが難しい

最後に
Scrapboxの哲学に沿った形にすることで「買い切り」と言う形での実装になった
「ユーザーが容量を増やせるようにしたい」という目的からエンジニア自らで色々調査して仕様を決めていきます
個人では滅多に実装することが無い決済機能を実装できて良い経験になった
いい話だakixyuisekiyamanoku