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

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

C++ で作った Node.js 用アドオンから任意のタイミングで JavaScript の関数を呼び出すクラスを作ってみた

こんにちは、wattak777 です。

# はじめに

筆者は C/C++ 畑の経験が長かったためか、Node.js でプログラムを組んでいると「C や C++ でやった方が早く作れるのになぁ」と C++ のアドオンで実装することがしばしばあります。

この時、C++ から JavaScript の関数を呼び出したい場合、JavaScript 側からコールバックを指定すれば(下記例)呼べますが、JavaScript から呼び出しトリガーが必要となります。

“`JavaScript:呼び出し側.js
const addon = require(‘./build/Release/addon’);
addon.func(arg, (result) => {
console.log(‘call back.’) ;
}) ;
“`
“`C++:アドオン側.cpp
// 仕掛け等は省略
// JavaScript 側から「func」と呼ばれると「func」が呼ばれるような仕組みになっていると想定
func( Napi::CallbackInfo& info )
{

元記事を表示

Node.js での認証情報の設定

## はじめに
プログラミング時に認証情報の提供方法によってセキュリティ、保守作業に影響しますので、
どの方式を採用するかを考慮する必要があります。

## AWSのNode.js での認証情報の設定
### AWS 推奨の順序で認証情報を提供する方法
– Amazon EC2 の AWS Identity and Access Management (IAM) ロールからロード
– 共有認証情報ファイル (~/.aws/credentials) から読み込む
– 環境変数から読み込む
– ディスク上の JSON ファイルから読み込む
– JavaScript SDK によって提供されるその他の認証情報プロバイダークラス

### SDK で利用できる認証情報ソースが複数ある場合、デフォルトの選択優先順位
– サービスクライアントコンストラクタで明示的に設定されている認証情報
– 環境変数
– 共有認証情報ファイル
– ECS 認証情報プロバイダーからロードされた認証情報 (該当する場合)
– 共有 AWS 設定ファイルまたは共有認証情報ファイルで指定された認証情報プロセスを使用して取

元記事を表示

Jestのmockを使いES6クラスのテストを実装してみた 様々なモックの作成方法

## 以下の記事を参照して頂ければと思います

https://note.com/shift_tech/n/nb2f427093fd8

**※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です。**

## 補足
ソースコード全体は以下。

https://github.com/yuta-katayama-23/node-express/commit/435c2b3d4b2759fa19c20de59de6e8215f8a445f

https://github.com/yuta-katayama-23/node-express/commit/8da10b36cd23c9868d9f5ead1311c40dc3935425

## おまけ
上記で見てきたES6クラスの実装の仕方の都合上、例えばExpressで利用する際には以下のようになるだろう。

“`js
import express, { Router } from ‘express’;
const router = Router();

const port = process.env.PORT ||

元記事を表示

テキストファイルの文字コードを変換する

### 環境
Ubuntu 20.4 + Vagrant(Windows10)
Node.js v16.14.0

### はじめに
テキストファイル(CSVファイルなど)の文字コードを判断して、S-JISであれば、UTF-8に変換する関数の紹介です。プラットフォームがWindows10であるため、Vagrant環境で動作しているUbuntuとファイルのやり取りがよく発生します。つまり、Windows環境で作成した、S-JISのファイルを、Ubuntu環境で扱うために、UTF-8にいちいち変換しなくてはいけないことになります。それを、Node.jsでサクッと行えるようにしたので、そのご紹介です。

### 解説
2つの外部ライブラリを使っています。**jschardet**と**iconv-lite**です。この2つのライブラリは、**npm**で別途インストールする必要があります。**jschardet**はファイルの文字コードを判断するライブラリで、**iconv-lite**はファイルの文字コードを変換するライブラリです。

**jschardet**でファイルの文字コードを判断

元記事を表示

依存モジュール(ライブラリ)のライセンスをチェックする仕組みを導入してみた

## 以下の記事を参照して頂ければと思います

https://note.com/shift_tech/n/n6fd1f955658b

**※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です。**

## 補足
ソースコード全体は以下。

https://github.com/yuta-katayama-23/node-express/commit/ebc93a814273133a34329dfd3830504ee473a24f

## おまけ
以下では、

