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

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

[NodeJs]Expressのrouterを整理する

NodeJsのアドベントカレンダー23日目の記事です

#はじめに
ExpressサーバーでRouteを定義していくとどんどん行数増えていってしまいますよね。
私も今までは処理をapp.jsに書かずfunctionの呼び出しで対応していたのですが、つい先日もっと上手に書く方法を知ったので共有したいと思います。
もしかしたら、当たり前なのかもしれませんが…。

#課題
参考書とかWeb見ながらExpress書くとこんな感じで、1つのファイルに全部のRoute書いてしまいがちかと思います。 はい、私がそうでした。

“`js:app.js
const express = require(“express”);
const app = express();

app.get(‘/user’, (req, res) => {

})

app.post(‘/user’, …
app.patch(‘/user’, …
app.delete(‘/user’, …
app.get(‘task’, …
app.post’task’, …
“`
※ …はJavaScri

元記事を表示

IDs in Node.js

[ [日本語版](https://qiita.com/martinheidegger/items/425112e84f7c12148d90) ]

Following my 2020 blog post about [Promise cancellation](https://qiita.com/martinheidegger/items/3e6355e96e85fc1c841e) this is yet another basic topic.

Identity (short ID) – the way to identify a _thing_ – is something most tools provide out-of-the-box so you don’t need to think about it. But we are building for users. Humans. Often IDs comes in contact with the user – be it in an URL or on a receipt – and then the shape

元記事を表示

IBM Cloud Operator を使ってIBM Cloudのサービス(Database for MongoDB)の接続情報をOpenShiftのSecretsに取り込み、Node.js のアプリから接続してみる

## はじめに

IBM Cloud 上で Node.js と MongoDB を使ったアプリケーションの開発を行う上で、アプリケーションコンテナ基盤として、物理サーバ上に OpenShift のクラスターを構築し、データベースとしては、マネージドデータベースサービスである、IBM Cloud Database for MongoDB を利用する環境を用意しました。
OpenShift 上の Node.js アプリケーションから、データベースに接続する上では、MongoDB(IBM Cloud Database for MongoDB サービス)の接続情報が必要となりますが、このIBMのマネージドDBサービスの接続情報を、OpenShiftのSecretsに取り込む(バインドする)一つの方法として、IBM Cloud Operator というツール(仕組み)が提供されており、それを使った一連の手順を簡単にご紹介いたします。
# ちなみに、アプリケーションコンテナ基盤として、IBMの提供するマネージドKubernetesサービスである、「OpenShift on IBM Cloud」や「

元記事を表示

DriveAPIでGドラ内ファイルを取得、削除、アップロードする【Node.js】【Express】

Webアプリをデプロイする際に、画像を保存するWebストレージを用意する必要がでてくる。
よく使われるのがAWSやGCPになると思が、いかんせんお金がかかってくる。
そこで、無料で使えてよく馴染みのある__Googleドライブ__を利用できたらなと思って、今回チャレンジしてみた。

#事前準備
以下を事前に行っておくこと。
※手順は割愛

1. Node.js、npmがインストールされている
1. APIが有効になっているGoogleCloudPlatformプロジェクトが作成されていること
1. Googleドライブが有効なGoogleアカウント

#1.認証情報の作成
GCPでOAuth2認証の設定をする
__①「APIとサービス」>「認証情報」画面の「認証情報を作成」から認証情報を作成する__
![スクリーンショット 2021-12-22 8.19.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547731/2f21d2ee-dbf0-656e-5d91-2a296673913d.png)

元記事を表示

シンプルなGraphQLサーバーでCRUDする(Express.js, Objection.js, MySQL, Docker)

# はじめに
僕がGraphQLに取り掛かった際なんとなく敷居の高さを感じていました?
「自分がもしもう一度GraphQLを1から勉強するならこんな記事あったら嬉しいな」という観点で、少ないコード量で動作するシンプルなGraphQLアプリを作成しました。

20分以内で出来るハンズオンだと思いますが、お忙しいかたは「[ファイルを追加 -> サーバー](#ファイルを追加)」だけでも見ていっていただけると?

プロダクトでGraphQLを使う場合はもっと保守性が高いディレクトリ構造にしたり、N+1対策をしたりと考えることが色々あると思いますが、今回そこらへんはノータッチです。

#### 開発環境と使用した技術
– OS: macOS Catalina 10.15.4
– サーバー: Express.js
– ORM: Objection.js(内部でKnex.jsを利用してる)
– DB: MySQL8系
– ツール
– node: 16.8.0
– yarn: 1.22.17
– docker: 20.10.7
– docker-compose: 1.29.2

###

元記事を表示

回線速度を計測して、Steamの帯域制限を自動で設定するようにした

## きっかけ

Steamの回線が丈夫なのか、アップデートなどでダウンロードが始まると閲覧しているYoutubeなどのロードが追いつかなくなることがありました。

Steamにはダウンロード帯域制限機能がありますので、はじめは設定画面からちまちま設定していたのですが…

時間帯や日によって毎度毎度手作業で帯域を設定するのが面倒くさいので、何か自動でできる方法がないかと調べました

## インターネット速度の計測方法

ブラウザ経由でFast.comやSpeedtest.netを使って回線速度を調べて、Steamで設定するという方法を今までとっていましたが

https://www.speedtest.net/ja/apps/cli

Speedtest CLIがコマンドラインで実行できてとてもよさそうです。

ただ実行するだけではなく、csvやjsonに吐き出すことが可能

“`speedtest.exe -f json > speedtest.txt“`

みたいな感じで呼び出すとJSONのテキストを吐き出してくれます。

## Steamの帯域制限を設定する方法

この辺を参

元記事を表示

Discordで動くLinuxターミナルを作る

[長野高専 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/nnct) 22日目の記事になります.皆さんすごい記事書いてる…
この記事では,Discord上で動くLinuxターミナル…風のbotを作ってみました.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601799/b14b244d-17cf-337d-d56f-ad1f73541e4d.png)
こんな感じのターミナルを作りました.

https://github.com/BonyChops/discord-terminal

:::note warn
任意コマンド実行を他人に許可することにより,予期せぬ問題が起こる可能性があります.使う際は必ず信頼できるメンバー間でのみにしましょう.
:::

(画像にあるF-langについては以下)

https://github.com/NNCt18J/F-Lang

# きっかけ
黒板があれば学生が数式を

元記事を表示

Node.js と ID について

[ [English Version](https://qiita.com/martinheidegger/items/09c48c50136b629f1107) ]

2020年の 「[Promise のキャンセルについて](https://qiita.com/martinheidegger/items/6e8275d2de88174bc7e6)」ブログ記事に続き、これもまた基本的なトピックとして深く掘り下げていきたいと思います。

アイデンティティ(略称ID)、つまりあるものを識別する方法は、ほとんどのツールがすぐに提供してくれるので、普段考える必要はありません。しかし、私たちはユーザーのために作っているのです。人間です。ID は、URL であったり、レシートであったりと、ユーザーの目に触れることが多く、そのときにIDの形が実際の違いを生むことがあります。

この記事を読んでいただければ、このトピックが魅力的であることに同意していただけると思います。その後、あなたはIDを同じように見ることができなくなるに違いありません。:wink:

この記事のコードは、関連する [github

元記事を表示

Docker レイヤー キャッシュ(DLC) で高速なDockerビルドを理解。

##  はじめに
この記事は[Linkbal (リンクバル) Advent Calendar 2021](https://qiita.com/advent-calendar/2021/linkbal)の15日目の記事です。

Webの開発業界ではDockerレイヤー キャッシュ(DLC) より、`Docker`の概念が慣れた方が多いと思います。本日は、Docker レイヤー キャッシュ(DLC) に関して、Dockerビルドの速度を向上する仕組みを調べてみましょう。

## まずDockerについてちょっと調べましょう?

Dockerの仕組みをイメージすると「仮想化」という概念が出てきます。「仮想化」は1台のOSにたくさんの仮想化ソフトウェアをインストールすることにより、複数のサーバとして利用できるものです。ただ、完全な仮想化ソフトウェアを含むのではなく、「コンテナ型」の仮想化物を含んでいます。

## Dockerがどのように動くかをみてみます。
簡単なDockerコンテナを作成します。

1. Dockerfileを作成し、ソースコードと一緒に追加します。
2. Dockerf

元記事を表示

ts-node config

## package

`package.json`

“`
{
“name”: “demo”,
“version”: “0.1.0”,
“main”: “”,
“scripts”: {
“start”: “ts-node src/main.ts”
},
“license”: “MIT”,
“dependencies”: {},
“devDependencies”: {
“@types/node”: “^17.0.2”,
“ts-node”: “^10.4.0”,
“tslib”: “^2.3.1”,
“typescript”: “^4.5.4”
}
}
“`

## tsconfig

`tsconfig.json`

“`json
{
“compilerOptions”: {
“lib”: [
“es6”
],
“target”: “es6”,
“module”: “commonjs”,
“moduleResolution”: “node”,

元記事を表示

Jest + @testing-library/react + mswのtips

JavaScriptではSinonをはじめとして、さまざまなモックの仕組みがあります。
その中で、最近Mock Service Worker(以下msw)が良いよ、とNode.js会長に教えてもらいました。

https://mswjs.io/

mswはブラウザではService Workerとして動き、通信をフックすることでフロントのJavaScriptコードからは本物のサーバーに見えるのが特徴です。また、Node.jsでも動きます。isomorphicではないのですが、モック用のハンドラー、ブラウザ用、Node.js用、エントリーポイントとファイルを4分割して作成すると、ブラウザ単体でもSPAとして動きつつ、サーバーサイドレンダリングでNode.jsでも動作するというNext.jsでも動作します。

https://github.com/vercel/next.js/tree/canary/examples/with-msw

Sinonでテストを書くと、どうしても内部実装べったりな壊れやすいテストになるのですが、mswだと疑似的なサーバーを実装している感じで書けますので、素結合

元記事を表示

草を生やしてこどものモチベーションを上げる【おまけ】heroku編~svg画像をpng画像に変換する~

# この記事は

シリーズ物の番外編です。
pixelaの画像を使いたかったのだけれども、gasだけでsvgからpngに変換することが難しく。
パワープレイでpngに変換したお話

– [草を生やしてこどものモチベーションを上げる【その1】仕様〜設計編](https://qiita.com/meowmeowcats/items/3fe2d0f006f374ffc71e)
– 草を生やしてこどものモチベーションを上げる【その2】実装編
– 草を生やしてこどものモチベーションを上げる【その3】テスト編
– 草を生やしてこどものモチベーションを上げる【おまけ】heroku編
– 草を生やしてこどものモチベーションを上げる【その4】運用編

# 課題 & 解決方法(再び)

子供(特に長男)が、「今何をやっているか?」を忘れがちで、宿題や準備が進みません。
宿題の途中で何か別のことをしたり、、、、

子供用のToDoリストを見える化してみます
ポイントで釣ってどうにかならないだろうか、、、、と思っている

– 仕様
– タスクを完了にするとポイントが貯まる
![スクリーンショット 20

元記事を表示

お猫様ほかほか監視装置

こちらは[IoTLT Advent Calendar 2021 \| Advent Calendar 2021 \- Qiita](https://qiita.com/advent-calendar/2021/iotlt) 21日目の記事です。
### はじめに
寒くなってきたので猫が3匹いる我が家では電気毛布が欠かせません(4枚くらい稼働中)
しかし最近の電気毛布は勝手に電源が切れる安全仕様になっていて、電気毛布が勝手に止まっています(切れないタイマー)
電気毛布が切れてお猫様が寒い思いをしてしまっている OR 電気毛布の上でお猫様がほかほかになりすぎていないかをチェックして冬を快適に過ごしてもらいたいというものです
### できたもの

電気毛布の上にサーモセンサを置いて、電気毛布上の温度を計測
10分ごとにLINE Notifyで温度を通知してくれる

### 環境・材料
– 非接触温度センサ - [OMRON MEMS非接

元記事を表示

HACCPが制度化されたので、温度を定期的に取得して記録するデバイスを作成

詳細は後ほど追記します。

#HACCP制度化
食品事業者は温度記録しないと法律違反になります。

#温度ロガーに金払うのがちょっと・・・
自作します。
多少慣れていないところがあったので2時間ちょっとかかりました。

https://zenn.dev/shuyin02/scraps/491f348774f38c

リンクでごめんなさい。
単三電池1本で1年持つらしいので、結構経済的
冒頭にも書きましたが、後で詳細は書き直します。

元記事を表示

fs には promis 版もあるよ

# 生成した大量のデータをファイルに書き出したい

「POSデータ処理のテストデータ作ってほしいんだよ。性能測るから1年分。ここに日付けいれてあとはフォーマットあってれば中身何でもいいから適当に作って。DBに食わせるためのCSVだから、ファイルは分けても分けなくてもいいよ。」

『はーい。適当に作りまーす。』

—-

『さくっとNodeで出すかー。』

『んーっと、500バイトぐらいのデータが1日1000件ぐらい……せめて月単位ぐらいで分けるか……』

“`javascript:main.js
const fs = require(‘fs’)

const date = new Date(2017, 0, 1)
const dir = ‘hoge’

while(date.getFullYear() < 2018 ){ const month = date.getMonth() while(date.getMonth === month){ const file = `${dir}/data_${month+1}.csv` let lines = []

元記事を表示

[ ].slice.call(arguments) がよくわからなかったので、ECMAScriptの仕様書含めいろいろ調べた

# [].slice.call(arguments)…?
現在Node.jsを勉強中で、[Node.js デザインパターン](https://www.oreilly.co.jp/books/9784873118734/) を読んでます。
そんな中、読み進めていくとこんな記述が多くありました。

“`javascript
function hoge() {

const huga = [].slice.call(arguments, 1)

}
“`
この部分。
結局ここは引数を配列にして返しているのですが、
`slice`メソッドを空の配列に使っているという点と、
その後に`call(arguments, 1)`と繋がっているところで、やっていることがよくわからなかったので、自分なりに調べて考えてみました。

##argumentsについて

まず、`arguments`について調べました。

mozillaの[公式ドキュメント](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference

元記事を表示

Puerts を使って TypeScript で Unity する方法

こんなつぶやきを見つけて気になったので入門した。

どうやら中華人民共和国の大手企業テンセントが開発中の、
TypeScript で Unity や Unreal Engine などを使えるようにするライブラリらしい。

https://github.com/Tencent/puerts

ドキュメントが殆ど中国語で大変だったけど、とりあえず基本的な使い方が分かったので書く。

# プロジェクトのサンプル

今回学習するにあたり、
「このリポジトリをクローンして改造すれば、普通に1からやるよりはそれなりに楽」な
サンプルプロジェクトを作った。

https://github.com/katai5plate/example-puerts-typescript-unity

# 環境構築

## Unity 側の設定

1. Unity プロジェクトを用意する
2. `git clone https://github.com/Tencent/puerts.git` する
3. リ

元記事を表示

Node.js デザインパターン Promise 逐次イテレーション

Node.jsで、Promiseを使用したイテレーションのデザインパターンについて学んだので書いていく。

複数の、Promiseオブジェクトを返すタスクを逐次実行するのには、以下のパターンが有効

“`javascript
let tasks = [task1, task2, task3]

let promise = Promise.resolve()

function task1() {
Promise.resolve(console.log(‘task1 completed’))
}

function task2() {
Promise.resolve(console.log(‘task2 completed’))
}

function task3() {
Promise.resolve(console.log(‘task3 completed’))
}

tasks.forEach(task => {
console.log(‘task handled’)
promise = promise.then(() => {
return task

元記事を表示

「APIを叩いてもCORSで弾かれた」の対応はこれ

# はじめに
開発環境にデプロイする際にセキュリティの観点から「APIを叩いてもCORSで弾かれた」ため、それに伴うアウトプットをします。
※個人ブログから技術的アウトプットはQiitaへ引っ越ししたので、こちらは過去に書いたブログとなります。

# エラーの事象
開発環境にデプロイする際にセキュリティの観点から
「 **APIを叩いてもCORSで弾かれた** 」です。

# 背景
まず冒頭の

> 開発環境にデプロイする際に

ということですが、今までローカル環境では、`nuxt.config.js`の設定で`proxyサーバー`を立てることができていたので、サーバー側でCORS対応をする必要ありませんでした。

しかし、Firebaseのhostingにデプロイした際にproxyサーバーを立てることができずに、結果、冒頭に書いたAPIを叩いてもCORSで弾かれました。  

調べてみると、セキュリティの観点から、オリジン(HTMLが置かれたサーバー)以外のサーバーからデータを取得すること(=CORS:Cross-Origin-Resource-Sharing)を、現在のブラウザ

元記事を表示

【TypeScript】AWS CDKv2でサクッとLambda関数を作る

先日AWS CDK v2がstableになり、一層便利に使えるようになったので、TypeScriptでLambda関数をサクッと作ってみました。
リポジトリは公開していますので、よかったらご参考ください :bow:

https://github.com/tokku5552/cdk-lambda-typescript

### 環境

– macOS Monterey バージョン12.0.1 (Intel)
– node -v
– v16.13.0
– npm -v
– 8.1.4

“`json:package.json(一部)
“devDependencies”: {
“@types/jest”: “^26.0.10”,
“@types/node”: “10.17.27”,
“jest”: “^26.4.2”,
“ts-jest”: “^26.2.0”,
“aws-cdk”: “2.2.0”,
“ts-node”: “^9.0.0”,
“typescript”: “~3.9.7”
},
“dep

元記事を表示

OTHERカテゴリの最新記事