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

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

BunアプリをPM2で動かしてデーモン化する

実行しているプログラムを、ユーザーがログアウトしたり、シェルセッションを閉じてもプロセスを続行したいとか、アプリケーションがクラッシュしても自動的に再起動したいなどという需要は結構あります。

そんな場合に Node.js で良く使われるのは、デーモン・プロセス・マネージャーPM2 です。

https://pm2.keymetrics.io/

https://github.com/Unitech/pm2

PM2は、複数のプロセスを一覧管理し、その log や error log などをリアルタイムに監視もできるなどの豊富な機能を持つ優れたツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7103/ece2393d-4a13-5629-cdcf-f8cb31a4f1a1.png)

# PM2 に Bun アプリを登録する

さて、今回はその PM2 に Bun アプリを登録しようという企画になります。

例えば先日書いた「[BunでWebSocketのデータ配信サーバ

元記事を表示

socket.ioを型安全に使えるライブラリを考えている

自分のためにつくっているが、まだいろいろ考えないといけないことがある。

ひとまず、どういうものなのかをここに記す。

まず、serverが受信、clientが送信とする。
基本的なsocket.ioのコードだと、client側は以下になる。

“`ts
const socket = io(“http://localhost:3000”);
socket.emit(“eventName”, data);

“`

emit時に、必ず存在するeventに、正しい型のdataを送りたい。
一応、socketの初期化時にname spaceごとに型を与えて推測するようにできる。

[https://socket.io/docs/v4/typescript/](https://socket.io/docs/v4/typescript/)

個人的には、trpcやts-restのように、自動生成される型安全な送信用のクライアントがほしい、と考えた。

サーバー側の実装を考える。

“`ts
export type ServerAppRoute = {
data:

元記事を表示

上腕二頭筋とサーボモーターが奏でる至高のプロテインシェイク

こんにちは、普段デザイナーをしている**ウエハラ シンペイ**です。

前回開発したChatGPTによるヘルシーレシピBotで、
食事改善に取り組めたのですが、目指すべきモテボディにはそれだけでは足りませんでした。

https://qiita.com/PEI__/items/2418a985f9b2539f26cf

### そう、チカラ is パワー「筋肉」ですね。

![barbell-1839086_1280.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618353/f8e740fa-d3b5-efa3-4772-2da02ad59a24.jpeg)

知識先行型ダイエッターの私が調べた限り、筋肉は1日のエネルギー代謝量が最も多いとされていて、筋肉をつけるほど太りにくい体になるらしいです。なので今回はマッスルボディを生み出すアプリケーションを作っていきます。

# プロテインはしっかり混ざってないとマズい
筋肉愛好家からプロテイン飲んどきゃなんとかなる勢まで、全員が悩んでいるプロテインの

元記事を表示

audio/x-mulaw形式の音声をWavで保存する

Twilioの音声データは`audio/x-mulaw`形式、8000Hz, 8bit, 1チャンネルの固有の型を持っています。

特に`x-mulaw`形式がわからなく、死ぬほどハマったので共有します。

# 結論
`x-mulaw`形式の方法があるのでそれに従います。
“`jsx
const WaveFile = require(‘wavefile’).WaveFile;

// Base64エンコードされたオーディオデータをデコード
let decodedData = Buffer.from(base64String, ‘base64’);

let wav = new WaveFile();
// 8ではなく、”8m”
wav.fromScratch(1, 8000, ‘8m’, decodedData);

// μ-law形式としてWAVファイルを保存
wav.toMuLaw();
fs.writeFileSync(‘output.wav’, wav.toBuffer());
“`

自らWav Headerを作成する場合
元記事を表示

BunとNodeを同じjsコードで自前ベンチしたらBunの圧勝だった

ここのところ Bun の記事を毎日書いてるのだけど、そういえば、速い凄いといいながら、まだ自前でベンチも取っていなかったなと反省して、軽く試してみた。

結果は、まぁBunの圧勝でした。

環境
————————————-
クラウド: Azure VM (これはオンプレでも何でも良い)
OS: Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-1050-azure x86_64)
Bun: v1.0.14 ( https://bun.sh/blog )
Node.js: v20.9.0

もちろん、これでなければいけないという事はありません。

コードはこれ。
————————————-

郵便局の郵便番号データ 18M のc sv(124,332行) を for で回しながら行数カウントするだけのスクリプトです。
“`javascript:read-zip-from-csv.js
console.time(‘csv read’); // 計測開始
const fs

元記事を表示

Azure Static Web Apps に Next.js ver.14 をデプロイする

## やりたいこと
`Next.js ver.14.0.3` で作成した静的なWebアプリを `Azure Static Web Apps` にデプロイしたい。基本的には、ドキュメント通りやれば良く、GitHub Actions を通じてデプロイする流れ。エラーが発生したので、メモ残し。

> [静的にレンダリングされた Next.js の Web サイトを Azure Static Web Apps にデプロイする](https://learn.microsoft.com/ja-jp/azure/static-web-apps/deploy-nextjs-static-export?tabs=github-actions)

## エラー発生
GitHub Actions で build する際に、node のバージョンが古いと怒られてしまう。何も指定しないと node ver.16系が選ばれてしまうようだ。

Next.js 14系は、`Node.js 18.17+` が必要なので([Next.js > Installation](https://nextjs.org/docs/g

元記事を表示

Node.js, Express, Socket.io 使った簡易チャットの作成

Node.js, Express, Socket.io(双方向通信) 使って簡易チャットを作ってみる
前に作った WebSocket のやつでフロント、バック分かれるのやだなと思い Express 使ってます
あと Socket.io も使ってみたかったのでお試しでやってみました

前に作ったやつはこちら...

https://qiita.com/sueasen/items/c839f2c3d864874876c3

見た目は某〇INE風、実行した環境とかは以下です

– Windwos11
– Node.js v18.17.1
– express v4.18.2
– socket.io v4.7.2
– nodemon v3.0.1

# プロジェクトフォルダ作成・移動
“`powershell
mkdir chat
cd chat
“`

# node 初期化
“`powershell
npm init -y
“`

# express, socket.io インストール
“`powershell
npm i socket.io express
“`

# nodem

元記事を表示

【Express】passport-localが動かない

# 環境

* Dockerコンテナ内で作業
* Node.js 18.15.0
* express 4.18.2
* passport 0.6.0
* passport-local 1.0.0(たぶん)
* express-session 1.17.3
* ビューエンジンにはpugを使用

# やりたかったこと

* ログインに関する処理は`routes/login.js`に書き、
`app.js`に書く内容は最低限にしたい。

* `/login`にGETでアクセスするとログインページが表示され、
そこにあるフォームにユーザー名とパスワードを入力すると、
`/login/auth`(authって何?)にPOSTリクエストが送られる

* `/login/auth`にPOSTでアクセスすると、passportによってログインができる

…のですが、色々なサイトの見様見真似でコードを書いていたら、
ログインページではログインができているのに、**それ以外のページだとログインできていない**現象が発生しました。

# やらかしたときのコード

もともとは以下のようなコードになって

元記事を表示

Node.jsのrequire.mainについて

# require.main
require.moduleは、モジュールオブジェクトで、Node.jsの起動時にロードされたエントリースクリプト表す。

# 例
Node実行時のディレクトリが /abusolute/path/to で、app.jsを実行する場合。

“`entry.js
console.log(require.main);
“`

Node.jsでapp.jsを実行
“`
node entry.js
“`
コンソールへの出力
“`
Module {
id: ‘.’,
path: ‘/absolute/path/to’,
exports: {},
filename: ‘/absolute/path/to/entry.js’,
loaded: false,
children: [],
paths:
[ ‘/absolute/path/to/node_modules’,
‘/absolute/path/node_modules’,
‘/absolute/node_modules’,
‘/node_mo

元記事を表示

Expressより18倍速いというElysiaJS、Bun圧倒的?

Node.js の Webフレームワークと言えば Express ですが、それより18倍速い、という Bun の Web フレームワーク Elysia(エリシア) を見ていこうかなと思う今日この頃です。

さて今回は、Elysia の Quick Start 周辺を、少し脱線しつつうんちくも差し込みながら眺めようと思います。もし説明が回りくどいと思われる方は、先に本家の [Quick Start ( https://elysiajs.com/quick-start.html )](https://elysiajs.com/quick-start.html) へどうぞ^_^;

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7103/7b1f40eb-331f-c4e9-bde9-9409a08df6b9.png)

それにしても、Express の18倍とは凄いですね。まぁ、ベンチは実際とは違うものですけど、このチャートを見ると、上位の3つが圧倒的です。そしてどれも Bun なのですよ

元記事を表示

JavaScriptでNextCloudからファイルをダウンロードする方法

“`typescript
import fetch from ‘node-fetch’;
import * as fs from ‘fs’;

const nextCloudUrl = ‘http://localhost:8081’;
const username = ‘username’;
const password = ‘******’;
const filePath = ‘/Readme.md’;

const download = async () => {
const url = `${nextCloudUrl}/remote.php/dav/files/${username}${filePath}`;
const response = await fetch(url, {
headers: {
‘Authorization’: ‘Basic ‘ + Buffer.from(username + ‘:’ + password).toString(‘base64’)
}
});

if (!response.ok) {
t

元記事を表示

ゴミ捨てをする人を決めましょう。

## 1. 家事を1人でやらなきゃいけない専業主婦の年収は本来1400万円と言われていますが
家事といえばどんなことがあるのでしょうか。

これだけでも大変そうですね。
テクノロジーの進歩とともに家事に関する商品はかなり進化しているようにも思います。
洗濯機やエアコンなどは遠隔操作ができるようになりました。
ルンバは自動で部屋をスキャニングして掃除をしてくれます。

**しかし**

風呂掃除、トイレ掃除、ごみ捨てなど、ボタン1つでは解決できないようなことも多くあります。
そんな中で今回はゴミ捨てというところにフォーカスしました。

## 2. ゴミ袋はどれくらい溜まったら出しますか
毎週回収される曜日が決まっていて、その日にとりあえず袋を縛って出すというなら、それは大正解だと思います。
しかし24時間出し放題のところも増えてき

元記事を表示

Node.jsのCJSとESM の挙動の違い

# はじめに
Node.jsを久しぶりに触ってCJSとESMでの挙動の違いに少し苦戦してしまったのでその違いをまとめようと思って書きました。

## Node.jsのバージョンの意味
Node.jsの偶数は長期サポートが保証されているもの
奇数は新しい機能を試すためのもの
– Current
– Active LTS
– MAINTENANCE

## CJSとESMの挙動の違い
– __filename, __dirnameへの対応
– require, module.exports
– require JSONで自動でパースされない

“`js
__filename
__dirname
“`
この書き方はCJSでは対応しているけど、ESMでは対応していない
ESMでパスを扱うにはこのようにする
“`js
import { fileURLToPath } from ‘url’;
import { dirname } from ‘path’;

const __filename = fileURLToPath(import.meta.url);
const __dirname =

元記事を表示

BunでMongoDB/mongooseを使う

一昨日、Bunのネイティブ実装であるSQLiteを試してみて動いたのに気をよくして今日はMongoDBをやってみました。

Node.jsでお馴染みの MongoDB 用のフレームワークmongooseを使ってスキーマを作り接続します。

とりあえず、Bunサイトのサンプルを少し補い試しただけなので軽く記録を残しておきます。

Bun>MongoDB

https://bun.sh/guides/ecosystem/mongoose

“`sh
# mongoose をインストールする
mkdir mongoose
cd mongoose
bun init
bun add mongoose
“`
“`sh
# スキーマ用スクリプトを書く
vi schema.ts
“`

“`js: schema.ts スキーマ用スクリプト
import * as mongoose from ‘mongoose’;

const animalSchema = new mongoose.Schema(
{
name: {type: String, required: true},

元記事を表示

Node.jsトラブルシューティング:開発者が直面する10の一般的なエラーとその解決策

# はじめに
こんにちは!今回はNode.jsを使用している時に遭遇する可能性のある一般的なエラーとその解決策について説明します。
通勤中など空いてる時間に読んでいただけると嬉しいです。

## Node.jsとは
Node.jsは、JavaScriptを使用してサーバーサイドのアプリケーションを構築するためのものです。Node.jsは、npmと呼ばれるパッケージマネージャーとともに使用されることが多いです。npmは、Node.jsのパッケージを管理するためのツールです。Node.jsとnpmを使用すると、JavaScriptを使用してWebサーバーを構築したり、コマンドラインツールを作成したり、デスクトップアプリケーションを構築したりすることができます。

# 🤔 Node.jsトラブルシューティング:開発者が直面する10の一般的なエラーとその解決策

1. 📦 **モジュールが見つからない** (“MODULE_NOT_FOUND”)
– プログラムが必要とするモジュールが見つからない場合にこのエラーが出ます。
– 🛠️ **対処法**: モジュール名を確認し、`npm

元記事を表示

簡易的なwebサーバーを作ろう(node http-server axios)

## 前回の続き

前回、Rubyにてバックエンドサーバを立ち上げる記事を投稿しました。
[Rubyのサーバー構築(WEBrickってなんぞ?)](https://qiita.com/hirapg_1123/items/4b78e376e042b51d3938)
今回はフロント側(webサーバー)を簡易的ですがjavascriptで作成していきます。

## そもそもwebサーバーって?
Webサーバーとは、パソコンやスマートフォンなどの端末からHTTP/HTTPSで送られたリクエストに対してHTML、CSS、JavaScriptなどの情報を返す役割を持ったソフトウェアのことを指します。
一般的に、Webサーバーへ接続するためにはブラウザを使用します。

### webサーバーの役割
要は、見る側の要素をブラウザへ返すのを担当するサーバーになります。(ざっくり言うと)

## サーバーを作る前にweb3層構造の話
### web3層構造とは
今回作成する「WEBサーバー」に加えて、前回作成したRubyでの「バックエンドサーバー」、
データを保管する「DBサーバー」の三つをまとめたも

元記事を表示

Bun のオンザフライinstallと、キャッシュ。

Qiita の Advent Calendar 2023 にこの可愛いアイコンでお馴染みの Bun で何か書こうと決めたのだけど、今回は使ってみて意外に便利かなと思ったので Bun>Auto-install あたりをやってみようと思います。

Node.js/npm で、パッケージモジュールがディスク内のあちこちに分散し、無数に同じモジュールを重複して落としまくり、将来のひっ迫を心配しながら管理したり、挙句には、どの階層の node_modules を参照してるのかもわからなくなったりするのは、正直気持ち悪いですよね。

でもまぁ、Node.js が好きなので、やむを得ず我慢してたのですが、Bun を使って頭を切り替えると、そのあたりはすっきりしてかつ高速になり気持ち良いかも?と思う今日この頃です。

#### 注意
Bun はまだ20

元記事を表示

Ubuntu22.04上でTypeScriptの環境構築

## Node.jsをインストール
公式から直接インストールすることもできますが、一般的にはバージョン管理ツールを使用することが推奨されているので、ここでは代表的なバージョン管理ツールであるnvmを使ってインストールします。

### nvmをインストール
[nvmの公式](https://github.com/nvm-sh/nvm#installing-and-updating)に従ってコマンドを打っていきます。環境に合わせて以下のどちらかを実行します。

“`
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
“`
“`
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
“`

以下は実行結果の最後のほうの抜粋です。

“`
=> Appending nvm source string to /home/test/.bashrc
=> Appending

元記事を表示

Node.js と GridDB を使用して Unity ゲームデータを保存する

## はじめに

この投稿では、**Feed The Animals** というシンプルなゲームを作ります。このゲームでは、バックエンドサーバーとして Node.js を、ストレージとして GridDB データベースを使用します。

## プロジェクトの実行

GitHub リポジトリからプロジェクトの[ソースコード][1]をクローンします。

“`sh
git clone https://github.com/junwatu/unity-node.js-griddb.git
“`

ディレクトリをプロジェクトのソースコードに変更します。

“`sh
cd unity-node.js-griddb
“`

ゲームサーバー用に Node.js の依存関係をインストールします。

“`sh
cd app\server
npm install
“`

### ゲームサーバー

ゲームを起動する前に、まずゲームサーバーを起動してください。プロジェクトのソースコードから `app\server` フォルダに移動し、ターミナルで以下のコマンドを実行してください。

“`sh
npm

元記事を表示

NestJS から MySQL に接続する

# はじめに
この記事では、NestJS から MySQL への接続手順について記載します。

# 開発環境
開発環境は以下の通りです。

– Windows11
– VSCode
– Node.js 20.5.0
– NestJS 10.0.0
– TypeScript 5.1.3
– MySQL 8.0.33
– MySQL2 3.6.3
– TypeORM 0.3.17

# パッケージのインストール
MySQL への接続に必要なパッケージをインストールします。

“`
npm install –save @nestjs/typeorm typeorm mysql2
“`

“`
npm install –save-dev @types/node
“`

# “`TypeOrmModule“` のインポート
次にルートのモジュールである “`AppModule“` に “`TypeOrmModule“` をインポートします。
“`forRoot()“` の引数に MySQL への接続情報を記載します。

“`app.module.ts
import

元記事を表示

OTHERカテゴリの最新記事