E-mote HOW TO ブログ


Webサーバーからemtbytesを圧縮転送する

2018/05/24 ・ 11:20 am

こんにちは、E-mote担当プログラマのOです。

皆様、えもふりをお楽しみいただいておりますでしょうか?
ティラノスクリプトやUnityでゲーム製作にも気軽に利用出来ますので、ノベルゲームはもちろん、アイデア次第で色々楽しいことが出来るのではないでしょうか。

さて、本日は「ティラノスクリプト用に吐き出したemtbytesファイルをサーバーからダウンロードするのに時間がかかる。なんとかならないか」とのお問い合わせをいただきました。

この問題の解決法について簡単に解説してみようかと思います。

 

emtbytes ファイルのダウンロードが遅い

さて、そもそも何故「emtbytesファイルのダウンロードが遅い」のでしょうか?
理由は簡単で「emtbytesファイルのサイズが大きい」ことです。

おっと、怒らないでください。
これからちゃんとした説明をします。

emtbytesファイルは「未圧縮のテクスチャデータ」を含んだファイルです。
何らかの外部プログラムで圧縮して使われることを前提としたファイルフォーマットになっています。
それを生のままでネットワーク回線に流せば、重くなるのは道理です。

では、その対策は?

そう、「emtbytesを圧縮する」ことです。

 

emtbytesを圧縮してネットワークに流す

emtbytesのような「圧縮の効きやすいデータ」は、圧縮した状態でネットワークに流し、ファイルを受け取ったクライアント側で解凍する使い方をするのがセオリーです。

一般的なHTTPサーバーやHTTPクライアントは、こうした圧縮データのやりとりをサポートする仕組みを持っています。

emtbytesを圧縮するにも、「あらかじめファイルを圧縮しておく」「転送リクエスト時にサーバー側で都度ファイルを圧縮する」と言った複数の手段があります。
また、Apacheかnginxか、サーバーの種類によっても設定のやり方は変わります。

今回は、応用の効かせやすい一般的なケースとして「Apacheが使われているさくらの共有サーバーであらかじめ圧縮しておいたemtbytesを転送する」ケースを解説します。

 

emtbytes を圧縮する

サーバーに置くemtbytesファイルは全てあらかじめ圧縮しておきます。

圧縮率が高くても低くても展開速度はほとんど変わりません。つまり圧縮率はなるべく高い方がいいので、ここでは高圧縮率に定評のある7zipを使ってファイルを圧縮することにしましょう。

https://sevenzip.osdn.jp/

emtbytes に対して

ファイルを右クリックしてコンテキストメニューから 7-Zip → 圧縮… を指定。

書庫形式に「gzip」、圧縮レベルに「超圧縮」を指定して、圧縮を実行します。

元のファイルの1/40程のサイズの小さい圧縮ファイルが出来ました。

 

サーバー側の設定

あとはサーバー側の設定です。

さくらの共有サーバーの場合、以下のような設定を .htaccess に記述することで、 emtbytes のリクエストが発行された時に圧縮済みの emtbytes.gz が転送されるようになります。

RewriteEngine On

RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_URI} (\.emtbytes)$
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule .* %{REQUEST_URI}.gz [L]

<FilesMatch “\.emtbytes\.gz”>
ForceType application/octet-stream
</FilesMatch>

 

他のサーバーの場合も、似たような設定が出来るケースは多いので、サーバー管理者に問い合わせてみるなどしてみてください。

よいえもふりライフを!