- 1. [20日目] Node.jsとpm2をインストールする最強スクリプト
- 2. scoopでnvmからNode.jsをダウンロードしようとしてはまった話
- 3. 同時接続環境の負荷試験であったこと
- 4. OpenAPI+Fastifyでスキーマファースト開発
- 5. Node.js(Express)×PostgressSQLを使ったチャットアプリ 2
- 6. Node.js(Express)×PostgressSQLを使ったチャットアプリ
- 7. npmパッケージをScope付きで公開してみよう!
- 8. 同一アドレスに複数の同一メール送ろうとしてませんか?
- 9. ISUCON13で遭遇したTypeScriptとES Modulesにまつわるエラーとその解決
- 10. シェルを使ってSymbolノードを簡単構築
- 11. Docusaurus – Meta が開発した超高速な静的サイトジェネレータ
- 12. Solved “Cannot find module ‘fs/promises’” in Node.js
- 13. IGRの時刻表をスクレイピング
- 14. 月曜日をもっと楽しく迎えるbot
- 15. 【Node.js】REPLを活用したインタラクティブなプログラミング学習方法
- 16. ESLint + Prettierの代わりにBiomeを試す
- 17. ラズベリーパイでPlaywrightを使い検索のスクリーンショットを取りまくった話
- 18. Vitest 1系がリリースされたので0系からマイグレーションしてみた
- 19. Node.jsモジュール読み込みフックの新時代 node:moduleのregister APIについて
- 20. 【Bun】readdir が Node.js より 40 倍高速ってホント?
[20日目] Node.jsとpm2をインストールする最強スクリプト
こんにちは、なりかくんと申します。
この記事はなりかくん Advent Calender 2023の20日目の記事です。今回は、私が普段VPSにNode.jsとpm2をインストールする際に利用している秘伝のコマンドを教えていこうと思います。
Ubuntuが実行できる環境です。# コマンド
“`
curl -sSL https://gist.githubusercontent.com/narikakun/d50ba6efd739a1fb3d08e46fa0b0077b/raw/d94cff02e57523839b78a1cff760044d077200db/install-node-lts-pm2.sh | sh
“`このコマンドを実行するだけで、Node.js v20とpm2をインストールすることが出来ます。
# 内容
まず、読み込んでいるシェルスクリプトはこのようになっています。
“`shell
#!/bin/sh
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo
scoopでnvmからNode.jsをダウンロードしようとしてはまった話
## はじめに
vimに興味を持ち、neovimをインストールしようと[この記事](https://devil-code.com/blogs/vim/neovim-setup/)を参考にインストールしていたところ、node.jsのインストールではまってしまいました。
備忘録として、記事にしようと思います。## 使用環境
– windows11
– powershell
– scoop v0.3.1
上記サイトを参考にscoopのインストール、そして必要なパッケージをインストールしていたところ、nvmを使ってのnodeのインストールでエラーが出ました。
エラーが出たコマンドと排出されたエラーはこちら“`
nvm install latest>> C:\Users\?? ??\scoop\persist\nvm\nodejs could not be found or does not exist. Exiting.
21.4.0
Downloading node.js version 21.4.0 (64-bit)…
Error while crea
同時接続環境の負荷試験であったこと
本記事は [オルトプラス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/altplus2023) の12/20の記事です。
# :christmas_tree:はじめに
はじめましての方は初めまして。
初めてじゃない方はおはようこんにちわこんばんわ。
オルトプラスの自称賑やかし担当兼サーバーサイドエンジニアすがやです。
今回は同時接続の負荷試験を実施した時の体験談に関しての記事になります。# :christmas_tree:仕様や構成等
今回のゴール地点は最大8000人が同時接続できる汎用的なロビー機能になります。
この8000人はランダムに移動を繰り返したりアクションを起こしたりします。
仕様ツールは下記の通りです。
|内容|採用しているもの|
|:-:|:-:|
|環境と言語|Node.js + TypeScript|
|負荷試験ツール|k6|
|インフラ|AWS環境|上記を用いて、nodejsのインスタンスを複数作成し、ALBで接続先をある程度分散させ、Redisのpub/subの仕組みを用いて
OpenAPI+Fastifyでスキーマファースト開発
この記事は [mediba Advent カレンダー2023](https://qiita.com/advent-calendar/2023/mediba) の20日目の記事です。
※記事の内容はあくまで個人の発信であり、会社を代表する意見や見解ではありません。
※記事内のコードは実際のプロダクトのものではなく記事用に作成したものです。この記事ではNode.jsのHTTPサーバフレームワークであるFastifyでのAPI開発で、OpenAPIを使ったスキーマファースト開発を実現した話を書きたいと思います。
## はじめに
あるプロダクトを短期間で開発する必要があり、FE/BEの開発を並行してスタートできるようにスキーマファーストで開発することにしました。
FE/BEメンバーが集まって、APIのIF定義を[OpenAPI Specification v3.0](https://spec.openapis.org/oas/v3.0.0)形式のYAML(以下、OpenAPI)で記述しながら決めました。
APIの開発において、フレームワークには前プロダクトを踏襲して[Fastif
Node.js(Express)×PostgressSQLを使ったチャットアプリ 2
## データベースからデータを取得する
“routes/index.js“を書き換えます。
“`js
// 中略router.get(‘/’, async (req, res, next) => {
try {
const getQuery = ‘SELECT *, TO_CHAR(created_at, \’YYYY年MM月DD日 HH24時MI分SS秒\’) AS created_at FROM channel’;
const queryResult = await pool.query(getQuery)console.log(queryResult.rows)
} catch (error) {
console.error(error);
// エラーハンドリング: サーバーエラーが発生した場合は500をクライアントに返す
res.status(500).send(‘サーバーエラー’);
}
res.render(‘index’, { title: ‘Express’ });
});// 中
Node.js(Express)×PostgressSQLを使ったチャットアプリ
## チャットアプリについて
### トップページ
![スクリーンショット 2023-12-20 0.00.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/daf3c9c1-55ac-873d-ca2d-18a2ca52e201.png)### トークページ
![スクリーンショット 2023-12-20 0.02.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262417/38702eb3-bbf1-7f32-7d9e-dd3af7814251.png)## node.jsをインストールする
### MacOS
nodebrewを使ってインストールしてください### Windows
公式サイトからインストールしてくださいhttps://nodejs.org/en
## 開発環境の構築
### Expressのインストール
“`console
$ cd Desktop
$
npmパッケージをScope付きで公開してみよう!
## 内容
以下の仕様のCLIプログラムを`NPM`に公開してみます。
## GitHub Repository
本記事で作成するPackageは[GitHub](https://github.com/HIppei/test-pair-checker)で公開しています。
## 仕様
プログラム名は、`test-pair-checker`とします。
**テスト対象ファイル**に対応する**テストファイル**を検索し、存在有無をチェックします。これにより、ファイルの存在有無レベルですが、簡単にテスト不足を検知できます。
以下の構成の場合、`src/components/custom-button.tsx`は対応するテストファイルが**存在する**、`src/components/custom-input.tsx`は対応するテストファイルが**存在しない**と検知できればOKとなります。
“`bash:Exapmle
.
├── src
│ ├── components
│ ├── custom-button.tsx
│ ├── custom-i
同一アドレスに複数の同一メール送ろうとしてませんか?
# いきさつ
Aさん「katahiroさんに作ってもらったツール、設定されてるメールアドレスにメールが飛ぶはずだけど、今日のは届かないです」
katahiro「??確認してみますね」こちらの記事の流れに近いですが、また別の話です。
https://qiita.com/katahiro/items/881bd52163d1f4c7c43c
# 原因調査
組織に提供しているツールは`Slack`でBotとして機能しますが、以下のような流れで動きます
1. Slackの[ワークフロー](https://slack.com/intl/ja-jp/features/workflow-automation)が起票されて、特定の情報がチャンネルに書き込まれる
1. ワークフローの書込みをBotが検知して、書き込まれた内容を取得
1. 書き込まれた情報に対して採番を行い、以降の書込みを管理
1. 採番が完了した後に、設定されているメールアドレスに対して起票された内容を `Sendgrid`のメール配信にて周知
1. 以後書き込まれたメッセージでCloseの指示があれば、起票内容がCloseした
ISUCON13で遭遇したTypeScriptとES Modulesにまつわるエラーとその解決
この記事は、株式会社ビットキー Developer Advent Calendar 2023 19日目の記事です。
https://qiita.com/advent-calendar/2023/bitkey
## tl;dr
ISUCON13で実際に遭遇した問題を題材に、tsconfig.jsonの`lib`に設定を追加してECMA Scriptの新しい機能を追加する方法と、Node.jsをNative ES Modulesとして動かすために、必要な設定変更と修正が必要なアプリケーションコードについてまとめました。
## あらすじ
先月、ISUCON13に同僚とチームを組んで参加して来ました。実装言語は日々の業務で利用しているNode.jsを選択したのですが、構成の変更中にTypeScriptのコンパイルとES Modulesに関連した問題が発生し、苦戦しつつも解決できたので、備忘録的に共有します。
なお、この記事ではISUCON自体の解説はしませんので、ISUCONが何かを知りたい方は[ISUCON公式ホームページ](https://isucon.net/)を参照してくだ
シェルを使ってSymbolノードを簡単構築
## メインネットでノードを構築・運用しよう!
みなさんこんにちは。あきまるです。
今回はアドカレということですが、過去に書いた簡単ノード構築記事を再度こちらに掲載しようと思います。
現在は、モバイルノード構築が流行していますが、基本は自鯖またはVPSでのノード構築かなと思っております。特にトラブった時にこのノード構築を経験しているかどうかでかなり差が出るとは思います。
また、構築するコードも全て掲載しているので、ノードトラブル時に細かく点検していくことも可能だったりします。
ということで、この記事がお役に立てることがあれば嬉しいなと思います。ノード構築に関しては、私も2021年のローンチ時にメインネットでノードを立てましたが、結構苦労しました。
そしてかなり打ち間違えてはリセットを繰り返しました。
そんな苦い経験から、今回は簡単に構築できるよう、普段から使用しているシェルスクリプトを活用した構築・ノード更新方法を紹介します。わかってしまえば、コピペでぱっぱといけます。だめならOSの入れ直しをして最初からやってしまう荒技だって出来ます。
参考資料として、づ~大先生の資料を最下部
Docusaurus – Meta が開発した超高速な静的サイトジェネレータ
Docusaurus は、 Facebook が開発した静的サイトジェネレータで、サクッと高速な Web サイトを作成することができるのが特徴です。
2023/12 時点での GitHub スター数は ⭐️ **49.9k** です。
![](https://docusaurus.io/img/docusaurus_keytar.svg)
### Links
– 公式ページ: [docusaurus.io](https://docusaurus.io/)
– GitHub: [facebook/docusaurus](https://github.com/facebook/docusaurus)### 特徴
公式がトップページに掲げている 5 つの特徴です。
– MDX: [MDX](https://mdxjs.com/) というマークダウンと React が合体したファイル形式を利用できるので、 React 単体で作るときのように、ページを作成するのにわざわざ React を書く必要がありません。マークダウンを描くだけでページを作成できます。逆に、マークダウンで書い
Solved “Cannot find module ‘fs/promises’” in Node.js
In this post, we’ll investigate the reasons behind this error, look at the modifications made to early versions of Node.js, and talk about fixes.
IGRの時刻表をスクレイピング
Functionノードを使わないでスクレイピングに挑戦します。
@n0bisuke さんのNodeREDで[みんな大好きIGRの時刻表をスクレイピング](https://qiita.com/n0bisuke/items/bd5329296fc188199993)のインスパイア記事です。
## 作ったフロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266424/0af95753-8b30-c315-7dc0-87035e7a19c5.png)
### injectノード(タイムスタンプ)
特にプロパティは変更していないです。
フローを発火します。### httpノード(滝沢駅)
URLに以下を入力します。### HTMLノード(上り/下り)
Httpノードで取得したHTMLをHTMLノードで必要な箇所のみ抽出します。
抽出する要素は以下の様に指定します。#### 上り
`#igr-eki-diau
月曜日をもっと楽しく迎えるbot
# はじめに
こちらは[長野高専 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/nnct) 17日目の記事です!
@shun-shobon さんが開催するNNCTアドカレもこれで3回目の参加ですね〜。現在後続の主催者を探しているみたいなので、来年度以降も在籍予定の方はぜひ!## 自己紹介
卒業してしまった身なので書いておきます!
18sで昨年電子情報工学科を卒業した**Bony_Chops**と申します!現在は大学に3年次編入して、各所でインターン等々をやっています。https://bonychops.com
# 明日は月曜日
長野高専電子情報工学科18生のDiscord鯖には **月曜日を楽しく迎えるため** に作られた **#明日は月曜日** というチャンネルがあります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/70859d47-a009-d0d3-7eae-f6d6049658d
【Node.js】REPLを活用したインタラクティブなプログラミング学習方法
# Node.jsのREPLを活用したインタラクティブなプログラミング
Node.jsの`REPL(Read-Eval-Print Loop)`は、即時フィードバックを得ながらプログラミングを行う強力なツールです。
https://nodejs.org/docs/latest-v21.x/api/repl.html
`REPL`は略称で、ユーザーがコマンドを入力すると、そのコマンドを読み取り(Read)、評価(Eval)、結果を出力(Print)し、次の入力を待つ(Loop)という一連のプロセスを繰り返します。
(ちなみに他言語のREPLはといえば、Rubyなら`irb`、Pythonなら`python`でお馴染みですね)
Node.jsの標準ライブラリの機能や、サードパーティ製ライブラリを試すのに`REPL`はとても便利です!
## REPLの基本的な使用方法
Node.jsのREPLを起動するには、ターミナル画面で`node`と入力します。
“`terminal: terminal
$ nodeWelcome to Node.js v18.18.0.
Type
ESLint + Prettierの代わりにBiomeを試す
この記事は [ここのえ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/99no_exit) Day 17の記事です。
# Biomeって何?
[**Biome**](https://biomejs.dev/) は2023年9月にリリースされたばかりの **Linter** + **Formatter** みたいなツールです。公式では「Toolchain of the web」と謳っています。
`Rust`製、処理が高速、`Typescript`, `TSX`の標準サポートなどが特徴です。
以前 `Rome` というツールがあり、そちらが開発終了となりました。
その`Rome`開発チームの一人が `Biome` を作り始めた、という流れです[^1]。記事を書いている2023年11月現在、まだサポートされている言語は`Javascript`, `Typescript`, `JSX`, `JSON`で、`Vue`などはまだです。
本番環境に採用するのは現時点では難しいかもしれませんが、近いうちにサポート
ラズベリーパイでPlaywrightを使い検索のスクリーンショットを取りまくった話
ラズベリーパイだとPlayWrite対応してなさそうだったけど色々やったら動いた
https://github.com/microsoft/playwright/issues/4984
## やり方
### chromiumのインストール
https://raspida.com/install-chromium
“`
$ sudo apt install chromium
$ which chromium
/usr/bin/chromium
“`後でNode.jsのコードにいれます。
## Node.js側コード
“`json
{
“name”: “piapp”,
“version”: “1.0.0”,
“description”: “ラズベリーパイに利用するアプリケーション”,
“main”: “index.js”,
“scripts”: {
“start”: “NODE_ENV=production forever start -vc ts-node src/index.ts”,
“stop”: “NODE_E
Vitest 1系がリリースされたので0系からマイグレーションしてみた
# はじめに
2023年12月5日にVitest v1.0.0 がリリースされました。https://github.com/vitest-dev/vitest/releases/tag/v1.0.0
それまで自分は0系を利用していたので、こちらのガイドを参考にマイグレーションしてみます。
https://vitest.dev/guide/migration.html#migrating-from-vitest-0-34-6
# 開発環境
マイグレーション前の開発環境は以下の通りです。– Windows11
– VSCode
– TypeScript 4.9.5
– React 18.2.0
– yarn 1.22.19
– Node.js 20.5.0
– Vite 4.1.5
– Vitest 0.34.6
– @testing-library/react 14.0.0
– jsdom 22.1.0また、Vitest 及び React Testing Library を利用した自動テストが正常に動作していることをマイグレーション前に確認しています。
# マイグレ
Node.jsモジュール読み込みフックの新時代 node:moduleのregister APIについて
皆さんこんにちは。先月リリースされた[Node.js 18.19.0](https://nodejs.org/en/blog/release/v18.19.0)の更新内容の一つに、`node:module`組み込みモジュールの`register` APIがあります。これは、Node.js 20.6.0で先行実装されていたものが、Node.js 18系にバックポートされたものです。
これにより、現在サポートされているすべてのメジャーバージョンでこの機能が利用可能になりました。筆者は、このことによるインパクトは大きいと考えています。そこで、この記事では`register` APIについて解説します。
## `register` APIについて
この記事で`register` APIと読んでいるのは、Node.jsの組み込みモジュールである`node:module` からエクスポートされる関数を指しています。
インパクトが大きいとは言いましたが、実は皆さんが日頃のアプリ開発で使うようなAPIではありません。このAPIは、**ts-node**や**esbuild-register**
【Bun】readdir が Node.js より 40 倍高速ってホント?
今日(2023/12/15)現在、Bunのバージョンは v1.0.18まで行ってますが(速いっ)、遅ればせながら2023/12/2 にリリースされた Bun v1.0.15 を眺めていたら、
>「recursiveはfs.readdir()Node.js より 40 倍高速です」と書いてあったので確かめてみました。
https://bun.sh/blog/bun-v1.0.15#recursive-in-fs-readdir-is-40x-faster-than-node-js
recursive (リカーシブ) は「再帰的」という意味なので、まぁそういう機能ですね。下のディレクトリまで順にみに行ってくれます。
Bunでは、v1.0.15 からですが、Node.js ではリファレンスによると v20.1.0, v18.17.0 と2つ書かれています。(Node.js の方は見ていなかったので詳細は判らないです。)
まずディレクトリをサーチするので、その前に mydir ディレクトリを作り、その下にdir1からdir100までのサブディレクトリを用意して、それをサーチする