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

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

DynamoDB Localトラブルシューティング(Node.js + TypeScript)

`Node.js + TypeScript(Dockerコンテナ)`から`DynamoDB Local`へ接続、操作をする際に発生したトラブルの備忘録です。

## DynamoDB Localとは?

AWS上のDynamoDBにアクセスすることなく、DynamoDBを利用するアプリケーションの開発・テストをすることが可能になります。

[DynamoDB Localの設定(ダウンロード版)](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html)

## 背景

前提として`Node.js + TypeScript`のプログラムはECS on Fargateのタスクスケジューラで定期実行するプログラムです。

今回DynamoDB Localを導入するのは、開発時にAWSのDynamoDBを利用せず、ローカル環境で全て完結させたいというのが理由です。

## 忙しい人のために

トラブル対応後のファイル構成、操作手順が下記になります。

[まとめ? (ファイ

元記事を表示

Asciidoctor.jsでプレビューしながら編集する

AsciiDoc の処理系といえば、Ruby の Asciidoctor[^asciidoctor]が有名です。しかし、JavaScript な Asciidoctor\.js[^asciidoctor_js]もあります。本記事は後者を使ってみた記録です。

## 関連

– https://qiita.com/Yamane@github/items/090973185791c174532f : ブラウザで生成結果を見つつ、AsciiDoc 文書を編集できます。反映までの時間が短かく、快適に編集できます。
– https://qiita.com/dbgso/items/927c4e3d0f739855f8d6 : こちらは Ruby 版の Asciidoctor を使っています。Docker で手軽に使い始められるところが良いですね。

## バージョン

“`shell-session
$ asciidoctor -v
Asciidoctor 2.0.10 [https://asciidoctor.org]
Runtime Environment (ruby 2.7.1p83 (2

元記事を表示

Express+Passportで簡単にOpenID ConnectのRPを作成してみた

#目的と前提
認証/認可について少しづつですが備忘録としてまとめようシリーズ2つめです。
前回はSAML2.0の仕様についてまとめてみました。
https://qiita.com/yuna-s/items/8aa318ca5426c3d9c7e6

今回は、Nodejsを使ったRPの作成[1]です。
OpenID Connectのアクセストークン取得まで実装しています。
(UserInfoを取得するところは実装していません)

IdPの作成にはオープンソースソフトのOpenAM[2]を使用しています。

認証/認可、基礎的なOpenID Connectの知識があることを前提としています。
#環境
macOS Catalina v10.15.5
OpenAM 14.5.1 Build d8b8db3cac (2020-March-11 23:25)
node v13.13.0

利用モジュール
“dependencies”: {
“cookie-parser”: “~1.4.4”,
“debug”: “~2.6.9”,
“express”: “~4.16.1”

元記事を表示

esbuildがwebpackより187倍早いらしいので環境構築しよう

# はじめに
久しぶりの投稿になります。
今回は以下の記事で、esbuidがすごい!!という話を聞きつけこの記事を書くことにしました。
参考: [Web フロントエンド] esbuild が爆速すぎて webpack / Rollup にはもう戻れない

どのくらいすごいのでしょうか?
参考に挙げている記事によると
> esbuild は Go 言語で書かれた JavaScript および TypeScript のビルドツールです。 esbuild 単体でトランスパイル + バンドル + ミニファイできます。 JSX / TSX もサポートされています。そしてめっちゃくちゃ速いという触れ込みです。最初から速度を意識して無駄がないように書かれており、構文解析・出力・ソースマップ生成は並列化され、ネイティブコードで動作します。公式の

元記事を表示

npm install –save firebase で発生したエラーの回避法

記事執筆時点で安定版のfirebase 6.2.4をインストールを試みたところ以下のエラーが出ました。

“`
$ npm install –save firebase@6.2.6
:
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! grpc@1.20.3 install: `node-pre-gyp install –fallback-to-build –library=static_library`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the grpc@1.20.3 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /Users/yokoyamar

元記事を表示

JSON.stringifyで`TypeError: Converting circular structure to JSON`というエラーが出た時の対処法

オブジェクトをJSON.stringifyしたときに、循環参照が含まれていると以下のようなエラーが出ます。

“`js:コード
const a = { a1: “test” };
a.aa = a;
JSON.stringify(a);
“`

“`bash:実行結果
JSON.stringify(a);
^

TypeError: Converting circular structure to JSON
–> starting at object with constructor ‘Object’
— property ‘aa’ closes the circle
at JSON.stringify ()
“`

# 対処法
json-cyclicを使えば解決します。

> json-cyclic – npm
> https://www.npmjs.com/package/json-cyclic

“`bash

npm install json-cyclic
“`

“`js:コード
const { de

元記事を表示

ejsでインクルードをするときに、パスをルート相対URLで指定したい

## process.cwd()

Node.jsの`process.cwd()`は、コマンドが実行されたディレクトリを返します。

たとえば、次のようなファイル構成だったとしましょう。

“`plaintext
./project
└ src/
 └ *.ejs
└ package.json
└ gulpfile.js
“`

この場合、`project`ディレクトリで`gulp`コマンドをたたくことになります。その時に`process.cwd()`が返す値は`path/to/project`になるので、次のように1つ変数化しておけばルート相対URLのような感覚でパス名を記述することができます。

“`js
<% const ROOT = `${process.cwd()}/src`; %>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<%- include(`${ROOT}/path/to/_include.ejs`) -%>
<

元記事を表示

[JavaScript]ESLintの設定をグローバルルールで保存する

# 初めに

学習用でESLintが使いたいけど、プロジェクトごとに設定ファイル(.eslintrc.*)を作成するのは面倒。
そこで、設定ファイルをグローバルルールとして保存してプロジェクトごとに作成しなくていいようにしたので、その時にやった方法を備忘録としてまとめてみました。

# 方法

## 1. ESLintのインストール

まずはESLintをグローバルインストール。

“`terminal
> npm -g i eslint
“`

ここで、-gは–global、iはinstallを省略したもの。

## 2. ESLintの設定ファイルをグローバルとして保存

`.eslintrc.json`を作成し、ユーザーディレクトリ直下に保存する。

– .eslintrc.jsonを保存する場所

“`
MacOS:/ Users / {USERNAME}
Windows:C:\ Users \ {USERNAME}
“`

– .eslintrc.jsonの中身

“`json:.eslint.json
{
“extends”: “eslint:reco

元記事を表示

[Node.js] Handlebars Tips

# 概要

テンプレートエンジンであるHandlebarsをいろいろ触ってみた。
Handlebars自体は珍しいライブラリではなく、他に記事があるので、日本語情報が見つからなかった機能を主に紹介する。

https://handlebarsjs.com/
Handlebarsを使う際は、ここを一度は目を通すことをお勧めする。

> ここでは、通常のテンプレートとしての機能は紹介しない。
> 環境は、AWS Lambda Node.js上で動かす事を想定している。

# pertialとhelper

Handlebarsで機能を拡張する方法には、この2種類がある。

* partial : いわゆるサブテンプレート、テンプレートに動的に他のテンプレートを埋め込む事ができる。
* helper : 関数。テンプレートの中でヘルパ関数を実行し、その結果をtemplateに埋め込む事ができる。

“`hbs
{{!sample.hbs}}
{{#if hoge }}
{{ sample.sub.hbs hoge }}
{{/if}}
“`

例えばこんな感じで、`sample.hbs

元記事を表示

Node.jsでOSの環境変数を読み込む

“`
yuta:~ $ node
> process.env
{ SHELL: ‘/bin/bash’,
SESSION_MANAGER:
‘local/CARMILLA:@/tmp/.ICE-unix/1792,unix/CARMILLA:/tmp/.ICE-unix/1792’,
QT_ACCESSIBILITY: ‘1’,
“`

## 実行

“`app.js
console.log(process.env.USER)
“`

“`
yuta:~ $ node app.js
yuta
“`

元記事を表示

コロナで危険度の高い人を見つけたらすぐ治療しようとするアプリ作ってみた

# はじめに
この記事は [chillSAP 夏の自由研究2020](https://note.com/chillsap/n/n66e12ef65d11/) の記事として執筆しています。

猛暑が続いておりますが、皆さまいかがお過ごしでしょうか。
今年はコロナの影響で、日々言い知れぬ不安に苛まれることも多いのではないでしょうか。
この状況下で発熱してしまった方のご心境は察するに余りあります。
このような方の症状を一刻でも早く緩和させるため、今回は特に治療の緊急度の高いご高齢&高熱の方を判定してイ〇ジンをかけて治療を行うアプリを開発しました。
(注:本記事はコロナウイルスに対する治療法を提案するものでもなければ、イ〇ジンの効果を証明するものでも無いことをご承知おきください。また、ご気分を害された方がいらっしゃったら誠に申し訳ございません。)

# 概要
![コロナアーキ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531075/499b345c-0aa4-5046-15cb-842a95b2fea2.p

元記事を表示

pkgでインストールしたnode.jsを、Nodebrewのnode.jsに入れ替えたい!

# nodeのバージョン管理を簡単にした〜い
ので、個人的にnodeをインストールするときは最初からNodebrewを使っているのですが、仕事で使っているマシンでは何を思っていたのかpkgでインストールしていたので、入れ替えした手順を備忘として残したいと思います

~~同部署の人がnodeのバージョン変更で手こずってて、Nodebrewで一発やんけと嘲笑していたところ
自分もpkg版だったのでしれっと入れ替えた~~

とりあえず最初に、そもそもnode.jsが入っているかを確認しておきましょう

“`
$ node -v
“`
そしてNodebrewとは、?



hokaccha / nodebrew

Node.js version manager. Contribute to hok

node.jsでnpm run devがエラーになった場合の対処法

nuxt.jsの開発環境でで以下を実行したらエラーが出ました。

“`
$ npm run dev
:
This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
:
“`

##結論
以下のコマンドを実行したら解決しました。一度消去後に再インストールしてます。

“`
$ rm -rf node_modules
$ rm package-lock.json yarn.lock
$ npm cache clear –force
$ npm install
“`

コマンド実行前もインストールされているはずでしたが、バージョンの違いでエラーが出る場合があるので一度消去して、再インストールしたらいけました!バージョンは変化していませんが、node?のバージョンが変化してのでしょうか。
詳しい

生のNode.jsでプロジェクト作成時にやること

当然ではありますが、生のNode.js(特にWebアプリ)でプロジェクト作成時にやることが多く、HTTP通信に関する勉強にもなったのでメモを残しておきます。
Node.jsに関してはほぼ初心者なので、不足や誤りがあるかもしれません。発見した場合はコメントなどでご報告いただけますと幸いです。
## プロジェクトの初期化
とりあえず初期化。
いろいろ聞かれるので、それぞれのプロジェクトに合った選択をしていきます。

“`zsh
$ npm init
“`
– __package name: (フォルダ名)__ プロジェクトの名前を定義します。特に変更がなければそのままReturnまたはEnterでOK。
– __version: (1.0.0)__ バージョンを定義します。これも1.0.0のままでよければそのままReturnまたはEnterでOK。
– __description:__ プロジェクトの概要を定義します。これも空白のままでよければそのままReturnまたはEnterでOK。
– __entry point: (index.js)__ アプリケーションを起動するためのファイ

OBS をスマホや M5GO(M5Stack)から遠隔制御 〜 MQTT や obs-websocket を利用 〜

## はじめに
この記事は、ライブ配信などで使われる **[OBS Studio(以下、OBS と記載)](https://obsproject.com/ja) を遠隔制御してみた**という内容です。

まずは、その仕組みを実際に動作させている様子をご覧ください。

Angular開発環境をDockerコンテナで立てる

# Angular開発環境をDockerコンテナで立てる

Angular 開発環境を Docker コンテナで立てる際に、コンテナ内の localhost:4200 にホストマシンからアクセスできないなど手こずったので、環境構築手順を記載したい。

## 目次

* [導入](https://qiita.com/freope/items/94b639a4750d06dbc86e#%E5%B0%8E%E5%85%A5)
* [作業フロー](https://qiita.com/freope/items/94b639a4750d06dbc86e#%E4%BD%9C%E6%A5%AD%E3%83%95%E3%83%AD%E3%83%BC)
* [各構成ファイルの役割](https://qiita.com/freope/items/94b639a4750d06dbc86e#%E5%90%84%E6%A7%8B%E6%88%90%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%BD%B9%E5%89%B2)
* [参考資料](https://qii

nowコマンドが使えなくなっていたのでnodeをアップデートした

ある日、Zeit Nowのnowコマンドを使おうとしたところ、実行できなくなっていました。
1ヶ月前くらいまでは使えていたのに…
解決方法をチップスとして残します。

# Nowとは
nowと打つだけでデプロイできてしまうシンプルで簡単に使えるPaaSです。
https://vercel.com/home
私はNext.jsで利用していますが、他のNode.jsのフロントエンドFWやPythonやGoなどでも使えるようです。

Next.js + nowの使い方はこちらが参考になります。
https://qiita.com/shioiyan/items/540a0d68118c0384f4e4

# nowコマンドが実行できなくなった
“`
now
> UPDATE AVAILABLE Run `npm i -g now@latest` to install Now CLI 19.2.0
> Changelog: https://github.com/zeit/now/releases/tag/now@19.2.0
> Error! The specified token is

Node.jsでディレクトリ配下にあるファイルを再帰的に探索する

下記のディレクトリ構造から、txtファイルのpathとfile名を一覧で取得する方法(Node.js)です。

“`
./dir
├── dir2
│ ├── dir3
│ │ ├── file2.txt
│ │ └── file3.md
│ ├── file2.txt
│ └── file3.md
├── file1.md
└── file1.txt
“`

## 実装コード

“`javascript
const fs = require(‘fs’);
const path = require(‘path’);

const searchFiles = (dirPath) => {
const allDirents = fs.readdirSync(dirPath, { withFileTypes: true });

const files = [];
for (const dirent of allDirents) {
if (dirent.isDirectory()) {
const fp = path.joi

EC2でReactをhttpsでnpm startして外部からアクセスする

EC2上でReactアプリをhttpsでホストすることがあったので備忘録です。

AWSならACMとかELBとかRoute53とか使えるわけですが、
ちょこっとテスト的に動かしてみたいだけなのでできるだけ簡単にSSL化したいと思います。

結論から言うと
HTTPS=trueにしたnpm startでlocalhostでhttpsサーバーを立てて、
EC2外部からのアクセスはnginxでlocalhostにリダイレクトします。

# 環境
* EC2 (Amazon Linux 2)
* React
* nginx
* Node.js

# 1. EC2を立てる
EC2立てます。
http, httpsのポートをあけておきます。

# 2. nginxインストール・設定
## インストール
nginxインストールしますが、Amazon Linux 2ではnginxがyumでサポートされていないらしいので
以下のコマンドでインストールします。

“`
$ sudo amazon-linux-extras install nginx1.12
“`

## SSL化設定
SSL化するにあ