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

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

Node.jsのLambdaでPre-Signed URLを発行する

# Pre-Signed URL
S3はアクセス権を設定することで、誰でもファイルにアクセスできるようにしたり、できなくしたりが可能です。
Pre-Singed URLは誰でもファイルにアクセスできなくしているところに一時的にアクセスを許可することができます。
今回はこのPre-SingedをLamndaで発行してみたいと思います。

# S3
バケットを準備して非公開の設定にしておきます。
テスト用に1つ画像ファイルをアップロードしておきましょう。

# Lambda
今回はNode.jsでPre-Singed URLを発行します。
LambdaからS3にアクセスできるようにロールを設定しておきましょう。

## コード
バケット名、ファイルパスは適宜変更して下さい。

“`js:Lambda
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}

async function getPresignedUrl(){
re

元記事を表示

rails serverでサーバーを起動しようとしたら、Webpacker configuration file not foundエラーが発生した時の対処方法

# rails serverでサーバー起動しようとするとエラーが
サーバーを起動するためにコマンドを実行。

“`
$ rails server
“`

すると次のエラーが発生。

“`
(中略)
Webpacker configuration file not found /Users/ユーザ名/app_name/config/webpacker.yml.
Please run rails webpacker:install
Error: No such file or directory
@ rb_sysopen – /Users/ユーザ名/app_name/config/webpacker.yml
(RuntimeError)
“`

# 解決法
最終的にwebpackerをインストールすることで成功しました。
webpackerのインストールには、Node.jsとYarnのインストールが必要で、これらをインストールした上でwebpackerをインストールすると解決します。

まずはGemfileにwebpackerの記述があるか確認。

“`:Gemfile
g

元記事を表示

gRPC 公式サンプルを Node.js + TypeScript on Windows (+ PowerShell) 化する

# 参考

こちらの素晴らしい記事を全面的に参考にしていきます。

https://qiita.com/daisaru11/items/67366061f7244378639c

# この記事でする事

– 参考記事の通りに進めると、Windows と lint 由来の躓きポイントやがあります。これに対応していきます。
– コマンドプロンプトは今後PowerShellに置き換えられていくそうなので、PowerShell前提で進めます。
– 題材として公式サイトにあるサンプルprotoファイルを使用して、これをTypeScript対応させていきます。

https://grpc.io/docs/quickstart/node/

# 下準備

適当な場所に、新規フォルダを作成し、“npm“ 初期化から “typescript“ と “ts-node“ のインストールまで行います。

“`powershell
npm init -y
npm i -D typescript ts-node
“`

今後 “src“ フォルダにソースを入れていくので、“src“ フォル

元記事を表示

LambdaのオーソライザーでBASIC認証を追加する【言語不問】

[前回作成したサーバーレスLaravel](https://qiita.com/umihico/items/64fcf159f68ebd866170)ですが、BASIC認証を付与しようとしたら躓きました。
**API Gatewayを経由すると、`WWW-Authenticate`ヘッダーがx-amazn-remapped-www-authenticateに置き換えらます。その結果BASIC認証を求めるポップを表示できず無条件で`401 Unauthorized`エラーだけを表示するWEBになります。**

つまり問題はLambdaではなく、API Gatewayです。ALBでURLを設定すればこの問題はありません。ALB経由のLambdaを使ったサーバーレスLaravelのBASIC認証は通常のLaravelと同じです。[53eda06](https://github.com/umihico/laravel-demo/commit/53eda06)

API Gateway経由でもBASIC認証を導入するには以下のように変更します。

+ 別途新規のLambda関数を作成し、API

元記事を表示

Twilio Functionsを使って営業時間内だけ電話を転送する方法

今回はTwilio Functionsを使って、営業時間内のみTwilioにかかってきた電話を任意の電話番号に転送する仕組みを実装します。

# 全体イメージ
スクリーンショット 2020-04-08 17.30.15.png

# 以下は取得済みとします
・Twilioアカウント
・Twilioの050番号

# 事前準備
[Twilio Functions を使って電話を転送する方法](https://www.tomokki-blog.com/2020/04/03/twilio-functions-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E9%9B%BB%E8%A9%B1%E3%82%92%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E6%96%B9

元記事を表示

[Node.js]requireで、確実にあるのに中身が空になってしまう(エラーは出ない)

##環境
node:v8.11.3

##プログラム
こんな感じでリポジトリがあるとして、確かにファイルはある。なかったらエラー出ますからね。。。

“`javascript:hogeRepository.js
const userRepository = require(‘../user/userRepository.js’);
console.log(userRepository)//出力結果は、{}

“`

##原因
この指定しているuserRepository.jsでもrequireを書いているプログラム「hogeRepository.js」をrequiteしてしまっていた。

つまり、お互いをrequireをしてしまうと、どちらかは空になってしまうようだ。

## 解決方法
そもそもお互いをrequireし合っていたのはミスだったのでそれ直したらなおった。

元記事を表示

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.cloudfl

元記事を表示

【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

元記事を表示

OTHERカテゴリの最新記事