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

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

tsxでError [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol ‘c:’

# 本記事について
tsxでTypeScriptを実行しようとして出たエラーがデバッグできず、ググっても対処法が出てこなかったので、同様の症状を経験する方のために記事に残そうと思いました。

# 結論
表題のエラーが出たらNode.jsをアップデートすると直るケースがある。

# 症状

“`package.json
{
“name”: “***”,
“type”: “module”,
“scripts”: {
“dev”: “tsx src/index.local.ts”
},
“devDependencies”: {
},
“dependencies”: {
}
}
“`
からの
“`
npm run dev
“`
で出たエラー
“`

> dev
> tsx src/index.local.ts

node:internal/errors:496
ErrorCaptureStackTrace(err);
^

Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs wit

元記事を表示

フォローしているQiitaユーザが作成した記事を1日1回、スラックに通知してみた ~AWS100本ノック~ 13/100

# はじめに

Qiitaにはユーザのフォロー機能がありますが、フォローしている人が投稿した記事を確認するには、`フォロー中のユーザ`タブで記事を一覧表示して、当日の記事を確認するしか現状なさそうです 😥

まぁ、それでもいいっちゃいいんですが、せっかくなら日常で使っているコミュニケーションツールに通知してくれた方が良いなーと思い、自動で通知する機能を作ってみました!

![スクリーンショット 2024-11-05 153409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87924/9acf3762-1985-2c11-1796-051d53f8075f.png)

# 試してみる

では、さっそく試してみます。
Qiita APIを利用して情報を取得し、Slackに通知します。
※公式のQiita APIリファレンスは[こちら](https://qiita.com/api/v2/docs)

全体像としては以下になります。
![フォローしているQiitaユーザの投稿をスラックに通知.d

元記事を表示

discord bot (discord.js)を GCP 無料VM で常時実行

ローカルPCのnode.jsをつけっぱなしにするはイヤだったので、もともと維持しているGCPの無料VMで実行させることにしました。

## 無料VM
https://cloud.google.com/free?hl=ja
に詳しく載っています。

VMの構築方法の詳細は、ググると詳しく載っているのと、自分の過去記事にも少し触れていますので、省略しますが、要は、e2-microという小さなサーバをUS-WEST(オレゴン)で作ると無料って感じです。
あたりさわりのない「ubuntu」で作っています。
実は、ずっと18のままだったんですが、サポート切れたので、今日、20に上げました。

## nodejs インストール

nodesoource経由でインストールしてみます。
“`
$ sudo su
# apt update
# apt upgrade
# curl -fsSL https://deb.nodesource.com/setup_23.x -o nodesource_setup.sh
# chmod 777 nodesource_setup.sh
# ./nodesour

元記事を表示

discord bot 作成 (discord.js) 2024/11版

discordのボットを作ってみました。
記事の時期のよって、古い情報もあり動かないところもあったので、2024/11現在ってことで、実際に作ってみて、整理してみました。

## 使ったもの
* 自分のパソコン(Mac)のnode.js
* discord.js

## 必要な知識
* 多少のnode.js javascriptのスキル
* コピペ能力

## 作るBOT
問題がネタが思いつかないことなのですが、天気を教えてくれるボットにしました。
https://qiita.com/youtoy/items/932bc48b03ced5a45c71
をコードをそのまんま使わせていただきました。
ありがとうございます。
ついでに、「天気」以外のメッセージには「👍️」マークをリアクションするようにしてみました。

## discord bot 設定
https://discord.com/developers/applications
で、アプリ設定画面に行きます。
スクショがないです。
※操作中に、適宜「保存」してくださいね。
– – –
1. 右上の“[New Applica

元記事を表示

Lambda(Node.js)のDockerイメージをデプロイしてみた。(その3,EC2上でDocker上のLambdaを実行してデバック)

# はじめに
LambdaをDockerイメージでデプロイする方法を、調査する機会があったので自分の備忘用にメモ書きを残します。

今回は、Dockerを起動して動作確認をする所をメモ書きします。
実行環境は、前回からの続きです。

# イメージをビルドする

“`shell
cd
cd DeployProject
docker build -t deployproject:test1 .
“`
-t オプションで、「名前:タグ」を指定しながらビルドします。

前回、Dockerファイルに「COPYコマンド」など正常に動くか確認します。

# デバック用の端末用意
デプロイする前の動作確認は、Teratermの端末を3枚用意するとデバック作業が楽でした。

Teratermは、「File」→「Duplicate session」で同じ接続端末を増やせるので3枚に増やして、下記の用な配置でデバックしてました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281768/d2af27f

元記事を表示

Azure Web AppsでHonoを動かすメモ

Azure FunctionsでHonoを動かすテンプレは公式に書いてますがWeb Appsだと無いみたいでした。

https://hono.dev/docs/getting-started/azure-functions

あとWeb AppsじゃなくてStatic Web Appsにデプロイするネタはたまに見かけますが、PaaSサービスのWeb Appsにデプロイしたいなと思った次第です。

## Web Appsはコードデプロイで立てておく

コンテナ起動かコードデプロイかのどちらかがありますが、コードデプロイでNode.js 20LTSを選択します。

v22などは現状選択不可でした。

– リージョン: West US
– プラン: B1

## 修正箇所コピペ用

まずはNode.jsのテンプレートでアプリ作成

https://hono.dev/docs/getting-started/nodejs

“`bash
$ npm create hono@latest my-app
“`

Which template do you want to use?で `nod

元記事を表示

Azure Web AppsのGitHub Actions Yamlファイルをアップデートする

自分の記事だけど結局コピペできる内容が貼ってなくてしんどい。

https://qiita.com/n0bisuke/items/d59fe7a7b9cf1ab219b8

似たような記事何回も書いてそうだけど見当たらないという。。。

## Azure連携デフォルト

– Node.js v20LTSです。古い。。。23使いいたいせめて22

これがデフォで連携すると入ってくるymlファイルです。

“`yml
# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy
# More GitHub Actions for Azure: https://github.com/Azure/actions

name: Build and deploy Node.js app to Azure Web App – n0bisukeAPP

on:
push:
branches:
– main
workflow_dispatch:

jobs:
b

元記事を表示

JWTにおける認証のイメージを調べた

# 時系列でフロントとバックのやることは?

JWTは基本的にサーバー側で状態を持たないため、セッション管理がシンプルになり、負荷分散がしやすいメリットがあげられます。

ただし、セキュリティの観点からHTTPSで通信し、必要に応じてトークンのリフレッシュや失効管理を行うことが推奨されるらしいです。

## 1. ユーザーがログイン情報を入力する
フロントエンド: ユーザーがメールアドレスやパスワードなどの認証情報をログインフォームに入力し、サインインリクエストを送信します。

## 2. 認証リクエストをバックエンドに送信する
フロントエンド: 入力された情報をバックエンドに送信します。通常、HTTPSを使ってセキュアにAPIリクエストを行います。

バックエンド: リクエストを受け取り、送信された認証情報(メールアドレス、パスワードなど)を検証します。

## 3. ユーザー情報を認証する
バックエンド: データベースから該当するユーザー情報を検索し、パスワードなどを照合します。正しい情報であれば、JWTを生成します。

## 4. JWTを生成して返す
バックエンド: ユーザーが

元記事を表示

Prisma でモデル名を取得したい

## はじめに

Prisma Client で Model 名(文字列)を使いたい場面に遭遇した。
Prisma は `node_modules/.prisma/client/index.d.ts` に型定義が存在する

## Model 名を取得する

以下に記載するような `schema.prisma` が定義されているとする。

“`prisma:schema.prisma
model User {
id String @id
name String
}
“`

`npx prisma generate` 等何でも良いので `node_modules/.prisma/client/index.d.ts` を生成する。
下記のように記述すれば ModelName を取得できる。

“`ts
import { PrismaClient } from ‘@prisma/client’;

const prisma = new PrismaClient();

prisma.user.name;
// -> User
“`

全件欲しい場合は、以下のように記述す

元記事を表示

Node.js+Playwrightのセットアップ:LTSとCurrentに気をつけよう

## 要約
テスト自動化の学習として、Node.jsとPlaywrightを使ったテスト環境を構築した際、安定性重視のLTSバージョンの重要性を実感した失敗談をお伝えします。


## 初めに
この記事では、Playwrightのセットアップ方法とNode.jsのバージョンによるトラブルを経験した備忘録を紹介します。

Playwrightを試してみたい方や、Node.jsのバージョン管理に興味のある方の参考になれば幸いです。

## 作業環境

| OS | Node.js | npm | nvm |
|:-:|:-:|:-:|:-:|
| Windows10 | v20.15.1 | v10.8.2 | v1.1.12 |

:::note warn
OS, Node.js, npmは開発していたとき(2024年8月)のものです。nvm(nvm for windows)は後日実装しました。
:::

## 環境構築
### 1. ディレクトリの作成
任意の場所に新しいフォルダを作成します。

### 2. Node.jsのインストール
[公式サイト](https://n

元記事を表示

Nest.jsのアーキテクチャーと基本3概念「モジュール」「コントローラ」「サービス」

# Nest.jsとは
***Node.jsでTypeScriptを使った高速でWebアプリを作れるバックエンドフレームワーク***です。最近だと***TypeScriptだけで開発できるNest.jsとReactを使った開発***なども増えてきました。***Expressをベースに作られて***います。

# Nest.jsの特徴
– Expressの機能が使える
– テストフレームワークが用意されている
– OpenAPIなどが用意されている
– NestCLIを使ってテンプレートが作れる
– GraphQLと相性がいい

最近だとBFE開発も見かけるようになってきました。Nest.jsとGraphQLだと相性が抜群です。

https://zenn.dev/overflow_offers/articles/20220418-what-is-bff-architecture

# 公式ドキュメント

https://nestjs.com/

# 補足
2024年11月時点

# Nest.jsの導入
***Nest.jsを導入***します。
“`
npm i -g @nestj

元記事を表示

#Javascript #プログラミング # #atcoder や #paiza の #競技プログラミング で気づいた #nodejs の不可解な挙動

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

# 概要
作成中や提出前に、確認でローカル実行した時に気づいたこと。
consoleは非同期???
もしくは、node.jsは投機実行する???

# バージョン
– OS
OS 名: Microsoft Windows 10 Home
OS バージョン: 10.0.19045 N/A ビルド 19045
システムの種類: x64-based PC
– Visuatl Studio Code(以降、VSC)
バージョン: 1.38.1
– node.js
node-v20.9.0-win-x64.zip

# 詳細
下記のソースをVSC上で実行する。

“`Javascript
var a = [];

function sub() {
for (let index = 0; index < 10; index++) { a.push(new Array(10)); } //領域確保遅延かもしれないため、確

元記事を表示

Honoとは何か(初心者向き)

# 動画
この動画のレビューです。

# この記事を書いている段階
Expressはまだ実装していない。

# Hono
Honoは***炎のHono***でRubyみたいに“`日本人が作ったフレームワーク“`みたいです。
“`Node.js環境で使用できる超軽量のWebフレームワーク“`で、
“`TypeScriptやJavaScriptでの開発に適してます“`。

似たようなものだと
– Express
– Nest.js

などです。

Expressより軽量みたいです。

# 導入
“`
npm create hono@latest
“`
アプリ名を決めて“`cloudflare-workersを選択“`します。

導入後、開発ディレクトリに移動します。
“`
npm install
“`
で依存関係をインストールします。
その後wranglerをインストールします。
“`
npm install -g wrangler
“`
そしてwranglerを起動してサ

元記事を表示

nvm installに失敗するときの対処法

## 事象
nvmを利用して、nodeをinstallしようとすると、エラーが出てインストールに失敗する。

## 背景
プロジェクトの環境に合わせるため、nodeのバージョンを`v18.16.0`から`v16.17.1`にしたかった。

## 発生手順
1. まずは自分の使用環境の確認。
`node -v`
-> v18.16.0

2. 使いたいnodeのバージョンをインストールする。
`nvm install 16.17.1`

ここで、エラーが発生した。
“`
nvm install 16.17.1
Downloading and installing node v16.17.1…
Downloading https://nodejs.org/dist/v16.17.1/node-v16.17.1-darwin-arm64.tar.xz…
#######

元記事を表示

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

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

# 概要
この前書いた下記のatcoder版のpaiza版。
(Windows 10+node.js+Visual Studio Codeの場合。)
https://qiita.com/qiita21409102/items/c6fdfafdf76a8f71483a

# 本番環境自動判別方法
Visual Studio Code上でデバッグすると専用の環境変数が設定されるので、それで判別する。

“`Javascript
var isSubmit = true;

if (process.env[“VSCODE_PID”] != undefined) {
isSubmit = false;
}
“`

元記事を表示

[TS/JS]ESMとCJS

ESMだのCJSだので詰まることが多すぎるので、いい加減情報をまとめる。

## 概要
ざっくりいうと、「`modules`をどのように扱うか?」に係る2種の系統。
* `import`, `export`するほうがESM
* `require`, `modules.export`するほうがCJS

### ESM; ES Modules
`import`の方。

ECMA Script2015(ES6)で策定されたモジュール仕様。
V8などは当然こちらに準拠している。

[ECMAScript – Wikipedia](https://ja.wikipedia.org/wiki/ECMAScript)

### CJS; CommonJS
`require`のほう

立ち上げは2009なので、ESMより古参。
ServerSideJavascriptというコンセプトを出発点とするため、Node.jsではデフォルトである一方、ブラウザでは非対応となっている。

[CommonJS – Wikipedia](https://ja.wikipedia.org/wiki/CommonJS)

元記事を表示

node.js からのコマンドライン引数を綺麗に受け取る

“`js:runner.cjs
const parseArgs = () => {
// 一旦ポジショナルだけパースする
const { positionals } = util.parseArgs({
allowPositionals: true
});

// パースした値をさらにオプションをつけてパースする
return util.parseArgs({
args: positionals,
allowPositionals: true,
options: {
dir: {
type: “string”,
multiple: true
},
mode: {
type: “string”
},
help: {
type: “boolean”
}
}
});
};

const { values, positionals } = parseArgs();
console.log(val

元記事を表示

miseで開発環境とタスクランナーを統一的に管理する

# miseとは

miseは、開発環境のバージョン管理とタスクランナーの機能を統合したモダンなツールです。asdfの後継として開発され、Rustで実装されているため高速な動作が特徴です。元々、RTXという名前でしたがmiseに変更されました。direnvやasdfを使ったことがあれば、高速な動作性能が気に入るはずです。

Home | mise-en-place https://mise.jdx.dev/

## miseの特徴とメリット

miseには以下のような特徴があり、開発環境の管理を効率化できます。

– 統合的な環境管理機能
– Node.js、Python等の異なる言語を一元管理
– 環境変数(.env)の管理
– asdfとの互換性を維持
– 使いやすい設定システム
– TOMLフォーマットによる読みやすい設定
– 環境変数とツールのバージョンを同一ファイルで管理
– 強力なタスクランナー機能
– 依存関係を持つタスクの定義が可能
– シェルスクリプトとの連携が容易
– 高いパフォーマンス
– Rustで実装されたネイティブバイナリ

元記事を表示

Express.jsとnodemonとprismaでのバックエンド構築手順

## 前提条件
– Node.js (v14以上)
– npm

## Express.jsとnodemonでのapi作成

まず、新しいプロジェクトを作成し、必要なパッケージをインストールします:

“`bash
# プロジェクトディレクトリの作成と初期化
mkdir app-backend
cd app-backend
npm init -y
“`
package.jsonファイルのデバッグ”script”を以下の通りに修正する。
“`bash
“scripts”: {
“dev”: “nodemon server.js”
},
“`
server.jsを作成する。
“`bash
touch server.js
“`
sever.jsファイルは以下の通り。
“`javascript
const express = require(“express”);
const app = express();

const PORT = 5000;

app.listen(PORT, () => console.log(`server is running on port

元記事を表示

ChatGPT 4oと対話しながらwebサービスを個人開発する話 その③

これまでの記事でChatGPTと対話しながらWebサービスを開発する様子を掲載してきました。今回は、そこで開発したWebサービスに関する記事を紹介します。

開発したwebサービスは「みんなのナビ」というマニュアルを作成し、共有するサービスになります。

https://manualshare.net

↓以前の記事

https://qiita.com/travelclass0606/items/fceb85872620a418e8ab

https://qiita.com/travelclass0606/items/c38d042520e134ddcd57

# きっかけ
妻の実家に行った際、義母が大阪万博でブース鑑賞の申請をWebで行うのにとても苦労している様子を見て、誰かがわかりやすいマニュアルを作成し、共有できるサービスがあれば助かると感じた。

# ベース作り
まずは、ベースとなる部分をChatGPTに作成してもらいました。個人開発では、初期設定をChatGPTにさくっと作成してもらうことで、効率よく進められるのでおすすめです。以下のプロンプトをChatGPTに入力しました

元記事を表示

OTHERカテゴリの最新記事