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

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

clearIntervalでLINE botの処理を止める(「obnizとLineBotで防犯ツールを作ってみた」の続き)

# この記事で紹介すること
前回の記事では、
[obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)](https://qiita.com/shima-07/items/e4d6a33c460da77e25ec)
LINEBotから遠隔で「監視開始」指示を出したのはいいが**「監視終了」の指示が出せなかった。**
そのため、永遠に監視をしてセンサーが反応するたび何通も「誰かいるかも?」とメッセージがきていた。

本記事では「監視終了」の箇所を紹介します。

# どうすれば止められるか
setInterval()を使っていたので、clearInterval()を使って止めます。

[こちらの解説](https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval#example)によるとこういうことらしい。

>setInterval() メソッドは、一定の遅延間隔を置いて関数やコードスニペットを繰り返し呼び出します。これは、インターバルを一意に識別する interval ID を返します。よって

元記事を表示

NuxtでTrianglifyを使う

# 概要

Nuxt(とvuetify)で作成しているページの背景にTrianglifyを利用しようとしたところ、ドキュメントが見つかりませんでした。
なんとか実装できため、メモとして残しておきます。

# Trianglify

Trianglifyとは美しいポリゴンっぽい画像を生成してくれるライブラリです。
CDNとnpm両方で提供されています。

スクリーンショット 2020-04-07 23.55.26.png
http://qrohlf.com/trianglify/

# CDN

CDNから呼び出す際は`nuxt.config.js`の`head`に書き込みます。

“`nuxt.config.js
head: {
script: [{ src: ‘https://cdnjs.cloudfla

元記事を表示

【Node.js】複数のファイルパスをオブジェクトでの階層表現に変換する

# 経緯
Node.jsのfsを使って特定のディレクトリの中身をファイルパスにて取得した際に、ディレクトリの階層と互換性のあるオブジェクトに変換したかった。

# 結論
“`index.js
const data = [
‘/public/aaa/1.file’,
‘/public/aaa/2.file’,
‘/public/bbb/1.file’,
‘/public/ccc/1.file’,
‘/public/ccc/2.file’,
‘/public/ccc/3.file’,
‘/public/ddd/1.file’
];

const output = {};
let current;

for (const path of data) {
current = output;
for (const segment of path.split(‘/’)) {
if (segment !== ”) {
if (!(segment in current)) {
cur

元記事を表示

dotenvで環境変数ではなく .env 使う | Node.js

“`
$ npm install dotenv –save
“`

プロジェクトのルートディレクトリに `.env` ファイルを作成します。

“`.env

# これはコメント行
KEY1=VALUE1
KEY2=VALUE2
“`

## 実装

“`js

require(‘dotenv’).config();

if (typeof process.env.KEY1 == ‘undefined’) {
console.error(‘Error: “KEY1” is not set.’);
process.exit(1);
}

console.log(process.env.KEY1); //=> VALUE1
“`

元記事を表示

Node.js: child_process.fork()で起動したプロセスを子子孫孫殺す方法

本稿では、Node.jsにて、子プロセス、そこから派生した孫プロセス、さらにそこから派生したひ孫プロセス……を、一括して終了する方法を説明します。

※説明にあたって、実行環境はUNIX/Linuxを前提にしています。

## 子プロセスを殺しても、孫プロセスは死なない

Node.jsの[child_process.fork()]は、子プロセスを起動できて便利です。子プロセスの中で、`fork()`を使って、孫プロセスを起動することもでき、さらに、孫プロセスで`fork()`して、ひ孫プロセスを、といった具合に子プロセスはネストして起動することができます。

[child_process.fork()]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options

起動した子プロセスは[subprocess.kill()]で終了することができます。しかし、これは直接の子プロセスしか殺すことができません。どういうことかというと、

1. oya

元記事を表示

【ReactNative+Typescript】ローカルDBでRealmを使う

# 概要
`ReactNative`と`Typescript`のプロジェクトにローカルDBとして`Realm`をインストール・使用する際のメモ。
環境は以下の通り。

– node @10.15.0
– react-native @0.61.5
– typescript @3.5.3

# インストール

`node`のバージョンが`10.X`系にする必要がある。

“`
install –save realm
“`

※`react-native`のバージョンが`0.59`以下の場合は要`link`

## iOSの場合
要`CocoaPods`

“`
cd ios
pod install
“`

# 実装

“`javascript
import Realm from ‘realm’

// スキーマ名
const HOGE_SCHEMA_NAME : string = ‘HOGE’;

// スキーマ定義
const HOGE_SCHEMA : Realm.ObjectSchema = {
// スキーマ名
name : HOGE_SCHEMA_NA

元記事を表示

楽天のAPIを使ってマスクを買えるBotを作ってみた[LINEBotリッチメニュー]

##はじめに
ProtoOutStudioというイケイケなスクールの「LINE Bot+APIで表現してアウトプット」という課題の次の課題!「(前回を踏まえて)もう出来ている人はブラッシュアップや新しく何かを作ってみる」という課題で製作したものです。
前回の課題[楽天市場のAPIを使って買えるマスクを提案してくれるLINEBotを作ってみた \- Qiita](https://qiita.com/3yaka4/items/87d2b2303267eed12e14)をブラッシュアップしました。

##概要
前回できたものは、
LINEBotにほしいもの、「マスク」と入力したら
**楽天市場から「マスク」を検索**して、絞り込み検索で、**購入可能**、**最安価でソート**、**最低金額○円以上**、**最高金額○円以下**の商品を商品画像付きで3商品くらい返してくれるBot
結果として出来上がったものの、楽天の商品名ってSEO対策のせいでやたらと長くてかなりエリアを取る、3つ出したのにとても見比べられず実用性が低かったのでリッチメニューを使って使いやすくしようと思いました。

###

元記事を表示

『コピペOK』NodeでS3へ画像アップロード【2020】

まずは、[ここ](https://qiita.com/rh_/items/24ed1cebbdc3a731aabb)からs3へのアクセスキーと、シークレットきーを取得してください。

## S3 Bucketを作る

“`
$ npm i –save aws-sdk
“`

“`create-bucket.js

const AWS = require(‘aws-sdk’);

// Enter copied or downloaded access ID and secret key here
const ID = ”;
const SECRET = ”;

// The name of the bucket that you have created
const BUCKET_NAME = ‘test-bucket’; //同じバケット名は作れない ユニーク必須

const s3 = new AWS.S3({
accessKeyId: ID,
secretAccessKey: SECRET
});

const params = {
Bucke

元記事を表示

IoT Agency PlatformをHeroku上にデプロイする

Sigfoxが提供していたIoT Agency PlatformがGNU Affero General Public Licenseに基づくオープンソースとなりました。ここでは、IoT Agency PlatformをHeroku上にデプロイする方法を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/023e93de-86d8-6276-1a69-41c0c4e319e2.png)

IoT Agency Platformは、SigfoxやMQTT、Webhookに対応したIoTデバイスからデータを取得し、グラフや地図形式でダッシュボード化できるアプリケーションです。使い方に関しては、[こちら](https://qiita.com/ghibi/items/91f6880a4820c49cad5d)を参考にしてください。

#全体の流れ
Sigfox IoT Agency PlatformをHeroku上にデプロイする方法は下記の通りの流れとなります。
1. sig

元記事を表示

npmパッケージのvulnerability対応フロー

# 概要

– npmプロジェクトで利用しているnpmパッケージ(依存パッケージ)でvulnerability(脆弱性)が見つかったときの対処フローについて記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/102c8367-3dff-7ec9-61d6-a55d6ec510ef.png)

(GitHub等が親切に”We found potential security vulnerabilities in your dependencies.”のように通知してくれるので便利)

# 対応フロー
ざっくり[全体像](https://speakerd.s3.amazonaws.com/presentations/c5182e63c75e40c09e1371ab5549896e/npm_pj_vulnerabilities_flow_r2.pdf)は以下のとおり。

![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)

# この記事を見てできること
LINEBOTに「スタート」とメッセージを送ると遠隔操作で監視をしてくれるものが作れます。
異常があったら必要以上にしつこく知らせてくれます。
(処理をストップさせる処理は書いてないです)

## obnizの配線
配線はこんな感じ。
![IMG_0140.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/8074d21c-c583-121b-5a1a-fba8e030351a.jpeg)

コード内にも書いてありますが、人感センサーは“` {vcc:11, signal:10, gnd:9}“` につなぎます。

## ソースコード

はじめobniz.onconnectをするタイミングでハマって動かなかった。
handleEventよりも先にobniz.onconnectをしておく必要がある。

“`line_sensor.js
‘use strict’;

// obniz呼び出し
const Obniz = require(‘obniz’);
va

元記事を表示

【node.js】bookshelfとknexを使ってCRUD操作

expressを使ったbookshelfの操作方法について書かれております。
#Bookshelfとは
SQLを使わずデータベースを使うことができるORM

>Bookshelfは、 Knex SQLクエリビルダー上に構築されたNode.js用のJavaScript ORMです。 Promiseベースのコールバックインターフェイスと従来のコールバックインターフェイスの両方、トランザクションサポート、eager / nested-eagerリレーションのロード、ポリモーフィックな関連付け、1対1、1対多、および多対多のリレーションのサポートを備えています。
PostgreSQL、MySQL、SQLite3で動作するように設計されています。

#knexとは
>Bookshelfは、内部で「クエリービルダー」と呼ばれるknexモジュールを利用しています。ですから、インストールの際には、まずknexを入れておく必要があります。

良く分からないけど、Bookshelfを使う際にはついてくる物らしい。。。

#モジュールのインストール

“`bash

npm install –save

元記事を表示

Azure QnA Makerを使ってローカルで動くQ&A ChatBotを作ってみた

# 前提
– ローカルにNode.js環境があること(ない人はNode.jsをインストールしておいてください)

# 概要
QnA Makerとは、[公式](https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/overview/overview)に下記のように定義されています。
> データに自然な会話レイヤーを簡単に作成するクラウドベースの自然言語処理 (NLP) サービスです。 これは、特定の自然言語入力に対して、カスタム ナレッジ ベース (KB) の情報から最も適切な回答を見つけるのに使用できます。

要は、Q&Aを事前に登録しておくと、ユーザーの質問に対してAPIコールによりベストな回答を選んで返してくれるというものです。日本語に対応しているのでQ&A Chatbotを作成することに適しています。

この記事では、Azure QnA Makerを使ってローカルで動くChatBotを作成し、Emulatorを使って実際にBotと会話することをゴールとしています。
![chatbot.png](htt

元記事を表示

macOS環境構築雑多メモ

macの最近の環境構築。winもほぼ変わらないと思うのでURL見つけておこう。

– homebrew
– git
– nodebrew
– npm

###インストール内容
**homebrew**

“`
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”


==> The Xcode Command Line Tools will be installed.

Press RETURN to continue or any other key to abort
“`

RETURNしてpassword入力

“`
Already up-to-date.
==> Installation successful!
“`

**git**

“`
$ brew install git
“`

参考にしたサイト
https://qiita.com/micheleno13/items/133aee005ae

元記事を表示

obnizとブザーで兄弟配管工ゲームのコイン音を出してみた

#作ろうと思ったきっかけ
– ProtoOutoStudio 3回目授業でobnizに触れる
– ブザーが面白かった

 兄弟配管工ゲームでは、ブロックを叩くとコインが出てきますよね。その時の効果音を再現してみようと思いました。

#”あの”効果音の音階を調べてみた

[コインの音](https://muuu.jp/koneta/sm-coin/)

が、楽譜が読めないぞ….。オクターブもよく分からん….。
よし、トライ&エラーか???(音痴です)

#まずはベースとなる”ド”を鳴らす

”ド”の音が何Hzか調べました。今回は[こちら](https://general-knowledge.xyz/frequency-and-scale/)のサイトを参考に周波数を設定していきます。

【鳴らしてみた様子】

Node.js Express  で出てくる req, res, next

#はじめに
Node.jsのExpressの雛形を生成するコマンド

“`shell
express project-name
“`
で出力されるコードの一部ですが

“`javascript:index.js
var express = require(‘express’);
var router = express.Router();

router.get(‘/’, function(req, res, next) {
res.render(‘index’, { title: ‘Express’, user: req.user });
});
“`

この`req`, `res`, `next`は何なのか書いていこうと思います。

#reqについて
`req`は`app.get`の第一引数で指定されたパスに入ってきたHTTPリクエストを表すオブジェクトです。

“`javascript
var express = require(‘express’);
var app = express();
app.get(‘/’, func);
function func(

元記事を表示

【node.js】validationを新しいバージョンに対応コードに変更する

##解決したい問題
パッケージvalidationのバージョンが古いので新しいバージョンの書き方に変更したい。

##環境
OS: macOS
express: ^4.17.1
ejs: ^2.6.2
express-validator: ^6.4.0

##変更前のコード(古いコード)

“`javascript
router.post(‘/’, (req, res, next) => {
var request = req;
var response = res;
req.check(‘name’, ‘NAMEは必ず入力して下さい。’).notEmpty();
req.check(‘password’, ‘PASSWORDは必ず入力して下さい。’).notEmpty();
req.getValidationResult().then((result) => {
if (!result.isEmpty()) {
var content = ‘

    ‘;

元記事を表示

brew install nodeで色々詰まった自分用メモ

####前提

https://qiita.com/okohs/items/ced3c3de30af1035242d
この記事を読んで

“`
brew install node
“`
としたがエラーに出会った。

そこで、

homebrew で node のエラーを修正


にしたがって

“`
brew doctor
“`
のところまで行き、問題が生じたので一つ一つ解決したあと、

“`
brew install node
“`

をしたらまたエラーが出た。
今度はbrew linkできないよ〜というエラーだった。
そこで、エラーメッセージに素直にしたがって解決しようとした。
僕が選んだ選択肢は

“`
brew link –overwrite node
“`

こうしたら、とあるファイルに権限がないからエラーになった。
というわけで、

を参考にしてエラーを1つ1つ解決することになった。

その時のコマンドとエラーと解

元記事を表示

AWS LambdaのCustom Runtimeを使い、Node.js v8などEoLとなったランタイムを動かす

# はじめに

Node.js、バージョンアップの足がかなり早いですよね。
AWS Lambdaにおけるランタイムサポート期間も、これにあわせてハイテンポになっています。

ちゃんとバージョンアップをしろというご意見は重々承知の上ではありますが、
Node.js v8.10でLambda Functionを使い続けざるを得ない場合に、カスタムランタイムを使ってEoLとなったランタイムを動かし延命処置を図ります。

## 動作確認環境

* Arch Linux (2020.04.04)
* Docker 19.03.8-ce
* aws-cli 1.18.36

# カスタムランタイムの使い方

カスタムランタイムの仕様については、[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html)が詳しいので割愛します。

カスタムランタイムを使用するには、デプロイパッケージあるいはLayerに、`node`実行ファイルと、ハンドラー関数を起動するための`bootstrap`実行ファイル

元記事を表示

OTHERカテゴリの最新記事