Node.js関連のことを調べてみた2019年12月27日

Node.js関連のことを調べてみた2019年12月27日
目次

firebase データ取得にfor文を使いつつ、その中で非同期処理する方法

この記事は、どっかからAPIをとってきたデータを、firebaseのデータ群と比較参照する場合、
非同期処理とfor文をどうやって組み合わせれば良いかというところにいつも引っかかっていてしまっていたので、その備忘録です。

## 環境
– Node.js
– Cloud firestore

## どんな問題なのか
firestore にあるcollection からデータを全てとってくる場合、下記の例のように、`forEach`を使ってとってくるのが普通です。

“`js
var query = db.collection(‘contents’).get();
query
.then(function(snapshot) {
snapshot.forEach(function(childSnapshot) {
… // childsnapshot の処理
});
});
“`

しかし、この`forEach`文の中、つまり、`childsnapshot`の処理の中に、時間がかかる関数を呼び出していて非同期処理をする必要があるとなった場合、
**`f

元記事を表示

MNISTのデータベースをJSONで得る

MNISTのWebサイトで配布されている手書き数字のデータは、バイナリ形式です。これを、JSONデータに変換する方法をメモしました。

http://yann.lecun.com/exdb/mnist/

DBをダウンロードして、解凍します。

“`js:mnistdb2json.js
// MNIST手書きデータをJSONに変換する for Node.js

const CONV_LIMIT = 5000 // 小さなJSONを作成する場合

// サンプルファイルの保存先を指定
var DIR_IMAGE = __dirname + “/image”;

// モジュールの取り込み
var fs = require(‘fs’);

// 変換処理
convertToJSON(“train”);
convertToJSON(“t10k”);

