Node.js関連のことを調べてみた2020年02月06日

Node.js関連のことを調べてみた2020年02月06日
目次

SlackからGitHub Actionsにパラメータを渡して実行する

以下のサービスを組み合わせて、ポチポチCIツールを作成します。

* Slack
* GitHub Actions、REST API v3
* AWS Lambda ( Node.js 12.x (@slack/bolt 1.5.0) )

![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425840/2bdbe023-b214-19bf-c9fc-3bbaccc1999b.gif)

# 外観図

Slackに対してリクエストすると、SlackとLambdaがやりとりをしてGitHubに命令を出してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425840/5b2f37e8-1700-447b-ecf2-f33f5f9e47f1.png)

### 素材

猫の顔: https://kumamine.blogspot.com/2019/12/blog-post_27.html

元記事を表示

Fix: WSUS Connection Error Reset Server Node On Windows Server 2012

Error: Connection Error

An error occurred trying to connect the WSUS server. The error can happen for a number of reasons. Check connectivity with the server. Please contact your network administrator if the problem persists

Click Reset server node to try to connect to the server again.

Follow the below steps to Fix: WSUS Connection Error Reset Server Node On Windows Server 2012:
Open IIS
Click on Application Pools
Click on WsusPool
Click Advanced Settings
Scroll down and increase the Priv

元記事を表示

【比較検証】Next.js の Server Side Rendering (SSR) を理解する。create-react-app と比べてみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163591/e9611919-79b4-0604-8054-2212be9a630f.png)

