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

Node.js関連のことを調べてみた2020年04月16日
目次

破壊するかどうか

ほぼ備忘録。よく使うメソッドがArrayを破壊するかどうか
ググるときは日本語なら「配列 [メソッド名] 破壊的」など、英語なら”array [メソッド名] mutating”あたりがよい

# 破壊する

– `fill()`
– `pop()`
– `push()`
– `reverse()`
– `shift()`
– `sort()`
– `splice()`
– `unshift()`

# 破壊しない

– `concat()`
– `entries()`
– `every()`
– `filter()`
– `find()`
– `forEach()`
– `includes()`
– `indexOf()`
– `join()`
– `keys()`
– `map()`
– `reduce()`
– `some()`

# 参考情報

– 手元の環境はNode v12.16.1
– [Array – JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Globa

元記事を表示

「うちでヨガしよう」ヨガポーズがあっているか判定してくれるLINE bot~Node.jsに読み込む~

#概要
 コロナウイルの影響で外出自粛、在宅ワークをされている方が多いと思います。普段よりも運動量が減ってしまうので、何かできないかと考えてヨガを支援するLINE botを開発しています。

#やりたいこと
 機能としては、お題のポーズ写真がbotから送られてくるので、そのポーズをとった自分の写真をbotに送ると正しいポーズか判定してくれます。

 まずはLINE botアカウントだけ作りました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/d3eca936-fa3e-5b97-8acb-ff95963d7390.png)

#実装
 学習モデルの作成は次の2つの記事で解説しています。