function convertToJSON(basename) {
console.log(“convert: ” + basename);
// 各種ファイル名を決定
var file_images = basename

元記事を表示

全世界の夜更かしさんに送る、Google Home(mini) + Nature Remo + 鯖(Synology NAS) + Node.jsでつくる夜更かし防止装置のすヽめ(google-home-notifier未使用)

# はじめに
ついつい夜更かしをしてしまうの方に向けにGoogle HomeとNature Remoを組み合わせて**「指定した時間以降、部屋が明るければGoogle Homeより早く寝るように警告を発する装置」**をNode.jsで実装する作例をご紹介します!!
市販品を組み合わせるだけなのでお手頃に作れます!!(たぶん)

ちなみに似たような作例はよくありますが、多くの記事では**「google-home-notifier」**と呼ばれるGoole Homeに簡単にプッシュ発話をさせるライブラリが使われており、google-ttsの仕様に依存していたり、バグが多かったりして動かないことが多いのでなるべく根本ロジックから実装する方法でやっていきます。

### 構成
![プレゼンテーション1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/57833/38a65fd7-f35b-6cb2-aad3-db97d179cdbb.png)

# 必要なもの
### Nature Remo
所謂スマートリ

元記事を表示

Macにnode.jsとnpmをinstallする

# 目的
MACにnode.jsとnpmをinstallする

# 環境
MAC OS Catalina 10.15.2で実施

# 作業ログ
“`bash:bash
# xcodeのinstall (gccのinstallに必要)
$ xcode-select –install

# gccのinstall (nodebrewのinstallに必要)
$ brew install gcc

# nodebrewのinstall
$ brew install nodebrew

# nodebrewでinstallされるファイルが格納されるdirectoryを作成
$ mkdir -p ~/.nodebrew/src
$ nodebrew install-binary stable

# currentの表示されるのが使うversion
$ nodebrew list
v12.14.0

current: none

# stableを使うと指定
$ nodebrew use stable
use v12.14.0

# node.jsのversion確認
$ node -v
v1

元記事を表示

pm2でdeployしようとするとbash: npx: command not foundで失敗する

## 原因
– bash_profileにnvmの設定を記述していた
– bash_profileは対話モードじゃないと読み込まれない
[参考](https://qiita.com/dark-space/items/cf25001f89c41341a9fd#bash_profile%E3%81%A8bashrc%E3%81%A7%E5%B7%AE%E3%81%8C%E5%87%BA%E3%82%8B%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0)
– しょうがないので/usr/local以下のnvmとは関係ない古いnpmが呼ばれる

→npxコマンドが存在しない

## 現状
ecosystem.json

“`json
“deploy” : {
“production” : {
“user” : “dev”,
“host” : “**********”,
“ref” : “origin/master”,
“repo” : “**********”,
“path” :

元記事を表示

正規表現を使った処理で、いい感じの場所に区切り文字を入れる

# モチベ
繋がってしまった文字列でいい感じのところに区切り文字を入れたいことってありますよね(?)
自分の場合は繋がってしまった時間帯の表記を、1区間ごとにカンマで区切りたいなーっていうタイミングがありました。
処理前 `13:00~15:0017:00~22:309:00~23:00`
処理後 `13:00~15:00,17:00~22:30,9:00~23:00`

区切りたいところに特定の文字があれば、JSだったら[replace()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replace)とか[split()](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/split)を使って簡単に区切り文字を入れ替えたり、配列にしたりできます。

# まず思いついた方法
今回の場合、上記なような考え方ができないため他の方法をとる必要があ

元記事を表示

LINE Payのオンライン決済を実装する前に知りたかったハマりどころ

LINE Payのオンライン決済を実装する機会があったので主なハマりどころを共有します。

# Transaction IDが丸められる
決済要求のためにRequest APIを呼ぶ必要があるのですが、このAPIから返ってくるTransaction IDは19桁の数値で返ってきます。
> 決済要求の結果として受け取った取引番号(19桁)
> https://pay.line.me/documents/online_v3_ja.html#confirm-api

19桁の巨大な数値なので、そのまま受け取ってしまうと丸められてしまう可能性があります。
その後のConfirm APIにTransaction IDを渡す必要があるのですが、丸められていると当然違う値なので「決済要求情報が存在しません。」となり決済が出来ません。
丸められていることに気づくまでかなりの時間を要しました。文字列で返すなどアップデートで対応してほしいところです。

JavaScriptで書かれたLINE Payのライブラリがあるのですが、こちらではlossless-jsonを利用してこの問題に対応しているようです。

元記事を表示

[JavaScript][ES2017]0埋め(ゼロパディング)をするシンプルな記法(padStart, padEnd)

## 概要
ググるとまず`slice()`を使う方法が出てくるが、ES2017が使える環境ならば`padStart()`の方が良い。

Node.jsならば8.0.0から使用可能。

## 使い方
一つ目の引数にパディング後の桁数、二つ目にパディングに使う文字(デフォルトは半角スペース)を指定する。

“`javascript
> ‘123’.padStart(5)
‘ 123’

> ‘123’.padStart(5, ‘0’)
‘00123’

> ‘123’.padStart(10, ‘*’)
‘*******123’
“`

右側を埋める`padEnd()`もある。

“`javascript
> ‘123’.padEnd(5, ‘0’)
‘12300’
“`

## ドキュメント
* https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
* https://developer.mozilla.org/ja/docs/Web/Jav

元記事を表示

Node.jsの”Error: Cannot find module ‘cfn-response'”の解決方法

# Error: Cannot find module ‘cfn-response’
Lambda-Backedカスタムリソースにおいて、Node.js 8がEOLとなるため、コードはそのままでランタイムの指定だけをNode.js 12.xに変更したところ、このようなエラーが発生しました。

“`エラーメッセージ
Response:
{
“errorType”: “Runtime.ImportModuleError”,
“errorMessage”: “Error: Cannot find module ‘cfn-response'”,
“trace”: [
“Runtime.ImportModuleError: Error: Cannot find module ‘cfn-response'”,
云々
“`

Node.js 8では以下の指定で同じ階層のファイルrequireできるのですが、

“`Node.js8:
const response = require(‘cfn-response’);
“`

Node.js 12では、パスを明記する必

元記事を表示

超短納期開発Tips vol.1 – JEST駆動開発で辛い試行錯誤フェーズを素早く心穏やかに終わらせる

# はじめに

今年も[ヒーローズ・リーグ](https://hl2019.we-are-ma.jp/)に参戦させて頂きました。例年通り素敵な体験をさせていただけた思う一方、戦績としては決勝ステージには進出しつつも、何も賞を獲得することが出来きませんでした。ここ数年何かしらの賞を頂いていたことが、いつのまにか自分のアイデンティティになっていたんだなぁと思ってしまった次第です。
この寂しくも悔しい気持ちを沈めたいという想いをこめつつ、散っていったアイデア達を作るうえで学習したことを言語化してアウトプットすることで、次の挑戦への糧とすると共に、来年の締め切り当日になんらかのアイディアを思いついてしまう多くの方が諦めずに応募まで進める助けにができば幸いです。

# 超短納期開発Tipsって何?

[ヒーローズ・リーグ](https://hl2019.we-are-ma.jp/)応募やハッカソン参加など、比較的短時間でアイディアを練ってプロトタイプを仕上げる必要があるときの開発Tipsです。ハッカソンTipsと読み替えても差し支えありません。

具体的な規模と速度間としては、**[こういうも

元記事を表示

Webサービスのe2eテスト  〜メール認証編〜

## はじめに
この記事は [Goodpatch Advent Calendar 2019](https://qiita.com/advent-calendar/2019/goodpatch) の22日目です.

私が現在担当しているWebサービスの開発において、Puppeteerを用いたe2eテストを用いてQAの効率化を図っています。
この記事では Node.js と Gmail API を使い、アカウント作成時のメール認証を自動化する方法について共有したいと思います。

注:この記事ではPuppeteerには触れません!

## 環境準備

メールをNode.jsで取得するためには、Gmail APIの設定と、各種ファイルの取得・生成が必要です。
基本的には[Node.js Quickstart](https://developers.google.com/gmail/api/quickstart/nodejs)に従って作業します。

### フォルダの準備
あらかじめ、各種ファイルを保存するフォルダの準備しておきま

元記事を表示

Elastic Beanstalkで、Node.js+expressアプリを動かそう [ハマりポイント説明]

#? はじめに
Lambdaの方が使い勝手がいいので、あまり使わないElastic Beanstalkですが、いざ使おうと思うと、いくつか躓くポイントがあるので、その点も含めて、Node.js+expressで作ったサンプルアプリを動かすまでの手順を紹介します。

##? Elastic Beanstalk
https://aws.amazon.com/jp/elasticbeanstalk/
Java、.NET、PHP、Node.js、Python、Ruby、Go、Dockerなどで作られたプログラムをデプロイ、実行する環境。
実態としては、EC2の上にApacheやNginx等のサーバーを立てて提供してくれる。

#? 作業手順
大きくは以下の手順になります。

1. Node.js+expressでアプリを用意する。
2. ソースコード+node.jsモジュールをZIPファイルにまとめる。
3. Elastic Beanstalk実行環境構築、デプロイ。
4. 実行。

##? Node.js+expressでアプリを用意する
今回は、`express myapp`コマンド作成さ

元記事を表示

花粉症の重症度を判定し自分に合う市販薬を教えてくれるLINE Botの作成

##概要
プログラムの勉強を始めて半年ほどの開業医です。

そろそろスギ花粉の季節ですね。
2月の中旬ごろからスギ花粉は飛散開始します。花粉症の方はその前にお薬を準備しておくといいですね。

医療費削減のため一部の花粉症の薬が今後医療機関で処方できなくなるかもしれないといわれています。そうすると市販の薬で対応しなけらばならない花粉症患者さんが少なからず出てきそうです。そのような時に患者さんが困らないように、自分の花粉症の重症度が分かったり、自分に合った市販の花粉症薬が探せるサービスがあれば良いかと思い今回「花粉症の重症度を判定し自分に合う市販薬を教えてくれるLINE Bot」を作ってみました。

以前作ったWEBアプリはこちら
[花粉症の重症度が分かるWEBアプリの作成~Auth0でユーザー認証~](https://qiita.com/doikatsuyuki/items/b79378f6d7a30bbe5e87)
[自分に合った市販の花粉症薬を探すアプリの作成]
(https://qiita.com/doikatsuyuki/items/69b95169cb4d152d8cd7)

元記事を表示

【Node.js + Sheets API v4】Googleスプレッドシートを読み書きする

# はじめに
Node.jsでGoogleスプレッドシートを読み書きする。

使うもの:

* Node.js v10.16.0
* Google Sheets API v4
* Visual Studio Code

# Google Sheets API を使えるようにする

[Node.js Quickstart  |  Sheets API  |  Google Developers](https://developers.google.com/sheets/api/quickstart/nodejs)

上記サイトを参考に、まず Google Sheets API を使えるようにする。「Enable the Google Sheets API」のボタンを押してしばらく待つと、Google Cloud Platformに`Quickstart`という名前のプロジェクトが作成され、Client IDやシークレットと共に設定ファイルをダウンロードできるようになる。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

Auth0ラボ – その2 : Calling an API

# はじめに
この記事はAuth0のハンズオンラボで[Auth0 Identity Labs](https://auth0.com/docs/identity-labs)を元に作成しています。Node.js + Express.jsで作成されたSample ApplicationとAPIを利用して、Auth0から払い出された認可情報を元にApplicationからAPIを呼び出します。[Auth0ラボ – その1 : Web Sign-In](https://qiita.com/hisashiyamaguchi/items/0e5d764c267eacc50769)が完了していることが前提となっているため、未だの方は[こちら](https://qiita.com/hisashiyamaguchi/items/0e5d764c267eacc50769)からお試しお願いします。

# 検証環境
– **OS** : `macOS Catalina 10.15.2`
– **node** : `10.15.3`
– **npm** : `6.13.2`
– **Git** : `2.23.

元記事を表示

自分に合った市販の花粉症薬を探すアプリの作成

##概要
プログラムの勉強を始めて5か月ほどの開業医です。

そろそろスギ花粉の季節ですね。

医療費を削減する目的で一部の花粉症の薬が今後医療機関で処方できなくなるかもしれないといわれています。そうすると市販の薬で対応しなけらばならない花粉症患者さんが少なからず出てきそうです。そのような時に自分に合った花粉症の薬が探せるアプリがあれば良いかと思い作ってみました。

今回Electronでデスクトップアプリを作成する勉強をしたので、先日勉強したAuth0のユーザー認証も実装して自分に最適な花粉症薬を探すことが出来るデスクトップアプリを作成してみようと思いました。

[花粉症の重症度が分かるWEBアプリの作成~Auth0でユーザー認証~](https://qiita.com/doikatsuyuki/items/b79378f6d7a30bbe5e87)

##動作確認
今回デスクトップアプリは出来ましたが、Auth0によるユーザー認証が実装できませんでした。

元記事を表示

Node.js / Denoで始める手書きWebAssembly

# Node.js / Denoで始める手書きWebAssembly

この記事は Deno Advent Calendar 2019 10 日目の記事(大遅刻)です。
最近 WebAssembly(以下、Wasm)の text format (wat) を少しだけ勉強しています。

Wasm を動かす環境として、一番ベーシックなのはブラウザ (Chrome / Firefox など) ですが、気軽に書いて試すにはやはり Terminal 上で完結させたいと思いました。
Terminal 上で Wasm を動かすにあたっての選択肢は、下記の 2 つがあります。

– Node.js (フラグ付き)
– Deno

本記事では、手書きWasmをコンパイルして上記の2つの環境で動かす方法を紹介します。

## 用意するもの

– Node.js v13
– Deno
– [wabt](https://github.com/WebAssembly/wabt)
– WebAssembly のツールキット
– wat を Wasm に変換する wat2wasm を使います

## 参考文

元記事を表示

Webpackerが提供しているコマンドの内部処理を追ってみた

[食べログ Advent Calendar 2019 ](https://qiita.com/advent-calendar/2019/tabelog)24日目の記事です。

はじめまして。
好きな筋トレはバーベルシュラッグ。
好きな小説家は宮内悠介。
食べログのフロントエンドチームに所属している@sn_____です。
クリスマスイヴなのでWebpackerの話をします。

皆さんWebpacker使ってます?
個人的にはWebpackerは好みではありません。

Webpackerは面倒なwebpack回りの設定をやってくれるので、Railsアプリケーション開発では重宝されるケースも多いと思います。
しかし、提供されるコマンドの内部処理はブラックボックス化されており、詳細を把握していない人も多いのではないでしょうか。
フロントエンドエンジニア的にはそこらへんも抑えておきたいので、Webpackerが提供しているコマンドの内部処理を調査してみました。

### 調査対象
– webpacker@4.2.2(2019/12/24時点での最新版)

### 調査対象コマンド

– `./b

元記事を表示

【fly.io】愛を込めて花束を

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6102/d4434532-d8af-d461-a53e-b6da744d78f2.png)

タイトルは [Superfly](http://www.superfly-web.com/) の[名曲](https://www.youtube.com/watch?v=ccPIoaKod_I)ですが、本記事はネタ記事でもなく釣り記事でもなく、もちろんポエム記事でもありません。node の PaaS 環境である fly.io の真面目なお話です。

え?なぜこのタイトルかって?

 **fly.io**
  ↓
 **フライ.アイオー**
  ↓
 Super **fly 愛を** 込めて…

ハイ!Merry Christmas!?  Σd(゚∀゚d) オゥイェ!!!

# これはなに?
fly.io は、node.js に特化した PaaS で独自の CDN を持ち Edge サーバによるキャッシュで高速なレスポンスを提供するフルマネージ

元記事を表示

tsconfig の path alias 解決に tsconfig-paths/register を node で使う方法と TS 依存の分離方法

この記事は [TypeScript アドベントカレンダー 2019](https://qiita.com/advent-calendar/2019/typescript) の 24 日目です。

## はじめに

Webpack 等でビルドせずに node で実行する際に tsconfig の path alias が解決されなくて困る方も多いと思います。
一方 ts-node じゃなくても tsconfig-paths/register で path alias が解決できることは意外と知られておらず、実は `$ node -r tsconfig-paths/register dist/main.js` で解決します。
しかし、 Production で動く node に TypeScript 由来の何かに依存しているのは怖いということもあるので、 tsconfig-paths の中身を読んだので何をしているかを説明します。

## サンプルプロジェクト構成

以下の構成で実行します。サンプルリポジトリは以下になります。

https://github.com/euxn23/how-

元記事を表示

OTHERカテゴリの最新記事