Node.js関連のことを調べてみた2023年10月04日

Node.js関連のことを調べてみた2023年10月04日

Promise.all()を使って反復処理を速く実行

## はじめに
JavaScriptにおいて、for文中で同期処理を利用したい場合にasync/awaitでなくPromise.all()というメソッドを用いると良い、という話です。
自分自身がasync/awaitで反復処理を行い非常に実行に時間を要して困っていたため、記事にしてみました。

## そもそもJavaScriptの同期/非同期処理とは
そもそも、JavaScriptは同期処理であり、非同期処理でもあるプログラミング言語です。
基本的にはコードを上から実行しますが、時間がかかる処理は終了を待たずに進んでいきます。
有名な事例ですが……

“`js
console.log(“A”);
setTimeout(() => {
console.log(“B”);
}, 1000);
console.log(“C”);
“`

上記の場合、”A”が出力され、次にsetTimeout関数が実行され、1秒後にBが出力されることになります。
待ってる間もプログラムの実行が進むので、先に”C”の出力が行われ、最後に1秒後の”B”が出力されます。

## Promis

元記事を表示

Lambda実装で意識すべきこと

実行頻度が低ければ、あまり問題になることはないかもしれません。
ですが負荷試験をやるようなシステムの場合、途端にエラー祭りとなる可能性があります。

自身が経験したことも踏まえ、紹介したいと思います。

:::note warn
Lambdaの実行環境は Node.js 前提で話しています(これしか経験ない)
時折紹介するコード例は全て typescript です
:::

# ライフサイクル

Lambdaはサーバーレスのコンピューティングサービスです。
そのため、といっていいかわかりませんが、開発したコードが実行されるサーバーが常時起動されているわけではないです。
(後述しますが、常時起動設定が可能な`Provisioned Concurrency`という機能も存在します)

以下の流れでLambdaは実行されます。

1. 関数実行のリクエストが送信されると**実行環境の初期化**が行われる
2. **ハンドラ関数**として定義し export した箇所が実行される
3. 関数の呼び出し後、しばらく放置されると(確か5分くらい)**実行環境が破棄**される

補足:ハンドラ関数

元記事を表示

yarnコマンド実行時のエラー「code: ‘ERR_OSSL_EVP_UNSUPPORTED’」の解決法

## ファイル構成
– index.html
“`html










“`

– package.json
“`json
{
“license”: “MIT”,
“scripts”: {
“webpack”: “webpack”
},
“dependencies”: {
“webpack”: “5.22.0”,
“webpack-cli”: “4.5.0”
}
}

“`

– webpack.config.js

