前回は kintone について 所感を書きましたが、今回はNetlifyについて書きます。
Netlifyとは
静的ファイルホスティングサービスの部類に属し、いわゆるHTML/Javascript/CSSで完結するサイトをサクッと公開でき、それに関連する様々な機能を提供しています。提供している機能としては、例えば、
- HTTPS化、SSL証明書の発行(Let's Encrypt)
- githubなどのリポジトリ連携、ビルド、デプロイなどのCI機能
- デプロイプレビュー環境の自動作成
- サーバサイドサポート(Lambda Function)
- 入力フォーム
- 認証
- A/Bテスト, アクセス分析
などがあります。
静的ファイルサイトなので、サーバサイドの動作が必要になるアプリケーション(PHP, Rails)などは対応できません。
自社の業務や個人的なツールやハッカソンなどでNetlifyを使用することがそこそこ多く、そこで得られた良いところ、つらいところを書いておきます。
Netlifyの良いところ
デプロイまでの設定がとにかく早い。手軽。
初めてNetlifyを使用したのはNuxt.jsだったのですが、リポジトリと連携してビルドコマンド(nuxt generate) を設定したら、そのままもうデプロイされるようになりました。これだけでmasterの内容が常にデプロイされる簡易的なCD環境が出来上がります。さらにHTTPS化やカスタムドメインの設定もできます。
以前、実際にNetlifyで設定してみたときのメモを書きましたので、こちらにも書いておきます。 rso.hateblo.jp
デプロイプレビュー(feature環境)が自動でデプロイされる
開発時にfeatureブランチ(masterでないブランチ)をpushするとそのブランチの内容がdeploy-preview環境としてデプロイされます。この機能は、修正内容をユーザや他の人にレビューしてもらう時にとても便利です。この辺りの機能がリポジトリと連携するだけですぐに使えるので、これもとても手軽です。
無料枠の機能が豊富
Netlifyは各機能ごとにプランが設定されていて、ある一定枠までは無料で使用でき、それ以上使いたいときは機能ごとに課金するスタイルになっています。ハッカソンやプロトタイプ開発レベルでは無料枠でほぼ対応できるぐらい使用できます。
ちょっとしたサーバサイド側の機能を実装できる
静的サイトの内容だけで完結できない場合、例えば、CORSの制約によりAjax通信ができない場合、通常ならその部分をAWS Lambda + API Gateway などを用意しないといけないという場合でも、Netlify の Functions を使えば上記のことをNetlifyだけで完結することができます。さらにFunctionのコードも同一のリポジトリに含めて管理できるので、プロジェクトの規模が小さいうちはコードが別々にならずに管理できて良いです。
Netlifyのつらいところ
静的ファイルのダウンロードが遅い
結構大きめのSingle Page ApplicationをNetlifyにデプロイした場合、初回ダウンロードにかなりの待ち時間がかかってしまいます。特にモバイル用のSingle Page Applicationの場合、初回アクセスがネックになります。 検証できている訳ではないですが、ネットの評判によるとダウンロードにかかる時間は同様のサービスであるFirebase に軍配が上がっているようです。
ビルドがたまにこける
masterへpushした内容が反映されるのを待っていると、ビルドが失敗していることがあります。production環境へのビルドが失敗すると、ちょっと心配になる場合があります。
Functionの実行時間に制約がある
とあるプロジェクトでNetlify Functionで簡易的なサーバサイドの処理を実行していたのですが、Function(実態はLambda)の実行時間が最大10秒までしか実行できず、実行したい処理がたまに10秒を超えるようなものだったので、結局このケースではAPI Gateway + Lambdaの構成に変更しました。
devploy preview環境がpublicになる
良いところで挙げたdeploy-preview機能ですが、1つ欠点があり、パブリックでアクセス可能になってしまいます。開発中の内容をpublicに公開したくない場合には向いていないかもしれません。自分の場合、Auth0 による認証を入れるようにして対策しています。
まとめ
今回自分が使った中で良いところつらいところを書きましたが、かなり良いサービスであり、 LPなどはもちろん、簡易的なツールやプロトタイプ作成に向いていると感じています。