– [GPLライセンスについて](#gplライセンスについて)
– [Node.jsでもフロントエンドと同じようにwebpackで全てのモジュールをbundleするとどうなるか?](#nodejsでもフロントエンドと同じようにwebpackで全てのモジュールをbundleするとどうなるか)
– [フロントエンドのプロジェクトで使える他の方法](#フロントエンドのプロジェクトで使える他の方法)

の3つについてみていく。

### GPLライセンスについて
以下の記述については専門家ではないので、誤りがある

元記事を表示

日本語音声のマイク入力をオフラインでリアルタイム音声認識:「VOSK」を JavaScript(Node.js)で扱う

この記事の内容は、オフラインでリアルタイム音声認識ができ、日本語にも対応している以下の「VOSK」を試してみた話です。

●VOSK Offline Speech Recognition API
 https://alphacephei.com/vosk/
![VOSKの公式ページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ae6c8944-54fa-9d86-7c08-32c0bc2f089c.png)

そして今回の記事で、VOSK を扱う開発言語・環境は「JavaScript(Node.js)」です(自分がよく使っているから、という選定理由です)。
なお、対応している他の開発言語などは、公式ページの「[Installation](https://alphacephei.com/vosk/install)」を見ると確認でき、例えばスマホ向け(Android・iOS)や Python・Java・C# などもあるようです。

## VOSK を「JavaScript(Node.js)」で扱う

元記事を表示

NodejsからMySQLに接続してみた

前回記事までで出来上がったMySQLに、Nodejsから接続確認をしてみたいと思います。
前々回記事までで、AWS上のCentOSに、Nodejs実行環境が構築できている状態です。

## コード準備

任意のプロジェクトに以下を配置します。
const connection以下は、MySQLに設定したユーザとパスワード、データベース名をいれます。

app.js
“`
const express = require(‘express’);
const mysql = require(‘mysql’);
const app = express();

app.use(express.static(‘public’));
app.use(express.urlencoded({extended: false}));

const connection = mysql.createConnection({
host: ‘localhost’,
user: ‘root’,
password: ‘Passw0rd!’,
database: ‘list_app’
});

c

元記事を表示

CentOS steam 8にMySQLをインストールして初期設定する

昨日の投稿の続きで、
MySQLを導入して初期設定をしたあとNodejsから接続確認をします。

## MySQLインストール
### 1. yumリポジトリの追加
MySQLはyumコマンドでインストールします。
CentOS 7では公式のyumリポジトリにMySQLがないので、まずはMySQLの[公式](https://dev.mysql.com/downloads/repo/yum/)が用意しているリポジトリを追加します。

“`
# yum localinstall http://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
“`
/etc/yum.repos.d配下にmysqlのリポジトリが追加されていることが確認できます。
“`
# ls /etc/yum.repos.d
centos-addons.repo mysql-community-debuginfo.repo mysql-community-source.repo
centos.repo mysql-com

元記事を表示

primary keyをオートインクリメントしている場合に、そのidを外に露出させない実装をしてみた?!

## はじめに
データベースのprimary keyをauto incrementしている場合(サロゲートキーを使っている場合)に、もし何も気にせずREST APIでCRUDするようなアプリを作ろうとすると、一番簡単なのはそのPKを使ってデータを操作する事だと思う。

ただ、そのような実装した場合、PKが外に露出してしまうので、ToDoアプリ等であれば問題ないかもしれないが、もしPKがユーザーID等の個人を特定できる情報であれば、サービスの利用ユーザ数が知られてしまったり、何かと悪影響があるだろう。

今回は可逆暗号を利用して、オートインクリメントをしたユーザーIDなど外に露出してほしくない情報を隠す方法を試してみたので備忘録を残す。

※上記のprimary key露出に関しての懸念事項については、[idをautoincrementして何が悪いの?](https://zenn.dev/dowanna6/articles/3c84e3818891c3)などを参照。

※上記の問題を解決するのに、以下で見ていく方法が良いと言えるのか?実際にプロダクトで使えるのか?については、勉強中の身の

元記事を表示

LambdaからDynamoDBへの大量データ投入

# DynamoDBへの大量データ投入

– Pythonではやったことがあったけど、Node.jsではやっていないかったのでやってみると、高速だった。 1putごとにawaitしないから高速ですね。
– https://dev.classmethod.jp/articles/nodejs-dynamodb-scan-stream/ クラスメソッドさんの記事まんまできる
– 「スクリプトで50万件のテストデータを作成」の箇所のtsをjsに変える

– DynaomoDBテーブルは、オンデマンドキャパシティを使う
– Pythonの並列処理を作成するのは苦手だけど、Node.jsならばPromise.all() で非同期処理で同時に実行できCPUパワーを十分に使える

## AWS Lambdaの設定
– Lambdaをメモリ1024MB、タイムアウト1分にする
– Lambda Layer使うのですが割愛します

## DynamoDB
– テーブル名 :sugimoto-scan
– パーティションキー :id,文字列
– ソートキー:指定なし
– 設定をカスタマイズ にて、

元記事を表示

AWS上にCentOS Stream 9 を立ち上げて、Nodejsで簡単アプリを動かしてみる

構築の際の覚書です。

## ◆AWS CentOS起動◆
CentOS8がサポート終了したとのことで、
AWS EC2 で CentOS Stream 9 のサーバーを立ち上げてみました。

### 1. 公式のCentOS 9 Ami IDを探す
公式のWiki( [https://wiki.centos.org/Cloud/AWS](https://wiki.centos.org/Cloud/AWS) )から、東京リージョン(ap-northeast-1)のAmi IDを探してコピーします。

2022/6/27時点の最新以下を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638048/900e5dbd-cf9d-a894-2ec4-d7f10737f495.png)

### 2. AWSでインスタンスを起動する
AWS EC2 「インスタンスを起動」 から、1.でコピーしたAmi IDを入力して検索します。

CentOS 8はサポート終了しているとのことで、今回Cen

元記事を表示

google-cloud/tasks モジュールでbodyが取得できない場合の対策

# 概要

`Cloud Tasks` に`Post`した値が取得できなかった際の対応をまとめる

https://www.npmjs.com/package/@google-cloud/tasks

# 解決方法

`Quickstart`に記載されている方法では取得できないので以下の通りにする

`body: Buffer.from(JSON.stringify(payload)).toString(‘base64’)`

“`ts
const payload = {
foo: ‘bar’,
};

const task = {
httpRequest: {
httpMethod: HttpMethod.POST,
url: ‘URL’,
oidcToken: {
serviceAccountEmail:
‘serviceAccountEmail’,
},
body: Buffer.from(JSON.stringify(payload))

元記事を表示

Vector tile conversion from Esri geodatabase with gdal, tippecanoe, and nodejs

# Introduction
## Background
My colleagues have a good contour line data in ArcGIS geodatabase (.gdb) format. I wanted to make vector tiles from contour lines stored in ArcGIS Geodatabase. The structure of the geodatabase is as shown in the following figure.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679143/f0d7328d-326e-892e-705b-a2eb155b406e.png)

## Considering an approach
At first, I was thinking to export it to shape files to be converted into GeoJSONs which i

元記事を表示

nvmをインストールする方法【nvm/Node.js/zsh/npm】

# nvmのインストール手順(zsh)

#### 1. nvmをインストール
“`
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
“`

#### 2. .zshrc に以下を記述して保存
“`.zshrc
source ~/.nvm/nvm.sh
“`

#### 3. nvmのインストールを確認する
“`
nvm -v
“`

#### 4. nvmを使ってNode.jsのバージョン12をインストールする
“`
nvm install v12
“`

#### 5. Node.jsのインストールを確認する
“`
node -v
“`

元記事を表示

しばらく使っていなかったNodeをアップデートする

過去にダウンロードしていたNode.jsを現在の安定版に更新しました。
いずれまた使うのでメモしておきます。

## homebrewのバージョンアップ
% brew update

% brew -v
Homebrew 3.5.2
Homebrew/homebrew-core (git revision e95d9224d91; last commit 2022-06-26)
Homebrew/homebrew-cask (git revision 9713bf8928; last commit 2022-06-25)

homebrewを最新版に更新完了

## nodebrewのバージョンアップ
% brew upgrade nodebrew

% nodebrew -v
nodebrew 1.2.0

nodebrewも最新版に更新完了

## node.jsのバージョンアップ(推奨版に)
現在の推奨版がv16.15.1なのでそれにバージョンアップする

% nodebrew install-bi

元記事を表示

S3とファイルを共通に扱う

タイトルにある通り、S3を扱うNode.jsライブラリです。
すぐ忘れるので、備忘録として残しておきました。
おそらくもっと良いやり方があるかもしれず、いろんなケースに対応できているわけではないように思いますが、各所でカスタマイズするためのベースにはなるかなあと思います。

ファイルとS3どちらも共通に扱えるようにしています。
また、AWS S3の代わりにMinioでも利用できます。

“`js:storage.js
‘use strict’;

const fs = require(‘fs’).promises;
var AWS = require(‘aws-sdk’);
AWS.config.update({
// region: “ap-northeast-1”,
// minio用
region: “[Minioのリージョン名]”,
});
var s3 = new AWS.S3({
// minio用
accessKeyId: ‘[MinioのアクセスキーID]’ ,
secretAccessKey: ‘[Minioのシークレットアクセスキー]’,

元記事を表示

【Node.js】ウェブ上の地図にPLATEAUの建物を反映させてみた

国土交通省の3D都市モデルPLATEAUを使ったウェブアプリケーションを作るため、JavascriptのライブラリCesiumJSを使ってみました。

## 環境
– Node.js
– 使用エディタ: VSCode
– 動作確認OS : Windows10

## PLATEAU
広島県呉市のデータを例にします。
ここからダウンロード
https://www.geospatial.jp/ckan/dataset/plateau-34202-kure-shi-2020

この中から 3D Tiles, GeoJson, MVT, Shape
> 詳細 > ダウロード
[![Image from Gyazo](https://i.gyazo.com/a41a29c5ebd49fa57417edbebc441024.png)](https://gyazo.com/a41a29c5ebd49fa57417edbebc441024)

ダウンロードデータを解凍すると
[![Image from Gyazo](https://i.gyazo.com/f02fd7eaf3e6ce7b9

元記事を表示

AWSのAppRunner使ってRedash用のBotを動かしてみる

## RedashをAWSで立てる
https://dev.classmethod.jp/articles/try-redash-setup/

こちらを参考にRedashのインスタンスを立ち上げてみました。Redashの公式サイト( https://redash.io/help/open-source/setup )によればインスタンスのサイズは `t2.small` で十分とありますが、自分がテストした結果では動作しないので `t2.medium` 以上をオススメします。
かつ、立ち上げたあとはACMで証明書取って、ELBの配下に当該RedashのEC2サーバを配置します。
ELBの443側のアクセス時にSSL証明書を当てる必要がありますが、先程のACMの証明書を当てます。
よくよく考えたら自分で以前書いた手順があったのでこちらも御覧ください。
https://qiita.com/hardreggaecafe/items/fe03bd74313e159a7f95

これで出来上がったRedashをSlackと連動させる方法について、以下に紹介します。

## Redashbotとは

元記事を表示

Node.js(Express)+MySQLを使ったHeroku上で動くプログラムを作ってみる

Node.js(Express)とMySQLを使ってDBと連携するアプリをHeroku上で動かします。
HerokuはPostgresが公式サポートのようですが、MySQLの方が触ったことがあったり職場で使ってたりシェアも大きいしってことでそっちをチョイスしました。

# やってみた感想
特にクセもなく実装できるかなーと思いました。
MySQLも全然普通に使えるしHeroku便利だわ。

##### 環境
Win10+VSC@1.68
Node.js@16.14.2+Express@4.18.1
MySQL@8.0(ローカル側DB)
ClearDB MySQL(Heroku側DB)

事前準備としてHello worldだけを出力するアプリをHeroku上にデプロイしておき、ローカル-GitHub-Herokuが繋がった環境を先に構築してあります。

https://qiita.com/shichisan21/items/b163e33669763ca6fffc

## やろうとしたこと
– Herokuサービス上でNode.js(Express)アプリケーションを動かす
– JSON

元記事を表示

ローカルWebサーバーを立てる方法

## Node.js
Node.js がインストールされている場合には`npx serve`を実行してローカルのWebサーバを立てられます。

“`:ターミナル
$ npx serve
┌────────────────────────────────────────────────┐
│ │
│ Serving! │
│ │
│ – Local: http://localhost:3000 │
│ – On Your Network: http://172.22.0.2:3000 │
│ │
└────────────────────────

元記事を表示

OTHERカテゴリの最新記事