Express.jsの起動はnodemonが便利

Express.jsのバックグランド実行はforeverが便利という記事を書きました。

Express.js(Node.js)をバックグラウンド実行させるにはforeverが便利 - Node.jsで暗号資産アービトラージ

コーディング中はnodemonというライブラリが便利なので紹介します。

コードの変更が発生すると自動的に再起動してくれるので修正を楽に確認できるようになります。

nodemonの例
写真の緑字のログrestarting due to changes...で自動で再起動がかかっています。

nodemonの使い方

Express.jsの通常の起動方法の問題点

Express4.x系では以下のように起動します。

node bin/www

ブラウザにlocalhost:3000と入力すると開発中の画面が表示されます。

コードを修正して画面の表示を確認したい場合、Ctrl+Cと再度node bin/wwwを実行してアプリケーションを再起動させる必要があります。

nodemonを使うと自動でコード修正を検知して再起動してくれるので、手動のオペレーションを短縮することができます。

nodemonのインストール

通常のnode.jsライブラリ同様にnpmを利用してインストールします。

npm install nodemon -g

通常起動時のnodeをnodemonと入力することで起動できます。

nodemon bin/www

nodemonのパラメータでは-execが便利

デフォルト設定では拡張子がjs、mjs、coffee、litcoffee、jsonのファイルが検知対象になっています。

viewにejs、jadeを利用している人は検知されるように追加しておきましょう。

起動コマンドにオプション(-execまたは-e)で指定します。

jsとejsを利用している場合は以下のように起動します。

nodemon -e js,ejs bin/www

nodemon利用時の便利な設定

起動コマンドはpackage.jsonに

毎回-eオプションで拡張子を入力するのは面倒ですよね。

package.jsonに記載しておくと便利です。

scriptsのtestのvalue部分に上記のコマンドを記載しておくことでnpm testコマンドでExpress.jsonをnodemon -eで起動することができます。

{
  "name": "shark",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "NODE_ENV=production forever start ./bin/www",
    "test": "nodemon -e ejs,js,json start ./bin/www"
  },
  "dependencies": {
    "ejs": "~2.5.7",
    "express": "^4.16.4"
  }
}

本番用途でのバックグラウンド起動はforeverで

上記の例ではscriptsのstartに本番用の起動コマンドを記載しています。

本番用サーバではnodemonではなくバックグラウンド起動できるforeverがおすすめです。

scriptsのstartを本番用途、testを開発用途にすることでnpm start、npm testの使い分けで起動コマンドを切り替えられるので便利です。

www.kennejs.com

Express.js(Node.js)をバックグラウンド実行させるにはforeverが便利

Express.jsをバックグラウンド実行させるにはforeverが使い勝手がよいです。

外部サーバで永続的に実行させたいときにおすすめです。

GitHub - foreverjs/forever: A simple CLI tool for ensuring that a given script runs continuously (i.e. forever)

foreverの永続化が便利

手順としてはforeverをサーバーにnpmからインストールしてforever startコマンドを実行するだけです。

npmからforeverをインストールします。

npm install forever -g

forever startコマンドで起動。Express.jsの場合はプロジェクトフォルダからbin/wwwを実行します。

forever start ./bin/www

この時点でコマンドが打てるようになっているはずです。サーバとの接続を切っても永続的に実行されます。

productionモードで起動する

Express.jsには開発・本番モードがあります。本番運用では本番モードで実行することがおすすめです。

以下のようにforever startの前にNODE_ENV=productionを記載すればOKです。

NODE_ENV=production forever start ./bin/www

起動コマンドをpackage.jsonに記載する

開発をしているとNODE_ENV=productionをつけ忘れたり、foreverのコマンドを思い出せないことが出てきます。

起動コマンドはあらかじめpackage.jsonに記載しておくと忘れてしまっても確認できるので便利です。

プロジェクトフォルダにあるpackage.jsonのscriptsに起動コマンドを追記します。

プロジェクトフォルダ

