🐶
blog.terrier.dev

posted: 2019/10/23

このブログの配信をnetlifyからnow.shにした話


Netlifyで動かしてたこのブログをnow.shに移管を試している。
理由は下記だ。
  • NetlifyCMSを使っていたが、使わなくなってしまった
  • 将来的にGatsbyをやめてnext.jsにする可能性が高そう
  • Netlifyだいぶ使い込んだので、そろそろ別なブキを覚えたい(重要)
感想としてはこんな感じだった

良い点

  • ビルドスピードが早い
    • 詳細理由は不明だが、ビルドキャッシュが効いてる?
    • Gatsbyのビルドについても、Netlifyだと60s程度かかるところが、now.shだと30s程度で済んでそう
    • ビルドだけでなく、前後のオーバーヘッドも含めると結構な差を感じる(nowの方が早い)
  • now.shだとエッジとして東京リージョンがあるためか、レスポンスが早そうだった。
    • かなり荒っぽい計測だが、1.5倍程度は少なくとも縮まってそう。体感でも感じれる程度?
  • APIの機能の好みでいうとnow.shの方式は好き
  • 管理画面はnowの方が軽め(netlify若干もっさり感気になる)
  • GitHubとの連携・コメント周りはNetlifyの方が親切っぽい

そうでもない点・netlifyの方が良かった点

  • ドメイン設定周りはnetlifyの方が圧倒的に親切(後述)
  • env設定もGUIで処理できるnetlifyの方が良さげ
  • deprecatedな情報が多い(v1系の情報は使えない)
  • たまにCLIが混乱させられる
  • 設定ファイルはtomlの方がコメント出来て好き
  • GitHubのコメントちょっとだけうるさいと感じるときがある
  • デプロイ制限が色々いじくってると引っかかりがち
一番最後の「気持ち的に他のも使いたい」が大きいので、Netlifyが悪いという話ではない。
特にNetlify自体は静的サイトを扱うのに特化されていて、機能もそれにあわせた必要十分さなのは改めて強みとして感じている。(Form / ABテスト / Authenticate / ドメイン周り含め)
速度面についてはもしかしてちょっと利用率が上がりすぎてキューが詰まってるとかはあるのかもしれない

やったこと

redirect

netlify.tomlに書いていた設定をnow.jsonへ移植した。
tomlだと使えなかった正規表現が使えるのでわりとまとめられた(可読性的にどっちが良いかとかは微妙)
コメントがつけられないのやっぱりjson設定ファイルは辛いところ
  "routes": [
    {
      "src": "/blog/(?<year>201[89])?(?<splat>[01].+)",
      "headers": {
        "Location": "/blog/$year/$year$splat"
      },
      "status": 301
    },
各サイトのRSSフィードをproxyしているのだが、なぜかqiitaのフィードが通らななってしまったので、ここはAPIを作った
/api/feed/[media].jsというファイルを作るところあたりはnext.jsと一緒(多分どっちかがどっちかに合わせてそう)
結構APIは使い勝手が良いので、redirectで処理したりするのをやめてすべてAPIで処理してもよさそうな気配を感じた

devコマンドの調整

普通に起動してしまうとAPIがローカルで動かせない(gatsbyのポートに認識される?)ようなのでgatsbyに対して$PORTを割り当てた。
結構now-cliコマンドがバグっぽい挙動をすることがあるので、:-3000で初期値を与えてdevでも動かせるようにした。
"start": "now dev",
"dev": "gatsby develop -p ${PORT:-3000}",
他のライブラリであれば、now init XXXXでボイラープレートを生成してpackage.jsonを参考にすると良い

regionの設定

サーバレス機能の部分だけ(そしておそらくデフォルトでも自動選択される)っぽいが、一応設定しておいた
  "regions": [
    "hnd1"
  ]

slackのintegration

とりあえずビルド時に通知は来るっぽい。便利

Domain設定周り

結構苦戦させられたのがDomain設定周り。
しばらくaliasに設定したドメインがpushしてもmasterに追従されずに困って
$ yarn now alias rm www.terrier.dev
などをして剥がしたり
"alias": [
  "now.terrier.dev",
  "www.terrier.dev",
  "terrier.now.sh"
],
"github": {
  "autoAlias": true
},
now.jsonに書いたり一度ドメインをremoveして再追加したりしてたらmaster追従されるようになった。
ドキュメントの読み込み不足かもしれないが、正直謎・・・
それと、naked domainなterrier.devを利用したかったのだが、通常DNSサーバーごとカスタムに設定しなければいけない・Google DomainだとANAME/ALIASが使えなそう・nakedを使うとCDNが効かず遅くなるらしい などの理由から terrier.dev -> www.terrier.devへリダイレクトすることで妥協した。

Edit on Github
@terrierscript