[Googleが提供しているサービス「Teachable Machine」でヨガポーズの学習モデルを作って遊んでみた](https://qiita.com/kmaepu/items/1350464b3940dfe6957e)
[Teachable Machineで作成したモデルを使用する

元記事を表示

在宅ワーク中に会議中サインをobnizとLINEBotで作ってみた deploy編

### はじめに
この記事は前回[在宅ワーク中に会議中だよサインをobnizとLINEBotで作ってみた \- Qiita](https://qiita.com/3yaka4/items/5765dc5abf547783dc59)のなかで外部Deployができなかったので前回のコードを元にHerokuにDeployしました。
deployとは別のところで一部未完成です。

### 概要
「今オンラインミーティング中!!!!ノックしないでー、開けないでー」みたいなことで気まずい思いをしたことが増えてきたので、いわゆる トイレの空き情報「空」 みたいなサイネージが欲しくて作りました。

LINEBotに「開けないで」といれると obnizのディスプレイに 『 × 』 を描画し
「終わったよ」 といれるとけしてくれます。
 
### できたもの
(ngrokからHerokuにかわりましたが、よく考えると見た目は前回同じだった。。。)
![IMG_20200415_214353-COLLAGE (2).jpg](https://qiita-image-store.s3.ap-northeast

元記事を表示

Node jsとESP32を使ってLEDをリアルタイムに制御する

# はじめに
##開発環境
node.js 12以降
npm 6以降
Arduino core for the ESP32 1.04以降
## 作るもの
スマホ等のブラウザからnode.jsを通してESP32にLEDの制御信号を送り,ESP32でリアルタイムにLEDを制御します。
またスマホからnode.jsサーバーにはwebsocketを、node.jsからESP32にはMQTTを用います。

##対象読者
node.jsを触ったことのある人
ESP32にコードを書き込める人
フルカラーLEDを持っている人
#node.js側の実装
まず以下のコマンドを実行する

“`
$mkdir 好きな名前
$cd さっき決めた名前
$npm init (質問に答える エンター連打でもヨシ!)
“`
##パッケージのインストール
して以下のコマンドを実行ください

“`
$npm install express mosca mqtt socket.io -s
“`
## サーバーのコードを作成
index.jsを作成して以下のコードを書き込む

“`js:index.js
//各パ

元記事を表示

Node.jsのモジュール解決プロセス(和訳)

Node.jsの`require`がどのようにモジュールを探すか、そのプロセスを説明した下記公式ドキュメントの和訳です。

* [Modules | Node.js v13.13.0 Documentation](https://nodejs.org/api/modules.html#modules_all_together)

内容に誤りがあればお教えください。

## Node.jsのモジュール解決プロセス

require(X) をパス Y にあるモジュールで実行したとき、

1. もし、 X がコアモジュールなら、
– a. コアモジュールを返す
– b. __終了__
2. もし、 X が “/” で始まるなら、
– a. Y のパスをファイルシステムルートにセットしなおす
3. もし、 X が “./”、”/”、”../”のどれかで始まるなら、
– a. [LOAD_AS_FILE]\(Y + X)
– b. [LOAD_AS_DIRECTORY]\(Y + X)
– c. 例外”not found”を投げる
4. [LOAD_SELF_

元記事を表示

Node.js + ibm_db + Db2 で、プレースホルダを用いたSQLを実行する

プレースホルダを用いたSQLを使って、Db2にアクセスします。

SQLの条件指定を固定値(リテラル)で記述すると、指定される条件が変わるごとに新しいSQLとしてコンパイルされることになり、where条件だけが異なる同じSQLでパッケージ・キャッシュがあふれてしまいます。コンパイルにかかる時間ももったいない。
そうならないよう、可変となる値の部分だけ(場合によっては列名なども)、疑問符「?」で表したSQLで記述することができます。JDBCなどではパラメーターマーカーと呼ばれますが、Node.jsではプレースホルダと表現されるようです。

ここから先は、Db2を使う場合に、プレースホルダにどうやって値を渡すかのメモです。

## プレースホルダーを用いたSQL実行例
ibm_dbのqueryでは、値を配列として渡します。

“`javascript:test2.js
var ibm_db = require( ‘ibm_db’ );
var settings = require( ‘./settings’ );

var db_con_str =
“DRIVER={DB2}”
+

元記事を表示

Node.js + ibm_db で Db2 に接続してSELECT文を実行する

Node.jsでDb2にアクセスしてみました。
Db2導入済みのLinux環境に、Node.js/ibm_dbをインストールするところからメモを残します。

## Node.jsからDb2にアクセスするための前提
* Db2サーババージョンがV10.5.0.4以上であること
* クライアントバージョンは制限なし

## 環境
| 項目 | バージョン |
|:——|:——|
| Linux | CentOS Linux 7 (Core) |
| npm | 6.14.4 |
| ibm_db | 2.6.4 |
| Db2 | 11.5.0 |

## Node.js のセットアップ

### 1. Node.js インストール・イメージのダウンロード
Windowsにいったんダウンロードして、LinuxへWinSCPで転送。
https://nodejs.org/en/download/

### 2. ファイル展開
(権限の都合上、rootユーザで実行)
どのディレクトリに展開するかは環境ごとのルールに従うと良さそうですが
個人で使える環境なので、

元記事を表示

【Node.js】Webpack + Express環境下でのpug(ejsでの可?)導入

#pug導入前環境
Webpack + Express + React + Typescript

#pug導入の理由
導入前はExpressでSSRをし,クライアントからのリクエストに対しres.send(html)で単純にhtmlスクリプトを送信するだけだった.これではデータベースから取得した値をクライアント側に渡すことができない.そのため,テンプレートエンジンであるpug(or ejs)を導入したかった.

#やりたいこと
単純にルートにアクセスされた時にhtmlテンプレートに値を渡してレンダリングしたい.今回やりたいこととしては,レンダリングさえしてくれれば良いので,htmlとしてdistに出力されなくて良い(これをしようとするとWebpackでHtmlWebpackPluginが必要)

“`typescript:server.ts
import express from ‘express’;
const postController = require(‘./controllers/postController’);
const app = express();

app

元記事を表示

async awaitやPromiseはなぜ必要なのか?

# 非同期処理というものが必要な理由

Apache Http Serverは接続ごとにプロセスを生成するような仕組みです。このため、接続してくるクライアントがものすごく多くなると、メモリ領域を圧迫したり、レスポンス性能が壊滅的に低くなります。

この問題は、C10K問題(Client 10,000)と呼ばれ、これを解決するには、小さいリソースで多数のクライアントに対応できる仕組みが必要でした。

その具体的な解決策として出てきたのが、NginxやNode.jsです。今回はJavaScriptにおける`async await`に着目しますので、Node.jsについて焦点を当てます。

Node.jsでは、多数の処理要求をシングルスレッドで(少ないリソースで)高速に捌けるよう、ノンブロッキングIOを実現するアーキテクチャが採用されています。このあたりの詳しい説明は[「Node.jsでのイベントループの仕組みとタイマーについて」](https://blog.hiroppy.me/entry/nodejs-event-loop)で学びましょう。

要求を捌いてくれるスレッドは1つだけなわけで

元記事を表示

[LINE bot] NowとHerokuで常時起動化させる

# この記事の内容
* LINEボットの完成形、常時稼働化のやり方
* そもそもモヤついていたところを自分なりにまとめてみた

## 完成品
(いじってたらなぜかアイコンが黒く怪しくなってしまった・・・どうやって戻すんだろう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/fc3431f0-d077-665a-a2b3-ed1cfd354801.png)

猿よりは賢いアプリを作った。(ただし、人間ほど完璧な回答はできない。)

* ?を付けて聞くと文章で返します
* ?がない時はwikipediaのリンクを返します
* お猿さんが知らない単語のときは、、無視します。。

## QRコード(お友達になってあげてね!)

※このアプリはこの後紹介するHerokuを使ってます。
![smartmonky.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/9bf51304-89

元記事を表示

Alfred4 + emoj|Alfred4で簡単に絵文字が入力できるらしい!→alfred-emojiに変更

Alfred4で簡単に絵文字が入力できるらしい!

しかも無駄にディープラーニングやってるとか(alfred-emoj)

 ↓

違うワークフロー(alfred-emoji)に変更
こっちのほうが新しい、インストール簡単、使い方もわかりやすい

## やったこと

– Alfred4インストール、PowerPack登録
– Node.jsのインストール
– npm -g install xxxに失敗するので、npmのデフォルトディレクトリを作成する
– alfred-emojのインストール
– Alfred Preferences > Workflows > Emoj > Copy to Clipboard > [x]Automatically paste to front most app

これはおもしろい!?

 ↓

– aflred-emojiのインストールに変更

## 参考リンク
Alfred3 おすすめワークフロー 7選 + 1
https://qiita.com/ryo2132/items/ef392999d32732fa0455

alfred-emoj

元記事を表示

vue-good-tableをTypeScriptで使おうとして TS7016: Could not find a declaration file for module ‘vue-good-table’.

# 使用バージョン
“`bash
$ npm list vue typescript vue-good-table
app@1.0.0
├── typescript@3.8.3
├── vue@2.6.11
└── vue-good-table@2.19.1
“`

# 問題
Vue.jsをTypeScriptで使っていて、以下ドキュメントどおりに進めたところ、コンパイルエラー発生。
> https://xaksis.github.io/vue-good-table/guide/#installation

#### エラー内容
“`bash

TS7016: Could not find a declaration file for module ‘vue-good-table’.
‘[app]/node_modules/vue-good-table/dist/vue-good-table.cjs.js’
implicitly has an ‘any’ type.
“`

# 解決
[app]/@types/以下にファイル作成。

“`typescript:vue-goo

元記事を表示

Yarnでローカルのパッケージをaddする方法

この投稿では`yarn`コマンドで、ローカルのパッケージをインストールする方法を紹介します。

通常`yarn add`はnpmjs.comで公開されたパッケージをダウンロードしてきてインストールしますが、ここで説明するのはローカルにのみ存在する自作のライブラリを`add`する方法です。

(`npm`で同様のことをする方法は、「[npmでローカルのパッケージをinstallする方法](https://qiita.com/suin/items/c9c342f557bd885dbe06)」をご覧ください)

## やりかた

ローカルのパッケージをインストールには、単純にインストールしたいパッケージのファイルパスを`yarn add`の引数にします:

“`bash
yarn add インストールしたいパッケージのパス
“`

node_modulesにインストールされるパッケージをシンボリックリンクにしたい場合:

“`bash
yarn add link:インストールしたいパッケージのパス
“`

## ローカルパッケージをインストールする具体例

少し具体例をもとに説明しま

元記事を表示

npmでローカルのパッケージをinstallする方法

この投稿では`npm`コマンドで、ローカルのパッケージをインストールする方法を紹介します。

通常`npm intall`はnpmjs.comで公開されたパッケージをダウンロードしてきてインストールしますが、ここで説明するのはローカルにのみ存在する自作のライブラリを`install`する方法です。

(`yarn`で同様のことをする方法は、「[Yarnでローカルのパッケージをaddする方法](https://qiita.com/suin/items/409dc019de605830b4c2)」をご覧ください)

## やりかた

ローカルのパッケージをインストールには、単純にインストールしたいパッケージのファイルパスを`npm intall`の引数にします:

“`bash
npm install インストールしたいパッケージのパス
“`

## ローカルパッケージをインストールする具体例

少し具体例をもとに説明します。

以下の図のように、`myapp`パッケージと`mylib`パッケージがあり、`myapp`から`mylib`を使いたい例を見てみましょう。

![](http

元記事を表示

discord.js + Klasa を使ったBotの作成覚え書き

参考 : [discord.jsのフレームワークKlasaが強すぎる](https://qiita.com/InkoHX/items/c0c2020e911e87cbdbef)
合わせて読んでください。

# 準備

* 環境
* Win10
* Node.js 12.13.0
* npm 6.12.0

適当にプロジェクトフォルダを作成し discord.js と Klasa をインストール

“`bash
npm install –save discordjs/discord.js dirigeants/klasa
“`

# コーディング

## 最初の一歩

`app.js` を作成

“`javascript:app.js
const secret = require(‘./secret.js’); // BOTトークンはここに記述
const token = secret.token;

const {Client} = require(‘klasa’);

new Client({
prefix: ‘!!’, // ボットのPrefix
lan

元記事を表示

LoopBackのTodoListチュートリアルを実施

## 概要
Node.jsのフレームワークであるLoopBackのTodoListを作成するチュートリアルを実施する。
参考:https://loopback.io/doc/en/lb4/Getting-started.html#create-a-new-project

上記のチュートリアルでは、DBにIn-MemoryDBを利用しているが、ここではMySQLを利用する。

## 環境構築
以下を利用してDockerで環境を構築する。
https://github.com/Esfahan/docker-loopback-tutorial

# TODO Tutorial
todo-list tutorialを行う。
参考:https://loopback.io/doc/en/lb4/todo-tutorial.html

## Requirements
– Node.js at v10 or greater

## アプリケーションを作成
Scaffoldをする。
参考:http://loopback.io/doc/en/lb4/todo-tutorial-scaffolding.

元記事を表示

DynamoDBで”The provided starting key does not match the range key predicate”とエラーが出た場合の対策(node.js)

Lambda(node.js)で、DynamoDBから超膨大なレコードを取得するプログラムを開発していました。
1分単位でクエリを実行して、レコードを小分け取得するようにしたのですが、
その際にプロパティを初期化できていなかったため、標題のエラーが発生したようです。

っていうことが、以下の記事を見てわかりました

https://qiita.com/nanananamememe/items/52293f1fece4458cc2fa

具体的な対策は `delete params[“ExclusiveStartKey”];` みたいな感じで
プロパティを消せば良いです。

すっごく長いですが、備忘録を兼ねてソースコードを掲載します

“`javascript

try {
var ENV = require(‘dotenv’).config();

var AWS = require(‘aws-sdk’);
AWS.config.update({ region: process.env[‘AWS_DYNAMO_DB_REGION’] });
var docClient

元記事を表示

特定のジオメトリが含まれるすべてのXYZタイルを取得する

## Abstract 要旨
GISのデータはラスター(画像)とベクター(点・線・ポリゴン)の2つに大別されます。これらはしばしば膨大なサイズとなり、効率的なデータ配信のためにXYZタイルという概念が存在します。XYZタイルの概念の詳細な説明は割愛しますが、でかいデータを分割して必要な箇所だけ配信する仕組みです。標準規格なのでフレームワークやアプリケーションを問わず、極地の一部を除く地球全域が常に同じタイルに区分されます。
「この地物ってXYZタイルだとどこに属するんだろう」「日本列島を網羅するXYZタイルの一覧が欲しい」というニーズが、ここ最近の私の中でありましたので、Node.jsモジュールとPythonモジュールのそれぞれのパターンについて本記事で説明します。
なおXYZタイルは、平面に落とした地球を一定のルールで分割しているため、パラメータをもとに計算する事も可能です(参考:[Qiita – 地図タイルの計算まとめ](https://qiita.com/MALORGIS/items/1a9114dd090e5b891bf7))。

## Sample Data 題材
北海道のポ

元記事を表示

http-serverによるローカル HTTPS server 構築 (5分でできる)

# はじめに
https環境でないと動かないJavascript APIなどを試験するのにローカルになんちゃってhttpsサーバが欲しくなった。以下が簡単で最速かなと思ったのでここに記す。

## mkcertのインストール
Macの場合

“`zsh
% brew install mkcert
“`

## CAのインストール(初回のみ)
“`zsh
% mkcert -install
“`

## サーバ証明書、秘密鍵生成
下記コマンドで適当なフォルダに証明書、秘密鍵を生成。mkcertコマンドには証明したいドメインを全て指定。 ローカルネットワークの他PCからもアクセスしたいので、自PCのPrivate Address (e.g. 192.168.11.2)も追加(各自適当に)。

“`zsh
% mkdir ~/cert
% cd cert
% mkcert localhost 127.0.0.1 192.168.11.2
% ls
localhost+2-key.pem localhost+2.pem
“`
## http-serverインストール

“`

元記事を表示

【NodeJS】AWS Lambda+APIGateway+DynamoDBでTODOアプリを作成

## はじめに
サーバーレスを趣味で始めてみたので、勉強がてらAWS Lambda+APIGateway+DynamoDBでTODOアプリを作成し始めました。
個人のメモとして、サーバー側とクライアント側での処理を記事にまとめます。(まだ作成途中です)

## 概要
Lambdaで使用する言語はNode
DynamoDBはidとtodoという項目のみを持ちます。
テーブル名は「todoTable」
今回は、GETとPOSTのみを実装します。

## Lambdaで関数作成
本来であれば1つの関数にまとめたかったのですが、GETメソッドであることをLambdaに渡す方法がわからず、ひとまず関数を分けました。

まずはGETメソッドから。
単純に全てのカラムを取得します。(本来はあまりscanは使わない方がいいらしいが)

“`js
const AWS = require(‘aws-sdk’)
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = (event, context, callback) =>

元記事を表示

OTHERカテゴリの最新記事