tag:crieit.net,2005:https://crieit.net/tags/GAE/feed 「GAE」の記事 - Crieit Crieitでタグ「GAE」に投稿された最近の記事 2020-03-22T06:54:01+09:00 https://crieit.net/tags/GAE/feed tag:crieit.net,2005:PublicArticle/15775 2020-03-20T13:51:56+09:00 2020-03-22T06:54:01+09:00 https://crieit.net/posts/Nuxt-5-Firebase-GAE-Netlify-Heroku Nuxtアプリを無料で公開するときに試した5つの環境まとめ(Firebase/GAE/Netlify/Heroku) <p>最近Nuxtでいろいろ作っているけど、無料で使える環境をいろいろ試してる。<br /> いろいろメリデメあるけど、SPAならNetlify/SSRならHerokuがよさそう。<br /> いままで試したものをまとめてみた。</p> <h3 id="ほしかったもの"><a href="#%E3%81%BB%E3%81%97%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%82%E3%81%AE">ほしかったもの</a></h3> <p>主に開発してるのが<a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">CGM系のWebサービス</a>なので、</p> <ol> <li>動的なOGP画像などが設定できる(OGP芸)</li> <li>カスタムドメインが使える</li> <li>日次のランキング集計などの定期実行ができる</li> </ol> <p>が、無料でできて、なるべく実装が楽で、そこまで遅くないのがうれしい。</p> <h3 id="試した5つのパターン"><a href="#%E8%A9%A6%E3%81%97%E3%81%9F5%E3%81%A4%E3%81%AE%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3">試した5つのパターン</a></h3> <p>試したのは以下の5パターン。試してみた順で記載。</p> <ol> <li>Nuxt(SSR) + Cloud Function<br /> 起動がかなり遅かった。。実装も大変なのでNG</li> <li>Nuxt(SPA) + Firebase Hosting<br /> 構築はかなり楽。ただ、OGP芸が大変でFunctionsが必要</li> <li>Nuxt(SPA) + Netlify<br /> プレレンダリングでOGP芸が楽。定期実行はFunctionsでできる</li> <li>Nuxt(SSR) + GAE(f1:256M)<br /> メモリの制限きつく、たまに落ちる。。定期実行はcron.yamlでできる</li> <li>Nuxt(SSR) + Heroku(free:512M) + Cloudflare<br /> メモリ多くてよい。SSLはないのでCloudflareを併用。定期実行はHeroku Scheduler</li> </ol> <p>SPAで十分であれば、「3.Nuxt(SPA) + Netlify」が構築も簡単で良かった。<br /> <a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>は、現在この構成。</p> <p>SSRの場合、「5. Nuxt(SSR) + Heroku(free:512M) + CloudFlare」が良い感じ。<br /> <a target="_blank" rel="nofollow noopener" href="https://hen-ai.net/">へんあいマップ</a>がこの構成。</p> <h3 id="各パターンについて"><a href="#%E5%90%84%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">各パターンについて</a></h3> <h4 id="1. Nuxt(SSR) + Cloud Function"><a href="#1.+Nuxt%28SSR%29+%2B+Cloud+Function">1. Nuxt(SSR) + Cloud Function</a></h4> <p>一番はじめに<a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>でやろうとした構成。</p> <p><img width="870" alt="スクリーンショット 2020-03-20 11.43.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/7fa5a956-cec1-9117-1d5d-f769eae53a32.png"></p> <p>細かいやり方は、以下の記事の「Firebase Cloud Functionsの設定してSSRできるようにする」あたりに。<br /> ・<a target="_blank" rel="nofollow noopener" href="https://www.memory-lovers.blog/entry/2019/04/02/115149">Nuxt.jsではじめるときのやることリスト(SSRも国際化も自動デプロイも) - くらげになりたい。</a></p> <p>当時は動的ページのSEO対応するには、この方法が多く検索に出ていたので試したけど、<br /> Cloud Functionのコールドスタートがつらすぎてお蔵入り。。SPAでいくことに。。</p> <h4 id="2. Nuxt(SPA) + Firebase Hosting"><a href="#2.+Nuxt%28SPA%29+%2B+Firebase+Hosting">2. Nuxt(SPA) + Firebase Hosting</a></h4> <p><a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>をリリースしたときの構成。</p> <p><img width="910" alt="スクリーンショット 2020-03-20 11.37.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/37459683-872a-5047-a383-71c33f0c640e.png"></p> <p>課題だった動的ページのSEOは、Cloud Functionsを経由して返す方法で対応。<br /> こちらも当時よく検索に出てたけど、実装が大変そうだったので2番手に。</p> <p>細かいやり方は、以下の記事に。(2020/03/22追記: OGP画像生成系の記事を追加)<br /> ・<a target="_blank" rel="nofollow noopener" href="https://www.memory-lovers.blog/entry/2019/08/07/150000">Nuxt(SPA)+FirebaseでSEO!OGP!: 特定のパスだけheadだけ返すやつ - くらげになりたい。</a><br /> ・<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/8c1d1240c3aa200cbec0">Nuxt.js(SPA)+Firebaseで積読用の読書管理サービスを作ってみたときにハマったこと - Qiita</a><br /> ・<a target="_blank" rel="nofollow noopener" href="https://www.memory-lovers.blog/entry/2019/06/26/194500">Cloud Functions + ImageMagickでOPG画像の動的生成してCloud Storageにアップロードする - くらげになりたい。</a><br /> ・<a target="_blank" rel="nofollow noopener" href="https://www.memory-lovers.blog/entry/2020/02/19/150000">Cloud FunctionとSVGでOGP画像生成を試行錯誤したまとめ - くらげになりたい。</a></p> <p>カスタムドメインについては、Firebase HostingでSSLと合わせて無料で設定可能。</p> <p>定期実行は、Cloud Functionsでできるのでそれを利用した。<br /> ・<a target="_blank" rel="nofollow noopener" href="https://firebase.google.com/docs/functions/schedule-functions?hl=ja">関数のスケジュール設定  |  Firebase</a><br /> ・<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kira_puka/items/1f164dd8d1a5a281d9c1">Cloud Functions for Firebaseのcronみたいな定期実行を試したら簡単だった - Qiita</a></p> <p>ただ、Cloud Functionsの定期実行は、<br /> 「<strong>Googleアカウントごとに3つのジョブ</strong>を無料で使用できる」<br /> なので、注意が必要。<strong>プロジェクトごとじゃない</strong>。。</p> <h4 id="3. Nuxt(SPA) + Netlify"><a href="#3.+Nuxt%28SPA%29+%2B+Netlify">3. Nuxt(SPA) + Netlify</a></h4> <p><a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>の現在の構成。</p> <p><img width="775" alt="スクリーンショット 2020-03-20 11.47.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/5010c13a-98a9-c9e0-ae3b-767d18cd8006.png"></p> <p><a target="_blank" rel="nofollow noopener" href="https://docs.netlify.com/site-deploys/post-processing/prerendering/#set-up-prerendering">NetlifyのPrerendering</a>が無料化されて使えるようになり、よいという話を聞くように。。</p> <p>実装が複雑で、変更もしにくかったので、この方法に。<br /> Netlify自体がCDNも提供していているので、すこしはやくなった(気がする)</p> <p>カスタムドメインも、NetlifyのDNSを設定して無料で対応できる。</p> <p>定期実行は、2.と同じ感じで、Cloud Functionsのまま。</p> <p>コード量も減って変更もしやすくなったので、OGP画像の改善とかが楽にできるように。。(<em>´ω`</em>)</p> <h4 id="4. Nuxt(SSR) + GAE(f1:256M)"><a href="#4.+Nuxt%28SSR%29+%2B+GAE%28f1%3A256M%29">4. Nuxt(SSR) + GAE(f1:256M)</a></h4> <p>SPAの課題として、初期表示が遅いのでなんとかしたいなと、SSRの環境を模索しはじめ。。<br /> 公開していないけど、1つ作ってみた。</p> <p><img width="798" alt="スクリーンショット 2020-03-20 13.17.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/c24ce0b2-64b3-1ea4-9bd2-e2150ba13d14.png"></p> <p>試してみたところ、起動するだけでメモリ上限すれすれで、複数アクセスがあったりすると、落ちる場合も。。<br /> (ts-nodeで動かしているのも悪い気がしている。。)</p> <p><img width="561" alt="スクリーンショット 2020-03-20 12.22.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/e3940627-4141-4c17-3c82-b2ee13ca1e14.png"></p> <p>ただ、定期実行はcron.yamlを用意すればURLに送信でき、無料範囲も広い。<br /> 料金も「<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/appengine/pricing?hl=ja#%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9">その他のリソース</a>」をみるとcronは無料のよう。<br /> ・<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/appengine/docs/flexible/nodejs/scheduling-jobs-with-cron-yaml?hl=ja">cron.yaml を使用したジョブのスケジューリング</a></p> <p>カスタムドメインやSSLも無料で利用できる感じ。(試してないので未確認)</p> <h4 id="5. Nuxt(SSR) + Heroku(free:512M) + Cloudflare"><a href="#5.+Nuxt%28SSR%29+%2B+Heroku%28free%3A512M%29+%2B+Cloudflare">5. Nuxt(SSR) + Heroku(free:512M) + Cloudflare</a></h4> <p>GAEでうまくいかなかったので、無料でメモリも多いHerokuを利用。<br /> <a target="_blank" rel="nofollow noopener" href="https://hen-ai.net/">へんあいマップ</a>がこの構成で稼働中。</p> <p><img width="885" alt="スクリーンショット 2020-03-20 13.24.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/60f2ab5c-3f4a-9b4b-ac45-341ed99c4667.png"></p> <p>定期実行は無料のアドオン(<a target="_blank" rel="nofollow noopener" href="https://elements.heroku.com/addons/scheduler">Heroku Scheduler</a>)が利用できる。<br /> Nuxt側で<a target="_blank" rel="nofollow noopener" href="https://ja.nuxtjs.org/api/configuration-servermiddleware/">serverMiddleware</a>を用意すればOK。</p> <p>ただ、メモリは多く定期実行もが、Herokuの無料枠だと制限も多い。</p> <ol> <li>SSLは非対応</li> <li>30分アクセスがないとスリープする</li> <li>クレジットカードの登録で1000時間/月xアカウント<br /> (未認証だと550時間/月xアカウント)</li> </ol> <h5 id="1. SSLは非対応"><a href="#1.+SSL%E3%81%AF%E9%9D%9E%E5%AF%BE%E5%BF%9C">1. SSLは非対応</a></h5> <p>単体だけだとSSLに対応していないので、<a target="_blank" rel="nofollow noopener" href="https://www.cloudflare.com/ja-jp/">Cloudflare</a>を併用。<br /> CloudflareがCDNも提供してくれるので良い感じに。</p> <h5 id="2. 30分アクセスがないとスリープする"><a href="#2.+30%E5%88%86%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%8C%E3%81%AA%E3%81%84%E3%81%A8%E3%82%B9%E3%83%AA%E3%83%BC%E3%83%97%E3%81%99%E3%82%8B">2. 30分アクセスがないとスリープする</a></h5> <p>これは、Heroku Schedulerを使えばOK。<br /> 任意のURLを叩けるため、15分毎などスリープしないようにしておく。</p> <h5 id="3. 無料枠は1000時間/月xアカウント"><a href="#3.+%E7%84%A1%E6%96%99%E6%9E%A0%E3%81%AF1000%E6%99%82%E9%96%93%2F%E6%9C%88x%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88">3. 無料枠は1000時間/月xアカウント</a></h5> <p>1000時間あれば、24時間x31日でも744時間なので、大丈夫な感じ。<br /> ただ、アカウント単位での無料枠なので、複数アプリを無料で稼働はできない。。</p> <h5 id="実際のやりかたとかは、"><a href="#%E5%AE%9F%E9%9A%9B%E3%81%AE%E3%82%84%E3%82%8A%E3%81%8B%E3%81%9F%E3%81%A8%E3%81%8B%E3%81%AF%E3%80%81">実際のやりかたとかは、</a></h5> <p>以下の記事に。<br /> ・<a target="_blank" rel="nofollow noopener" href="https://www.memory-lovers.blog/entry/2020/01/25/120000">Heroku+CloudflareなNuxtでSSRしてみる - くらげになりたい。</a></p> <h3 id="まとめ"><a href="#%E3%81%BE%E3%81%A8%E3%82%81">まとめ</a></h3> <p>いろいろ試してみたけど、Nuxt.jsを無料で公開するときは、</p> <ul> <li>SPAならNetlify <ul> <li>prerenderingで動的ページのSEOも対応</li> <li>カスタムドメインやSSLもNetlifyでOK</li> <li>定期実行はCloud Functionsで。</li> <li>ただし、定期実行は1アカウントにつき、3ジョブまで</li> </ul></li> <li>SSRならHeroku <ul> <li>SSRで動的ページのSEOも対応</li> <li>定期実行はHeroku Schedulerで</li> <li>Cloudflareを併用し、SSL対応</li> <li>無料枠は1アカウントにつき、1アプリが限界かも</li> </ul></li> </ul> <p>SSRの方は他に<a target="_blank" rel="nofollow noopener" href="https://cloud.google.com/run?hl=ja">Cloud Run</a>や<a target="_blank" rel="nofollow noopener" href="https://zeit.co/">ZEIT now</a>がある。<br /> Cloud Runは立ち上げがGAEより遅いときので後手だけど、<br /> ZEIT nowは気になってるので試してみたい(<em>´ω`</em>)</p> <p>以上!!</p> <h2 id="こんなのつくってます!!"><a href="#%E3%81%93%E3%82%93%E3%81%AA%E3%81%AE%E3%81%A4%E3%81%8F%E3%81%A3%E3%81%A6%E3%81%BE%E3%81%99%21%21">こんなのつくってます!!</a></h2> <p>積読用の読書管理アプリ 『積読ハウマッチ』をリリースしました!<br /> <a target="_blank" rel="nofollow noopener" href="https://tsundoku.site">積読ハウマッチ</a>は、Nuxt.js+Firebaseで開発してます!</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/572d4947-f40b-e4dc-1c9c-bc584cd2a66c.png" width="200"/></p> <p>もしよかったら、遊んでみてくださいヽ(=´▽`=)ノ</p> <p>要望・感想・アドバイスなどあれば、<br /> 公式アカウント(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/MemoryLoverz">@MemoryLoverz</a>)や開発者(<a target="_blank" rel="nofollow noopener" href="https://twitter.com/kira_puka">@kira_puka</a>)まで!</p> <h3 id="へんあいマップもリリースしました!"><a href="#%E3%81%B8%E3%82%93%E3%81%82%E3%81%84%E3%83%9E%E3%83%83%E3%83%97%E3%82%82%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81">へんあいマップもリリースしました!</a></h3> <p>「偏愛マップ」を簡単に作れるWebアプリです!<br /> <a target="_blank" rel="nofollow noopener" href="https://hen-ai.net">へんあいマップ</a>も、Nuxt.js+Firebaseで開発してます!</p> <p><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478782/63686f5c-390b-0b09-3f9a-0ce6676c3cce.png" width="600"/></p> <p>偏愛マップは人見知りや口下手な人にも優しいコミュニケーションツールで、<br /> 勉強会、懇親会、オフ会などの余興・アイスブレイクや自分のプロフィールにも!</p> <p>よかったら遊んでみてください(<em>´ω`</em>)</p> きらぷか@積読ハウマッチ/SSSAPIなど