メモ。ゲームをGitHubのリポジトリから直接起動できるようにしたいんだけど、リポジトリから直接大きなblobが配れるのか調べてみた。
注: そもそも raw.githubusercontent.com
自体もFastlyのCDNで提供されるので、この目的でGitHub CDNを使うメリットはrate limit/転送量制限を回避できる( かも ) 程度でしかない。
どちらかというと、多数のファイルを提供することによる API rate limit の方が心配になってきた。。
結果
90MiBのバイナリを置いたリポジトリ( https://github.com/okuoku/90mb-blob-test )のblobをダウンロードできるかどうかで調査。
ダウンロードできた
- https://raw.githack.com/
- https://rawgit.org/ (RawGit.com ではない )
ダウンロードできなかった
- https://www.jsdelivr.com/ (20MiB制限)
- https://statically.io/ (制限容量不明)
ダウンロードURLが出て来なかった
GitHub CDNとは?
GitHubにpushされている内容は、ファイル単位で直接HTTPSダウンロードできる。例えば、 https://github.com/okuoku/yuni の特定バージョンの README.md
であれば、
というURLで直接ダウンロードできる。ただ、この raw.githubusercontent.com
からのダウンロードはcontent-typeが text 固定になってしまいWebサイトの一部として利用するには不便なので、 GitHub上のリポジトリをファイル源として使用したCDNサービス というのがいくつか存在する。
主にGitHub CDNはWeb界隈で使用されていて、JavaScriptパッケージをWebサイトに導入するためによく使用されるし、普通はそれ専用のサービスを使用することが多い。(unpkg.org とか)
メジャーなサイトとしては https://rawgit.com というサイトが昔存在したが、マルウェアの配布に使用されるなどしたので閉鎖されてしまった。
容量制限
無料のGitHubリポジトリにコミットできるblobの最大サイズは、今のところ 100MiB に制限されている。このサイズを超えたblobを含むリポジトリをpushしようとするとエラーが出てGit LFSの利用を促される。
実はこの100MiB の制限は Cloudflare も一緒で、Cloudflareを使用しているGithackやrawgit.orgのようなサイトは自然にこの100MiBが制約となると考えられる。
更に、CDNサイトによっては個別の制約を入れていることもある。jsDelivrは20MiB、Staticallyは具体的なサイズは不明だが少くとも90MiBはダウンロードできなかった。
jsDelivr はファイルを自前のS3 bucketに保存しているらしく、そうだとしたら 20MiB の制限もかなり大盤振る舞いな気がしてしまう。
かんそう
最近Dockerの無料プランではイメージの保存期間やpullサイズが制約されることになって話題になった( https://www.publickey1.jp/blog/20/docker_hub6.html - さらに6時間あたり100 pullまでのrate limitも追加された)けど、トラフィック代は無料サービスにおいて常に問題になっている印象がある。
GitHubは同じような無料Gitホスティングサイトでは 最もrate limitが厳しく 、たとえば以前Qiitaでも話題になっていた github-readme-stats
は、APIのrate limitを回避するために、パーソナルアクセストークン(主にコマンドラインツールでの利用を想定したOAuthトークン)を 複数発行してrate limitをN倍にする というトンでもねぇ対策( https://github.com/anuraghazra/github-readme-stats/pull/58 )を実装している。( Sランクって何だよ ってissueが日本の教育制度の所為にされてるのは面白いな。。)
... まぁGitHubは世界一儲かっているソフトウェア会社が運営しているわけで、どちらかというと設備上の問題を気にしたものだとは思うけど。。