Node.js関連のことを調べてみた

Node.js関連のことを調べてみた
目次

NestJSのルーティングでハマらないために:静的パスと動的パスの順序に気をつけよう

## はじめに
NestJS(express.js)のルーティングにおいて、静的パスと動的パスの定義順序がアプリケーションの動作に重大な影響を与えることがあります。この順序を理解して正しく設定することで、予期しないルーティングエラーを回避することが可能です。本記事では、NestJSにおけるルーティングの基本から、静的パスと動的パスの定義順序に関する具体的な問題点とその解決策までを紹介します。

## 1. NestJSのルーティングの基本
NestJSでは、コントローラとHTTPメソッドデコレータを使用してルーティングを定義します。`@Controller` デコレータはクラスをコントローラとして定義し、`@Get`、`@Post` などのHTTPメソッドデコレータが特定のルートに対応するメソッドを指定します。

### コード例
以下の例では、`/users` に関連するルーティングを設定しています。
“`typescript
import { Controller, Get } from ‘@nestjs/common’;

@Controller(‘users’

元記事を表示

インポート機能、エクスポート機能APIの作り方(Node.js、Springboot)

今回はインポート機能、エクスポート機能APIの作り方を記事にしました。

インポート機能とエクスポート機能を実装するAPIの作り方をステップバイステップで説明します。一般的には、CSVやExcel形式でデータをインポートしたりエクスポートしたりする機能がよく使われます。今回は、Node.jsのExpressとJavaのSpring Boot、データベースとしてMySQLを使った場合の例で解説します。

# 1. Node.js(Express)を使ったAPIの実装例
必要なライブラリのインストール
まず、必要なライブラリをインストールします。expressはサーバーを構築するために使用し、csv-parserはCSVファイルの読み込みに、json2csvはJSONデータをCSVに変換するために使います。

“`bash
npm install express csv-parser json2csv multer mysql2
express: APIサーバー
csv-parser: CSVファイルを読み込むためのライブラリ
json2csv: JSONデータをCSVに変換するための

元記事を表示

pnpmの “not found: node” エラーを解決する方法

### はじめに

pnpmを使用してプロジェクトの依存関係をインストールしようとした際に、以下のようなエラーに遭遇することがあります:

“`
ENOENT not found: node

pnpm: not found: node
“`

このエラーは、pnpmがNode.jsの実行ファイルを正しく認識できていないことを示しています。今回は、このエラーの原因と解決方法について詳しく説明します。

### エラーの原因

このエラーの主な原因は以下の点にあります:

1. Node.jsのパスがpnpmに正しく認識されていない
2. nvmを使用している環境での設定の不整合
3. pnpmの設定が適切でない

### 解決手順

以下の手順を順番に試すことで、エラーを解決できる可能性が高いです。

#### 1. Node.jsとpnpmのバージョン確認

まず、Node.jsとpnpmが正しくインストールされているか確認します。

“`bash
node –version
npm –version
pnpm –version
“`

#### 2. pnpmの設定

元記事を表示

Node.jsのunzipperで解凍したらファイルが少なかった件

## はじめに

初めてunzipperを使いました
unzipperの最も基本的な使い方ですが、初歩の初歩で躓いてしまいました
具体的にはZIPを解凍したら解凍先のディレクトリにあるはずのファイルがなかったという感じです
エラーが出ないので一瞬気付きにくいですけど同じ問題起きた人いますか?

## 問題のソース

“`js
fs.createReadStream(‘test.zip’)
.pipe(unzipper.Extract({ path: ‘output’ }));
“`

## 解決したソース

“`js
const directory = await unzipper.Open.file(‘test.zip’);
await directory.extract({ path: ‘output’ })
“`

## 再現

100個ファイルを作成してZIP化する

“`js
touch file_{1..100}.txt
zip test.zip file_*
“`

unzipperを使ってZIPを解凍する

