「Netlifyで始めるサーバーレス開発」を読んで

書籍

Netlifyで始めるサーバーレス開発 (技術の泉シリーズ(NextPublishing))

Netlifyで始めるサーバーレス開発 (技術の泉シリーズ(NextPublishing))

TL;DR

  • Netlifyの概要からFunctionの使い方まで幅広く学べる。
  • SlackやLineのURL Hookの方法が学べ、業務や日常生活を改善するための引き出しが増える。

この本を選んだ理由

  • 以前「Vue.jsとFirebaseで作るミニWebサービス」を読み(読書記録はこちら)、FaaSについて学びたいと思ったから。

印象に残った点

Netlifyとは何ぞや?という概要、Netlifyの良い点が書かれている

  • Netlifyは開発者が決めたブランチにコミットがされると自動でサイトのデプロイをやってくれたり、PullRequest毎に環境を作ってくれたたりする。
    • こんな開発環境憧れるなぁ。今の会社の開発環境との差を痛感。
  • NetlifyはHostingだけではなく、FaaSのFunctions、認証サービスのIdentify、フォームサービスのFormsがある。
    • Netlifyってこんなに色々できることがあるのか。知らなかった。
  • 著者がNetlifyのFaaSを推す理由としては導入/運用のしやすさ。
    • AWSGCPだと無料枠はあるが他の用途で使っていた場合に意図しない課金が発生したり、管理画面が複雑だったりとハードルが高いとのこと。
      • 分かる。。。AWSはなぞの課金が発生していたし、解約するにも管理画面が良くわからなかったのは完全に同意できる。
    • NetlifyだとDeployにCircleCIやTravisCI使う必要がないというメリットもある。
      • Firebaseだとそうはいかないので、CI/CDのために別サービスを使わなくて済むのは確かに楽。
  • Netlify Functionsの実行基盤はAWS Lambda。
    • AWS LambdaをURL駆動で使うにはAPI Gatewayの設定が必要だったり、デプロイの制御だったり、ハードルが高い。
    • ただし、URL名が決まっていたり、メモリは128MB、実行時間は10sなどの制約があるため、制約を取り外すとなるとAWS Lambdaの利用を考えると良いとのこと。
      • なるほど、制約を考慮して使う分にはNetlify Functionsで良いのか。
      • そもそもNetlify FunctionsってLambdaのラッパーだったのか…。知らなかった。

LineBotやSlackAPIを学習題材にNetlify Functionの使い方を学べる

  • 単純にHello, worldを返すだけのNetlify Functionsの作成から始まり、LineBotやSlackAPIを絡めてNetlify Functionの使い方を学べる。
  • LineBotやSlackAPIを利用することになるので、どういった仕組みで開発者にサービスを利用してもらおうとしているのか?も学べて良い。
    • どちらも共通してURL Hookできるような仕組みが提供されていた。互いに共生していくスタイルを取りたいのだろう。
  • 本記載時からLine Developersのプランが変更になっており、少し焦った。
  • Slack APIを使って投稿する際のメッセージフォーマットはJSON形式。
    • SlackのメッセージフォーマットはJSON形式であり、開発者向けにプレビュー用のページも用意されている。
      • 開発者に使って欲しいという思いが伝わるなぁ。こういうオープンなスタイルは今の業界にはないので新鮮。

外部に公開するようなサービスの一般論について教えてくれる

  • Tokenのように外部に見せるべきではないものは環境変数として定義するのが一般的。
  • Netlifyではプロジェクトの設定画面にて環境変数を設定できる。
    • 外部に公開するようなサービスを作ったことがないので、こういう一般論は凄く有り難い。
    • Netlifyで環境変数を設定できるのか。公開するようなサービスはどれも同じような事ができるんだろうなぁ。利用時には気にしていきたい。

ちょっとした誤字があった

  • 下記は間違っていると思われる。
// Kindle版:位置No.485あたりの「src/game.js」

// 誤り
const targetEvent = body.events[0]
// 正しい
const targetEvent = webhookBody.events[0]
// Kindle版:位置No.511あたりの「src/game.js」

// 誤り
import messageData from './gameMessages'
// 正しい
import messageData from './gameMessage' // jsファイルは複数形ではないので。もしくはファイル名を直すか。

今後

  • Firebase Functionについて学習したい。
  • TypeScriptちょっと興味が出てきたので学習したい。

余談

  • Node.jsってバージョン管理するツール入れる人が多いんだ。知らなかった。Windows環境なのでnodist入れてみた。
    • こちらこちらを参考にnodist入ようとしたが「path not updated, original length…」のエラーが出た。
    • 環境変数を登録しすぎているようだったので、整理したらエラーが解消した。
  • npm init -y ってどういう意味なんだろうか?知らないことが多すぎる。
    • 「プロジェクトを新規追加するときに、毎回同じ情報を入力することにうんざりしているなら、-yフラグを使って多くの項目をデフォルト設定にできます。」とあった。そういうことね。(参照)
  • NetlifyのFunctionsを使うためにTOMLファイルが必要。TOMLって何??今まで独学してきたけど出会わなかった。。。
    • Githubの中の人が提唱した設定ファイルなのか。TOMLがJSON と異なる点は、人間にとって読み書きしやすいことに重点を置いているところでコメントを入れれる点になる。ふむふむ。
    • こちらとても良くまとまっていて大変参考になりました。
  • netlify-lambdaパッケージを使うと動作環境用の開発サーバを立ち上げてくれて毎回Pushしなくても確認できる。
    • netlify-lambdaはバンドルツールであるwebpackのラッパーライブラリとのこと。