Now の簡単な使い方

Now(ZEIT now.sh)の簡単な使い方を紹介しています。

▲ ZEIT https://zeit.co/
Δ Now https://zeit.co/now

ログインしている場合、ZEIT のサイトを参照すると
Dashboard の表示になり、Now の使用状況を参照できます。
一部は now コマンドの代わりにここから設定可能です。

※ ZEIT(ツァイト)=▲。Now の提供チーム


ダウンロード

Now Desktop は複数人での作業だとメンバーの経歴などを見れ、
アイコンへのドラッグ&ドロップへアップロード公開もできますが、
個人用途・コマンドライン操作前提であれば、常駐を減らすため
Now CLI をインストールするのが良いでしょう。
Now Desktop に Now CLI も含まれています。

Now CLI
Now Desktop

Node.js を使用している場合、
インストールは npm で簡単に行えます。

npm install -g now

Now をつかおう。では Now CLI による
now コマンドでの操作を主に説明しています。


アカウントの登録・ログイン

Now でのログインは ZEIT アカウントとして扱われます。

Web で登録できます。GitHub 連携かメール認証です。
パスワード入力は発生しません。

Sign Up for ZEIT

ログインすると、状況をブラウザから確認できます。
メールアドレスなどの設定変更もこちらから可能です。

now コマンド(Now CLI)にもメールアドレスを割り当てておきます。

now login

メールアドレスを入力するとメールが届くので認証して下さい。


仮アドレスでの公開(デプロイ)

公開する index.html などがあるフォルダへ cd で移動し、

now

とするだけです。
https://●●●-■■■.now.sh/ で参照できるようになります。
●●● 部分はフォルダ・ディレクトリ名の抜粋、■■■ 部分は毎回変化します。
公開前の試作した Web を自分自身で確認したり、
他の人が確認するために一時的に公開する場合は、このアドレスを使用できます。


固定アドレスを割り当てる

割り当てられたアドレスに対し任意の固定アドレスを割り当てられます。
now で割り当てられた ●●●-■■■.now.sh に対し、○○○.now.sh を割り当てるのは次のコマンドです。

now alias https://●●●-■■■.now.sh ○○○

これで https://○○○.now.sh/ で参照できます。
○○○.now.sh は使用されていなければ先着で使用可能です。
従って、固定アドレスで公開する場合は now と now alias を毎回実行する必要があります。

毎回固定アドレスを now alias コマンドで指定するのは面倒なので、
次を入れたファイル now.json を now を実行するフォルダ(ディレクトリ)に入れます。
2018年11月より Version 2 が公開されていますので、
“version”: 2, も入れておくのがおすすめです。

{
  "version": 2,
  "name": "●●●",
  "alias": "○○○.now.sh"
}

この時の name は now コマンドを実行した時、●●●-■■■.now.sh の ●●● 部分となります。
alias の ○○○.now.sh は .now.sh をなくして ○○○ のみでも .now.sh のサブドメインになります。

{
  "version": 2,
  "name": "●●●",
  "alias": "○○○"
}

○○○.now.sh で運用するのであれば、name と alias は同じにして良いでしょう。
これで次のコマンドで実行できるようになります。

now
now alias

なお、 ZEIT Web サイト に入り Dashboard 内の Deployments で
一覧表示を見ながら固定割り当てを設定する事ができます。
Aliases で現在割り当てしているアドレスを一覧できます。


静的サイトジェネレーターを使用する場合

例えば Hugo では hugo コマンドで通常に public フォルダに公開ファイルを生成します。
Hugo で生成した後に Now で Web サイトへ公開する操作は次のようになります。

hugo
cd public
now
now alias

必要であれば cd .. で一つ親のフォルダに戻し、hugo から実行しなおします。


公開時の注意

index.html がない場合、ファイル名なしでの参照はファイル一覧表示になります。
構成ファイルが丸見えになるのでご注意下さい。
Version 2(2018年11月以降)は now.json の build で指定している場合、(後記 Q&A 参照)
index.js・index.go・index.php・index.py・index.md なども有効です。


