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

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

【基本】discord.js v13 でボット作成

初投稿です。あたたかい目で見てくださると嬉しいです。
[2021年10月23日時点]
## 開発環境
* Windows10
* npm 7.6.3
* node 17.0.1 (最小要件:16.6.0)
* discord.js 13.2.0

## v13の主な変更内容
* `Node.js` のv16.6.0を前提
* `Discord APIv9` に接続
* `discord.js` 本体と `@discordjs/voice` が分割(個々にインストールしなければならない)
* スラッシュコマンドをサポート
* `ClientOptions` の必須
* `message` が非推奨になり、 `messageCreate` が推奨される
* タイマー関連のメソッドが削除
* Intetnsを指定する際の `ALL`、`PRIVILEGED`、`NON_PRIVILEGED`は削除
* `Channel#startTyping`、`stopTyping` 等は削除
など…
詳しくは下記のサイトへ
[v13の主な変更箇所](https://scrapbox.i

元記事を表示

obnizボタンを押すと画面に『格言』を表示

##はじめに
obnizのボタンを押し、格言APIが表示されるIoTを作成しました。

APIはこちらを参考に引っ張ってきました。
https://zenn.dev/protoout/books/public-apis-api-get/viewer/01

##前提条件
・Node.jsのインストール
・axiosのインストール
・obnizにボタンをつける

##本題
完成は下記コード

“`javascript
//obnizのボタンを押すとadviceを返します
var Obniz = require(“obniz”);
//APIを叩ける
const axios = require(‘axios’);

var obniz = new Obniz(“XXXX-XXXX”); //obnizIDを入力
obniz.onconnect = async function () {
let button = obniz.wired(“Keyestudio_Button”, {signal:0, vcc:1, gnd:2});
while (true) {

元記事を表示

ApolloServerに脆弱性対策を実装する

#はじめに

本エントリでは、`GraphQL`APIにおけるサーバサイド実装において、最も利用されている`Apollo Server`への脆弱性対策を2ポイントから実装していきます。

https://www.apollographql.com/docs/apollo-server/

# クエリの複雑さと深さの設定(GraphQL由来の脆弱性対策)

初期状態の `Apollo Server` では、クエリの複雑さと深さに制限に関する設定がされておらず、

* 攻撃者から複雑なクエリを実行される
* 攻撃者から深い階層のクエリを実行される

リスクが残っています。

この状態では、悪意のある攻撃者からサーバのリソースを無駄に消費し、サーバに負荷をかけるクエリを発行されてしまう可能性があります。
この2つの攻撃と対策について、説明していきます。

## 複雑なクエリを実行されるリスクと対策

### 攻撃イメージ
`GraphQL` では、以下のようなクエリで簡単に大量のデータを取得可能です。
`first` は SQL でいう `limit` で、取得する件数を指定する引数です

元記事を表示

コードインジェクション攻撃

こんにちは。
今日のお題はコードインジェクションについてです。
JapaScriptのコーディングには自身がある方も、お役にたちそうな記事内容を見つけました。

コードインジェクション攻撃で、注射針を思い出すのは私だけかと思っていたところ、こちらのブログ記事にも注射アイコンを発見。万国共通のイメージなのでしょう。

コーディングの段階からセキュリティを取り入れるという考え方が理にかなっているとはわかるけど、やっぱりちょっと面倒、、、という方も、最後まで読んでみてください。

##JavaScriptとNode.jsでコードインジェクションを防ぐ5つの方法
https://snyk.io/blog/5-ways-to-prevent-code-injection-in-javascript-and-node-js/

JavaScriptとNode.jsでコードインジェクションを防ぐ5つの方法
Liran Tal (リラン・タル)
2021年4月5日

コードインジェクションを防ぐ安全なコードを書くのは簡単なようで実は、多くの落とし穴があります。たとえば、あなた自身がデベロッパとし

元記事を表示

L298dモータードライバーモジュール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873014/30c415f7-bd90-029f-8e24-2fc8f068493a.png)

この記事はJLCPCBと共同で公開されています。JLCPCBはPCBのプロトタイプと製造の分野で10年以上の経験を持つ最も経験豊富なPCBメーカーのひとつであり、品質、納期、費

元記事を表示

Reactロードマップ~アプリ構築~

#はじめに
この間、会社の先輩からReactが面白い!って話を聞いたので
自分用にまとめてみました。
#目次
1.環境
2.Node.jsのインストール
3.Reactのインストール
4.Reactのアプリを構築しよう!
5.まとめ
#1.環境
・Windows10
・Node.js
・React
#2.Node.jsのインストール
Reactを使ったアプリを開発する場合、Npde.jsとnpmが必須になります。
[Node.jsダウンロードサイト](https://nodejs.org/ja/)

念のため、npmのアップデートをしておきましょう。
“`npm update -g npm
“`
#3.Reactのインストール
npmを使ってReactをインストールしましょう。
“`npm install -g create-react-app
“`
#4.Reactのアプリを構築しよう
Reactのアプリ構築にはnpxコマンドを使います。npmのバージョン5.2.0以降では自動でダウンロードされます。
もしない場合は手動でインストールしましょう。
“`npm install

元記事を表示

C#とNode.jsを連携する 最終章

###EdgeJsは使わずにNode.jsの外部プログラム実行を利用する

前回はedgeJsには制約があり、ビルドでエラーが頻発することからコンソールアプリを使用することにしました。
**コンソールアプリを使うなら、nodejsに元々ある外部プログラム実行を使えばいいのではないか?**という結論に至りました。

####Node.jsの外部プログラムの実行

https://nodejs.org/api/child_process.html

“`
const { exec } = require(‘child_process’);
const path = require(“path”);

let pathStr = path.join(__dirname, ‘../ConsoleApp1/bin/Debug/net5.0/ConsoleApp1’)
let commendStr = pathStr + ” args1 args2″;

exec(commendStr, (error, stdout, stderr) => {
if (error) {

元記事を表示

生まれたばかりのGodと友だちになりました。(・´з`・)<神のみぞ知る情報を教えてあげるよ!

