Shionlib の大容量アップロードシステムの紹介
なぜ大容量アップロードシステムが必要なのか?
Shionlib の目標の一つは、あらゆる時代のビジュアルノベル/ギャルゲーの完全でコントロール可能なアーカイブを構築・維持することです。これは容易なことではありません。私たちの経験上、これを実現できるのは コミュニティ主導 のモデルだけです。
そのため、すべてのユーザーに大容量ファイルのアップロード権限を開放するアップロードシステムを設計しました。
アップロードのワークフロー
ローカルファイルを選択すると、システムはファイルを 5 MB 以下のチャンクに分割し、ファイルの SHA-256 ハッシュを計算します。
アップロードが開始されると、ブラウザはすべてのチャンクとハッシュ値を Shionlib のサーバーに送信します。サーバーはアップロード済みチャンクを結合し、再度 SHA-256 を計算してブラウザ側のハッシュと比較します。一致すれば、アップロードは成功としてマークされます。
続いて、Shionlib のサーバーはアップロード済みファイルをスキャンし、要件を満たしているかを確認します(完全性、破損の有無、暗号化の有無、マルウェアの可能性など)。スキャンを通過すると、ファイルは待機キューに入り、Shionlib の S3 バケットへアップロードされるのを待ちます。
最後に、ファイルは Shionlib の S3 バケットへアップロードされ、ダウンロードリンクが生成されます。これでアップロードプロセスは完了です。
課題
システム全体は細心の注意を払って設計する必要があります。もし誰かが何らかの方法で破壊を試みれば、許容できない結果を招きます。
- 非常に大きなファイルを大量に悪意をもってアップロードする行為。計画を超える大量のストレージを占有し、過大なストレージ費用の発生につながります。
- マルウェアを含むファイルを悪意をもってアップロードする行為。プロセス中にファイルの展開や実行は行いませんが、ダウンロードしたユーザーに危険を及ぼす可能性があります。
システムを健全かつ持続的に運用するため、アップロード枠(クォータ) を設けています。
各ユーザーは、登録から 15 日後に 5 GB のアップロード枠を付与され、毎月 1 日にリセットされます。その月に適正なファイルを Shionlib にアップロードして枠を使い切った場合、システムが動的に枠を増やします(上限 20 GB)。
より大きなファイルをアップロードする必要がある場合は、管理者に申請して枠の引き上げを受けられます。
次のいずれかに該当する場合、アップロード枠のクリア/減算、あるいはアカウント停止の対象となることがあります。
- アップロードしたファイルにマルウェアが含まれていると判断された場合
- 無意味なジャンクファイルをアップロードした場合
- アカウントが長期間非アクティブな場合
- 他のユーザーから違反ファイルとして通報があった場合
ファイルのアップロード
形式とファイル名のルール
アップロードするファイルは 単一 の zip/rar/7z/tar/gzip にまとめ、パスワードは設定しないでください。
ファイル名はゲームの名称/別名など自由ですが、言語、翻訳グループ/翻訳者、バージョン等の情報を詰め込みすぎることは推奨しません。これらの情報は、後で作成するリソースのメタデータに記載できます(後述)。
アップロードを開始する
ゲームのエントリーページで アップロード をクリックしてアップロードウィンドウを開きます。アップロードしたいファイルを選択し、開始 をクリックするとアップロードが始まります。
アップロード中は、ウィンドウ内の進捗バーで進捗を確認できます。完了するまで、ブラウザと当該タブを前面で開いたままにしてください。
一時停止 ボタンでいつでもアップロードを停止できます。アップロードセッションは保持され、後で 再開 をクリックすると続きからアップロードできます。
アップロード中断を想定し、レジュームに対応しています。中断した場合はアップロードウィンドウを再度開いてください。進行中のアップロード が表示されるはずです。該当セッションの 続行 をクリックし、同じファイルを選択すると続きからアップロードできます。

アップロード完了後、下部のメタデータ入力欄で実行プラットフォーム、言語、備考などを記入します。入力後、送信 をクリックしてアップロードを確定します。

送信が完了すると、システムはファイルの処理(スキャン、S3 へのアップロード等)を開始します。処理状況は、トップページの 最新のアクティビティ セクションで確認できます。
