高機能ホスティングサービスNetlifyについて調べて使ってみた

## はじめに

![000.png](https://qiita-image-store.s3.amazonaws.com/0/89911/b8914545-cbeb-3f2d-d879-fb56678f2cfe.png)

[Netlify](https://www.netlify.com)

Netlifyは静的なサイトを超高速で提供できるWebサービスです。先日[210万ドルの出資を受け](https://techcrunch.com/2016/08/17/netlify-a-sevice-for-quickly-rolling-out-static-websites-raises-2-1m/)話題になりました。わずか3ステップでおしゃれなサイトが作成できるとのことです。本記事の前半ではNetlifyの特徴を軽くまとめ、後半は実際にNetlifyを利用してサイトを作成してみます。

## Netlifyの特徴

詳細は[公式ドキュメント](https://www.netlify.com/docs)にあります。今回はその中から一部を抜粋して紹介します。

### ビルド、デプロイ、ホスティングの全て

Netlifyはフロントエンドのビルド、デプロイ、ホスティングの全てを行います。単純な静的サイトのデプロイであれば下記の3行をコマンドラインに打ち込むだけでできます。

```
npm install netlify-cli -g
cd my-site-folder
netlify deploy
```

また、NetlifyはGitHubリポジトリとリンクし、GitHubリポジトリにプッシュがある度にgruntやgulpを介したビルドをしたうえでサイトをデプロイしてくれます。

これらの作業は[app.netlify.com](http://app.netlify.com/)のGUI Webアプリか上記のようなCLI コマンドラインのどちらからでも実施可能です。

### パフォーマンスへの妥協は無し

Netlifyはパフォーマンスに対してかなり力を入れてるように見えます。具体的には以下の特徴が。

- 完全にスケーラブルなサーバー
- グローバルなCDN（日本拠点あり）
- SPA向けのプリレンダリング

### 完全無料のSSL/HTTPS

無料プランを含む全プランに完全無料のSSLを提供しています。しかも1クリックで設定できるとのこと。更にはHTTPS適用時にはHTTP 2.0プロトコルによる通信が可能になりパフォーマンス向上まで見込めちゃいます。

### その他

その他色々な機能や特徴があります。以下はその一例。

- Webhookによるトリガ
- バージョニング&ロールバックの対応
- フォームコントロール

それぞれの詳細については[公式ドキュメント](https://www.netlify.com/docs)にあるのでご確認ください。
それでは実際にNetlifyを利用してみましょう。

## Netlifyを利用してサイトを作ろう

今回は[app.netlify.com](http://app.netlify.com/)のWebアプリを使ってサイトを構築してみます。必要な手順はわずか3ステップです。

![001.png](https://qiita-image-store.s3.amazonaws.com/0/89911/c0cabfa3-f8c0-a82b-40e4-0fa11201e5d1.png)

### Step1 アカウント作成

GitHub含む下記サービスとのアカウント連携かe-mailでのアカウント登録ができます。

- GitHub
- GitLab
- Bitbucket
- e-mail

GitHubアカウントを持っていたのでそれで連携しました。2クリックでアカウント作成が終わります。

### Step2 プロジェクト作成

既存のリポジトリか下の7種類のテンプレートからサイト作成を始められます。

![002.png](https://qiita-image-store.s3.amazonaws.com/0/89911/2173b4d7-368d-4b92-1aaa-785fedb5aa31.png)

今回はnode.jsベースのhexoを使ったテンプレートを利用してみます。上のhexo-baseをクリックするとリポジトリ名の入力が求められます。今回は`netlify-hexo-sample`としました。名前を入力し次へ進みます。

すると"Prepareing your template"と表示され、しばらく待たされます。思ったより待たされます。

![003.png](https://qiita-image-store.s3.amazonaws.com/0/89911/49fcdc82-4ec3-dde1-85f4-c67162b38bd3.png)

あれ……

1時間待っても進まない？何かがおかしい……再挑戦してみてもダメでした。仕方がないので既存のGitHubリポジトリを展開してみることにします。

### Step1(re) プロジェクトの追加

"ADD A NEW PROJECT"ボタンを押します。するとGitHub, GitLab, Bitbucketのリポジトリを選択できる画面が表示されます。
![007.png](https://qiita-image-store.s3.amazonaws.com/0/89911/e326e125-4f53-dbcc-37d0-221486e29abb.png)
フォルダのドラッグ&ドロップにも対応しているみたいですが、リポジトリへのプッシュ時にNetlify側も更新されるというのを試したいので素直にGitHubを選択します。

自分のリポジトリ一覧が表示されたかと思います。今回は完全静的なサンプルアプリを選択しました。

するとリポジトリのコンフィグ画面が表示されます。
![008.png](https://qiita-image-store.s3.amazonaws.com/0/89911/139862b5-a9c7-170e-288a-0009f675635b.png)
ブランチ、デプロイするディレクトリ、ビルドコマンドをそれぞれ設定できます。今回はビルドしないサイトなのでディレクトリとコマンドは空です。全て終わったら"Build your site"をクリック。

これだけでもうサイトは数秒で公開されます。

### Step2(re) サイトプレビュー

ビルド＆デプロイ時のログが確認できますね。

![009.png](https://qiita-image-store.s3.amazonaws.com/0/89911/81a0d375-4aad-7f4c-7aae-5e2dc6c52444.png)

今回はビルドを必要としない完全に静的なサイトなのでログ自体は少ないです。画面表示時に気になったのは上部にある`HELMSMAN-ALCOHOLS-85785`という謎の名前。最初これは関係ない人のGitHubネームか何かと勘違いして焦りましたが単に自分のNetlifyサイトに自動で割り当てられる名前のようです。クリックすると公開されたサイトが確認できます。

![010.png](https://qiita-image-store.s3.amazonaws.com/0/89911/9d7f16ce-86fa-284e-d7fc-4b7e2cdb5212.png)

バッチリですね！

### Step3 サイトの設定

あとは公開されたサイトの設定が色々できます。

- 任意のタイミングでのビルド
- サイト名の設定（helmsman-alcohols-85785は変えられる！）
- カスタムドメインの設定
- HTTPSの設定（要カスタムドメイン）
- Webhookの設定
- カスタムスクリプトの追加（Analysticsなどにも使える）

ココらへんの細かい使い方は[公式ドキュメント](https://www.netlify.com/docs)をご参照ください。

## おわりに

今までリポジトリのビルド結果を公開するには[色々と対応する必要がありました](http://qiita.com/nobuoka/items/91440fe9209f2f20e182)がNetlifyの登場によりその手順が驚く程簡易化されました。また、細かい設定が可能な点やオープンソースコミュニティへの貢献など今後伸びてきそうなサービスに感じます。210万ドルの出資を受けれるサービスは伊達じゃない！

今後も注目しつつ、今回失敗(?)したhexo-templateを利用したテンプレートサイトの構築ができるかまた試してみたいと思います。どなたか完遂できた方いらしたらコメントいただけると嬉しいです。

### 2016/08/19追記

この記事を書いた直後にGitHubに新たな機能が追加されてることを知りました :sob: 

[2016年新機能! GitHubのmasterブランチをWebページとして公開する手順](http://qiita.com/tonkotsuboy_com/items/f98667b89228b98bc096?utm_campaign=popular_items&utm_medium=referral&utm_source=popular_items)

これもすごく便利ですね！簡単にやるならGitHub pages、より細かい設定などが必要ならNetlifyといった使い分けが重要になりそうです。