GitHub リボジトリと連携する

GitHub と連携する事で、now コマンドを実行する代わりに
GitHub へ push する事(コミット)でデプロイされるようになりました。

Now + GitHub

例えば、GitHub でのプロジェクト関連は ▲▲▲.github.io/△△△/ となりますが、
Now 連携により、プロジェクト名でも △△△.now.sh で公開できます。
GitHub Pages と同じようにプロジェクト内のファイルがまるごと公開されます。

Account Settings へ入り、まだ連携していない場合、
GitHub Integration にある INSTALL NOW FOR GITHUB をクリックします。
この時リポジトリは数が少なければ全てでも構いません。
Now が動作するのは now.json があるリポジトリに限られます。

あとは now.json を含めてリポジトリへファイルを pushするだけです。
now.sh サブドメイン(または独自ドメイン)の設定は now.json ファイルで設定するので、
GitHub のプロジェクト名は別の名称でも構いません。
ブランチは今のところ master のみで機能します。

通常は GitHub への push により now→now alias 相当が行われる状況となり、
now.json の設定により固定アドレスで公開された状態にできます。
実行状況は Now[bot] からメールで通知が入り、
commits に Now からコメントが入ってデプロイ・公開状況を把握できます。

サンプル - fu-sen/git-to.now.sh | GitHub

独自ドメインで公開するコンテンツを GitHub リポジトリで使用する場合は
一度リポジトリに git push(コミット)する前に
now alias コマンドで一度仮公開し、ドメインの所有者認証を行うと良いようです。(下記)


独自ドメインの設定

独自ドメインを完全に Now で公開する Web を参照するようにする場合はネームサーバで設定します。
2019年1月8日より、独自ドメインを追加する際にネームサーバを用いて所有者認証を行う手段が導入されました。

now alias ではドメイン名を完全に入れます。
ここでは □□□.com が公開ドメイン名とします。もちろん .com 以外も使用できます。

now alias https://●●●.now.sh □□□.com

now.json に設定する場合も alias は独自ドメインを完全表記して下さい。

{
  "version": 2,
  "name": "●●●",
  "alias": "□□□.com"
}

独自ドメインを設定して now alias を行った際、
独自ドメインに設定するネームサーバが表示されます。

◎ は a~f のいずれかです。これは独自ドメイン毎に変わります。
他のネームサーバサービスを経由する場合はこれに代わって
表示されている TXT レコードを追加して下さい。
しばらくすると認証された旨のメールを受け取りますが、
代わりに次のコマンドで手動認証も可能です。(Now CLI 13.0.0 以降)
通常はネームサーバの反映に時間を要するため、
独自ドメイン側で設定してから少なくても数分経過した後に実行すると良いです。

now domain verify □□□.com

独自ドメイン側のネームサーバ変更作業を行ったために
再度ドメイン所有者認証を行う必要がある場合は、次を実行します。

now domain inspect □□□.com

□□□.com と www.□□□.com で別々に作成を要します。
これは www あり・なしを選択できるようにしているようです。
www.□□□.com から □□□.com へ転送するようにするのは次の now.json です。
これと空のファイル index.html などを入れておいたものを now→now alias します。

{
  "version": 2,
  "name": "●●●",
  "alias": "www.□□□.com",
  "routes": [
    { "src": "/(.*)", "status": 301, "headers": { "Location": "https://□□□.com/$1" } }
  ]
}

独自ドメインも Let’s Encrypt による SSL 証明書で SSL が有効になります。
サブドメインは * になるので、サブドメインもそのまま有効です。
必要な場合は独自で申請して発行した証明書を使用する事も可能です。
ZEIT Web サイトの Dashboard 内 Certs、または now certs replace コマンドを使用します。

now certs replace --crt 証明書.crt --key 公開鍵.key --ca 中間証明書.crt □□□.com

