Netlifyに7ドル支払った話(GitHub ActionsでNetlifyにデプロイする)

記事作成日時: 2020/05/31 13:37

最終更新日時: 2020/05/31 13:39


はじめに

Netlifyはとてもいいサービスです。Netlifyは高機能なホスティングサービスです。このブログもNetlifyを利用しています。

ある日、Netlifyから7ドル請求されました。支払わないとサービスを停止すると言われました。
無料プランを利用していて、課金をした覚えはありません。
なんで勝手に課金したことになってるんだ。自分の意思じゃないから払う気なんか無い。
そう思っても、支払わないとこのブログが続けられなくなるという事実は変わりません。

そうして僕は7ドル支払いました。

当時のツイート

この記事のまとめ

  • 無料プランでビルド時間を300分超えて利用すると、7ドルの支払いが発生する
  • 支払わないとサービス停止するので素直に払おう
  • ビルド時間が300分超えないように対策を取ろう

    • GitHub ActionsでビルドしてNetlifyにデプロイしよう

ビルド時間の制約

Netlifyは無料で十分な機能が揃っています。
GitHubのリポジトリを連携すると、masterへのプッシュ・プルリクエスト作成をトリガーとしてビルドとデプロイを自動で実行してくれます。
ビルドは1ヶ月に300分までしか利用できません。それ以上使う場合は課金する必要があります。500分で7ドルです。

300分を超えた時点で請求が発生する

ビルド時間が300分に達すると利用できなくなるわけではありません。
自動で7ドルの課金が発生し500分のビルド時間がプラスされます。

Netlifyにクレジットカード情報を入力していなくても自動で発生します。
入力していないので、当然ですが放っておくと7ドルの支払いは行われません。

支払わない場合、サービス停止してしまいます。
サービス停止させないためにはクレジットカードを登録し支払いを完了させないといけません。

再び7ドル支払わないためには

さて、このままではまた300分超えると7ドル支払わないといけません。
300分に収めつつ、サービスは継続させたいです。たかが7ドルかもしれませんが、されど7ドルです。

対策として、ビルドをNetlifyで行わないようにしました。
GitHub Actionsでnpmのインストールとビルド、そしてNetlifyへのパブリッシュを行うようにします。

GitHub ActionsでNetlifyにデプロイする

まずはGitHub Actionsに用意されているNode.jsのテンプレートを使います。これでインストールとビルドは完了です。 テンプレートでは、masterへのPull Requestもトリガーになっているので、それは削除します。
Nodeのバージョンは今回はv14系のみにします。

Node.jsプロジェクトのテンプレート

# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Node.js CI

on:
  push:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: 14.x

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

残りはNetlifyへのパブリッシュです。Netlifyが公式でActionを用意してくれています。
netlify/actions/cliを使います。これで完了です。

完成版

name: Deploy

on:
  push:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: 14.x

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test
    - name: Publish
       uses: netlify/actions/cli@master
       with:
         args: deploy --dir=public --prod
         env:
           NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
           NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}

NETLIFY_SITE_IDの値はサイトごとに発行されるAPI IDを指定します。
Authトークンはここから発行できます

どれほど短縮したか

これまで1分40秒かかっていたものが、GitHub Actionsに切り替えたことでほぼ数秒で完了するようになりました。
これで7ドル払う心配は無いでしょう。

ちなみに、自動ビルド設定はオフにしないとNetlifyのビルドが走ってしまいます。
Build SettingsのBuildをActivate BuildsからStop buildsにすればOKです。