バイク(特に愛車)に乗るときは、天気予報や最高最低気温等、私はとっても気になってしまうのです。
ツーリングルートや食べ物等、他にも調べたいことがたくさんあり、調べる時間は楽しい:heart:ですが、簡素化できることは簡素化させたいですよね:sparkles:
必要な情報を調べて返答してくれる、会話もできて暇つぶしにも付き合ってくれて、しかもつぶやきまでしてくれる。
**神様(=God)**のようなLINE Botを生み出して友だちになろうと思います!

#命名 God(・´з`・)ちゃん
Botという言葉を知らない人に**「え?LINE God?」**と言われたのが発端です。気に入りました。
この顔文字も最近のお気に入りなので使うことにします。
「LINE God」に変更しようとしたところLINE Developersから「LINEと入る文字はNGです。」とはじかれたので、適当に「API Tha★God」にしてしまいました。1回変更すると1週間後まで変更できないとのこと:

元記事を表示

「PC触ってばかりで遊んでくれへん」が悲しいので obnizダンスLIVE を娘と開催【動画有】

## お父さんは今夜も仕事するんだって-(-_-;)冷
 と娘から冷たく毎晩言われ「遊んでるんじゃないの。勉強していて、とっても大変なんだよ。」
 と弁明しつつ、**obnizが机の上で楽しげにチカチカ光っていると信憑性ゼロ**なので、
 「お父さんすごい!」を目標に、一緒に遊びながらobniz創作してみることにしました。

 ↓勉強といいつつすごく楽しんでいる証拠ツイート
![マイオブ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/e0c766d4-ddc3-b2c9-abe8-4bcc8501dd11.png)

## チカチカ・メロディー・ダンシング!!
 試してみた結果、5歳児を引き付けるのはやっぱり
 **チカチカ(LEDライト)・メロディー・ダンシング(動き)**だったので
 ①LED ②スピーカー ③サーボモータ を使用し、obnizダンスLIVEを娘と共同開催。
 光と音だけでは娘の反応が薄かったので、モータを活用して「ダ

元記事を表示

obniz「今から帰るね!」とLINEでメッセージ送ると、奥さんの好きな曲が流れ、LEDランプで到着時間を色で教えてくれる仕組み!

##obniz「今から帰るね!」とLINEでメッセージ送ると、奥さんの好きな曲が流れ、LEDランプで自宅の到着時間を教えてくれる仕組み! 
仕事が終わって携帯を見ると、いつも奥さんから「何時に帰ってくる?」「何時の電車に乗る?」といったLINEメッセージが来ている。これが気になる理由は、夕食の準備やお風呂を沸かす準備があるからだ!
「今から帰るね!」とLINEメッセージを送ると自宅のobnizに連携させたスピーカーから、奥さんの好きな音楽が流れ、時間の経過とともに。LEDランプの色が変化する仕組みを制作したいと思いました。
(例)自宅到着1時間前:赤色ランプ 30分前:黄色ランプ 10分前:青色など 