ドメインそのものは別管理で、サブドメインを Now で割り当てる場合、
まず TXT レコードの追加を行い、所有者認証を行います。
(追加する TXT レコードは now alias 実行時に表示されます)
続いて CNAME レコードとして alias.zeit.co を指定して下さい。
bind(named)を使用している場合は末尾に . が付き alias.zeit.co. となります。

now domains ls コマンド、または
ZEIT Web サイトの Dashboard 内 Domains で独自ドメイン関連を参照できます。


独自ドメインの購入

ZEIT の Web サイト上から独自ドメインを購入する事ができます。
WHOIS は ZEIT が名義代行可能。Now で素早く公開でき、
ZEIT World DNS によって他のサービスへも割り当てが可能です。

Find your perfect domain | ZEIT

入力フォームに入れると登録可能なドメインを表示します。
IDN(日本語を含む国際ドメイン名)は Punycode(xn– はじまりの英数)で入力してみて下さい。
購入可能な場合価格が表示されます。プレミアムドメインも対応しています。

Now CLI も独自ドメインの購入に対応しています。

now domain buy ○○○.com

他のサービスに移管(transfer)する必要がある場合など
英語での問い合わせを要する点にご注意下さい。


ネームサーバ管理

Now に独自ドメインを登録する場合はネームサーバ ZEIT World DNS を設定しますが、
これにより now dns コマンドでネームサーバを管理できます。

DNS Management

ZEIT Web サイト上ではネームサーバ管理できませんが、Events に実行した状況は一覧されます。

独自ドメインの Web サイトを Now で公開した段階で
サブドメインは *(ワイルドカード・すべて)で Now を参照するように設定されます。
また SSL 証明書も * になっています。
そのため、すでに Now で管理している独自ドメインのサブドメインで追加公開する場合、
ネームサーバの操作は不要で、now alias(GitHub への git push)を行うだけです。

レコードの追加

now dns add ドメイン名 サブドメイン レコードタイプ 値 [MX 優先度]

ドメイン名 は Now に登録しているドメイン名です。

サブドメイン を付けないドメイン名そのものに対して設定をする場合は @ を使用します。

レコードタイプ は次に対応しています。

は A や AAAA だと IP アドレス、ALIAS・CNAME・MX は ホスト名などになるでしょう。
ALIAS・CNAME 指定の際、末尾 . は不要です。

now dns add domain.ext sub A 123.124.125.126

Now 登録ドメイン domain.ext に sub.domains.ext として
IP アドレス 123.124.125.126 を割り当てます。(A)

now dns add domain.ext sub CNAME alias.domain-name.ext

Now 登録ドメイン domain.ext に sub.domain.ext として
alias.domain-name.ext の IP アドレスを参照させます。(CNAME)

now dns add domain.ext @ MX mail.server.co.jp 10

Now 登録ドメイン domain.ext のメールサーバとして
mail.server.co.jp の IP アドレスを優先度 10 で参照させます。(MX)

レコードの一覧表示

now dns ls ドメイン名

ドメイン名で設定されているレコードを表示します。
now dns add で追加しているレコードは一番左に ID が表示されます。
それ以外のレコードは Now 側で設定されたレコードです。

レコードの削除

now dns rm ID

now dns ls で表示された ID を指定してレコードの削除を行います。

サーバによってはサーバを分散させるため、
一つのサブドメインで複数の IP アドレスを設定する必要がありますが、
now dns add でその項目をすべて追加して構いません。
(すでに存在していても、それを変更・削除するわけではなく、必ず追加されます)
そのため、設定を変える場合は now dns add でレコードを追加し、
古いレコードを now dns rm で消す必要があります。
(add→rm の順にする事で、サーバの参照ができなくなる恐れがなくなります)


公開状態の確認と無駄な URL の削除

古い URL はしばらく残しておき、
更新した後の意図しない動作を戻して改善する事ができます。
時間の経過と共に使われていない古い URL は削除されますが、
古い URL が完全に不要な場合は手動で削除する事も可能です。

now remove ●●● --safe --yes

now rm ●●● –safe –yes でも削除できます。