[Next.jsのサイト](https://nextjs.org/)、かっこいいですよね ?
クールで、パフォーマンスにも優れていてエンジニアを魅了します。
日本では Nuxt.js が人気のようですが、個人的には Next.js を推しています。

さて、先日 [Next.js のチュートリアル](https://nextjs.org/learn/basics/getting-started) を通してサーバサイドレンダリングについて考えさせられる機会がありました。本記事では、そもそもサーバサイドレンダリングのメリットとは?というところから初めて、`create-react-app` によって実装された SPA と、`next`によって実装された SSR ではどのような違いがあるのかを検証してみました。

以下の動画は本記事のサマリーです。

元記事を表示

node.js の –max-old-space-size のデフォルト値は 1400MB

node.js の V8 のヒープのメモリ容量を設定するオプション –max-old-space-size のデフォルト値は 1.4GB みたい。

https://github.com/nodejs/node/blob/master/deps/v8/src/heap/heap.cc

“`cc
max_old_generation_size_ = 700ul * (kSystemPointerSize / 4) * MB;
“`

64bit OS だと `kSystemPointerSize` は 8 だろうから、1400MB になりそう。
実際の値をみると、`–max-old-space-size=1400` の結果とマッチした。

“`
node –max-old-space-size=1000 -e ‘console.log(Math.floor(v8.getHeapStatistics().heap_size_limit/1024/1024))’
# 1049

node –max-old-space-size=1400 -e ‘console.lo

元記事を表示

GraphQLでファイルアップロード

# GraphQLでファイルアップロード

GraphQL(Appolo Server)でファイルをアップロードする。
サーバ側はnode.jsを使う。
クライアントは[Altair GraphQL Client](https://altair.sirmuel.design/)と使う。

サンプルのソースコードは以下。

– [ymatzki/graphql-server-example: Learn GraphQL.](https://github.com/ymatzki/graphql-server-example)

## 事前準備

[Get started with Apollo Server – Apollo Server – Apollo GraphQL Docs](https://www.apollographql.com/docs/apollo-server/getting-started/)に従う。

“`
$ mkdir graphql-server-example ;\
cd graphql-server-example
$ npm init –yes

元記事を表示

Bot開発(Node.js)のDBアクセスライブラリは knex がオススメ!

Bot開発でNode.jsを使うことが多く、DBアクセスがある要件で `pg` などで素のクエリを書いていて辛いなーと感じている時に、 `knex` に出会ったので紹介します。

公式ドキュメント http://knexjs.org/
GitHub https://github.com/knex/knex

# 使い方
インストール

“`terminal
$ npm install –save knex pg
“`

knex初期設定

“`terminal
$ knex init
“`

すると、以下のファイルが自動生成されます。

“`javascript:knexfile.js
// Update with your config settings.

module.exports = {

development: {
client: ‘postgresql’,
connection: {
database: ‘linebot-dev’,
user: ‘zyyx-kubo’,
password: ”

元記事を表示

【WebAudioAPI】録音した音声をバイナリデータ化、PHPへ受け渡し

#概要
Node.js上で、IBMのWatsonによって人が話した音声データを自動で文字起こしするスクリプトを作成しました。
その中で、結構苦労した
PCのマイクに直接アクセス→録音した音声データをバイナリデータ化、PHPへ受け渡し
の部分をメモがてら貼り付け。
#環境
“`
$php -v
PHP 7.1.23 (cli) (built: Feb 22 2019 22:19:32) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
“`
#録音部分
“`hogehoge.js
// 音声データのバッファをクリアする
audioData = [];

//様々なブラウザでマイクへのアクセス権を取得する
navigator.mediaDevices = navigator.mediaDevices || navigator.webkitGetUserMedia;

//audioのみtrue

元記事を表示

gRPC の使い方 (Node.js)

参考ページ
[Node Quick Start](https://grpc.io/docs/quickstart/node/)

必要なライブラリーのインストール

“`bash
sudo npm install grpc
sudo npm install @grpc/proto-loader
“`

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル
helloworld.proto こちらと同じ
[gRPC の使い方 (python)](https://qiita.com/ekzemplaro/items/207e8abdd000ff75c0a2)

サーバープログラム

“`js:greeter_server.js
var PROTO_PATH = ‘helloworld.proto’;

var grpc = require(‘grpc’);
var protoLoader = require(‘@grpc/proto-loader’);
var packageDefinition = protoLoader.loadSync(

元記事を表示

VSCodeを使って素朴に素朴にNode + TypeScript

学習用に。

## 必要なもの

### 事前に準備するもの

* Node.js
* VSCode

### 途中でインストールするもの

* `typescript`

## 手順

### 1. `npm init`

いろいろ聞かれますが全部Enterで返事しておきます。

### 2. `npm install typescript –save-dev` でTypeScriptのインストール

### 3. `npx typescript –init` で`tsconfig.json`を生成

### 4. 生成された`tsconfig.json`をいじる

* `”sourceMap: true”` の行は使いたいのでコメントアウト解除
* `”outDir”: “./”` の行はコメントアウト解除して`”outDir”: “./dist”` とでもしておきましょう。
* `”rootDir”: “./src”`などとすることで、ソースファイルのルートディレクトリを設定できます。

あとはそのままでいいんじゃないかなと思います。必要になったら変更で。

### 5.

元記事を表示

node.jsのライブラリを作成したが、import構文でエラーが出る場合の対処法

ライブラリのpackage.jsonに

“type”:

が存在しない場合、そのライブラリは、commonjsとして扱われ、importを使用するとエラーを吐く。

そのため、node.jsでライブラリを作成するときは、

“type”: “module”

をライブラリのpackage.jsonに記述する必要がある。
この記述によりライブラリ内のコードは、es moduleとして扱われ importを使用可能になる。

参考
[Node.js v13.7.0 Documentation](https://nodejs.org/api/esm.html)

尚、Typeフィールドの値に関わらず.mjsファイルは、ES modulesとして扱われ、.cjsファイルはcommonjsとして扱われる。

元記事を表示

画像に対して顔検出を行いマスクする(opencv/opencv4nodejs/Node.js)

# 動機
インカメラで人物や顔写真入り証明書を撮影したエビデンス画像に対して、顔部分のマスクを行うツールを作成したかった。

# 言語選定
画像処理ライブラリ [opencv](https://opencv.org/) の対応言語は `C/C++` `Java` `Python` です。
今回の動機であるツール的に用いるならば、Pythonが適していると思います。サンプルコードもたくさんあります。しかし、自分がPythonに対する知識が少なく、時間がかかりそうで逡巡していました。
しかし、opencv を Node.js 環境から使えるライブラリ[opencv4nodejs](https://www.npmjs.com/package/opencv4nodejs)を見つけたので、試してみることにしました。

## 落とし穴
opencv4nodejsはopencvの型やメソッドと全く同じ名称ではなく、JavaScriptの言語仕様に合わせて引数なども異なります。→ [Contribution Guide](https://github.com/justadudewhohacks/ope

元記事を表示

なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか

この記事は個人ブログのうち技術に関する箇所のみを抜粋した転載です。
[なぜ僕たちはサーバレスでJavaを諦めTypescriptを採用したか -Junks, GC cannot sweep-](https://munchkins-diary.hatenablog.com/entry/2020/02/05/002748)

またブログには書いたのですが、諸事情により先に英語版が存在します。
こちらも書いたのは僕なので、剽窃などではないことはご了承ください。

\[元記事\]: [Why we replaced Java with Typescript for Serverless](https://dev.to/csohei/why-we-used-typescript-instead-of-java-on-serverless-39e2) in [dev.to](https://dev.to)

## はじめに

**サーバレス(serverless)**は昨今もっとも注目を集める設計手法の一つで、おそらく多くの開発者が大なり小なり自分のプロダクトに応用し始めているのではないでしょうか

元記事を表示

Docker 環境で nodemon が watch してくれない問題と対処方法

Web アプリの開発環境を Docker で作っていたところ、nodemon がうまくファイル変更を検出してくれなくて困ったので、そのときのメモ。

## マウントしたボリュームだと nodemon が watch してくれない問題
問題を再現するために、以下の3つのファイルを用意する。

ポイントとしては、ホストのディレクトリをコンテナ内にマウントしてそれをコンテナ内の nodemon が watch しているということ。

“` Dockerfile:Dockerfile
FROM node:12

ADD . /app
WORKDIR /app

CMD [“node”, “.”]
“`

“` javascript:index.js
const http = require(‘http’)

http.createServer((req, res) => {
res.writeHead(200, { ‘Content-Type’: ‘text/plain’ })
res.end(‘ok’)
}).listen(80)
“`

“` yaml:docker-co

元記事を表示

UbuntuでNode.jsとExpressの環境を作る

# Ubuntu で Node.js と Express の環境を作って試してみる
Ubuntu の環境は既に作成済なのが前提

## Node.js を動かす環境を作る
– 参考サイト→https://qiita.com/seibe/items/36cef7df85fe2cefa3ea
– とりあえず最新のを入れようとしてみる

下記を順番に入力したら完了

“`
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n stable
sudo apt purge -y nodejs npm
exec $SHELL -l
“`

versionを確認するなら↓コレ

“`
node -v
“`

v12.14.1 とか出るはず

### Node.js で Hello World してみる
node と入力して node を起動
↓こんなのが出る

“`
Welcome to Node.js v12.14.1.
Type “.help” for more information.
>
“`

以下

元記事を表示

react-native のMetro bundlerでNodeエラーが出るときの対処

## 概要
React Native開発をしているとMetro Bundlerが上がってきます。
このときに自動で立ち上がってくるTerminal上のMetroでエラーが出た時の対処方法のメモとなります。

## 対象読者
– React Native v0.59.x >= 利用者

## 事象
React Native開発をしていると(古いバージョンでは)必ずMetro Bundlerのお世話になります。Metro Bundlerは `react-native-cli`の`run-ios`コマンドを叩くなどすると上がってきます。

その際、新規PCで何気なく実行すると下記のエラーが出ました。
Screenshot 2020-02-04 13.05.58.png

あれ?nodeがない?となりましたが、普段使いして

元記事を表示

ubuntu18.04でnpm testを使いava実行すると「SyntaxError: Unexpected token {」エラーが出てしまうときの解決方法

なんてことないことでしたがNode.js, npm, avaを使い初めて日も浅くて2~3時間悩んだのでメモです。あまりいないかもしれないですが、他に同現象で困っている人がいたら役立ちますように。

# 現象
初めてavaを使おうと https://www.npmjs.com/package/ava に従ってnpm testをすると以下のエラーとなってしまい実行できない。

“`bash
$ npm test

> ava -v

(node:5301) UnhandledPromiseRejectionWarning: /home/shohei/tmp/20200203/shoheihagiwara-cli/node_modules/ava/lib/node-arguments.js:9
} catch {
^

SyntaxError: Unexpected token {
at createScript (vm.js:80:10)
at Object.runInThisContext

元記事を表示

JavascriptのDate.prototype.toString()系まとめ

new Date()からタイムスタンプを作ってファイル名にしたい時、どのフォーマットにするか毎回調べてるのでまとめる

| メソッド                | 出力される文字列                     | 備考|
|:——————————————————|:———————————————–|:—
| new Date(‘2000-01-01 00:00:00’).toString() | “Sat Jan 01 2000 00:00:00 GMT+0900 (日本標準時)” | |
| new Date(‘2000-01-01 00:00:00’).toISOString() | “1999-12-31T15:00:00.000Z” | |
| new Date(‘2000-01-01 00:00:0

元記事を表示

Hueを使って照明の色で天気予報を認識する

## 1. 億劫なこと

毎日、テレビやスマホで天気予報を確認して服装の選択や傘の有無を考えるのがめんどくさい。

## 2. やりたいこと

当日の天気予報をAPIで取得し、天気・温度に応じて室内照明(Hue)の色を点灯させたい。
想定する手順は以下の通り。

1. 気象情報APIによって、当日の情報(天候と気温)を取得する
1. 取得した天気の情報を元に、照明の色を変化させる

## 3. 環境

– node version : v8.11.3
– Philips Hue Go + ブリッジ

## 4. 実装

### 4.1 準備

モジュールのインストール。

“`
$ npm install request
“`

### 4.2 気象情報APIの利用

今回は無料のAPIを使いたかったため、[openweathermap](https://openweathermap.org/)を利用した。
HPから利用登録してAPPIDを入手。

天気の情報は以下のAPIによってGETできる。

“`
http://api.openweathermap.or

元記事を表示

S3にCSVファイルがアップロードされるとLambdaがDynamoDBへデータを挿入します

#概要
S3へjsonファイルがアップロードされるとLambdaがそのファイルの中身を解析して、DynamoDBへデータを挿入します。

#jsonファイルの構成
`data`キーに配列があり、配列の要素はオブジェクトとなっています。

“`json
{
“data”: [
{
“item1”: “sample data1”,
“item2”: 123,
“item3”: “test data1”
},
{
“item1”: “sample data2”,
“item2”: 1234,
“item3”: “test data2”
},
]
}
“`

#主な流れ

1. S3へファイルがアップロードされるとLambdaが起動
2. アップロードされたファイルの中身を取得
3. `data`キーから配列を取得
4. 配列を`forEach`で各要素をDynamoD

元記事を表示

Node.jsで常時フォルダを監視してS3へファイルをアップロードする

#概要
あるフォルダに不定期にCSVファイルが作成されるので、そのCSVファイルをS3にアップロードするプログラムをNode.jsで作成します。
処理に失敗するとAWS SESを使って、管理者へメールを配信します。
loggerも使って何が起こったかを追えるようにします。
[全コードはこちら](https://github.com/TKFM21/monitoring_template)

#フロー
##起動時に監視フォルダとローカルの保存フォルダが存在するかチェック
“`javascript:initial_check.js
const fs = require(“fs”);
const fsPromises = fs.promises;

const initialCheck = async (WATCHING_DIR, DEST_DIR) => {
try {
await fsPromises.access(
WATCHING_DIR,
fs.constants.R_OK | fs.constants.W_OK
);
await

元記事を表示

OTHERカテゴリの最新記事