`gcloud run deploy` で `Failed to start and then listen on the port defined by the PORT environment variable.` エラー

AWS をちょこっと触っていた人間による CloudRun への初めての deploy 作業。

image ( 呼び方あってるかわからない ) をビルドして、`gcloud run deploy` を実行。
以下のエラーが発生。

> Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable.

以下の質問・回答がドンピシャでした。

https://stackoverflow.com/questions/55662222/container-failed-to-start-failed-to-start-and-then-listen-on-the-port-defined-b

環境変数で定義されたポートを用いないといけないようです。

“`Dockerfile:Dockerfile
# (略)

ENV PORT 4000
EXPOSE 4000

# (略)
“`

node

C#とNode.jsを連携する その2

####C#とNode.jsを連携する

#####コンソールアプリを利用する

EdgeJSはC#のソースを文字列にしそれをコンパイルしています。ソースだろうがファイルだろうがDllだろうがC#を一旦文字列化し、再度ビルドします。
Nugetを読んでたり、外部DLLを参照していたり、Puhblishで書き出したものをすべて読み込んだりすると、Dllが足りなかったり、バージョン違いのedgeJSを上書きしてしまったりで、いろいろうまく動作しないことが多いです。
プログラムが複雑になると開発が難しくなる懸念があります。
そこでC#のコンソールアプリを別個に作り、外部プロセスでコンソールアプリを実行し引数でjsonを投げ、結果をJsonで標準出力しNodeJs側で取得するというのが開発効率がよいと考えました。

####サンプルファイル

一式をGitに上げました

https://github.com/iotagtk1/nodeJsEdgeJSApp

####Node.jsから実行されるC#

“`
process.env.EDGE_USE_CORECLR = 1;
process.

受信メールの検証、MailTrap

# 概要
以前、投稿した記事[「CodeceptJSで受信メールの検証、MailSlurp vs gmail お薦めはMailSlurp」](https://qiita.com/KazuhiroYoshino/items/d55e570f3b9fb0fd24bc)に利用できるメールサーバを1つ追加という話。
まず簡単に、前回紹介したものも含めて比較してみます。

|メール受信|必要なインストール|受信手段|利用するメールサーバ|特記事項|
|:—|:—|:—|:—|:—|
|MailTrap|特になし|APIを参考に自作したLastMail受信メソッド|MailTrap|1つのinboxに50通まで。その後は古いメールから削除される。無料だと500通/月まで|
|MailSlurp|MailSlurp-client|メールがこちらに送信された後のLastMailメソッド|MailSlurp|利用頻度によっては有料プランが必要。無料だと100通/月まで|
|gmail|inboxおよびmailParserおよびiconv|メール待受け中の着信に反応|gmail|IMA

多分絶対誰も必要ないけど、node環境からapollo clientを使ってfileをアップロードする方法

# 注意

fetchのpolyfillとして[node-fetch][3]を使っていると(next.jsのapi routesは使ってる)

> Note: when body is a Stream, Content-Length is not set automatically.

なので、`fs.createReadStream`なファイルを渡すと、結果としてcontent-lengthがheaders情報としてサーバー側に渡されない。 サーバーによってはエラーの原因になると思う。

puma v4.3.7未満はcontent-lengthが無いとPOSTデータを上手く処理できない様子なので、うまくサーバーにデータが行かない場合はpumaのバージョンを確認したほうが良い。

[Backport set CONTENT_LENGTH for chunked requests][4]

# 問題

– apollo clientを使っている
– apollo-upload-clientを使っている
– node環境から使っている(nextjsのapi routesとか)

この場合

docker-composeでNuxt.js環境構築

Nuxt.jsはローカルにNode.jsを入れてあげれば動かすことができますが、
ローカルをできるだけ汚したくないので、***docker-compose***で動かします。

## 構成
– Vue.js v2.6.14
– Nuxtjs v2.15.7
– コンポーネント設計
– compositionApi
– Nuxt.js用のプラグイン(@nuxtjs/composition-api)を使用
– TypeScript
– Vuetify(UIフレームワーク)

## 環境構築手順
### コンテナでNode.jsのバージョン確認まで
– nodeのイメージを使用する
– 作成したnodeのイメージに、yarnを用いて使用するモジュールをインストールしていく

“`Dockerfile
FROM node:lts

EXPOSE 3000
ENV HOST 0.0.0.0

RUN apt-get update && \
apt-get upgrade -y && \
yarn global add @vue/cli && \
yarn

【個人開発】新旧漢字コンバートAPIを作成しました。