ZEIT の Web サイトより Dashboard 内 Deployments で
一覧を見ながら古い URL を削除する事も可能です。

固定アドレス ○○○.now.sh や独自ドメインで割り当てていた
唯一の URL が削除された場合は、参照対象から解除となります。
○○○.now.sh はこの段階で解放され、他の人が now alias で割り当て可能になります。


Q&A

無料ではどこまで使用できますか?

2018年11月に Version 2 の価格体系が追加されました。

Pricing

項目 無料の上限
帯域幅 月 100GB
now 実行時のビルド 月 1000 回
動的ファイルの実行・変換 日 1000 回
ログ 日 1000 回
ストレージ容量 100GB
1ファイルの最大サイズ 100MB

「now 実行時のビルド」は now コマンドを実行し、
now.json の build で定義されているファイル群が検出された 1 組がビルド 1 回です。
変換を行わない @now/static はこの回数に含みません。

静的ファイルでの利用だと無料で使用できる範囲が広いですが、
動的に生成を行う場合は回数に気をつけないと使い切ってしまうでしょう。

2018年11月以前から使用している場合は
Version 1 のプランが維持されています。上限が異なります。

Pricing/V1

項目 無料の上限
帯域幅 1GB
最大同時インスタンス数 3
ログ 100MB
ストレージ容量 1GB
1ファイルの最大サイズ 5MB

Version 2 プランの変更は次のページにある「Platform Version」を
「v2 (Latest)」にして下さい。後日プラン表示が反映されます。
v2 対応に問題がある場合、v1 へ戻す事も可能です。

Account Settings

なお、他のところで「デプロイ回数が月 20 回まで」といった記載がありますが、これは古い情報です。

Not Found で任意の HTML を表示できますか?

公式 Web 上での記載がありませんが、Version 1 では 404.html で表示できるように対応されています。

Send custom 404 page if it exists #34 | GitHub zeit/serve Pull requests

Version 2 では 404.html が有効になりません。Now 固定の表示になります。
ただし、実行環境によって HTML・JSON・テキスト 表示の変化を行います。

Status Codes

動的ファイルを実行できますか?

2018年11月よりビルド機能が追加され、Node.js・Next.js・Go・PHP・Python などが使用できるようになりました。
Markdown などのファイル変換も含まれ、動的ファイルと同じビルドの対象となります。

Bulders/Overview

公式サイト上ではビルド処理を行うシステムを λ(lambda=ラムダ)と表記しています。

使用する場合は now.json に builds プロパティの追記が必要です。
例えば html は変換なく表示、.php は PHP 動作を有効にする場合、
下層のフォルダがない前提だと、now.json は次の記載となります。

{
  "version": 2,
  "name": "●●●",
  "alias": "●●●",
  "builds": [
    { "src": "*.html", "use": "@now/static" },
    { "src": "*.php", "use": "@now/php" }
  ]
}

変換しないファイルはすべて @now/static で明示する必要があります。
Web サイトとしての使用であれば、.jpg・.png・.css・.js、
更に favicon.ico や robots.txt など、表示したいファイルはすべて入れる必要があります。
また下層フォルダがある場合は bulids の src にフォルダを含めて明示が必要です。
これは意図しないファイルの公開・動作を避けるため、このような仕様になっています。
HTML などと動的ファイルは異なる ●●●.now.sh・独自ドメイン を用いるのも手でしょう。
now コマンドや一覧表示で動的・変換ファイルの対象に λ マークが付きます。

上の項目にもあるように、無料で使用できる回数制限にご注意下さい。

なお、Version 1 では Serverless Docker Beta を用いた動作手段が存在しますが、
Version 2 で Docker はサポートされていません。

Serverless Docker Beta

転送処理の良い手段は?

Version 2 では new.jsonroutes を加える事で実現できます。
次の例では、https://●●●.now.sh/~ や https://●●●(独自ドメイン)/~ を
HTTP ステータスコード 301 を用いてすべて https://jpn.now.sh/~ へ転送します。