JSON形式で"scripts"の"start"に起動コマンドを記載します。

{
  "name": "shark",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "NODE_ENV=production forever start ./bin/www",
    "test": "nodemon -e ejs,js,json start ./bin/www"
  },
  "dependencies": {
    "ejs": "~2.5.7",
    "express": "^4.16.4"
  }
}

上記のように記載しておくと、npm startでコマンド実行するとforeverコマンドが実行されます。

package.jsonがない場合はnpm initで作成することができます。

scriptsのtestの部分は開発時のnodemonを利用した起動コマンドです。別記事で詳細を解説しています。

Express.jsの起動はnodemonが便利 - Node.jsで暗号資産アービトラージ

foreverの使い方

foreverのよく使うコマンドです。

Express.jsを起動

forever start ./bin/www

Foreverで実行中のscriptを確認

forever list

以下のようにinfo:Forever processes runningが出力されると起動しています。

forever list

logfileを参照すると実行されているscriptのコンソールログを見ることができます。

Express.jsを停止

forever stop ./bin/www

使い勝手がよいので是非お試しください。

なお、開発時はnodemonが便利なので、以下の記事もおすすめです。

www.kennejs.com

自作アプリケーション初心者にはさくらVPSが手軽でおすすめ


ハリーポッター洋書の難易度は 初心者は絶対手を出しちゃダメ

ハリーポッターを洋書で読んでみたい方向けの記事です。

不死鳥の騎士団(第5作)を読んだ感想です。

これから読もうと考えている人は参考にしてみてくださいね。

Harry Potter and the Order of the Phoenix (English Edition)

Harry Potter and the Order of the Phoenix (English Edition)

ハリーポッター洋書の難易度

ハリーポッターはAmazonの紹介では9-12歳向けですが、ハリーポッター特有と思われる難しさがありました。

ハリーポッターは映画も大ヒットしている児童書なので多読初心者が取り組みやすい部類なのですが、初心者にはおすすめできない難易度となっています。

特殊な単語が多い

本全体を通じた単語は他の9-12歳向けの児童書と同程度です。

わからない単語もそれなりにあるけれど、辞書なしでも読み進められます。

ネイティブの9-12歳は10000語以上(10000語はTOEIC900レベル)なので、わからない単語が多い前提で進みましょう。

ハリーポッターの場合、SFで魔法の世界が舞台なので、他の同じレベルの児童書に比べると聞いたことない単語が多く出てきました。

世界観を想像しづらい

英語を読んでいて「あれ、今なんの話をしているんだろう」っていう感覚を味わったことがありませんか。

9-12歳向けレベルの本だとそういう経験がなかったんですが、ハリーポッターは何度がついていけない場面がありました。

映画は何作か観ていましたが、不死鳥の騎士団は観ていませんでした。

長い(特に4〜6作)

ハリーポッターシリーズは後半に行くに従ってどんどんページ数が長くなります。

第4作から第6作は600ページを超えるので初心者にはしんどくなります。

第5作は816ページで、電車の行き帰りで読むぐらいだと数ヶ月かかりました。

第1作 賢者の石:309ページ
第2作 秘密の部屋:373ページ
第3作 アズカバンの囚人:475ページ
第4作 炎のゴブレット:640ページ
第5作 不死鳥の騎士団:816ページ
第6作 謎のプリンス:652ページ
第7作 死の秘宝:313ページ

ハリーポッターは難しいけど読み応えあり

初心者向けにはおすすめしませんが、洋書に慣れている人にはおすすめです。

第1作は発行が5億部を超えるベストセラーだけあって内容はやっぱり他の児童書より面白いです。

Kindle Unlimitedに加入していると0円で読めます。

試し読みならKindle Unlimitedがおすすめ

第2作から第7作はKindle Unlimitedに加入していると0円で読めます。

無料お試し期間があるので試してみたい方はKindle Unlimitedで読んでみることをおすすめします。

以下のリンクからKindle Unlimitedの無料お試し登録ができます。