# 概要
* 旧漢字もしくは旧漢字がある漢字を受け取り、文字列を置換して返すAPI

例) 蛍柄の螢光灯

|No| 説明 | 返値 |
|:——————:|——————-|——————-|
|1|新漢字→旧漢字|螢柄の螢光灯|
|2|旧漢字→新漢字|蛍柄の蛍光灯|
|3|旧漢字が含まれるか|true|
|4|旧漢字存在する新漢字が含まれるか|true|
|5|存在した旧漢字数|1|

# きっかけ
業務上で旧漢字と新漢字を変換するプログラム開発があり、
API経由でコンバートしてくれる仕組みがあれば便利だと思い開発に至った。
※その時は一から実装しましたが、自分と同じ考えの人も少なからずいると思ったので…

またAPIを作成しても**周知しなければ使用してもらえない**と思い、初めてQiitaに投稿することにした。

# 環境
|環境 | 名前 | バージョン
|——————|——————-|———–

世界の偉人たちが残した名言と戯れる

##知らないことは恥ではない。知っているふりや「まあいいや」と知ろうとしないことが恥なのだ。(ホリエモン)
今の私に刺さる:cupid:名言です。堀江さん良いこと言いますね。
落ち込んだとき、人生の迷ったとき、暇なとき、偉人たちの名言を調べたりしますよね。

というわけで、人生を導いてくれる名言BOTを作成しました。

##LINE Bot 実演
名言を含む言葉を投げかけることでランダムで名言を返してくれます。
収録数はおよそ3000!
名言だけでは何なので、偉人たちの画像とプロフィールもつけています。
この名言が生まれた時の歴史的な背景に思いを馳せてはいかがでしょうか。

・・・動画が暗い&地味すぎる。なぜ白黒写真の偉人を引いてしまうのか。

せっかくなのでお気に入りがみつかるまでリスエストし続けてみた結果、
イチロー(SSR)ゲット
レアリティは自分の心が決める。
![ichi_ssr.jpg](https://qiita-image-store.s3.ap-n

Nuxt +Firebase のメモ

# 内容

Nuxt + firebase で web アプリを作る方法についての内部向けメモです。基本、下記あたりの記事を見てそのままやっただけです。

– [Nuxt 公式](https://nuxtjs.org/ja/docs/get-started/installation)
– [Nuxt/Firebase 公式](https://firebase.nuxtjs.org/)
– [Nuxt.jsでfirebaseを使う方法](https://devsakaso.com/nuxt-firebase-installation/)
– [Nuxt.js + Firebase Authentication + FireStoreでwebアプリケーションハンズオン](https://qiita.com/ririli/items/d0d3a6ae78c1b6e827fc)

# 手順

## 準備

Ubuntu 20.04LTS でやります。

“`
$ npm -v
6.14.15
$ node -v
v14.18.1
$ yarn -v
1.22.11
$ firebase —

メモ:node.js+Postgres+Basic認証の例

[前](https://qiita.com/DiveMasakazu/items/cecd5987023f7292665f)

前はテスト用に何も考えないRestサーバを立ててみたが、
認証とDBトランザクションを一応考えてもう少しまともなものにしておく。

## Postgresのプール
[ここ](https://qiita.com/sa9ra4ma/items/cea1abecf3434cbbc08c)を参考にpool.jsを作成してみた

“`node.js:pool.js
const { Pool } = require(“pg”);

const pool = new Pool({
user: ‘postgres’,
host: ‘localhost’,
database: ‘postgres’,
password: ‘password’,
port: 5432,
max: 2
});

pool.tx = async (cb) => {
const connection = await pool.connect()

メモ:node.jsでPostgreから簡単なデータをJSONで返す

手元で簡単にPostgres+Node.jsでRestAPI的なテストをしたい
という事もあるので自分用のメモ。
DB設計は別でやって、select文を発行してデータを受けたい。ORマッパー等は使わない。
(ORマッピングが嫌い、というのもある。SQLと実行計画は意識するべきだろ派)

環境はWindows
Node.jsとPostgresのインストールは省略。

## express

パッケージ管理のnpmを使う前にプロキシ設定が必要な場合は行う

“`
call npm -g config set proxy http://xxx:8080
call npm -g config set https-proxy http://xxx:8080
“`

プロジェクト用のディレクトリを作成し移動。
npm install express
でexpressをインストール。(新しいnpmではsaveオプション不要、らしい)

とりあえずexpressの動作見るだけならこんな感じ

“`
const express = require(‘express’);
const app = e