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

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

終わらないLambda実行

この記事は[AWS LambdaとServerless #1 Advent Calendar 2019
](https://qiita.com/advent-calendar/2019/lambda)の21日目の記事です。

## はじめに

API Gatewayと組み合わせてのAPIサービング、SQSトリガーからのジョブ、DynamoDBの更新をフックにした処理など、いろいろな活躍をしてくれるLambdaですが、API Gatewayからのレスポンスが返ってこないな、テストが終わらない?、という状況になったことはありませんか?

今回は私が開発中に出会った、いろんな意味でLambdaやLambdaを使った処理が終了していない、終了していないように見えるパターンについて紹介します。

1. Postgresへの接続
2. Postgresへ接続したFunctionのテスト
3. DynamoDBトリガーのLambdaでの例外によるリトライ

Serverless FrameworkでNode.js + TypeScriptで検証しています。

## 1. Postgressへの接続

元記事を表示

babel

# babel 困った時 Node.js environment
一番役にたったのは一番上のやつ

* **https://babeljs.io/docs/en/babel-node**

* https://jestjs.io/docs/en/getting-started#using-babel

* https://github.com/babel/example-node-server

* https://github.com/FormidableLabs/spectacle/issues/522

# 結論
“`
npm install –save-dev @babel/core @babel/node
“`
最初ずっと **yarn** でinstall してたんですけど, **npm** でしたら一発でした!!

# エラー内容
**Error: Requires Babel “^7.0.0-0”, but was loaded with “6.26.3”.**

“`
Error: Requires Babel “^7.0.0-0”, but was loa

元記事を表示

node.jsで、gcsにあるサイズの大きいjsonlファイルを、mongodbに登録する(メモリふっとばさずに)

# node.jsでgcsからファイルを読み込む

gcsからファイルを読み込む方法を探すと、よくdownload()を使用する例が紹介されています。

“`javascript
const storage = new Storage();
const bucket = storage.bucket(‘test-20180903’);
const file = bucket.file(‘sample’);
file.download().then(function(data) {
res.status(200).json({‘result’: data.toString(‘utf-8’)});
});
“`

download()だと、サイズの大きいファイルを読み込むと**メモリ不足**に
cloud functionsだと2Gまでしかメモリ拡張できないので、gcs側にファイル配置する際に、ファイルサイズを小さく分割しながら.·゜゜·(/。\)·゜゜·.

# @google-cloud/storageのソースを見ている

download()以外に、createReadStr

元記事を表示

Node.jsとnpmのインストール方法 駆け出しWebデザイナーの学習録

# はじめに

2回目の投稿になります。
Webデザイナーとして未経験で入社して3ヶ月が経過しました。
どうすれば主要クライアントのプロジェクトにアサインしてもらえるかと先輩エンジニアの方に質問したところ、サーバーサイド周りのNode.jsやnpmの知識がないとアサインできないとのことでした。
そこで今回は学習した内容を簡単にまとめようと思います。

※この記事は環境構築の最初の段階のみになるので、gulpインストールしたり、gulpfile.jsでタスクを記述していく部分に関しては改めて投稿しようと思います。

# Node.jsとは
本来ブラウザ側で使用する言語であるJavaScriptがNode.jsの登場によってJavaScriptでサーバーサイドの処理・制御をプログラムすることができるようになった。
Node.jsはWebサイトやWebアプリケーション、スマホアプリ開発で使用されている。
またJavaScriptだけでサーバー環境を構築したり、膨大なデータを処理・制御することができるようになった。

## Node.jsのメリット
– 非同期通信による高速な動作
– 大量をデ

元記事を表示

webpack NODE_ENV でハマった話

## 背景

`NODE_ENV`の値で分岐を行いたいと考えていました。
しかし、何を設定しても起動すると`production`となる…

## 調査

調査用に、下記のようなコードを追加

“`js
console.log(`current env => ${process.env.NODE_ENV}`)
“`

webpackしてみると出てきたコードは

“`js
console.log(“current env => production”)
“`

まさかの変換されてしまってました。
どうやら`webpack.config.js`で指定した`mode`の値が代入されてしまうようです。

## 解決策

`optimization.nodeEnv`に`false`を設定する。

“`webpack.config.js
module.exports = {
mode: ‘production’,
// ここを追加
optimization: {
nodeEnv: false
},
// 省略
}
“`

元記事を表示

Discord.js でボットを作る ~発言させるまで~

!この記事は前に書いた記事の続きです。まだ読んでない人は下のリンクから飛んでください!

|前の記事|
|:-:|
|[████](https://qiita.com/yuto0214w/items/432c9f702b3d1067a29c)|

# このページでやること

1. 状況に応じてアカウントを作成
2. ボットの作成からトークンの取得まで
3. コードを書く
4. サーバーに上げる

## 前置き
文字だと分かりにくいところもありそうなので、[動画](#動画)を配置いたしました。
よかったら見てみてください。

# ボットの作成
Discord アカウントを持っていない ー> アカウントを作る
サーバーを作っていない、または入っていない -> サーバーを作る
ボットを作っていない -> ボットを作る
準備が整っている -> コードを書く

|Go to…|アカウントを作る|サーバーを作る|ボットを作る|コードを書く|
|:-:|:-:|:-:|:-:|:-:|
|Select|[████████](#アカウントを作る)|[███████](#サーバーを作る)|[████

元記事を表示

レガシーサービスにおけるパフォーマンス改善 – 使われていないCSSを削除してくれるCLIを作った話

リクルートテクノロジーズ でフロントエンドエンジニアをしている[@SW20_Toshi](https://twitter.com/SW20_Toshi)です。
本記事は[Recruit Engineers Advent Calendar 2019 – Adventar](https://adventar.org/calendars/4502) 20日目の記事です。

皆様はウェブのパフォーマンスを気にしていますか?
おそらく大抵の方はSQLのチューニングやロジックの改良などをした経験があるのではないでしょうか?
今回は、レガシーサービスにおけるパフォーマンス改善として、Puppeteerを使って不要なCSSを削除する取り組みを行いました。
ツールは[OSSとして公開](https://github.com/toshi1127/css-optimization)しているので使ってみてください!

サイボウズ株式会社の[こちらの記事](https://blog.cybozu.io/entry/2019/08/20/170000)には大変お世話になりました!
ありがとうございました!

##

元記事を表示

Auth0ラボ – その1 : Web Sign-In

# はじめに
この記事はAuth0のハンズオンラボで[Auth0 Identity Labs](https://auth0.com/docs/identity-labs)を元に作成しています。Node.js + Express.jsで作成されたSample ApplicationでExpressミドルウェアを利用して認証をリダイレクト、認可サーバとしてAuth0を使います。Auth0の無料アカウントの取得とテナントの作成が完了していることが前提となっています。Auth0の無料アカウント取得がまだの方は[こちら](https://qiita.com/hisashiyamaguchi/items/2d0bcae052077f6ae4a4#auth0%E7%84%A1%E6%96%99%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E5%8F%96%E5%BE%97%E3%83%86%E3%83%8A%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)の記事を参照の上ご準備をお願いします。

元記事を表示

Puppeteerを使って簡単にWebスクレイピングする

世の中には様々なWebスクレイピングツールがありますが、その中でも今回はPuppeteerという、Googleが管理しているOSSを使用しました。
https://github.com/puppeteer/puppeteer

# Puppeteer
**Puppteer(パペッティア)**は、Google Chromeの機能を引き継いで開発されているChromiumと呼ばれるブラウザを自動操作することができるNode.jsのAPIです。
Puppeteerではブラウザを表示することなくバッググラウンドで操作することができる”ヘッドレスモード”を使うことができるため、高速かつメモリを節約した自動操作をすることができます。
(もちろんオプションでブラウザを表示することもできるため、デバッグも簡単です。)

さらに、手動でできるようなユーザの操作(例えば文字の入力やクリックなどのマウス操作や、キーボードを用いた他の操作など)のほとんどを行うことができるため、SPAやSSRなどのWebページでも、簡単に操作することができます。

# この記事で紹介すること
– Puppeteerを用いた簡

元記事を表示

obnizのBLEでペリフェラルを探す

# obnizのBLEでペリフェラルを探す

BLEとはBluetooth Low Engeryの略で、Bluetoothの一種です。
こんな特徴を持っています

– 省電力
– ペアリングなしの接続モードがある
– GATTというプロファイルが基本で、データベースのように相手を扱う
– 1つの親に対して複数の子を接続できる
– スマートフォンなどでかなり普及していて、多くのスマートフォンから利用できる。

obnizにもBLEの機能があります。
これを利用することで同じようにBLEを利用する照明とかスマートウォッチにつないで値を取り出したり、逆にスマホから繋がれるなんてことが可能です。

## セントラルとペリフェラル

BLEでは1対多の通信となっていて、親が1存在します。その親をセントラル、子をペリフェラルと呼びます。

## 初期化

BLEを使用するときは最初に初期化をする必要があります。
初期化はこちらのようにやります。

“`javascript
await obniz.ble.initWait();
“`

## スキャン

BLEのペリフェラルはadvert

元記事を表示

npmのsave-devの使いどころ

#yarnに乗り換えた話
[npmを使い始めて3日目、さっそくyarnに変更しちゃいました](https://qiita.com/osorezugoing/items/74c2fd945a0fee4f2415)

#なぜsave-devを書くのか
たいていパッケージというものはそのパッケージ自身単体で完結するものではなく、複数のパッケージが組み合わさって成り立っている。このような状態のことを依存関係という。npmは自動的に依存関係を保つようにインストールしてくれる。さらにオプションを付け加えるで本番用と開発用など用途別にパッケージを分けることができるようになる。

# save-dev
フォーマッターやビルドツールなどを入れる。
・構文チェックに使うもの eslint
・フォーマッターなど prettier

“`terminal:開発用に使うとき
npm install –save-dev パッケージ名
npm i -D パッケージ名
“`

# production
save-dev以外のものを入れる。

“`terminal:本番用に使うとき
npm install

元記事を表示

【Express + Postgres】非同期とかトランザクションとか考慮したDB接続

# はじめに
以前にも似たような記事(※)を書いたが、より汎用性のありそうなコードを書く機会があったので、本記事にまとめておく。
おそらく、非同期とかトランザクションとかも考慮しているコードになっているはず…

※[【Node.js+Express+PostgreSQL】ExpressにPostgreSQLを導入](https://qiita.com/c6tower/items/c6fc18e14229dbf2f53a)

## 環境
* node 10.15
* express 4.17
* pg 7.12

## サンプルコード

“`:command
npm install –save pg
“`

“`js:index.js
const express = require(“express”);
const pg = require(“pg”);
const app = express();
const port = 3000;

app.listen(port, () => {
console.log(`Start server port: ${port}`);

元記事を表示

Pulumi SDKとGoogle Cloud SDKを組み合わせてみる

この記事は NTTコミュニケーションズ [Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nttcom) の20日目です。
昨日は @kirikei さんの [Googleのデータ可視化&モデル分析ツール What-if Toolで覗いてみるTitanic生存者予測](https://qiita.com/kirikei/items/2a4ef062fadd4a93203a) でした。

# はじめに
入社6年目、主にインフラエンジニアな仕事をしています。
今回は、最近盛り上がりつつある[Pulumi](https://www.pulumi.com/)という Infrastructure as Code(IaC)のツールの簡単な説明と、プログラミング言語でIaCができるというPulumiの特性を生かした利用方法について、紹介したいと思います。

# Pulumiとは
本家HPの[Architecture & Concepts](https://www.pulumi.com/docs/intro/concepts/)

元記事を表示

Node.js 13.2.0 で–experimental-modulesが外れたのでESMを試す

## はじめに

Node.js 13.2.0 で`–experimental-modules`が外れた。

晴れて Node.js の世界でも ECMAScript 標準のモジュール管理を標準で使える!

と思って使ってみた。

というわけで本稿は所謂”やってみた系”の話である。

デフォルトESMにして嬉しいケースは「ソース=配布物なライブラリ開発」の時に限られるが※1、tscでコンパイルする環境でも”module”:”esnext”でどこまで頑張れるかやってみた。

※1: TypeScriptやbabelのようなトランスパイラやwebpackのようなバンドラによって出力結果は環境に応じて変更するのが一般的なので

※本稿では、{…}のような記法を使っている場合、中身が省略されていることを示す(スプレッド演算子は使っていない)

※今回のやってみたの趣旨は、「”target”:”esnext”でtscコンパイルしたファイルをオプション指定無しでNode.jsで実行し、なんとか動かすところまでを目指すこと」である。その目的とバッティングするESLintのエラーやTypeScr

元記事を表示

nodebrewのセットアップ&操作方法(Mac)

## 「nodebrew」とは?

Node.jsのバージョンを管理するツールです。
rbenvやpyenvのNode.js版と考えるとわかりやすいです。

## 環境

– OS:macOS Mojave 10.14.6
– nodebrew:1.0.1

## セットアップ

### nodebrewのインストール

Homebrewからインストールします。

“`shell-session
$ brew install nodebrew
“`

### nodebrewの初期設定

`nodebrew setup` を実行するのみです。

“`shell-session
$ nodebrew setup
Fetching nodebrew…
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
=============

元記事を表示

Aurora Serverless DB を作って Node.js(TS) から使う

## 概要

Aurora Serverless DB を作成して、
Node.js (TypeScript) からアクセスしてみます。

## 実行時の環境 2019/12/04

– MacOS 10.14.4
– node v10.15.0
– npm 6.6.0
– ts-node v8.5.4
– aws-sdk 2.584.0

## DB の作成

[Data API 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/data-api.html)を見ると、
現在、Data API が有効なリージョンは限られているらしいので注意
[東京リージョンでつくる。](https://ap-northeast-1.console.aws.amazon.com/rds/home?region=ap-northeast-1#launch-dbinstance:gdb=false)

– DB 作成方法

| 項目 | 値 |
| ——

元記事を表示

Aurora Data API を TypeScript + typeorm から 使う物語

# 概要
Rest API を経由してツイッターのリツイート情報を取得し、
Aurora DB に格納するサンプルツール `twitterer` を、以下の構成で実装した。

その過程で 5000兆個くらいある落とし穴を踏み抜いたので倒し方を書こうと思ったが、
1日経ったら過程をほとんど忘れたのでちゃんと動く結果を主に書き残す。

– AWS
– Aurora Serverless (MySQL5.6)
– ServerlessFramework
– Lambda
– Node.js
– TypeScript
– [express](https://github.com/expressjs/express)
– [typeorm](https://github.com/typeorm/typeorm)
– [typeorm-aurora-data-api-driver](https://github.com/ArsenyYankovsky/typeorm-aurora-data-api-driver)

## 前提と関連記事

「[Aurora Serv

元記事を表示

せっかくTypescriptなんだからJSONを自動でvalidationしよう(ajv+typescript-json-schema)

# はじめに

– Validationコードを手で書きたくなかった
– JSON schemaを手書きしたくなかった(typescriptの型定義を使ってほしい)

国内外たくさんやってることだけど、真似しても使うのに時間がかかった。
最小構成のコードを書く。

## まず、Validationができてない状態とは?

“`typescript:index.ts
interface Cat {
name: string,
age: number
}

const catObj = JSON.parse(‘{“name”:”tamago”, “weight”:2.0}’);
const cat = catObj as Cat;

console.log(cat.age); //undefined (Catのageはオプショナルじゃないのに!)
“`

## さあ、validationしよう

1. 実行前にtypescriptコードから[typescript-json-schema](https://github.com/YousefED/typescrip

元記事を表示

C#でJWTを発行して、Node.jsで検証する簡単なお仕事です

[SC(非公式)Advent Calendar 2019](https://qiita.com/advent-calendar/2019/unofficial-sc) の19日目です。

# はじめに

最近JWT周りのなんやかんやを触る機会が多いです。
別の言語での取り回しなんかもできるのが、JWTでの検証の良いところだと思います。

今回は.NetCore3.0で追加された **暗号化キーのインポート/エクスポート**で、
RSAではなくECDsa(楕円暗号方式)で署名/検証しました。

サーバー構成としては以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131619/44db379a-b05c-a8e0-0b27-63ba307da572.png)

# 実行環境

OS: mac OS Mojave 10.14.6
IDE: VS2019 for Mac community 8.3.6
.NetCore: 3.1.100
node: 10.14.1
npm: 6

元記事を表示

BlankAndroidTV向けアプリをReactNativeで起動するまで

[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle)の19日目は
株式会社エイチームライフスタイル 自動車事業部 の @mziyut が担当します :santa:

最近購入したテレビがAndroidTVをベースにしたものだったのもあり、
0.55からReactNativeでAndroidTV向けアプリの開発を行えるようになっていたので試してみました。
ちなみに、2019/12/16時点の最新バージョンは、v0.61.5でした。

## ReactNativeとは :thinking:
簡単に言うと「Facebookが作成したReactをベースにネイティブアプリフレームワーク」です。

## AndroidTVとは :thinking:
簡単に言うと、Googleが提供する、スマートテレビ向けプラットフォームです。

## 今回用いる環境
“`sh
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.

元記事を表示

OTHERカテゴリの最新記事