本格的に読むなら購入がおすすめ

本格的に読むならハリーポッターシリーズは購入がおすすめです。

比較的ページ数が少ない第2作でも1日13ページ、最長の第5作は1日27ページぐらい読まないと一月で読みきれないので。

オススメの児童書

同じ9-12歳向けの児童書のおすすめはMatildaです。

作者のRoald Dahlはチャーリーとチョコレート工場も書いています。

多読用にオススメされることも多く、読みやすい作品でした。

Matilda (Dahl Fiction)

Matilda (Dahl Fiction)

児童書ではありませんが、日本のライトノベルの英訳版もおすすめです。

www.kennejs.com

Harry Potter and the Philosopher's Stone (English Edition)

Harry Potter and the Philosopher's Stone (English Edition)

【Node.js】Liquid by quoine APIの使い方(APIで注文する方法)

これからLiquid by Quoine APIを使いたい方向けにAPIを使った注文機能の実装例を解説します。

事前にログインしてAPIトークンID、APIシークレットコードを取得する必要があります。

取得方法は以下の記事を参照してください。
Liquid by Quoine APIの使い方と注意したいポイント - Node.jsで暗号資産アービトラージ

注文のコーディング

解説用に小出しでコードを記載していきます。記事の全コードをコピペすれば動作しますので、手っ取り早く実装したい人は試してみてください。

ライブラリの定義

Node.jsのライブラリrequest(httpで注文を送信する)とjwt(認証する)を利用しますので定義します。

事前にnpmを利用してライブラリをインストールしておいてください。

インストールするコマンドはnpm install requestとnpm install json-web-tokenです。

const request = require('request')
const jwt = require('json-web-token');

APIトークンとAPIシークレットコードの定義

事前に取得しておいたAPIトークンとAPIシークレットコードを記載します。

APIトークンIDをxxxxxxに、APIシークレットコードをabcdefghijk1234567890に当てはめてください。

const key = "xxxxxx";
const secret = "abcdefghijk1234567890";

関数の定義

APIドキュメント(注文機能)を参考に注文ロジックをコーディングします。

以下から注文を発注する関数を定義します。引数にside("buy"または"sell")、quantity(注文数量)、price(注文したい指値の価格)を設定します。