“`js
const path = require(‘path’);

module.exports = {
entry: ‘./src/index.js’,
output: {
path: path.r

元記事を表示

Bunかる〜く触ってみた[Bunの実行, nodeとの比較]

こんにちは!ゆせです。
今回は、最近注目を集めているJavaScriptランタイム“`Bun“`が気になっていたので、興味本位でかる〜く触ってみました。最初に申し上げておきますが、本記事において、こと細かい解説はしません。ただ、

– 「Bunってざっくりどんなものなのか知りたい」
– 「聞く機会増えてきたし気になってたけど、なんだかんだ知らん」
– 「軽く手元で実行してみたい」

みたいな方には、是非読んでいただきたいものになっております!
実際に手元で動かしたことをそのまま再現しておりますので、実行してみたい方は参考にしてみてください。

言葉選びが間違ってる部分もあるかもですが、ご了承下さい。。笑

## Bunってナニ
先日,JavaScriptランタイム「Bun 1.0」正式版がリリース。
一言でよく表現されているのは、「速くてAll in OneなJavaScriptランタイム」。
とにかく「速い」。そんなイメージを持たれている方も多いと思います。Bunの代替としては、“`node“`や“`Deno“`があげられます。

![スクリーンショット 2023-10-

元記事を表示

【Node.js】sharp でサクッと「AVIF」「WebP」生成

次世代画像形式といわれる「AVIF」と「WebP」。
WEBサイトに組み込むことで、表示速度を大幅に向上させることができます。

とっても魅力的な「AVIF」と「WebP」ですが、画像を生成するのが課題となります。
対応しているグラフィックソフトがほとんどないんです…

利用する場合は、プロジェクトごとに自動生成の仕組みを導入することになるかと思います。
でも、自動生成の仕組みが導入されていないプロジェクトでも使いたい…:tired_face:

というわけで、Node.js の画像処理モジュール sharp を使って、サクッと「AVIF」と「WebP」を生成できるようにしてみました!

## 仕様

事前に「JPEG」または「PNG」で書き出した画像を、「AVIF」と「WebP」に変換します。

* 変換前画像
* `src` ディレクトリに格納(デフォルト)
* ディレクトリ名は変更可能(オプション)
* 配下にディレクトリを含む場合でも再帰的に変換
* 変換後画像
* `dest` ディレクトリに生成(デフォルト)
* ディレクトリ名は変更可能(オプシ

元記事を表示

vitest-openapiというjest-openapiのマッチャーをVitestで利用可能にするライブラリを公開した話

## はじめに

Jestがテストライブラリとしてはメジャーで多く利用されていると思うが、ES Moduleとの相性でいうとゼロコンフィグとはいかず歯がゆい感じもある。そこで私個人としてはVitestを利用してテストを実行することが多くなってきた。

ただ、[jest-openapi](https://github.com/openapi-library/OpenAPIValidators/tree/master/packages/jest-openapi)という便利な機能は利用したいなと思った。今回はVitestの[Extending Matchers](https://vitest.dev/guide/extending-matchers.html)の機能を利用してVitesにおいてjest-openapiのマッチャーを利用できるようにするライブラリを作成する事にした。

今回はその実装時に少しハマったことなどを備忘録として残す。

※ちなみに、JestにおけるESMサポートは実験的である

https://jestjs.io/ja/docs/ecmascript-modules

元記事を表示

コマンドラインで、手元のCSV一式からGoogleスプレッドシートを作成・更新する

ローカル環境にあるCSVファイルをディレクトリ単位で一式、Google Drive内の指定したフォルダにGoogleスプレッドシートとして変換・アップロードするCLIツール「**csv2gsheets**」を作成しました。

https://github.com/ttsukagoshi/csv2gsheets

指定したDriveフォルダ内に、同じファイル名の既存スプレッドシートがあれば、それを上書き更新する(ファイルIDを変更することなく内容を更新する)こともできるので、**Googleスプレッドシートを簡易データベースとして使いたい場合など、データの流れを自動化することができます**。

こんな感じ:

“`
c2g convert –config-file-path /Users/username/path/to/c2g.config.json –browse –dry-run
“`
Node.js/npm環境での動作なので、バージョン管理も簡単です。以下では[csv2gsheets v1.1.0](https://github.com/ttsukagoshi/csv2

元記事を表示

expressとNode.jsでAPIを作ってみる

# expressとNode.jsでAPIを作ってみる
後輩に「APIとは何ですか?」と質問されたのですが、あまり明確に答えることができませんでした。
「Webサーバが外部とデータのやり取りをするための出入り口だよ」とか「受け取ったリクエストをもとにDBにアクセスして結果をレスポンスで返すことができるよ」とかあいまいな回答をしてしまいました。
実際にAPIを作ってみるのがわかりやすいと思うので今回はローカル環境で簡単なAPIを作り、Postmanで呼び出して使てみるところまでをやってみようと思います。

## 今回実施すること
Node.jsとExpressを使ってAPIを作成し、ローカル環境で起動、Postmanを使用してAPIをテストする方法を紹介します。

## フロントエンドとバックエンド

Webアプリは、大きくフロントエンドとバックエンドの2つに分けられます。
今回作るAPIは主にバックエンド側で提供し、フロントエンド側がそのAPIを使用してDBの情報にアクセスして画面の内容を動的に変えてくれるようなイメージです。
それぞれの簡単な役割と説明を記載します。

### フロン

元記事を表示

Power VSのリソースサイズ変更スケジューリングを実現した

# はじめに / Introduction
[先の記事](https://qiita.com/katahiro/items/25d91d3d20d7241d1c4e)でPower VSのリソースサイズ変更を行うことで、なるべく費用が増加しない形でサーバーの運用を行える可能性を紹介しました。
一方、残念ながら現在のIBM Cloudのポータルから対象とするPower VSのリソース変更をスケジューリングする機能はありません。これを実現するためには、利用者でPower VSのリソースサイズを変更するAPIを実行するスクリプトを作成し、それを何かしらのジョブスケジューラーで定期実行する必要があります。
それをPower VSを利用する各々の利用者で全てゼロから作成するのは時間が勿体ないので、今回紹介するツールをそのまま、あるいは参考にして頂ければ、時間短縮、費用短縮できると思います。

In the [previous article](https://qiita.com/katahiro/items/25d91d3d20d7241d1c4e), I introduced the possi

元記事を表示

Bun&HonoでChatGPTプラグインを作る(ローカルプラグイン)

##

元記事を表示

VSCode に インストール済みの拡張機能をデバッグする

# はじめに

VS Code の拡張機能がなんかおかしい、うまく動いていないといったときにデバッグする方法のメモ

基本的には↓のスレッドに記載のとおり。

https://stackoverflow.com/a/67099176/1868209

# 試した環境は以下の通り

Windows PC で WSL2 上で VS Code が動作している

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4914/f8f0186b-de63-5769-1b66-f4625f780315.png)

この VS Code の 拡張機能を、Windows 上の Edge の DevTools でデバッグ

devcontainer は未検証

# 手順

## extension host の プロセスを特定する

VS Code の拡張機能は、extension-host というプロセスで動いているそうです。

https://code.visualstudio.com/api/advance

元記事を表示

“Node.jsとExpressでのルートハンドラーのモジュール化

## はじめに

Node.jsとExpressを利用したWebアプリケーション開発において、コードの構造化は非常に重要です。この記事では、ルートハンドラーをモジュール化する一例を紹介します。

## ルートハンドラーの設定

まず、以下のコードスニペットは、Expressのルーターを設定し、`/user`エンドポイントに対するGETリクエストがあった際に、`home`関数が呼び出されるようにしています。

“`javascript
const { home } = require(‘../controllers/user’);
const express = require(‘express’);
const router = express.Router();