“`js
fs.createRead

元記事を表示

LambdaからFargateへの切り替える際にNode.jsアプリのタスクスペックをどう決めたか?

最近、LambdaからFargateに移行して、Node.js(NestJS)アプリの動作を最適化するためにタスクスペック(CPUやメモリの割り当て)についていろいろ試行錯誤しました。この経験を踏まえて、最適な設定を見つけるまでの流れを共有します。

## Lambdaとの違い
最初はLambdaを使っていたんですが、リクエストごとに新しい環境が立ち上がり、リソースの競合がなくて快適でした。短い処理ならLambdaが効率的で、オートスケーリングも自動的に対応してくれていました。

でも、長時間稼働するバッチ処理や大量データの処理になると、Lambdaではコールドスタートやタイムアウト(30 s)が気になってきました。そこで、より柔軟なリソース管理ができるFargateに移行することに決めました。

## Fargateに移行してみて: タスクスペックの試行錯誤
Fargateの強みは、CPUやメモリなどのリソースを自分で細かく設定できるところですが、これが逆に難しくもあります。Node.jsはシングルスレッドで動くので、どのくらいのリソースが最適なのかを見極める必要がありました。

#

元記事を表示

NestJSでCloud Runのコンテナ自URLを正しく取得する方法

# はじめに
NestJS を使って Cloud Run 上にデプロイされたアプリケーション内で、自サービスの URL を取得する際に、req.protocol が http になってしまうことがあります。これは、リバースプロキシを介したリクエストで、内部的に http で処理されるためです。

Cloud Run では、外部リクエストは HTTPS で送信されますが、コンテナ内部に届く際には HTTP として認識される場合があります。この問題を解決するためには、Express の trust proxy 設定を行い、X-Forwarded-Proto ヘッダーを信頼することで正しいプロトコル(https)を取得する必要があります。

この記事では、NestJS での trust proxy 設定の方法と、自URLを正しく取得するための実装方法について解説します。

## NestJSでの解決方法

### trust proxy の設定
NestJS では、Express を使ったアプリケーションであれば、app.set(‘trust proxy’, true) を設定することで、リ

元記事を表示

(Node.js) @mapbox/tilebeltモジュールを理解する

# はじめに
node.jsのコードの中で@mapbox/tilebeltモジュールを使用する機会があったので、どのようなモジュールであるのか簡単にまとめたいと思います。

# @mapbox/tilebeltモジュールとは
Mapboxが提供しているJavaScriptモジュールで、地図タイルを扱うための便利な関数が含まれています。

モジュールの主な機能には以下のものがあります。

1.タイル計算:
緯度経度からXYZタイル座標へ変換したり、逆にタイル座標から地理的な境界ボックスに変換したりできます。

2.親子関係の取得:
該当タイルの親タイルを取得したり、タイルを分割して子タイルを生成することができ、地図のズームインやズームアウトの操作に役立ちます。

# tileToBBOX()の使用方法
モジュールの中の一つのメソッドであるtileToBBOX()の使用方法の使用方法について解説します。これは、タイル座標から地理的なバウンディングボックス(BBOX)を取得する関数です。タイルは通常、ズームレベルz、x座標、y座標で指定され、地図の特定の領域を表します。tileToBBOX関

元記事を表示

コーディングもするデザイナーが知っておきたい SVG 最適化(svgo v3 対応)

Docker Desktop と SVGO プラグインでしている SVG 最適化について、覚書を残しておきます。

## 設定ファイル(imagemin.js)
“`js:imagemin.js
const keepfolder = require(‘imagemin-keep-folder’);
const path = require(‘path’);
const crypto = require(‘crypto’);
const { JSDOM } = require(‘jsdom’);
const fs = require(‘fs’);