sendOrder = function(side, quantity, price){

実際の注文リクエストはrequestの箇所で実行しますが、requestの引数となる変数を定義していきます。

ここでは認証情報、注文情報、リクエスト情報に分けて説明します。

API注文で使う認証情報の定義

APIはbase URL(https://api.liquid.com)に各機能のpathをつけて実行していきます。

注文で使うpathは/orders/とAPIドキュメントに記載されているので、pathに/orders/を定義しておきます。

次に一意になるランダムな値をnonceという変数に毎回セットする必要があります。一般的にはtimestamp(日付+時刻)を設定します。

payloadという変数を定義して、path, nonce, token_id(APIトークンID)を以下のサンプルのようなjson形式で定義してください。

json-web-token(以下ではjwt.encode()の部分)にsecret(APIシークレットコード)、payload、コールバック関数(function (err, token))を定義して実行し、署名したキー情報を取得します。

署名したキー情報は変数signatureに入れておきます。

let path = '/orders/';
let timestamp = Date.now().toString();
let payload = {
  "path": path,
  "nonce": timestamp,
  "token_id": key
};
let signature = "";
jwt.encode(secret, payload, function (err, res) {
  if (err) {
    console.error(err.name, err.message);
  } else {
    signature = res;
  }
});

API注文で使う注文情報の定義

続いて注文情報を定義します。orderInfoという変数をJSON形式で定義します。

orderに入れる項目(例:order_type)はAPIドキュメントに定義されているので、全く同じ名前を使用してください。limitは指値注文、marketは成行注文となります。

product_idの設定値がわかりづらいのですが、BTC/JPYの場合、product_idは5を設定します。

product_idは別に取得できるAPIの機能があるので、BTC/JPY以外を使いたい場合はその機能(Get Products)を利用して確認してください。(ここでは割愛します)

sideは"buy"または"sell"でこの例では関数の引数として設定します。quantity、priceも同様。

let orderInfo = JSON.stringify({
  "order": {
    "order_type": "limit",
    "product_id": 5,
    "side": side,
    "quantity": quantity,
    "price": price
  }
})

API注文で使うリクエスト情報の定義

リクエストに設定するオプション情報を定義します。

urlにはベースURL('https://api.liquid.com')に各機能のpathを追加したURLを設定します。

methodはAPIドキュメントより"POST"または"GET"を設定します。(ここでは"POST")

bodyには注文情報として定義したorderInfoを設定します。

headersには決まり文句で'X-Quoine-API-Version': '2'(固定で必須です)、'X-Quoine-Auth': signature(上記で署名したキー情報)、'Content-Type' : 'application/json'(固定で必須)を設定します。

url、method等の変数名はサンプルと同一の記載をしてください。

let options = {
  url: 'https://api.liquid.com' + path,
  method: 'POST',
  body: orderInfo,
  headers: {
    'X-Quoine-API-Version': '2',
    'X-Quoine-Auth': signature,
    'Content-Type' : 'application/json'
  }
};

API注文で使うrequestのコーディング

ここまでで定義してきた変数を使って実際にrequestを実行します。
戻り値のコールバック関数(function (err, response, payload))の"payload"にLiquid by Quoineからの結果が設定されます。

JSON.parseでJSON形式に変更することで、res.id(Liquid by QuoineのOrder ID)、res.filled_quantity(約定した数量)、res.status(注文の状態)の形式で戻り値を参照できます。

request(options, function (err, response, payload) {
  if(err){
    systemLogger.info(err)
  }
  let res = JSON.parse(payload);
  console.log(`Order ID:${res.id} Filled Quantity: ${res.filled_quantity} Status:${res.status}`)
})
}

関数を呼び出すコード

BTCをJPY建で100000万円の指値で0.01買い注文するコードです。

sendOrderTest("buy",100000,0.01)

始めはなかなかとっつきづらいかもしれませんが、応用は効くしトレードの幅が確実に広がるのでぜひ試してみてください。

www.kennejs.com

www.kennejs.com

【90日間以内に更新要】Let's Encryptの証明書の有効期限を確認する

無料でサーバ証明書を発行できるLet's Encryptでは証明書の有効期限が90日までと決められています。
有効期限の確認方法、更新の自動化までご説明します。

Linux(CentOS7)を前提にしています。

SSL証明書

Let's Encryptの有効期限の確認はcertbot renewコマンドでOK

有効期限の確認は管理者権限でcertbot renewコマンドを実行します。
(有効期限が近い場合は更新されます。)

実行すると以下のようなメッセージが出力されます。2019/4/13まで有効であることが確認できます。

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/nodeArbitrage.com/fullchain.pem expires on 2019-04-13 (skipped)
No renewals were attempted.

有効期限が30日前になったら更新可能

Let's Encryptのサーバ証明書は残り30日前から更新できるようになります。

先ほどのcertbot renewコマンドで更新可能です。

成功すると以下のようなメッセージが出力されます。

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/nodeArbitrage.com/fullchain.pem (success)

90日は変更不可。毎日更新をリクエストするように自動化しよう

公式サイトのFAQに記載されている通り、90日という制約は延長することができません。

certbot renewコマンドを毎日実行することが推奨されているので、管理者ユーザのcrontabに追加しましょう。

管理者権限でcrontab -eを起動

sudo crontab -e

viコマンドでcrontab -eに以下のコマンドを追記

15 04 * * * certbot renew >> /home/xxxx(ユーザ名)/yyyyyyy(システム名)/log/certbot.log

上記の例では毎日4時15分にコマンドが実行されます。ログの出力先は任意です。

SSL証明書はLet's Encryptがおすすめ

HTTPSを導入して90日経ちました。

90日間て短いかなと思いましたが、一度接続できれば(記事の最初に記載した更新確認ができれば)問題なく使っていけます。

無料でセキュリティが確保できるのでこれから導入したいって人は是非触ってみてくださいね。

www.kennejs.com

自作アプリケーション初心者にはさくらVPSが手軽で安くておすすめです。


IEO取り扱いのある海外仮想通貨取引所まとめ

IEO(Initial Exchange Offering)を実施している海外仮想通貨取引所についてまとめました。

IEOを実施している取引所に片っ端から登録して稼ごうと思いましたが、調べてみるとなかなか難しそうかなと感じました。

結論から言ってしまうとBinanceから始めるのがおすすめです。

日本からだと参加できなかったり、配分方式も抽選や先着など複数あって慣れない人は取っ付きづらい状況となっていますので参考にしてみてください。

IEOを実施している取引所の特徴

以下の表の通り、IEOのルールは取引所によって特徴があります。

IEOに参加できる仮想通貨取引所
※他にも実施している取引所がありますが、規模が小さいものは省いています。

IEO申込時の通貨

IEO申込時の通過ですが、取引所発行のトークンを使う場合と、BTC、ETHなどの既存のブロックチェーンのトークンを使う場合があります。

主要な手法は取引所発行のトークンを使うことでBinanceのBNBやHuobiのHTなどが該当します。

取引所としては自社のトークンをユーザに購入してもらうことで、取引所の取引量を増やすことができます。
(取引量を増やすと手数料収入が増えます)

取引所トークンはIEO実施時に向けて大きく価格をあげる傾向にあるので、購入タイミングが難しいというデメリットがあります。

取引所トークンは3月に暴騰状態、4月は下降状態の傾向です。

日本からの参加可否

取引所によっては日本の規制に対応していないために日本人向け(日本居住者)にサービスを提供していない取引所があります。

KuCoinやHuobi(Grobal)は明確に日本人向けにサービスを提供していないと通知しているため、KYC(身分証明)で弾かれることになります。

IEOの参加条件としてKYCが必要な場合が多いので、KYCで弾かれるとIEOに参加できません。

その他の上の表にあげた取引所は明記されていないので、日本人でもIEOに参加することができます。

IEOの配分方式

IEOの配分方式は先着や抽選、オークションなど取引所によってばらつきがあります。

先着の場合は数秒から数十秒で売り切れてしまうのと、取引所トークンの場合トークンが投げ売りされて価格が下落するので、現状かなり厳しいと言えます。

Binanceは4月実施のIEOから抽選(20日より前に100BNB以上のBNBを保有している条件あり)に変更となります。

BitMaxのオークションはわかりづらいのでおすすめしません。

また、OKExは4/10実施のBlockcloud token saleで1秒で完売したそうなので、様子見です。

取引量が多くて信頼できる取引所の選び方

IEOを調べてみると日本からだと馴染みのない取引所がたくさん出てきますが、多くの取引所が取引所トークンを利用している以上、選別したいですよね。

表面的には仮想通貨取引所は取引量ベースでランクづけされているのですが、BitWiseという会社が調べた実際の取引量という資料があります。

https://www.sec.gov/comments/sr-nysearca-2019-01/srnysearca201901-5164833-183434.pdf

22ページに表面的な(虚偽と思われる)取引量ベースのランキング、60ページに虚偽と思われない(適切な公表をしている)取引所名が記載されているので、参考にしてみてください。

これによると、上の表で適切な公表をしているのはBinance、Bittrexとなります。

IEOを始めるならBinanceがおすすめ

配分方式や2019年の実績からBinanceがおすすめです。

口座開設はこちらからできます。
Bitcoin Exchange | Cryptocurrency Exchange | Binance.com

Bittrexは前回のVeriBlockが1.5倍の上昇とあまり伸びていませんが、BTCで申込できることもあり、IEOに参加しやすい取引所であると言えます。

当ブログに掲載した情報は全て個人的に調べたものであり、正確性を保証するものではありません。
投資判断は全て自己責任、自己判断でお願いいたします。当ブログの情報によって生じた損害の一切の責任を負いかねます。

www.kennejs.com

www.binance.com

【20%還元】PayPayとLinePayどちらがいいか 節約したいならどちらもいれておくべき

PayPayとLINE Payをまだ使っていない人向けの記事です。

スマホにインストールしておくとすぐ使えて便利なのでどちらも入れてしまいましょう。

LinePayの紹介記事はこちら

この記事を買いている2019年4月の状況ではLINE Payは月後半に20%還元になるPayトクを実施しています。

月後半以外は100円クーポンなどのサービスはありますが20%還元はありません。

PayPayは第2弾100億円キャンペーンで20%還元(最大1000円まで)を実施中です。

チャージが簡単!両方インストールがおすすめ

PayPayもLINE Payもチャージはすごく簡単です。

お店によってはPayPayしか使えなかったり、どちらかしかキャンペーンをやっていないこともあるので、PayPayもLINE Payもインストールしておくのがオススメです。

あらかじめ銀行口座を登録して入れば面倒な操作なくチャージできます。

1. PayPayホーム画面からチャージボタンをクリック
PayPayでチャージ

2. チャージ金額をクリックしてチャージするをクリック
PayPayでチャージ

LINE Payも同じような操作感です。

インストールしていると会計時にLINE PayやPayPayのマークが目につくようになってきます。

先日は行きつけの美容院でPayPayが使えることに気づき、会計時にチャージして支払いました。それぐらいのスピード感で操作できるので、不自由なく使えるでしょう。

PayPayとLINE Payはキャンペーン期間が異なる

LINE PayとPayPayは利用シーンがコンビニやドラッグストア、家電量販店と被っていることがあります。

ただし、キャンペーン期間が異なるので両方インストールしておくと効率的に買い物ができます。

LINE Payは最近の傾向として月後半に20%還元のPayトクを実施しています。

PayPayはキャンペーン期間が2019/5/31まで(または100億円還元するまで)なので、期間が重複していません。

LINE Payだけしかないと買い物を月後半まで待ちたくなりますが、LINE Payが使えない期間はPayPayを使うことで節約を効率的に行うことができます。

利用シーンは私はPayPayの方が一部の飲食店や美容院でも使えて便利ですが、利用シーンが増えている印象なので、自分だけのお得なシーンを探してみてください。

【終了】PayPay Yahoo!プレミアム会員なら5回に1回の確率でやたらあたるサービスは終了

PayPayは10回に1回の確率で1000円上限で全額還元されます。

第2弾100億円キャンペーンでは当初Yahoo!プレミアム会員なら5回に1回の確率で全額還元のサービスが提供されていましたが、3/8 20時に終了していますのでご注意ください。

詳細はこちらhttps://info-premium.yahoo.co.jp/promo/paypay/190212.html

LINE Payでも、もらえるくじでいくらか還元されますので、どちらもキャンペーン適用される際は好きな方を利用するといいと思います。

LINE Payは利用状況に応じてレベルがあがるので、私はLINE Payを優先して使っています。

小銭のやりとりとかも便利にやりたいのでLINE Payがもっと普及してくれると嬉しいです。(今はLINE Payで送金を使っている人少ない。。。)

節約するなら、格安SIMもおすすめ

このブログは株式IPOや格安SIMなど節約・お得情報をいくつか紹介しています。

Entries in 節約・お得情報 category - Node.jsで暗号資産アービトラージ

一番のおすすめは格安SIMです。

実質、ネット見るだけとかの人は携帯料金8000円が半額以下に一気に下がります。

ただ、たくさん格安SIM事業者があって調べるのが面倒で放置していたりしませんか。

格安SIM事業者でおすすめなのはauセカンドブランドのUQモバイルです。

調べる時間を省きたい人はこちらから参照してみてください。

www.kennejs.com

UQ mobile 【ALL CONNECT】