FJCT_ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

Parse Serverでのファイルストア利用に関する注意点

Parse ServerはオープンソースのmBaaS(mobile Backend as a Service)です。NCMBと仕組みが似ており、移行先としてお勧めしています。自分で立てるか、Parse Serverのクラウドサービスも利用できます。

NCMBと似ているとは言いましたが、多少の違いがあります。その一つとして、ファイルの扱いがあげられます。本記事では、ファイルの取り扱いについて、注意点を紹介します。

Parse Serverにはファイルストアがありません

NCMBではファイルストア機能があり、ファイル一覧を表示できます。Parse Serverでは、そのような画面はありません。

Parse Serverではオブジェクトとファイルを紐付ける必要があります

NCMBでは、ファイルストアに保存したファイル名をデータストアに紐付けるというのがよくある操作でした。しかし、Parse Serverではオブジェクトのカラムに対して、直接ファイルを紐付ける必要があります。

コードとしては以下のようになります(JavaScript SDKの場合)。

const Photo = Parse.Object.extend("Photo");
const photo = new Photo();

photo.set("name", "写真");

const byteArray = fs.readFileSync('./photo.png');
const file = new Parse.File('photo.png', [...byteArray]);
photo.set("file", file);

await photo.save();

Parse ServerではHTTP公開が基本です

NCMBではファイルストアのファイルをHTTP公開する設定がありました。Parse Serverではそうした設定はなく、常にHTTP公開されます。つまりURLが分かると、誰でもファイル内容にアクセスできます。

const file = gameScore.get('file');
console.log(file.url());
// http://〜

設定について

デフォルトの権限

Parse Serverは、デフォルトでは「ログインユーザーのみファイルアップロード可能」です。追加の設定は以下があります。

  • 匿名ユーザーでもアップロードできる
  • ログインしていなくてもアップロードできる

この設定を変える場合には、環境設定で以下を指定します。

PARSE_SERVER_FILE_UPLOAD_OPTIONS='{"fileExtensions": [".*"], "enableForAnonymousUser": false, "enableForAuthenticatedUser": true, "enableForPublic": false}'

アップロードできる拡張子

デフォルトでは以下のような設定になっています。つまりHTMLファイルのみアップロードできるようです。

['^[^hH][^tT][^mM][^lL]?$']

変更する場合には、上記の fileExtensions で指定します。これは配列で指定します。

アップロードできるファイルサイズ

デフォルトでは、20MBまでアップロードできます。変更する場合には PARSE_SERVER_MAX_UPLOAD_SIZE にて設定します。

PARSE_SERVER_MAX_UPLOAD_SIZE=20mb

ファイルのアップロード先

デフォルトではMongoDBに保存されます。他、Google Cloud StorageまたはAmazon S3、ローカルストレージに保存できます。

各アダプターの設定は環境変数ではなく、サーバー側のコードで行う必要があります。

まとめ

Parse ServerとNCMBは似ていますが、幾つかの異なる点があります。ファイルストアは一番顕著です。ファイルストアを使っているアプリでは、変更点が多くなってしまうので注意してください。