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

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

ユーザー新規登録処理を書いてみた(zod , node.js , mysql ) [備忘録]

## zod でのvalidation check

[前提]
next.jsでツイッターlikeなmusicpostアプリケーションを作成している。
今回tsでログインフォーム、新規登録フォームの処理を書いている。
色々苦労したのでまとめる。
tsのライブラリーであるzod , dbはmysqlを用いてユーザーの入力のチェック、新規登録を行う。mysqlの操作を少しでも覚えたいのでORMなどは使わない。


先に、完成版
以下からコードについて詳しくみていく。

“`typescript
import { NextRequest } from “next/server”;
import { NextResponse } from “next/server”;
import { formSchema } from ‘../../../validations/schema’;
import { ZodError } from “zod”;
import bcrypt from ‘bcrypt’;
import { db } from ‘../../../lib/db’;

e

元記事を表示

New Relic の Synthetic Monitoring (Scripted API) を使って RSS の情報を収集

 New Relic の Synthetic Monitoring の一つであるScripted APIを使用して RSS で公開されている情報を New Relic に収集する方法を紹介します。利用している SaaS の障害情報を New Relic にまとめておくことができるので増え続ける SaaS の業務アプリの状態をまとめて管理するといった活用方法が考えられます。

# 今回のポイント
この記事で紹介しているポイントは、次の2つです。
1. **Scripted API の使い方がわかる**
スクリプトの作成方法や参考になるサンプルの情報を紹介します。
2. **実行したスクリプトの結果を New Relic に保存する方法がわかる**
スクリプトの実行結果を New Relic のデータベースに保存して、NRQL でそのデータを確認する方法を紹介します。
:::note info
最新のアップデートの詳細はこちら
[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update “Ne

元記事を表示

何もしていないのに CI が壊れた

ある日、Dependabot が作成したライブラリアップデートの PR がコケていました。
コケていたのは VRT (Visual Regression Test) 、そしてその時私は別のプロジェクトを触っていました。

「まあライブラリのアップデートで見た目が崩れる事もあるよね、見た目となるとサクッと修正出来ない可能性が高いし一旦置いておくか。」

としばらく放置していました。

数か月後
CI がコケていたプロジェクトを触る機会がやってきました。

「そういえば、CI コケていたんだったなー、原因はなんだろな・・・ん??見た目が変わったことでコケているわけではないぞ、、、しかもローカルだと通るんだけど!??」

何もしていないのに GitHub Actions の CI が壊れた!

この記事で扱っている CI がコケた理由は私が扱っている環境等に依存するものでおそらくあまり遭遇しない物だと思います・・・つまり完全に誰得記事となっております。
なのでこの記事では問題の調査方法に焦点を当てて書いてみようと思います。
原因と解決方法だけ知りたい人(そんな人いない気がするけど)

元記事を表示

WSL2でAWSを使うための環境構築(Node/Python)

## 目次

– VSCodeのインストール
– WSL2(Ubuntu)の構築
– node.js環境構築
– python環境構築
– その他開発環境構築
– aws関係

## VSCodeのインストール

– Windows環境で行う
– インストール方法は省略
– WSLでの利用に備えて最低限以下のExtensionを入れる
[Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack)

## WSL2(Ubuntu)の構築

### 参考記事
– 下記の記事が大変分かりやすいためそちらを参照
[WSL2 のインストールとアンインストール](https://qiita.com/zakoken/items/61141df6aeae9e3f8e36)

– 過去にUbuntu環境を作っていたがそのパスワードがわからなくなった場合
[wsl でパスワードを忘れてしまった際の対処](https://qiita.

元記事を表示

(Node.js) winstonモジュール、winston-daily-rotate-fileモジュールを理解する

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

# winstonモジュールとは
Node.jsでよく使われるロギングライブラリで、アプリケーション内のログを効率的かつ柔軟に管理するためのツールです。アプリケーションの状態を追跡したり、エラーメッセージを記録したり、パフォーマンスをモニタリングするために使用されます。

## winston の主な特徴
– 複数のトランスポートをサポート:ログをファイル、コンソール、HTTP、あるいはリモートサーバーなど様々な場所に出力できます。
– ログレベルの設定:ログの重要度に応じて、出力するメッセージをフィルタリングできます(例:info, warn, error)。
– カスタマイズ可能なフォーマット:ログの出力フォーマットを自由に設定でき、タイムスタンプやカラーリングなどのカスタマイズも可能です。
– 非同期での動作:ロギングが非同期で行われるため、パフォーマンスに負荷をか

元記事を表示

Node.js ハンズオン 1 〜 3章まとめ

随分前に読んだ本ですが、再入門しようと思って読み直しています。
その内容を投稿しようと思っています。
自分の理解が浅いところだけまとめていますので、網羅的ではないですが備忘録として記事にしました!

# 第1章 イントロダクション
## クラス継承と `prototype` について
JavaScriptには、クラス継承を実現する仕組みとして `prototype` があります。各クラスには class.prototype.method という形でメソッドを追加することができ、オブジェクトがそのクラスのインスタンスかどうかを instanceof 演算子で検証できます。

また、`prototype` を使用することで、既存のクラスにメソッドやプロパティを動的に追加することが可能です。これは、後から機能を拡張したり、柔軟にクラスの振る舞いを変えたい場合に非常に有用です。

– `prototype` チェーン
prototype チェーンを利用すると、あるオブジェクトが継承している元のクラスの prototype に遡ることができます。例えば、以下のように prototype チェーン

元記事を表示

10月なので言語のサ終を確認しましょう

そろそろ10月.
iPhoneが出るような季節には,言語のバージョンも確認するのをルーティンにしたいですね….
サ終している環境でリリースや構築して面倒なことにならないために….

よく使う3種の言語について個人的にまとめておきます.

## Python

2024年10月のイベント

* 3.8 系が end-of-life(サポート終了)
* 3.13 系が prerelease

3.12 は9月末までは bugfix だったので,3.11 あたりへの乗り換えが妥当かなぁ….

https://devguide.python.org/versions/

|version|status|firstRelease|endOfLife|
|:–|:–|:–|:–|
|3.13|prerelease|**2024/10/01**|2029/10|
|3.12|bugfix|2023/10/02|2028/10|
|3.11|security|2022/10/24|2027/10|
|3.10|security|2021/10/04|2026/10|
|3.9|security

元記事を表示

Gemini API ― File Upload/画像認識

# 概要
(日記)前回

https://qiita.com/shokkaa/items/a74bb2f9a3e843430530

の続き。Geminiに画像の説明などを求める。

# 環境
– Ubuntu 24.04
– Node.js v22.4.1

# Geminiに画像ファイルをアップロード
画像などのファイルをGeminiにアップロードする。
“`js:src/fileUpload.ts
import { FileMetadata, GoogleAIFileManager } from “@google/generative-ai/server”
async function main() {
const file = process.argv[2]
const fileManager = new GoogleAIFileManager(process.env.GOOGLE_API_KEY ?? “”)
const metaData: FileMetadata = { mimeType: “image/jpeg”, displayName: `

元記事を表示

(Node.js) hh-mm-ssモジュールを理解する

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

# hh-mm-ssモジュールとは
時間の表現を管理するためのシンプルなライブラリです。
toMs, toS は、時間をそれぞれミリ秒、秒に変換する関数です。
fromMs, fromS は、ミリ秒や秒から「時間:分:秒」形式に変換します。

# サンプルコード
“`javascript:hh-mm-ss.js
const TimeFormat = require(“hh-mm-ss”);

console.log(TimeFormat.toMs(“00:01”));
console.log(TimeFormat.toS(“02:00”));

console.log(TimeFormat.fromMs(3000));
console.log(TimeFormat.fromS(180));
console.log(TimeFormat.fromS(1800));
console.log(TimeFormat.fromS(180

元記事を表示

(Node.js) prettysizeモジュールを理解する

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

# prettysizeモジュールとは
データのバイト数を人間が読みやすい形式に変換するための Node.js ライブラリです。ファイルサイズやデータの大きさを表示する際に、より直感的な形式(例えば KB、MB、GB など)で表現することができます。

# サンプルコード

“`javascript:prettysize.js
const prettysize = require(“prettysize”);

const result1 = prettysize(1024);
const result2 = prettysize(1024 * 1024);
const result3 = prettysize(123456789);
const result4 = prettysize(10000000000);

console.log(result1);
console.log(result2);
console.lo

元記事を表示

(Node.js) better-queueモジュールを理解する

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

# better-queueモジュールとは
Node.js環境で使用されるジョブ(タスク)キューを提供するためのモジュールです。主に、複数の非同期タスクを効率的に処理し、同時に実行されるタスク数を制御したい場合に便利です。シンプルかつ柔軟な設計で、並列処理、再試行、失敗時の処理、タスクの永続化などの機能をサポートします。

# サンプルコード
“`javascript:better-queue.js
const Queue = require(“better-queue”);

// キューの処理
const queue = new Queue((task, cb) => {
console.log(`Processing task: ${task.name}`);

// 非同期処理
setTimeout(() => {
if (task.name === “Task 2”) {
con

元記事を表示

(Node.js) cli-spinnerモジュールを理解する

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

# cli-spinnerとは
Node.js環境で使用されるライブラリで、コマンドラインアプリケーション上でスピナー(アニメーションのようなもの)を表示するために使用されます。スピナーがあることで、何も実行されていないわけではなく、処理中なんだなということが一目で分かり便利です。

# サンプルコード
“`javascript:cli-spinner.js
const Spinner = require(“cli-spinner”).Spinner;
Spinner.setDefaultSpinnerString(1);
// Spinner.setDefaultSpinnerString(“|/-\\”);

const productionSpinner = new Spinner();
productionSpinner.setSpinnerTitle(“Test Spinner..”);
productionSp

元記事を表示

LINE Botで医薬品を瞬時に識別! 禁忌情報や出荷状況も一目でわかる新システムのプロトタイプ

皆さんこんにちは!おもぷーです。

今回の記事は、LINE Botに医薬品の写真を送信すると、自動で薬の名前や詳細情報を返信してくれて、さらに**禁忌情報や限定出荷の有無**なども一緒に確認できるという、痒いところに手が届くプロトタイプになってます。

**Teachable Machine**、**LINE Bot**、**Google Apps Script (GAS)** を連携させたプロトタイプになります。

## 実際の動作動画
https://x.com/331824miyamoto/status/1838236234248065079

## なぜこのプロトタイプを作ったのか
現在の薬局業界では**医薬品供給不足**が大きな課題となっています。特に、入荷できない薬が増えており、どの薬が通常通り入荷でき、どの薬が入荷困難なのかを常に確認しなければなりません。**この確認作業がとにかくめんどくさい**。業務効率の低下や患者対応の遅れにもつながっています。

**調剤事務(受付)の負担も爆増しています**

https://www

DockerでNode.jsを使ってVue.js勉強環境を作って公式チュートリアルをやってみる

# はじめに
普段はバックエンドでPHPを使って仕事をしています。CakePHP歴1年、Laravel歴1ヶ月ほど。仕事ではほんの少しのJavaScript、JQueryをメンテナンスする、というほどのJavaScript歴です。

会社のとあるプロジェクトのバックエンド側で、VueでやるのかReactでやるのか、派閥が軽く分かれて争いが始まりそう。私はReactもVueも全くわからないですが、それぞれがどんなものか触っていこうと思います。

最小限のDockerfile、docker-compose.yamlでNode.jsを使える環境を作り、Vue.jsを公式チュートリアルに沿って学習するまでの流れです。

MacでVSCodeを使っています。

# Vue.jsを学ぶ環境の選択

https://zenn.dev/comm_vue_nuxt/articles/ways-of-vuejs-setup-app

こちらの記事にもいろいろな環境が紹介されていますが、とにかくシンプルにいきたい。調べた結果、DockerでNode.jsを使うのが一番簡単にできる気がしたので、あまり他のやり

Gemini API ― チャット

# 概要
(日記)前回

https://qiita.com/shokkaa/items/0e257a5e9c069402c80c

の続き。会話には文脈が必要。
現状JavaやKotlinのSDKが提供されていない※ので、Node.jsで試す。
※Android向けはある

# 環境
– Ubuntu 24.04
– Node.js v22.4.1

# Project準備
https://qiita.com/shokkaa/items/6f83b3a107006ccc598b

# generateContent() ―― 一問一答
“`ts:src/generateContent.ts
import { GoogleGenerativeAI } from “@google/generative-ai”

async function main() {
const key = process.env.GOOGLE_API_KEY ?? “”
const genAI = new GoogleGenerativeAI(key)
const model = g

child_process.spawnを理解する

# はじめに
Node.jsのコードにおいてchild_processモジュールを使用する機会があり、その中でもspawnを理解したいと思い、こちらの記事を記載しました。

# child_processモジュールとは
Node.jsでサブプロセス(子プロセス)を作成し、メインのNode.jsプロセスから独立してコマンドやプログラムを実行するための機能を提供します。

# child_process.spawn
[こちらの公式ドキュメント](https://nodejs.org/api/child_process.html#child_processspawncommand-args-options)に記載のある通り、child_process.spawnの書き方としては、child_process.spawn(command[, args][, options])というように、実行するコマンド、配列の中に引数、オプションの順番で記載します。

## サンプルコード

“`javascript:spawn.js
const { spawn } = require(“child_pro

Node.jsのストリーム(Stream)を理解する

# はじめに
Node.jsを利用していますが、重要な概念としてストリーム(Stream)が出てきます。何となくでしか分かっていないストリームのコードを、さらに理解しようと思いこの記事を書きました。

# ストリームとは何か
読み込む時や書き込む時にデータが細切れ(chunk)に流れてきて、全てのデータの読み込み or 書き込みを終了するのを待つ必要がないことです。そのため、全てのデータをメモリに保存する必要がありません。
例えばファイルからデータをストリームを利用して読み込む時に、少しデータを読んで何らかの作業(データ書き出しなど)をして、メモリを開放します。その後、また少しデータを読んでメモリを開放し、、、の繰り返しを続け、最後までデータを読み込みます。これがストリームです。
YoutubeやNetflixもストリーミングサービスと言われており、同じ原理ですね。すべての動画データが読み込まれる前に、視聴を開始することが出来ます。

## ストリームのメリット
– メモリの効率的な利用
– 時間の効率的な利用(全てのデータの読み込みなどを待つ必要がない、例えばNetflixですぐに視

Node.jsについて勉強したのでまとめてみた。

## 勉強のきっかけ

普段からフロントエンド、バックエンド両方の開発でお世話になっているNode.jsですが、サーバー環境を簡単に作れるライブラリー程度に考えて、あまり理解せずに使ってきたので、良い機会だと思い勉強することにしました。ここでは私が気づいたポイントをシェアします。
## Node.jsとは?JavaScriptのフロントからサーバーサイドへの拡張

Node.jsは、**JavaScriptをサーバーサイドで動作させるためのランタイム環境**です。もともとJavaScriptは、ユーザーのブラウザ上で動作し、動的なWebページを構築するために使われていました。しかし、Node.jsの登場により、サーバー上でもJavaScriptを実行できるようになり、開発者はフロントエンドとバックエンドの両方をJavaScriptで書けるようになりました。

Node.js以前はクライアントサイドではJavaScript、サーバーサイドではPHPやRubyを使って開発するのが一般的でしたが、Node.jsを使うことで**JavaScript一つでフルスタック開発**が可能となりました。

🔰TypeScriptの環境構築をまとめてみた

## TypeScriptでコーティングするために必要な環境構築についてまとめていきます。
※Udemyの内容を噛み砕いて私なりにまとめました。

### TypeScript(TS)とは
JavaScript(JS)のスーパーセット(上位互換)
* 型を指定することができ堅牢なコードを書ける
* 古いWebページにも対応できる
などなど、さまざまな便利な機能が搭載されています。

TSで書いたコードはJSにコンパイル(変換)され、JSで動的なWebページを実現します。

### 環境構築
1. VS-Codeで開発用フォルダを開く
1. ターミナルを開く `⌘ + J`
1. packege.jsonファイルの作成 `npm init`
1. 3実行時に設定についていくつか問われるが、全てEnterでOK
1. lite-serverをpackege.jsonに追加 `npm install dev-server lite-server`
1. packege.jsonの`scripts`オブジェクトに手動で`”start”: “lite-server”`を追加
* オブジェ

Array.fromAsync()とPromise.all()の違い【JavaScript】

ようわからんかったのでメモ
# TL;DR

– Array.fromAsync()は順次実行
– Promise.all()は同時実行

“`javascript
const sleep = delay => new Promise(resolve => setTimeout(resolve, delay))

console.time()
await Array.fromAsync([200, 100, 300], sleep)
console.timeEnd()
// elapsed: 600ms

console.time()
await Promise.all([200, 100, 300].map(sleep))
console.timeEnd()
// elapsed: 300ms
“`

https://qiita.com/mellbrother/items/715ff5dce5845381eeee#comment-202a45c5d467a5dd67dc

cc @juner

## 戻り値

どちらも解決した値が入ってくる。HTTPリクエストを投げたいときに