mottox2 blog

5分で始めるNetlifyでFaaS(Function as a Service)入門 1: Hello World

mottox2
mottox2
2018/08/02

主にフロントエンドでアプリケーションを書いている人向けの記事です。
また、AWS LambdaやGCP Cloud funtionsは知ってるけど敷居が高く感じていて、まだ実際にやったことのない人もこの記事の対象読者です。

あらすじ

FaaSを使う理由

任意のURLを生成して、そのURLにアクセスすると特定の処理が走るような仕組みをFaaS(Function as a Service)といいます。
何が嬉しいかというと開発者はサーバーを意識することなく特定の処理を実行する環境を手に入れることができるという点です。常にサーバーを立ち上げておく必要がないので、たいてい安く使えますし、サーバーの状態管理が必要なく気にすることも少ないです。

サーバーを意識することが少ないので、普段サーバーサイドになれていないフロントエンドな人でも始めやすいし、保守を必要としないので趣味プロダクトで使いやすいという性質も持っています。
とはいえ企業のプロダクトでも取り入れられていて、日経電子版とCookpadの例を載せておきます。
(どちらかといえば、FaaSというよりはサーバーレスアーキテクチャでlambdaが使われています。ただし趣味プロダクトと業務プロダクトではかなりの断絶があるように感じています。)

Netlify functionsとは

Netlify上でAWSのFaaSであるlambdaを利用できるようにしたものです。AWSのアカウントは不要でNetlifyのアカウントがあれば利用することが出来ます。

AWS LambdaやGCP Cloud funtionsは利用するのにクレジットカードの登録が必要で、始める敷居も高かったのですがNetlify functionsの場合、月120,000回の起動分は無料で使えるので非常に始めやすいという性質も持っています。

それでは、気軽に利用できるFaaSであるNetlify functionsを使ってFaaSを始めてみましょう!

本編

前提として、Netlifyのアカウントは持っているものとします。

リポジトリの作成

GitHubでリポジトリを作成しましょう。今回はhello-functionsというリポジトリにします。

bash
$ mkdir hello-functions
$ cd hello-functions
$ git init
$ git commit -m 'Init' --allow-empty
$ git remote add origin [GitHubのリポジトリのURL]
$ git push -u origin master 

実行する関数を書く

今回は入門のために hello world という文字列を返すようにします。
第3引数として渡ってくるcallback関数を実行することでレスポンスの内容をいじることができます。

functions/hello.js
exports.handler = function(event, context, callback) {
  console.log('Hello Netlify Functions.')
  callback(null, {
    statusCode: 200,
    body: "Hello, World"
  });
}

functionsの利用するディレクトリを指定する

Netlifyの設定はGUIで操作できますが、リポジトリ上にnetlify.tomlというファイルを置くことでも変更可能です。今回はnetlify.tomlを利用します。以下の内容でリポジトリのルートディレクトリに置きましょう。

netlify.toml
[build]
  functions = "functions"

Netlifyでリポジトリを紐づけます

Netlifyへの会員登録を行っていない型はGitHubアカウントがあれば簡単に登録できます。
登録済みの方は「New site from Git」=> 「GitHub」とクリックしていくとリポジトリ選択画面が現れるので、今回作ったリポジトリを選択しましょう。
Basic build settingsの画面が現れますが、今回に関してはBuild command、Publish directoryは空でも大丈夫です。Deploy Siteをクリックしましょう。

これでNetlify連携は完了です。
これ以降、GitHubにpushされたタイミングでNetlifyに変更が反映されるようになります。

動作確認

スクリーンショット_2018-07-30_11_03_18-2.png (173.8 kB)
上部のFunctionsを押すとそのリポジトリのFunctionの一覧が現れるのでhello.jsを選択します。

スクリーンショット_2018-07-30_11_04_42-2.png (134.3 kB)

遷移先のページの上部にEndpointという項目がありそのURLが、Functionsの起動URLになります。
そのURLにアクセスしてみるとHello, Worldという結果が返ってくると思います。これで無事に動作していることがわかりました。

Next Step: なにに使っていけばいいの?

Hello Worldが表示されるだけだと何のメリットも感じられませんね。実際には、この関数の中の処理を充実させていくことになります。
多分、応用編も書いていきます。

宣伝

技術書典5でNetlifyに関する本を書く予定です。Netlify Functionsを利用したSlack appの作成方法に関しても書こうと思っています。

興味のある人は僕のTwitterをフォローしていただけると嬉しいです。

@mottox2フリーランスWebデベロッパー

都内でフリーランスエンジニア・デザイナーとしてWebサービスやスマホアプリを作っています。Ruby on Railsでの新規事業の爆速立ち上げや、使いやすいSPAの開発が得意です。

お問い合わせはこちら

自分のGitHubから読み取る挫折の歴史 in 2018

この記事は、「Crieitアドベントカレンダー」9日目の記事です。遅刻ごめんなさい。 Crieitはプログラマー・クリエイターのためのサイトなので、自分のクリエイターになろうとして失敗した記録をG

Netlify Functions + TypeScriptのボイラープレートを作った

8月に書いた「Netlify FunctionsでTypeScriptを使う」という記事で、netlify-lambdaをフォークしてTypeScriptを使っていると書きました。 数ヶ月経ち、フォ

netlify

Netlify FunctionsでTypeScriptを使って開発する

この記事は既に内容が古くなっています。最新の内容は「Netlify Functions + TypeScriptのボイラープレートを作った」をご覧ください 先日Netlify Functionsの

netlify

技術ブログを支える技術(Gatsby + esaio)

2018年5月に公開を始めた当ブログですが、Gatsbyをより多くの人に使ってもらいたいと考えソースコードをオープンにしたので、ブログで用いている技術について説明します。 > 当サイトについて当サ

esaiogatsby