{
  "version": 2,
  "name": "●●●",
  "alias": "●●●",
  "routes": [
    { "src": "/(.*)", "status": 301, "headers": { "Location": "https://jpn.now.sh/$1" } }
  ]
}

実際のファイルがあっても実行されません。routes が優先されます。
そのため、上の場合 now.json 以外のファイルは不要となりますが、
now.json ファイルしかない状態だと now コマンドでデプロイに問題が発生します。
何でも良いのでファイルを一つ生成しておきます。

zeit/now-examples / redirect | GitHub

Version 1 を維持している場合は、次の Now Redirect を使用できます。

now-examples/redirect | GitHub

Rewrite は可能ですか?

上の項目で紹介している now.jsonroutes を用いる方法で
Rewrite 相当の実現が可能になっています。

routes | Deployment Configuration (now.json)

SSL に対応していますか?

○○○.now.sh・独自ドメイン共に https(常時 SSL)の状態で公開されます。
○○○.now.sh はワイルドカード(*.now.sh)で SSL 証明書が発行されていますが、
独自ドメインを使用する場合、now alias の実行で自動的に証明書発行が行われます。
(無料で発行できる Let’s Encrypt が採用されています)
そのため証明書の手続きなく、すぐに SSL で参照可能です。
独自ドメインでは自分で発行した SSL 証明書を適用する事もできます。

逆にいうと、http での公開は行えません。

2019年1月8日 ZEIT からメールが届きました

2019年1月8日現在で Now を独自ドメインで使用している場合
ZEIT から独自ドメイン別でメールが届いたはずです。

ZEIT は Now に独自ドメインの所有者認証を導入しました。
そのため、所有者認証作業を行う必要があります。

とはいっても簡単です。メール記載のネームサーバに変更するだけです。
しばらくすると確認できた旨のメールを受け取りますが、
Now CLI から手動ですぐに認証を行う事もできます。(Now CLI 13.0.0 以降)

now domain verify □□□.com

従来の DNS は使えなくなる可能性があるため、
ネームサーバの変更ははやめに行って下さい。

Now を独自ドメインで使っている人へ。ネームサーバの変更(所有者認証)を行う必要があります。| ふうせん🎈 Fu-sen.

IDN・国際化ドメイン名は使用できますか?

●●●.now.sh・独自ドメイン共に日本語ドメインを含む IDN・国際化ドメイン名を使用できます。
正式には ●●●.now.sh はサブドメインで日本語なども使用できる事になります。
ただし Punecode(xn– ではじまる英数)に変換して now.json や now alias コマンドで割り当てて下さい。
ZEIT サイト Dashboard 内の一覧も Punycode 表示になります。

https://サンプル.now.sh/
fu-sen/xn–vck8cuc4a.now.sh | GitHub - サンプル.now.sh の構成ファイル

日本語を含む URL が参照できません

GitHub の issue へ不具合報告を行いました。その結果、2019年1月10日 までに改善されています。
現在は日本語を含むファイル・フォルダを正常に表示できます。

Unable to process files and folders that are not ASCII #1793 | zeit/now-cli Issues

削除した独自ドメインが一覧に残っています

SSL 証明書を発行している影響で、独自ドメインは管理を外してもしばらく表示されます。
証明書の期限切れで一覧がなくなります。証明書(Let’s Encrypt)は 3 ヶ月おきです。
ドメインを抹消済みであるなど、すぐに一覧から削除したい場合は
now domains remove ドメイン名 で削除できます。

サーバはどこにありますか?

ネームサーバ ZEIT World DNS は日本・東京を含む 12 ヶ所です。

The All-New ZEIT World DNS

コンテンツを保管している CDN は無料プランでは 4 ヶ所からの配信です。
動的ファイルの実行やファイル変換を行うサーバは場所を指定できます。
そのため、無料プランではコンテンツを海外から得る事になります。

CDN and Global Distribtion for Deployments