(async () => {
const imageminSvgo = (await import(‘imagemin-svgo’)).default;

// Imageminで最初の圧縮・最適化
await keepfolder([‘src/**/*.svg’], {
plugins: [
imageminSvgo({
// コード整形用プラグイン
// js2svg: {

元記事を表示

pnpmを使ってNode.jsのバージョン管理から開放される

## はじめに

### この記事の目的

1. プロジェクト毎に異なるバージョンのNode.jsを使えるようにする
2. プロジェクトメンバーが使うNode.jsとパッケージマネージャーのバージョンを統一する
3. バージョンの切り替えを自動化する

### 対象読者

1. Node.jsを使ってHTMLやCSSのコーディングをしている人
2. Node.jsのバージョン管理を煩わしいと感じている人、もしくはこれからバージョン管理を始めようとしている人

### 背景

昨今、Node.jsはフロントエンドの開発環境としてその地位を獲得しています。SassのコンパイルやTypeScriptのビルドだけでなく、様々な用途で使用されています。

また、フロントエンドの開発を取り巻く環境は変化が早く、Node.jsのバージョンアップもそれに合わせるかのように半年ごとにメジャーアップデートが行われています。そのため、複数プロジェクトに参画している場合、プロジェクト毎に異なるバージョンのNode.jsが使われることも多くあります。

異なるバージョンのNode.jsで開発することで、特定メ

元記事を表示

Node.jsでVOICEROIDをしゃべらせてみる

# 概要
WebフレームワークでVOICEROIDを操作してみたいな~とふと考え付いたので、いずれReactなどで動かすためにまずはNode.jsでVOICEROIDを操作できるかという技術検証です。実際にReactでも動くかはまだ試せていないのでいずれやります。

# Node.jsで動かす方法
といってもVOICEROID製品はほとんどC#で作られていることが多くNode.jsから直接制御するのは大変そうということがわかりました。ただ、調べるとどうやら[AssistantSeika](https://wiki.hgotoh.jp/documents/tools/assistantseika/assistantseika-000)というアプリケーションを使えば行けそうだということがわかりそのラッパーである[Node-Seika](https://github.com/nusu-github/node-seika)というものがあることを知ったのでこれを使ってみようと思います。

# 使うライブラリなど
大前提として、喋らせるVOICEROIDの正規ライセンス、AssistantSeik

元記事を表示

mysql接続時にER_NOT_SUPPORTED_AUTH_MODEのエラー

# 事象
node.js, expressで動くAPサーバと、mysqlが乗ったDBサーバがあり、
APサーバ側で以下のコードを書き、mysqlへ接続したい。

“`js
const express = require(‘express’);
const router = express.Router();

let todos = [];

/* GET home page. */
router.get(‘/’, function(req, res, next) {
res.render(‘index’, {
title: ‘ToDo App’,
todos: todos,
});
});

router.post(‘/’, function(req, res, next) {
connection.connect((err) => {
if (err) {
console.log(‘error connecting: ‘ + err.stack);
return
}
console.log(‘succ

元記事を表示

効率を向上させるための Web 開発エンジニア向けの 100 以上の無料リソース

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3861208/359d72a5-1170-c084-5a93-16b721d8e827.png)

ウェブエンジニアにとって、急速に進化するウェブ技術についていくことは非常に重要であり、同時に挑戦でもあります。ウェブ開発者として、常に学び、適応し続ける必要があります。以下は、著者が開発と学習の過程で出会った貴重なツールとリソースのリストであり、皆さんと共有します。

## JavaScriptライブラリ
– [jQuery](https://jquery.com/): 最も有名なJavaScriptライブラリ。
– [Backbone.js](https://backbonejs.org/): 複雑なウェブアプリケーションのためのMVP構造を提供します。
– [D3.js](https://d3js.org/): 最も人気のあるJavaScriptビジュアライゼーションライブラリの一つ。
– [React](https://reactjs.

元記事を表示

🐳 DockerとNext.jsの基本:node_modules問題解決ガイド(AI)

## 🎯 目的
このガイドは、DockerとNext.jsを使用する際に発生する「node_modules」フォルダの消失問題について説明し、その解決方法を詳細な解説付きで提供します。

## 📚 基本概念

### 🧱 Docker
仮想のコンピュータ(コンテナ)を作り、アプリケーションを動かすためのツールです。

### ⚛️ Next.js
ウェブサイトやアプリケーションを作るための人気のあるJavaScriptフレームワークです。

### 📁 node_modules
アプリケーションが正しく動作するために必要な部品(モジュール)が保存されているフォルダです。

## 🚨 問題:node_modulesが消えてしまう

### 症状
– Dockerを使ってNext.jsのアプリを起動すると、`node_modules`フォルダが消失します。
– アプリケーションが正常に動作しなくなります。

### 重要性
`node_modules`フォルダはアプリケーションの動作に不可欠です。このフォルダが消えると、アプリは必要な部品を見つけられなくなります。

## 🕵️ 原因:バイ

元記事を表示

#atcoder #プログラミング #Javascript # 本番環境自動判別方法等

**本内容を利用した場合の一切の責任を私は負いません。**

# 概要
初めてまともにやってみて、タイトルのものが欲しくなったんだけど、探しても見つからず、自作したもの。
(ローカルで大量のテストケースに耐えれるか確認するため、標準入力ではなく、1テストごとのファイルを大量に流し込みたい。
本番とローカルとでソースを分けたくない。)
既知だったり、別の方法があったりするかもだけど。
それと、他に気づいた点。

# 本番環境自動判別方法
全部かはわからないが、提出画面の下に下記がある。

![提出画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397476/421e9e4f-da76-2c90-372f-6530618648f8.png)

ということは、カレントにこのファイルがあれば本番ということになる。
(ローカルが異なるファイル名であることが前提。)
てことで下記で判別する。

“`Javascript
var isSubmit = false;

if (require(“fs”).exis

元記事を表示

Node.js と ws でシンプルな WebSocketサーバー: Bufferオブジェクトで受けとった文字列データを UTF-8 の文字列にする

## はじめに
Node.js で下記の ws を使い、でシンプルな WebSocketサーバーを使う時の話です。

過去にも、その内容の記事を書いていたのですが、今回は Bufferオブジェクトで受けとった文字列を扱う話に関わる、シンプルな内容です。

●ws – npm
 https://www.npmjs.com/package/ws

### 背景の補足
とあるハッカソンで、WebSocket を使った PC とスマホ・ガジェット等を連動させる通信処理を実装しようとした時に、特定の複数の文字列をキーに、複数の動作を行わせることをやろうとしました。

そのテスト実装をした時、「文字列を送信する側が Bufferオブジェクトでデータを送る形」で、「受信側では、文字列変換した内容を扱いたい」という状況があってやった内容です。

## 実装内容
以下が本題です
今回、以下では、WebSocketサーバーの機能がある受信側の実装(かなりシンプルなもの)を示します。

`npm i ws` でパッケージをインストールして、下記のプログラムを作り、nodeコマンドで動かします(接続は、例えば

元記事を表示

ejsを使うときに必須コード!

## 書こうと思った理由

EJS を使っているときに、`res.render()` ではなく `express.static()` でやっていたから、ほかのコードなどでなぜかダウンロードされる現象を少なくしたいから。

`res.render()`は、例えばこんな風に使います:

“`js
app.get(‘/hoge’, (req, res) => {
res.render(path.join(__dirname, ‘/src/hoge.ejs’)); // <--ここ }); ``` **これがポイント!** 1. **`res.render('テンプレート名')`** - `'hoge'` は、テンプレートファイルの名前です。EJS では、通常 `.ejs` という拡張子を持つテンプレートファイルを使用します。この場合だと `src/hoge.ejs` というファイルが読み込まれます。 2. **データを渡す** - テンプレートにデータを渡したい場合、第二引数にオブジェクトを渡すことができます。この例では、`{ title: 'hogehoge'

元記事を表示

プログラムにおける終了コードとは?その役割とNode.jsでの活用例

## はじめに

こんにちは。HRBrainでオウンドメディア・ランディングページの開発を担当している渡邉です。

先日、終了コードを真偽値と誤認したことが原因で、ハマりかけました。

終了コードは、プログラムが終了する際にOSへ返す数値であり、その値によってプログラムの実行結果を表しています。

この記事では、終了コードの役割と、Node.jsでの具体的な活用例を解説します。

## 終了コードを真偽値と混同してはいけない

プログラムの終了コードは `0` が成功、`0以外` がエラーや失敗を表します。

これは多くのプログラミング言語やOSで採用されている標準的な仕様です。

しかし、直感的には `0` はfalseや失敗を示し、`1` はtrueや成功を意味すると思いがちです。これが誤認の原因となります。

– 終了コード
– `0` → 成功
– `1` やそれ以外 → 失敗
– 真偽値(一般的な解釈)
– `0` → false
– `1` → true

## 終了コードの特徴と一般的な値

終了コードには、以下のような特徴があります。

1. 終了コー

元記事を表示

npm本体のバージョンアップデート方法

## npmのバージョンアップデート方法

npmのバージョンを最新に更新するには、Terminalで以下の手順を実施します。

### 1. 現在のnpmバージョンを確認する

“`sh
npm –version
“`

### 2. npmを最新バージョンに更新する

“`sh
npm install -g npm@latest
“`

### 3. 更新後、再度バージョンを確認して正しくアップデートされたか確認する

“`sh
npm –version
“`

## 注意点

– グローバルインストールには管理者権限が必要な場合があります。その場合は、コマンドの前に`sudo`を付けて実行してください。

– Node.jsのバージョンによっては、特定のnpmバージョンが推奨される場合があります。Node.jsをアップデートすることで、推奨されるnpmバージョンも自動的に更新されることがあります。

– npmの更新後、他のパッケージやプロジェクトに影響が出る可能性があるため、更新前にプロジェクトのバックアップを取ることをお勧めします。

元記事を表示

paiza.ioでnode.js その4

# 概要
paiza.ioでnode.js、やってみた。
練習問題やってみた。

# 練習問題
リストなタプルをソートせよ。

# サンプルコード

“`
process.stdin.resume();
process.stdin.setEncoding(‘utf8’);

var rowElements = [{“timestamp”:”1728082796491″},{“timestamp”:”1728083796491″,”name”:”ai”,”publish”:”ture”,”condition”:”good”,”comment”:”ok”},{“timestamp”:”1728083845078″,”name”:”aita”,”publish”:”1″,”condition”:”good”,”comment”:”ok”},{“timestamp”:”1728082865943″},{“timestamp”:”1728360810390″,”name”:”test”,”comment”:”iine”},{“timestamp”:”1728362175611″,”name”:

元記事を表示

Boltオープンソースコードベースへようこそ

> **Bolt**オープンソースコードベースへようこそ!このリポジトリには、StackBlitzの**WebContainer API**を利用した**AIによるソフトウェア開発ツール**の構築を始めるのに役立つ、bolt.newのコアコンポーネントを使用したシンプルなサンプルアプリが含まれています。

### BoltとWebContainer APIを使用して構築する理由

BoltとWebContainer APIを使用して構築することで、ユーザーが仮想マシンを必要とせず、ブラウザ上で直接フルスタックWebアプリを**プロンプト、実行、編集、デプロイ**できるブラウザベースのアプリケーションを作成できます。WebContainer APIを使用すると、AIがユーザーのブラウザタブ内の**Node.jsサーバー**、**ファイルシステム**、**パッケージマネージャー**、**開発ターミナル**に直接アクセスし、完全に制御できるアプリを構築できます。この強力な組み合わせにより、主要なJavaScriptライブラリとNodeパッケージをすぐに使用できる新しいクラスの開発ツールを作成

元記事を表示

OTHERカテゴリの最新記事