Node.js関連のことを調べてみた2021年12月09日

Node.js関連のことを調べてみた2021年12月09日
目次

Node.js (TypeScript) で class + arrow function の jest を使ったテスト

# はじめに

最近の TypeScript なら、関数は以前から存在する ‘function’ ではなくアロー関数を使うのが一般的だろう。しらんけど。
昨今はフロントエンドの隆盛もあってか、あるいは関数型言語からの影響か、そもそも js はクラスベースじゃないからなのか、わざわざ class にすることは少ないかもしれないが、私は日頃 c++ でなんでも class ベースで実装して暮らしているので class にまとめてしまう。そしてテストを書こうとする度に mock の使い方を忘れて調べ直すのだった。

# もくじ
* [環境](#環境)
* [class の arrow function](#class-の-arrow-function)
* [class の static な arrow function] (#class-の-static-な-arrow-function)
* [class の 非arrow function](#class-の-非arrow-function)
* [mock と元の振る舞い両方を利用したい場合](#mock-と元の振る舞い両方を利用した

元記事を表示

音声認識をして特定の言葉をカウントしたい

#おもてなしを見える化するIoTがつくりたい!!
![image (30).jpg]
普段は居酒屋で働いており、プログラミングとは無縁なのですが、
おもてなしが見える化するIoTをつくりたい!!と思い、一念発起!
お休みの日にプログラミングを学びながら、日々挑戦をしています!

#やりたい企画を具体的に描く
最終的にはクラウドファンディングを行い、
共感してくださる仲間とともに、おもてなしを向上させていきたいと思っています。
今まではぼんやりと「おもてなしが見える化するIoT」というぼんやりしたものだったのですが、
「お見送り」に焦点を絞り、
・スタッフの「ありがとうございました」を計測する。
・お客様の「ありがとう」を計測する。
・その数をスプレッドシートにデータとして見える化する。
というステップで**実装

元記事を表示

【Node.js 2021(2つ目)】 Node.js での UDP・TCP通信をシンプルに試す(2021年12月)

この記事は、[2021年の Node.js のアドベントカレンダー](https://qiita.com/advent-calendar/2021/nodejs) の 10日目の記事です。

内容は、以下の記事を書く中で使った「zigsim-ws」の中で利用されている「dgram」が気になって調べたり試したりしたことを、記事として書いた形です。

●【IoTLT 2021】 ZIG SIM から送られるデータを p5.js Web Editor上で活用してみる – Qiita
 https://qiita.com/youtoy/items/caca41a68ab3bff6ffa6

## zigsim-ws のプログラムと UDP通信
zigsim-ws は、プロトタイピングに役立つスマホアプリの「ZIG SIM」を、ブラウザ(HTML+JavaScript のプログラム)との間で通信させる時に利用するものです。
軽く補足をすると、ZIG SIM がデータを送る時に用いる通信が UDP・TCP で、ブラウザ上の JavaScript のプログラムでは直接は扱えないものになるので、それら

元記事を表示

Node.js(Express)の開発環境を整備する ESLint / Prettier / Visual Studio Code / ホットリロード

## はじめに
自分でちょっとしたWebアプリを作ったりする事があるが、その時の開発環境は結構適当だったりした。ただ、今後の事を考えるとちゃんと静的解析とかを入れ込んだ開発環境を作れるようになっておくほうがいいと思い今回ちゃんとした環境の構築をやってみたので、その備忘録を残す。

行った設定は、

– Expressサーバのホットリロード対応
– webpack
– ESLint × Prettier
– VS Code

の4つ。

※以下の記事では、webapckでのバンドルをbuildという言い方をしている部分がある(buildツールとしてwebapckが紹介されるのでいいと思っている)。

GitHubのコードは以下(Step2の章の部分がこの記事でやった内容になっている)。

https://github.com/yuta-katayama-23/node-express

## Express serverのホットリロード
特に難しい事はなく、webpackの[watch](https://webpack.js.org/api/cli/#watch)と[nodemon](h

元記事を表示

いろんなJavaScriptのテストフレームワークを試してみる!

[Ateam Brides Inc. Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ateam-brides)の9日目は
株式会社エイチームブライズの@oekazumaが担当します。

# はじめに
今回試すJavaScriptのテストフレームワークは[Jest](https://github.com/facebook/jest)、[AVA](https://github.com/avajs/ava)、[Mocha](https://github.com/mochajs/mocha)、[tape](https://github.com/substack/tape)、[Jasmine](https://github.com/jasmine/jasmine)、[uvu](https://github.com/lukeed/uvu)です。

今回使用したコードはこちら
https://github.com/oekazuma/test-runner-compare

テストするコードは簡単な計算をするプログラムを用意し

元記事を表示

Symbolを強制ガチホする

#この記事を書こうと思ったきっかけ
私はチャートを見ると一喜一憂してしまうタイプの人間です.ガチホが正義とは言われておりますが,チャートを見るたびに暴落の恐怖で売ってしまいそうになってしまいます(同じような悩みを持っている方もいらっしゃるのではないでしょうか…!)
ガチホを固く決めたはずの私ですが12月の頭頃の下落でも売ろうか一瞬まよってしまいました.そこで,強制的にガチホする方法を考えました.

#強制ガチホするためには
私がぱっと思いついたのは次の4つでした
・他人に預かってもらう
・マルチシグで連署し,秘密鍵を物理的に分散させることでハードルをあげる
・ペーパーウォレットに入れて物理的に遠い貸金庫に預ける
・他人とマルチシグで管理する

しかしこれらの方法では
・他人に預かってもらう
=>他人が持ち逃げ,勝手に売却する可能性がある

・マルチシグで連署し,秘密鍵を物理的に分散させることでハードルをあげる
・ペーパーウォレットに入れて物理的に遠い貸金庫に預ける
=>その気になれば売却できる

・他人とマルチシグで管理する
=>意見の相違で何かあったら大変

これらの問題がありま

元記事を表示

【kintone×LINE Bot】餃子検定[非公式]を作ってみた

## はじめに
本格的に寒くていよいよ暖房を入れました、私です!
`アドベントカレンダー = ネタ披露` という脳内変換がされたので、書きに来ました!

## 何を作ったのか
私は、餃子を食べることを「自主練」と呼んでいるのですが、今年は自主練が月1の時もあり、
「そんな自主練の頻度で、本当に餃子好きと言えるのか?」「ビジネス餃子ではないのか?」と周囲の方々からのありがたい~~手厳しい~~フィードバックを頂きまして、「私の餃子好きが分かるものを作るぞ!」ということでLINE BOTを作成してみました!

自主練はサボり気味ですが、
日々、餃子の知識をインプットしている私の作った最強の(?)餃子検定を受験して下さい。
みなさま、対戦よろしくお願いします!

## デモ
まずは、何はともあれ触ってみると早いかと思います!
早速ですが、良かったらLINE BOTと友達になって餃子検定問題に回答して頂けると嬉しいです。
10問解答すると、自分の餃子レベルが分かります。
https://lin.ee/znPnwXn
![M_gainfriends_qr.png](https://qiita-im

元記事を表示

OverpassAPI を {Java,Type}Script から使ってみよう

# Overpass API とは

OpenStreetMap には全世界のマッパーたちが登録した道路や建物、さらにはそれらについての詳細なタグ情報が登録されています。
そのような膨大なデータ群を検索可能にし、簡単にアクセスできるような API を公開してくれているプロジェクトが Overpass API です。

Overpass API は**Overpass QL**という言語で書かれたクエリを送ると、検索結果を JSON,CSV,XML などの形式で送り返してくれます。下の例では京都の市街地にある郵便局の一覧を得ることができます。

“`rakuchu-postoffice.ql
[out:json]; // JSONファイルで出力
node
// 四条通から北大路通、西大路通から河原町通で囲まれる四角形から検索
(35.0, 135.73, 35.04, 135.77)
// nameタグに郵便局で終わる文字列が含まれるものを抽出
[‘name’ ~ ‘郵便局$’];
out;
“`

Overpass API の使い方は[OpenStreetMap の Wik

元記事を表示

Windows10でbleaconが出来なかったのでUbuntuで環境構築した

## 概要

bleaconはNode.jsが動くマシンで [bleaconの公式ドキュメント(https://github.com/sandeepmistry/node-bleacon)](https://github.com/sandeepmistry/node-bleacon) にある通り `npm install bleacon` をすればインストール可能.数行コーディングするだけで簡単にibeaconを扱える.
はずなのだが,Windows10での環境構築時にエラーが出たり実行出来なかったりしたので最終的にUbuntuに切り替えた.その変遷を備忘録的に書いている.

注意として文章が煩雑なので時間の無い方には向かない.
私と同じような状況に居て,何か少しでもとっかかりが欲しい方向け.

### やろうとしたこと

Windows10でNode.jsを使ってibeaconを受信.
送信にBLEビーコン,受信にBLEドングルを使用する.
使用するパッケージは [node-bleacon(https://github.com/sandeepmistry/node-bl

元記事を表示

Node.jsを使ってMongoDBに対するコネクションを使い回す方法

# はじめに
個人的な開発を行う中でNode.jsとMongoDBを使ってAPIを作成する機会がありました。
そこで私なりに作成した、一度作成したコネクションを使い回す方法を備忘録として残します。

# 実装内容
MongoDBのコネクション作成処理はシングルトンクラスで実装しました。

“`Javascript:mongo.js
const { MongoClient } = require(“mongodb”);
const user = “ユーザー”;
const password = “パスワード”;
const dbName = “DBの名前”;
const uri = “URL”;
const client = new MongoClient(uri, {
useNewUrlParser: true,
useUnifiedTopology: true
});

class Mongodb {
constructor() {
this.db = null;
}

async get() {
// 一度もインスタンス生成されていない場合のみ

元記事を表示

nodeでcsv読み込もうとしたら後回しにされて全然上手くいかないんですが

ドブエンジニアの恥晒し日記です。

## csvを配列にして読み込みたいんだが
なんか処理まとめたoperate.jsをindex.jsで呼び出して実行するのが良いんじゃね?
そう考えたぼくはcsvモジュールを使った処理を[丸々コピペ](https://www.npmjs.com/package/csvtojson)して

“`js:index.js
var path =”./読み込みたい.csv”;
(async () => {
console.log(“↓ここに結果が出力されるよ!”);
operate.csvRead(path);
console.log(“↑ここに結果が出力されるよ!”);
})();
“`

“`js:operate.js
exports.csvRead = async function (path) {
var parser = csv.parse({ columns: true, trim: true }, function (err, data) {
console.log(data);
});
fs.createR

元記事を表示

フォワードプロキシで守られたNW内でngrokを使用する

最近、久しぶりにWebアプリ開発の試行錯誤をする機会があり、その時に知った便利ツールの紹介とそのツールに関するトラブルシューティングです。

# Problem

開発マシン上で開発中のWebアプリに、WWW経由でHTTPS通信を行いたい。
なお、「開発マシン」は会社の社内NW(あるいは学校のNWなど)に接続しており、あらかじめ決められたフォーワードプロキシを経由する以外にはWWWへのアクセスができない。

# Solution

`ngrok`(えんぐろっく)というツールを使います。

`ngrok` はローカル環境で稼働するWebサーバーを動作検証などのためにWWW(インターネット)に公開するためのツールです。
これにより他のシステムや開発メンバーがWWWを経由して開発中のWebアプリにHTTP/Sでアクセスすることが可能になります。
公開には `*.ngrok.io` のサブドメインが利用され、`*` の部分には都度ランダムな値が設定されます。

またこのようなフォーワーディングの他にも、HTTP/S通信内容を解析したり、HTTP/S要求を再実行したりすることもできるようです。

元記事を表示

【JS】配列操作のまとめ②(some, every, includes)

# これは何?
前回[こちらの記事](https://qiita.com/Yuji_6523/items/b84fcaeea8b932d757ac)の続編として、`some, every, includes`の配列操作についてまとめていきます。

# some()
第1引数の関数で指定された条件に、配列内の要素が1つでも当てはまるかどうかを判定する
*元々の配列の要素は変更されない。

### 返り値
– 配列の要素が1つでも条件を満たしていれば`true`を返し、そうでなければ`false`を返す

“` js
const array = [1, 2, 3, 4, 5, 6];

// 配列の要素に3が含まれているか判定
const isThree = array.some((item) => item === 3);

// 配列の要素に10が含まれているか判定
const isTen = array.some((item) => item === 10);

console.log(isThree); // true
console.log(isTen); // fals

元記事を表示

Node.js使ってSquareで支払ってみよう

## はじめに

この記事は[【マイスター・ギルド】本物の Advent Calendar 2021](https://adventar.org/calendars/6579)の6日目の記事です。
Node.jsを使ったSquareの支払い方についてまとめてみました。

Squareについて、まとめてる記事が少なかったことがきっかけで、
自分で調べたことをまとめた備忘録のようなものになります。
参考になれば幸いです。

## 基礎的な支払い

基礎的な支払いの仕方になります。

### クレジット払いでの決済

あくまでも例です。

まずSquareのSDKのインストール。

“`
$ npm install square
“`

“`js
const { ApiError, Client, Environment } = require(‘square’)

const client = new Client({
timeout:3000,
environment: Environment.Sandbox,
accessToken: Square Developer

元記事を表示

簡素なHTML/Javascriptの検証環境をNode.jsで構築してみた

### 検証環境を用意しようとした経緯
iOSエンジニアですが、アーキテクチャーやライブラリなど、フロント(Javascript)経由の技術が多いので簡単にデバックできるサーバーを作成してみようと思いました。ご自由にお使いください。

### 実行環境(MacとNode.js)
Mac環境であればNode.jsをインストールすれば実行可能です。

### 構築ステップ
1. Node.jsをインストール
node-v14.xx.x.pkgをダブルクリックしてインストールします。
(node-v14.17.4.pkgを使用しました)
https://nodejs.dev/download/

2. Githubよりnode-jsをチェックアウトする。
リポジトリ: https://github.com/rwakizaka7/node-js

3. Node.jsでexpressなど使用するライブラリをインストールする。package.jsonにライブラリの設定があります。

“`コマンド:チェックアウト方法
$ cd [チェックアウト先フォルダ]
$ git clone https:/

元記事を表示

execa を試してみた

## 背景

Node.js の CLI ツールを作っていて、CLI ツールの E2E テストをしたかった。テスト内でコマンドを実行するツール調べていたら `execa` というものがあったので触ってみた。

(ちなみに `execa` は [netlify cli](https://github.com/netlify/cli) や [create-react-app](https://github.com/facebook/create-react-app) の E2E テストでも使われています)

https://github.com/sindresorhus/execa

## 使い方

“`javascript
import {execa} from ‘execa’;

const test = async () => {
const res = await execa(‘echo’, [‘unicorns’]);
console.log(res);
}

test()
“`

出力結果

“`javascript
$ node index.js
{
co

元記事を表示

nodejsでベクトルタイルサーバーを作る(mbtilesからpbfを配信する)

## はじめに
ベクトルタイルの生産、スタイル、ホスティング、最適化、消費の各分野で少しずつノウハウを積み重ねていますが、ここでは**ベクトルタイルのホスティング**について書きたいと思います。

UNVTツールには、@hfuさんが数年前に開発した [un-vector-tile-toolkit/onyx](https://github.com/un-vector-tile-toolkit/onyx) というパッケージがあり、nodejsでのベクトルタイル配信を実現しています。タイルのホスティングにはtileserver-glやGitHubページなどいろいろ選択肢がありますが、nodejsサーバーを使った場合の利点については、以下のように考えています。

* シンプルで反応が早い。スケーラブル。
* 性能のよいサーバーにも適用できるし、ラズベリーパイのような小型PCでも実装可能。
* mapboxのnpmモジュールを使うことで、mbtilesからpbfを配信できる。
* 大容量サイズのデータ配信が容易(このツールは大容量のデータを配信したい場合に向いている。少しのデー

元記事を表示

[Nest.js] クエリパラメータをPipeを使って変換する方法

この記事は [株式会社サイバー・バズ Advent calendar 2021](https://qiita.com/advent-calendar/2021/cyberbuzz) 8日目の記事です。

# 概要
[Nest.js](https://docs.nestjs.com/)を使っている時に、`front`から受け取った`Request`を使ってゴネゴネしている時です。

すると、、

**「あれ、、、落ちる。。」**

**「想定した型と合っていない。。。」**

ということがありました。

その時の話です。

# 例
検索処理を例にあげます。

“`typescript:dto/searchItem.dto.ts
class SearchItemDTO {
minPrice: number
maxPrice: number
page: number
limit: number
}
“`

“`typescript:item/item.controller.ts
@Get()
async getItems(@Query() searchItemDTO

元記事を表示

良いbotを作るためのasync/awaitとイベントループの基本(後編)

Advent Calendar8日目は昨日に引き続き黒枝です。本日は昨日の記事の後編です。

前編では非同期処理の基本的な背景を確認しました。本日の記事では、具体例を見ることで理解を深めていきましょう。

また、2つ目の具体例では実践的な例として、強力なライブラリであるpybottersをサンプルとして紹介させていただいています。pybottersは`async/await`を取り入れて、特にソケット通信周りをすっきりとロジックに組み込む事ができる優れたライブラリです。

https://github.com/MtkN1/pybotters

pybotters製作者のまちゅけんさんによる非同期処理についての解説はこちら

https://zenn.dev/mtkn1/articles/c61e77c1d221aa

## おさらい
まずは昨日のおさらいとして、非同期処理の大事な部分を確認しておきます。

1. asyncはイベントループに制御を返す宣言である。
2. asyncは非同期処理(主にawaitを伴って定義された関数)の呼び出しに付与したときのみ働く。

それでは、具体例を

元記事を表示

【micro:bit 2021(2つ目)】 PC と micro:bit で送受の両方を行う通信: Node.js・MakeCode でのシンプルなシリアル通信2(USBケーブル接続)

この記事は、[2021年の micro:bit のアドベントカレンダー](https://qiita.com/advent-calendar/2021/microbit) の 9日目の記事です。

以下の記事で、「micro:bit から送信する、または micro:bit で受信する」という送受のどちらか片方を使ったプログラムの話を書いていました。

●【micro:bit 2021】 PC と micro:bit を通信させる方法: Node.js・MakeCode でのシンプルなシリアル通信(USBケーブル接続) – Qiita
 https://qiita.com/youtoy/items/889f8ee3a3bd884f5df8

今回は、「micro:bit からの送信 ⇒ PC でちょっとした処理をして応答するような処理 ⇒ micro:bit での受信」という流れをの処理をするプログラムを作ってみます。

## 環境の準備
必要なものや、Node.js のプログラムで必要なライブラリは、[前回の記事](https://qiita.com/youtoy/items/889

元記事を表示

OTHERカテゴリの最新記事