有料プラン(Version 2 の場合は Unlimited プラン)で使用できる Now CDN は
Cloudflare 連携の世界中 150 ヶ所以上のサーバへキャッシュされています。
これは日本の東京・大阪を含みます。
特に静的ファイルではレスポンスがはやくなるでしょう。
Now CDN は 2018年7月 から提供されています。

The Now CDN

Cloudflare
Cloudflareのエニーキャストネットワークの地図 | Cloudflare

Now コマンドの更新はどうすれば良いですか?

now コマンド実行時に次のコマンドが表示されているでしょう。

UPDATE AVAILABLE The latest version of Now CLI is ●.●.●

Now CLI をインストールした場合は、インストールと同じ手順で更新が行えます。

npm install -g now

Now Desktop は自動更新されます。自動更新の有無はメニューにあります。

Updating Now CLI

Now CLI が更新されません

過去 Now Desktop をインストールしていた環境で、Now Desktop を削除し、
Now CLI をインストールした場合、Now Desktop がインストールした Now CLI が残り、
その Now CLI が優先されるため、更新に問題が生じる場合があります。
Now CLI は同じ動きでも、Now Desktop・npm・yarn で異なる場所にインストールされます。

npm install -g now を行っても旧バージョンのままになっている場合、
一度 npm uninstall -g now で Now CLI を削除し、
Now Desktop をインストールして、こちらから Now CLI を更新させて下さい。
これで最新版に更新できます。
そのまま使用もできますが、必要な場合は Now Desktop を削除し、
npm install -g now で Now CLI に戻して下さい。

運営者が Windows 10 で経験しています。
バグ報告済みで、その後詳細な状況も確認できています。
この詳細が把握できる場合は、
手動で該当の Now CLI ファイルを削除して一時的に改善させる事も可能です。

Now CLI is not updated to 13.0.0 due to installing Now Desktop in the past. #1809 | GitHub zeit/now-cli issues

Now について分からない事があります

英語が可能であれば、チャットへ入って質問してみるのがおすすめです。
Spectrum を採用しています。けっこう見ている人がいるので、返信もはやいです。
ZEIT として存在しているので、Now のところに入って質問して下さい。

Join ▲ZEIT on Spectrum

動作・記載がおかしい部分を発見しました

正常に使えていたのに、急に動作がおかしくなった場合は
ZEIT Status を確認してみて下さい。
Version 1(Now 1.0)と Version 2(Now 2.0)は異なるサーバで動作しています。

ZEIT Status

明らかに Now CLI や Now Desktop に不具合がある場合は
GitHub で該当アプリの issue を確認してみて下さい。

ZEIT | GitHub

ドキュメントの記載ミスなどについては
ログインしている場合、ZEIT Web サイト右上にある FEEDBACK… より
チームへメッセージを遅れます。英語になるでしょう。
(ZEIT には日本人もいるようですが……)
場合によって担当者からメールで返信されてきます。

アカウントを削除したいのですが……

Accouns Seetings に Delete Account がありますが、
一度削除するとそのメールアドレスで再度登録する事ができなくなります。
英語で問い合わせてアカウントを復旧してもらう必要があります。(運営者はこれを経験しています)
なので、Now を使う用途がなくなっている場合でもアカウントは残しておいた方が良いでしょう。

Surge との違いは?

●●●.now.sh か ●●●.surge.sh かで悩んでいる場合、
Google などの検索エンジンで表示される
不特定多数向けに公開する Web サイトであれば ●●●.now.sh を使用すべきです。
●●●.surge.sh ではクローラー(検索エンジンロボット)の参照を完全に禁じています。
そのため、検索エンジンの結果へ反映されない、または検索結果に出てこない問題が生じます。
(Surge で独自ドメインを使用する場合はこの問題が発生しません)
●●●.now.sh はこの問題がなく、安心して公開する Web サイトに使用できます。

Surge は公開コマンド surge の段階で固定アドレスを指定できます。
Now コマンドの場合、通常 now→now alias と 2 回実行する事になりますが、
古いデプロイが残されていれば戻す事も可能なのが特徴です。

また、次の点は Now が Surge よりも有利な点です。

Surge をつかう。