router.get(‘/user’, home);

module.exports = router;
“`

## home関数の定義

次に、ルートハンドラーで実行したい`home`関数を別のファイルで定義し、exportすればokです!

“`javascript
exports.home = (req

元記事を表示

【VS Code】Visual Studio Code Dev Containersを使用する

Visual Studio Codeを使用したDev Containersについて記載します。

なお、正確な情報や詳細な情報は[公式ドキュメント](https://code.visualstudio.com/docs/devcontainers/containers)も参照してください。

## Dev Containersとは

公式ドキュメントには以下のように説明されています。

> The Visual Studio Code Dev Containers extension lets you use a container as a full-featured development environment. It allows you to open any folder inside (or mounted into) a container and take advantage of Visual Studio Code’s full feature set. A devcontainer.json file in your project tells VS Code

元記事を表示

【Node.js】Kafka Consumerを作成してみた

## 0. 初めに

先日docker上でしたが、postgres-debezium-kafkaのアーキテクチャを構築し、
[Debezium](https://debezium.io/)から[Kafka](https://kafka.apache.org/)に入るメッセージの中で、operationがcで、lotidが空のものをエラーとして検知するKafka consumerを作成しました。
実際kafkaを初めて触れたので、備忘録的に環境構築と作成手順を記事に残します。

上記docker上で作成しましたが、説明がややこしくなるので記事ではローカル環境で実施します。

# 前提事項
* 基本的なプログラミング知識
* PostgreSQL, [Kafka](https://kafka.apache.org/), Node.jsについての基本的な理解
* 今回はローカル環境を使用する

## 目次
1. [Debeziumとは?](#1-debeziumとは?)
2. [Kafkaとは?](#2-kafkaとは?)
3. [全体アーキテクトの俯瞰図](#3-全体アーキテクトの俯瞰図)

元記事を表示

Jira拡張機能開発(プロジェクト作成~Jiraにインストール)

## 初めに
使い方が悪いだけかもしれませんが、Jiraって微妙に使いづらいな…と思った今日この頃。
同じことを思ったそんなあなたに、Jira拡張機能開発をお勧めします。

今回はJira拡張機能ってこんなこともできるんだよということを伝えたく、

npmパッケージのforgeを使用して、ReactにてJiraの拡張機能を作成していきます。
この記事ではforgeの導入、プロジェクトの作成、JiraにDeployまでを記載します。

## 開発環境
node:18.16.0

## 実現方法

### forge導入~プロジェクト作成
1. forge/cliをインストールします。
“`cmd
npm install -g @forge/cli
“`
1. Atlassian API トークンを使用してログインします。
[Atlassian API token](https://id.atlassian.com/manage-profile/security/api-tokens)にて、APIトークンを発行し、以下コマンドにてログインを行います。

元記事を表示

Boxアプリ統合でフォルダバージョンを戻す

# 概要

この記事では、Boxアプリの統合機能を使用してフォルダ内のすべてのファイルを一括で以前のバージョンに戻す方法を紹介します。

![BoxRevertFolderVersionWebAppIntegration-EN.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/895687/81c12505-a1bb-45e3-de78-119291cc3a11.gif)

Boxは、ファイル[バージョン履歴機能](https://support.box.com/hc/ja/articles/360043697054-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)によって、過去の状態にファイルを復元することができます。

この機能は、操作ミスにより誤ったバージョンがアップロードされてしまった場合だけでなく、[ランサムウェ

元記事を表示

[ESLint] Node.jsのES Modulesで__filenameや__dirnameを使ったらエラーにする

# ES Modulesでは`__filename`と`__dirname`は使えない

Node.jsのES Modulesでは、以下のグローバル変数は存在しないため使用できません。

– `require`
– `exports`
– `module`
– `__filename`
– `__dirname`
– `global`

しかし、現状ではこれらの変数を使ったコードを**TypeScriptの型チェックで弾く方法はありません**。

詳細は以下のissueやdiscussionを参照してください。

https://github.com/DefinitelyTyped/DefinitelyTyped/issues/42201

https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/66780

現在はDefinitelyTypedが対応するのを待つしかないようです。

# __filenameや__dirnameの使用をESLintで弾く

前述したように、TypeScriptの型チェックで弾くことは

元記事を表示

Node.jsのutilモジュールを利用する

## utilモジュールとは
公式の説明では、`このnode:utilモジュールは、Node.js内部APIのニーズをサポートします。`と書かれているが、私にはよく意味がわからなかった。
→ 要は、ユーティリティ関数 (よく使う処理を簡単に呼び出せるように作成される小さな関数) を提供しているモジュールですということで良さそう。

## できること
主な関数。シンプルな機能が提供されている。

| Method | Description |
|:———–|————:|
| debuglog() | デバッグメッセージを出力する |
| deprecate() | 指定した関数が呼び出されたとき、非推奨としてwarningを出す |
| format() | 指定した引数に応じて文字列をフォーマットする |
| inherits() | 継承をutil.inherits(Child, Parent);の形で手軽に行える |
| inspect() | オブジェクトを文字列化

元記事を表示

npxを実行した後の残骸(キャッシュ)の場所

## 結論から書くと

Windowsの場合、
C:\Users\ [user] \AppData\Local\npm-cache\_npx\
配下のフォルダに格納される。
なお、フォルダ名は固定されておらず、「c67e74de0542c87c」のようなハッシュ(?)されたようなフォルダに名になっている。

Macの場合
(すみません。調べられてません)

## どのフォルダを削除するか?

キャッシュなので全部消しても問題ないような気はする。
ピンポイントで削除したい場合については、上記の通りフォルダ名が意味を持たない英数字の羅列なので判断は難しい。フォルダのタイムスタンプおよびフォルダ内のpackage.jsonの中身を見て判断するしかない。

## おわりに

npxを使えば使うほどこのキャッシュがたまっていくので(意外と容量を食っているので)、ディスク容量が少ないなら消すというのも有効な手段のひとつだろう。※削除は自己責任でお願いします!

元記事を表示

[超初心者]yarnがインストールできない

# 目次
[1.環境](#-環境)
[2.インストール手順](#-インストール手順)
[3.背景](#-背景)
[4.エラー内容について](#-エラー内容について)
[5.試したこと](#-試したこと)
[6.結論](#-結論)
[7.解決方法](#-解決方法)
[8.yarnのインストール](#-yarnのインストール)
[9.今回のエラーで間違って試したこと](#-今回のエラーで間違って試したこと)
[10.参考URL](#-参考URL)

# 環境
・Windows10
・node.js(node-v18.18.0-x64)
・Visual Studio Code

# インストール手順
インストーラーは下記です。
[node-v18.18.0-x64](https://nodejs.org/ja/download)
[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)

手順は下記を参考にしました。

https://qiita.com/sefoo0104/it

元記事を表示

OTHERカテゴリの最新記事