Node.js関連のことを調べてみた2021年07月20日

Node.js関連のことを調べてみた2021年07月20日
目次

package.jsonにfilesを書かないあなたは、誰かを少しだけ不幸にしています

## 先に結論だけ

`package.json`に`files`フィールドを指定すると、`node_modules`に保存されるファイルサイズが減ります。

## はじめに

この記事は、[npm](https://www.npmjs.com/)の[package.json](https://docs.npmjs.com/cli/v7/configuring-npm/package-json)に指定するフィールド、[files](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files)の指定方法と効用を解説、共有するためのものです。

### 想定する読者

この記事は、以下の読者を想定して書かれています。

+ JavaScriptの開発経験がある
+ npmを使ったことがある
+ npmやGitHubでnpmモジュールを公開している

### 想定する環境

この記事は、以下の環境を想定して書かれています。記事を読む前に、お手元の環境をご確認ください。

“`shell
$ npm –version

元記事を表示

Macでnodev経由でnode 16.x がinstallできない。

nodenvでnodeの16系がinstallできなかった。nodenvのplugin pathにはいって、git pullすると更新できるらしい。

“`jsx
cd “$(nodenv root)”/plugins/node-build && git pull
“`

参考。
[nodenvでinstall出来るnodeのバージョンを確認したら最新が出てこなかった時 – Qiita](https://qiita.com/kzk_FE/items/0baf5cdda00eab36c441)

[Twitter](https://twitter.com/yoshixj)

元記事を表示

Node.js はどんな流れで非同期・同期処理を実行するのかイメージしたい

# 経緯

Node.js は V8 上に構築された JavaScript の実行環境ってのは [Wikipedia](https://ja.wikipedia.org/wiki/Node.js) を読んでなんとなくわかった。Wikipedia の少し下の方にある「クライアント1万台問題」についての記述を読んで見ると

>非同期処理のNode.jsではクライアント1万台問題は起きない。
Node.jsでこの問題を解決した技術の中核は、シングルスレッドにおける非同期処理を容易に実装可能にしたイベント駆動型プログラミング環境である。

なるほど、シングルスレッドで動作してるから、プロセスを無制限にフォークすることでコンテキストスイッチが起こりまくって超重くなることはない。詳しくわかってないけど「非同期処理を容易に実装可能にしたイベント駆動型プログラミング」によって同時に処理を捌けるらしい…。

**とりあえず node.js だと非同期や同期処理が混ざってるときはどう進むのかだけでも知りたい!**

**※** 正確に知りたい方はこちらの記事や、`libuv` を調べてください。
ht

元記事を表示

DynamoDB localを使ってDynamoDBをローカルでデプロイする

## 概要

DynamoDBはウェブサービスとして利用できるほか、別に提供されている**DynamoDB Local**を使えばDynamoDBを**開発用ローカルDBサーバ**としてデプロイすることができます。
DynamoDB Localに関する公式ドキュメントは以下の通り。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html

上記の記述の通り、DynamoDB Localは実行可能な.jarファイルとして提供されているほか、Dockerイメージとしても提供されており、`docker-compose`で簡単にデプロイすることができます。

今回は公式の記述を参考にしつつ、`docker-compose`でDynamoDB Localをデプロイし、Node.js上から読み書きするまでを行ってみたいと思います。

### dynamodb-admin

また、**dynamodb-admin**というDynamoDB Local用のGUIを提供してくれる

元記事を表示

Updated node package globally, but the version was not changed.

# When I’d have loved to update a node package

I ran below command for updating firebase-tools version.

“`
yarn add global firebase-tools
“`

But version was not changed

# Why version was not changed

Because command was wrong.

Correct command is below.

“`
yarn global add firebase-tools
“`

If we put `global` before `add`, node package is installed only globally.
If we put `global` after `add`, node package is installed globally and locally.
And my `firebase-tools` version was different

元記事を表示

オニオンアーキテクチャ on Node.js + Express + TypeScript

# 概要
設計の脳内整理資料

# ディレクトリ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1621988/9db85b3e-7cb2-9221-fe3e-7ebb8e2b0b54.png)

# プレゼンテーション層

## ルーター

`routes\task.route.ts`

“`typescript
import express from ‘express’;
import TaskApplication from ‘../applications/task.application’;
import TaskRepository from ‘../infrastructure/task.repository’;

const taskRepository = new TaskRepository();
const taskApplication = new TaskApplication(taskRepository);
const router = expres

元記事を表示

BLEビーコンとソラコムAPIでつい押してみたくなる出退勤記録ボタンを作る(Slack通知機能追加版)

#初めに
以前、BLEビーコンとソラコムAPIを使って、出退勤記録と天気やニュースの読み上げをしてくれるボタンを作成しました。
[BLEビーコンとソラコムAPIでつい押してみたくなる出退勤記録ボタンを作る](https://qiita.com/k_izutani/items/3c8be65c34187dbb038b)
その記事の中で今後の改善案として、

> 次は以下の情報を参考にして、稼働情報をslackに反映するようにしたいです。
> [SORACOM レシピ:IoTで在席状況の自動更新](https://soracom.jp/recipes_index/3401/)

と書きましたので、本当に作成しました。

# システム構成
システム構成を以下に示します。赤四角の、ソラコム ~ AWS Lambda ~ Slackの経路が、今回追加した箇所です。他の部分は以前の記事を参照してください。
![システム構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125043/ab65e51b-3bd5-ac

元記事を表示

APL環境構築 & テキスト表示

# やること

[Alexa ハローAPL、Alexaスキルの画面への対応](https://qiita.com/Mount/items/72d9928ff2c0ae5de737)
やることはまんまこの記事。

– APLオーサリングを用いたデザインの作り方
– APLを使えるように設定する
– APLドキュメントを使って画面を描画する。

あたりについて示す。

# 前提
[ASK CLI 環境構築](https://qiita.com/Teach/items/b7901071a646fa974ed6)

# 環境
[APLオーサリングツールドキュメント](https://developer.amazon.com/ja-JP/docs/alexa/alexa-presentation-language/apl-authoring-tool.html)
APL v1.6
所持実機 Echo show 5![スクリーンショット_2021-07-09_20_00_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

Prisma を Google App Engine で使いたい場合は prisma generate の出力先を変更する

# TL; DR

“`tf:schema.prisma
generator client {
provider = “prisma-client-js”
// ここを追加するだけ
output = “../src/generated/client”
}
“`

“`ts
// 生成先のパスを参照する
import { PrismaClient } from ‘./generated/client’
“`

# 概要
– Node.jsでバックエンドを書いている
– ORMにはPrismaを使っている
– インフラは Google App Engine (以下、GAE)を使う

以上の条件のとき、問題が発生したので、その解決策を残す。

# 問題1 prisma generate しないとクライアントが使えない
prisma のクライアントを使うときは、事前に`prisma generate`を実行する必要がある。GAE ではインスタンス開始時に npm scripts の`start`に設定したコマンドが実行されるので、`start`を以下のように変更した。

元記事を表示

discord.js v12でVCの入退室に反応するbotを作るメモ

はじめに
===

discord.jsを使ったbotの資料はたくさんありますが、

– v12対応
– voiceStateUpdateを利用
– VCの入退室に関連した資料

というのが殆どなかったのでメモっときます。**~~v11対応だったりErisだったりするとあるんだけどdiscord.js v12がいいんだよ!!~~**

このページに載っている情報でなにができる?
===

– 入退室時、ミュートなどの状態を変更したときに関数を発火させることができる
– 状態を変化させたユーザやチャンネル、ギルド(サーバ)などの情報を取得することができる

環境
===
Node.js v14.17.0
discord.js v12.5.3

サンプルコード
===
“`js
// discord.js モジュールのインポート
const Discord = require(‘discord.js’);

// Discord Clientのインスタンス作成
const client = new Discord.Client();

// トークンの用意
const discor

元記事を表示

Node.js実行中に「JavaScript heap out of memory」が発生する

# tl:dr
NODE_OPTIONSの `max-old-space-size`を変更します。

# ?現象例
“`
<--- Last few GCs --->

[326:0x41400b0] 917511 ms: Mark-sweep 1511.0 (1774.9) -> 1510.0 (1775.4) MB, 2311.1 / 0.0 ms allocation failure GC in old space requested
[326:0x41400b0] 920160 ms: Mark-sweep 1510.0 (1775.4) -> 1509.8 (1728.9) MB, 2643.0 / 0.0 ms last resort GC in old space requested
[326:0x41400b0] 922034 ms: Mark-sweep 1509.8 (1728.9) -> 1509.8 (1719.9) MB, 1873.7 / 0.0 ms last resort GC in old space requested

元記事を表示

node.js + express + sqlite3でWebAPI(CRUD)を作る

node.js + express + sqlite3でWebAPIを作るニーズがあったのでメモ。

## 準備

場所の作成と必要モジュールインストール。実装ファイル生成。

“`bash
cd
mkdir node-api-test
cd node-api-test

npm init -y

npm install express
npm install sqlite3

touch index.js
“`

## 実装

淡々と実装。

### 知っておいた方がいいこと

sqlite3ではinsertしたりupdateしたIDをthis.lastIDやthis.changesで取得することができるが、this.*という構文はラムダ関数の中では利用できません。幸いなことに?const stmt = db.prepare();を利用すると、stmt.lastID, stmt.changesで取得できるようになるので、冗長とはなりますが、stmt.prepare()を利用しています。

>最適な書き方は引き続き模索中。今後変えるかも。

“`js:index.js
cons

元記事を表示

node.jsでsqlite3を利用する

node.jsでsqlite3を利用する機会があったのでメモ。

## 前提

* 私の環境はMac(なので最初からsqlite3が入っている)sqlite3 –versionで確認可能。
* node.jsがインストールされている

## 準備

### 作業場所やファイルの生成

作業場所を作る。名前は何でも良い。ここではindex.jsに実装していく。

“`bash
mkdir node-sqlite3-test
cd node-sqlite3-test
npm init -y
touch index.js
“`

### sqlite3をnode.jsから制御するためのモジュールをインストール

sqlite3と同名なのでややこしいといえばややこしい。

“`bash
npm install sqlite3
“`

>これはsqlite3をインストールしてるのではなく、制御モジュールのインストール。

## 基本(だが、悪い例)

早速実装。

### 実装例

モジュール読み込んで、newして、db.run()でいろいろ実行するのが基本。

>ただ、感の良い人は

元記事を表示

nodeJS+expressでMongoDBにアクセスする

# はじめに
ちょっと前まで仕事でkotlin+androidを使ってアプリを作っていたのですが、androidアプリを作ると当然のようにiPhoneアプリの開発依頼が来ます。
もともとandroidアプリを作る前はCakePHPで作ったアプリを使ってもらっていました。
ですが、WEBアプリは通信ができない場所では使い物にならないため、通信障害に強いアプリにする必要があり、androidアプリを作成した背景があります。
作ったのは良いのですが、WEBも現役で使ってもらいながら、androidアプリも使ってもらうとなると、一つ機能を追加するたびにWEBとandroidの両方を修正する必要があります。
ここにiPhoneも加わると、ソースコードの3重持ちになって大変です。
WEBとandroidアプリくらいなら何とかなるかなーと思っていましたが、2重持ちだけでも結構大変です。
ここにiPhoneアプリが加わると、これは、もう無理かな…と。

そんなときにangularやreactやらの情報を得て、いろいろ試している最中です。
angularやreactは基本的にRestAPIとの連携になる

元記事を表示

【AWS】Node.js 14.xを使って、Lambda関数から他のLambda関数を呼び出す

## きっかけ
とある案件の要件確認MTGをしているときに、
僕:「LambdaAを動かすために定期的にLambdaBを動かす構成」
?:「LambdaBを定期実行ではなく、条件を満たしていない時だけ動かしたい」
みたいな話があり、そういやLambdaから他のLambdaを動かす方法ってどうやるのか?という疑問から
※ そもそもLambdaから他のLambdaを呼び出すことに抵抗があり、できれば定期実行を軸に進めたいのは本音。フェイルセーフ的な位置づけでロジック自体は実装することになりそうとの考察。(基本は定期実行。なんらかの問題で条件を満たさない場合があればLambda呼び出し実行。) Best Practiceに沿った内容があればコメントください。。。

## 前提
– AWS: 社用アカウント利用

## Summary
– 呼び出す側Lambda関数で、AWS-SDKのインポート、AWS-SDK.Lambdaのインスタンス化、Lambdaインスタンスでinvoke関数の実行
– 呼び出す側Lambda関数のIAMポリシーに “lambda:InvokeFunction”を許可す

元記事を表示

herokuでrails + nodejsでnodeのバージョン指定する方法

# 前置き

railsアプリを構築し、webpacker用にnodejsを入れたアプリを作った際、
nodeのバージョンが12系なのが気になった。
現時点でのLTSは14系なので開発環境と差異が発生しており環境差異でハマるのが嫌なのでheroku側のnodeバージョンを上げる方法を追求してみた。

軽く検索するとよく引っかかるのが `heroku Buildpacks` を使うというもの。

## 公式ドキュメント
https://devcenter.heroku.com/ja/articles/buildpacks

だがしかし、上記を見てもバージョンを指定する具体的な方法自体は記載がない。

ググって見た感じ、 `package.json` にバージョンを追記するとバージョンが指定できるとある。

“`json
“engines”: {
“node”: “14.17.2”,
“npm”: “6.14.13”
}
“`

ただし、railsアプリでこれをやってpushしても

“`
remote: error app@1.0.0: Th

元記事を表示

セットで学ぶ!Firestoreのクエリとルール

# 背景
Firebaseを使うと、バックエンドを構築する手間が省けて楽ちん。
しかし楽ちんだからといって、大切なことを怠るとと大きな危険が待っている。
大切なデータが保存されているDBにアクセスするAPIがどこからでもコールできる、ということは非常に危ないこと。
そのセキュリティの穴を塞いでいるのが、Firestoreの「ルール」である。
楽をするからには、徹底的にセキュリティに穴を塞がなければならないが、このルールの記述が簡単ではない。
特に、こういうクエリを投げるときにはこういうルールを記載しなければならない、というようにクエリとルールが分かりやすく結びついているドキュメントがほとんどない。
Vue.js + Firebaseでの開発も非常に苦労したので、私が調べて学んだことをメモしておこうと思った。
万が一、誰かの役に立つことができればとても幸いである。

# データの取得
## ケース① 自分のユーザIDに紐づくデータを取得する
1つ目なので、少し詳細に記載する。
![image.png](https://qiita-image-store.s3.ap-northeast-1

元記事を表示

npm_config_arch, npm_config_target_arch, そして npm_config_* 環境変数について

`npm_config_` で始まる環境変数は `npm` コマンドによって解釈される。 `npm_config_foo=bar` とセットすると npm のコンフィグ `foo` を `bar` にセットしたのと同じ意味になる。 https://docs.npmjs.com/cli/v7/using-npm/config#environment-variables

この環境変数の名前は大文字でも小文字でもいいが、 npm は scripts を実行するとき名前が小文字バージョンの環境変数を独自にセットする。それは(ユーザーによってセットされた)名前が大文字の環境変数よりも優先されることに注意。ユーザーによって名前が小文字の環境変数がセットされたらそれが最優先される。

`npm_config_` で始まる環境変数は `npm` コマンド以外にも認識されることがある。中でも Node のネイティブ拡張を扱うライブラリ node-gyp と node-pre-gyp に関する環境変数は覚えておくといい。

https://github.com/nodejs/node-gyp/blob/

元記事を表示

M1 Mac で grpc-tools を npm install できない問題の回避策

**TL; DR:** 環境変数 `npm_config_target_arch=x64` をセットしてから `npm install` なり `yarn install` なりを実行するとよい。

この記事を書いた2021年7月14日の時点で、 grpc-tools (1.11.2) をインストールしようとすると node-pre-gyp がエラーを出してインストールに失敗する。

このエラーは node-pre-gyp が grpc-tools の arm64 向けコンパイル済みバイナリをダウンロードしようとして失敗することに起因する。 arm64 向けバイナリはまだ配布されていない[^1]。

エラーを回避するには環境変数 `npm_config_target_arch=x64` をセットしてから `npm install` や `yarn install` を実行する。これをセットすると node-pre-gyp が `–target_arch=x64` 引数を指定されたかのように振る舞い[^2][^3]、 x64 向けコンパイル済みバイナリをダウンロードするように

元記事を表示

【Node.js, TypeScript】LINE MessagingAPIで作った天気予報アプリをAWSのLambdaにデプロイしてみる!

先日、Node.jsとTypeScriptで天気予報アプリを作成しました。

https://qiita.com/Ryo9597/items/4c05b8b972ad7efc0c66

完成形としては以下の通りです。
![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/0af0bfce-b695-b341-4e90-aeefde544562.png)

この記事内では、`Glitch`でデプロイをしています。
まぁ無料なわけで色々問題があります。
・プロジェクトは、利用されていないときは5分でスリープ状態になる
・4000件/1hのリクエスト制限がある(Error: 429 too many requests)

ということで、AWSのLambdaを使ってデプロイすることにします。
それではアーキテクチャに関してみていきましょう。

## サーバーレスアーキテクチャとは
AWSにおけるサーバーレスとは、**「インスタンスベースの仮想サーバー(EC2など)を使わずにアプリケーション

元記事を表示

OTHERカテゴリの最新記事