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

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

package.jsonに”engines”を設定すると「このバージョンのNode.jsでしか動かない」を表明できる

特定のバージョンのNode.jsでしか動かしてほしくないパッケージがある場合、package.jsonの`engines`フィールドに、Node.jsのバージョンを明記しておくと、`yarn install`や`npm install`したときに警告を表示できるようになる。

* 実行環境のバージョンを固定したいときに便利。

## 例: Node.js 12だけに限定したい場合

例えば、Node.js 12で実行してほしい場合、次のように`engines`フィールドをpackage.jsonに追加する:

“`package.json
{
“name”: “my-module”,
“version”: “1.0.0”,
“main”: “index.js”,
“license”: “MIT”,
“engines”: {
“node”: “12.x”
}
}
“`

この設定で、Node.js 13環境下で`yarn install`すると、エラーを起こすことができる:

Hyper.pngNode.js を完全にアンインストールする

過去に [Mac nodebrew で Node.js をインストールする手順](https://qiita.com/ucan-lab/items/517ee13a2f8769ab866c) の記事を書きました。

現在の私の環境では[nodebrew](https://github.com/hokaccha/nodebrew)は削除して、[Node.js](https://nodejs.org/ja)は[nodenv](https://github.com/nodenv/nodenv)で管理し、nodenvは[anyenv](https://github.com/anyenv/anyenv)で管理してます。

“`
$ brew uninstall nodebrew
“`

“`
$ curl -o uninstall-node.sh https://gist.githubusercontent.com/nicerobot/2697848/raw/uninstall-node.sh
$ chmod u+x uninstall-node.sh
$ ./uninstall-nod

元記事を表示

Reactのテストはスナップショットじゃなくてスクリーンショットで

![title](https://github.com/fwouts/react-screenshot-test/raw/master/brand/logo.png)

Reactのテスト書いてますか?
スナップショットテストが一般的ですが、GitHubのPullRequestではどうも差分が分かりづらい。もしスクリーンショットを自動的に撮って差分を画像ファイルとして比較できたらなぁと思っていたところ良さそうなパッケージを見つけました。[react-screenshot-test](https://github.com/fwouts/react-screenshot-test)というパッケージなのですが、以下のように差分を画像ファイルとして確認できる素晴らしいツールです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163591/7f8473ce-0ad6-a925-f2ac-b59ed99c53aa.png)

早速試してみます。まずはインストールから

“`
$ yarn ad

元記事を表示

不規則にエラーを返すWebAPIを使って、マイクロサービス間のリトライを実装しよう。

![retry.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163591/58f71d82-f8ee-7bc9-f9ed-d1127e559f39.gif)

マイクロサービスアーキテクチャでは、サービス間の通信に失敗することがあります。ネットワークを介したリモートコールである以上、なんらかの異常が発生することは考慮に入れた上で設計をする必要があります。

本記事では REST API を使用した場合の API のリトライ方法について、いくつかのライブラリを使用して解説します。

## リトライする条件

サービス間の通信に失敗しても、全てリトライするというわけにはいけません。何度リトライをしても必ず失敗するエラーに対しては無駄にリトライをしないようにしましょう。
RESTful な API では、4xx 系のエラーはリトライ不要です。4xx 系エラーは主にバリデーションエラーや認証エラーなど、クライアント側に問題があるリクエストであるため何度リトライしてもエラーが返却されます。

以下に代表的な H

元記事を表示

Square APIを使って在庫数リストを作成

Square APIを使って、在庫数の取得ができるようになったので、在庫数の一覧を作ってみます。

[Square APIを使ってみる(在庫数の取得) \- Qiita](https://qiita.com/seya128/items/c75ff173d1a1d353b419)

## 商品リストをシンプルにする

CatalogApiのlistCatalogで取得できるカタログオブジェクトから、在庫表を作るのに必要そうなデータだけを抜き出して、解析しやすくします。

“`javascript
// カタログオブジェクトをシンプルにする
function simplifyCatalogObjects(catalogObjects) {
let resultObjects = [];

catalogObjects.forEach(obj => {
const resultObj = {};
if (!obj.is_deleted) {
resultObj.id = obj.id;
resu

元記事を表示

mongo + express + nodejs + ejs + node-dev で 新規PJを立ち上げる

#menスタック構築手順
mongo + express + nodejs + ejs を構築したので備忘録として残したい。

– 一般的にはMEANスタックだが、Angularを除いて構築することにした。
– jadeではなくejsとした理由は、汎用的に使えるhtml\*1 でモックをつくるため
– angularはあとで必用になったら考えることにした。

##前提条件
1.nodejs インストール
2.express インストール
3.mongodb インストール

##構築
####1.モック作成
画面イメージhtml\*1 を作成する。

####2.フォルダ作成
2-1.ディレクトリ移動
2-2.フォルダ作成

####3.プロジェクト作成
3-1.npm install
3-2.ディレクトリ構成確認
root/
 ├ bin/
 │ └ www
 ├ node_modules/
 ├ public/
 │ └ images/
 │ └ javascripts/
 │ └ stylesheets/
 ├ routes/
 │ └ index.js/
 │ └ users.

元記事を表示

amplify cliはnode.js version 10以上が必要

# 現象

amplify cliをインストール(`npm install -g @aws-amplify/cli
`)して、いざ`amplify`を使おうとしたら

“`bash
amplify configure
/home/****/.nvm/versions/node/v8.16.2/lib/node_modules/@aws-amplify/cli/lib/plugin-manager.js:47
catch {
^

SyntaxError: Unexpected token {
at Generator.next ()
at Object.Module._extensions..js (module.js:664:10)

“`

とエラーメッセージが出て利用できなかった。
`amplify init`など他のすべてのコマンドで失敗した。

## 解決策

単純な話で、[AWS amplify cliのgithub](https://github.com/aws-amplify/amplify-cli

元記事を表示

Electronで1からデスクトップアプリを作り、electron-builderを使ってビルド・リリースするまで

# この記事について
この記事では、Electronを使ってデスクトップアプリを作成し、それを配布可能な状態にビルドするまでの過程を紹介します。
また、Electronアプリを作る際に、知っておくと便利な知識・ライブラリもあわせて紹介します。

## 使用する環境・バージョン
– OS : MacOS Mojave ver 10.14.5
– node.js v12.13.0
– npm 6.13.4
– electron 8.0.1
– electron-builder 22.3.2

## 前提条件
– node.jsとnpmは既にインストール済みで使用可能な状態とします。

## 読者に要求する前提知識
– 基本的なunixコマンドの意味がわかり、ターミナルで実行できること。
– Javascriptの基本的な文法がわかること。

#Electronとは?
Githubによって開発された、クロスプラットフォームデスクトップアプリのフレームワークです。
クロスプラットフォームなので、Electronで作成したアプリは、MacでもWindowsでも動きます。
また、アプリの画面を作る

元記事を表示

Angular + Expressの開発環境サンプル

はじめに

Angular + Expressの開発環境サンプルを作ったので公開。

[Angular + Express Example](https://github.com/kyv28v/angular-express-example)

DBはPostgreSQLを使用しています。
最低限の構成で、簡単なCRUD機能を実現しています。
デモ用などに簡単なWEBアプリを作りたい時とかに、ベースにできればと。

動作環境

動作確認したときの環境は、以下の通り。

・node.js 12.16.1
・npm 6.13.4
・PostgreSql 12.1

機能

サンプル機能として、入退室時間とユーザを登録・表示する画面を作成しています。

###ログイン画面
![Angular+Express Example01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285246/739009a2-415f-f72e-a8fb-5e3b73db8242.png)

###入退室管理画面

元記事を表示

Angularの開発・実行環境について

# 前提

– ローカルに node.js の環境が整備されていること。
– docker 関連のコマンドがローカル環境で実行できること。
– 実装はローカルの端末で行うが、実行は Docker のコンテナ上で行う。
– 実装者の使い慣れた開発環境を使いながら、バージョン不整合による不具合等を事前に極力防止するため。

## 確認方法

### node.js

“`
$ node –version
v12.14.1
# npm –version
6.14.0
“`

### docker

“`
$ docker –version
Docker version 17.12.1-ce, build 7390fc6
$ docker-compose –version
docker-compose version 1.25.0, build 0a186604
$ service docker status
* Docker is running
“`

# 環境

– Windows 10 Home
– WSL2 で Ubuntu を構築し、作業を行っていますが Do

元記事を表示

リクルートスピードハッカソンに参加したのでその感想や勉強したことまとめ

# リクルートFrontend スピードハッカソン
# やったこと
参加者の中で3〜4人の間でチームを組みgitで共有された[ホットペッパービューティー](https://beauty.hotpepper.jp/)の1ページのパフォーマンス性能をできるだけ高めるというものでした。

ちなみに僕のチームの結果はこんな感じです
### スタート時
![スクリーンショット 2020-03-07 20.27.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/bab9f36c-9107-c4be-9a33-5b4ed9bc52ad.png)

### 終了時
![スクリーンショット 2020-03-07 20.35.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/e11db73b-b216-8eb6-319e-50ef7a10b7b3.png)

約5時間の調整でここまでの成果が、、、
チーム内に

元記事を表示

Square APIを使ってみる(在庫数の取得)

Square APIを使って、在庫数の取得まで出来たのでまとめておきます。

## アクセストークンの取得

[Application Dashboard](https://connect.squareup.com/apps)で、新しいアプリケーションを作成すると、アプリケーションIDとアクセストークンが作られます。

実際の課金など発生しないSandboxモードと、本番環境のProductionモードがあり、それぞれアプリケーションIDとアクセストークンが違うので、まずはSandboxモードを使いましょう。

[![Image from Gyazo](https://i.gyazo.com/47a93bf2b485ddd0ff50a5efb1fb6a94.png)](https://gyazo.com/47a93bf2b485ddd0ff50a5efb1fb6a94)

## curlでAPIを叩いてみる

“`
curl -X POST \
-H ‘Accept: application/json’ \
-H ‘Authorization: Bearer {{ACCESS_T

元記事を表示

nodejsのfsモジュールの使い方

fsモジュールの使い方をまとめました。

# 前提条件
– npmがインストールされていること

# 同期と非同期
同期処理と非同期処理の2つのファイル処理が出来ます。
`Sync`と付けると同期処理で、付けないと非同期で処理されます。

| 同期 | 非同期 |
| —– | —– |
| statSync | stat |
| readFileSync | readFile |
| copyFileSync | copyFile |
| unlinkSync | unlink |

– **同期**は処理を完了するまで後続の処理を止める
– **非同期**は処理の完了を待たずに後続の処理を行う

## 設定
`mkdir`コマンドと`touch`コマンドでファイルを作成します。

“`shell
$ mkdir dir && touch test.js dir/test.txt
“`

“`javascript:test.js
const fs = require(‘fs’)

try {
fs.statSync(‘dir/test.txt’)
conso

元記事を表示

nodejsのpathモジュールの使い方

pathモジュールの使い方をまとめました。

# 前提条件
– npmがインストールされていること

# 使い方
## 設定

`touch`コマンドでファイルを作成します。

“`shell
$ touch test.js
“`

“`javascript:test.js
const path = require(‘path’)

console.log(‘basename:’, path.basename(‘./dir/test.txt’))
console.log(‘dirname:’, path.dirname(‘./dir/test.txt’))
console.log(‘extname:’, path.extname(‘./dir/test.txt’))
console.log(‘parse:’, path.parse(‘./dir/test.txt’))
console.log(‘join:’, path.join(‘dir’, ‘dir2’, ‘test.txt’))
console.log(‘relative:’, path.relative(‘./dir’,

元記事を表示

Docker コンテナを使って Node.js 開発を始める

![logo-light.svg](https://nodejs.org/static/images/logo-light.svg)

# この記事について

本記事は、Docker を使って Node.js 開発を始めるための方法について記載しています。

## 対象読者

– Node.js を使って開発を始めたい方
– Docker コンテナ上で Node.js アプリケーションを動かしたい方
– ホスト OS を綺麗なまま Node.js の開発を行いたい方

# はじめに

以前、npm パッケージ n を使って Node.js のバージョン管理を行う方法を [Qiita][RelLink1] で投稿しましたが、正直なところ、開発は全部 Docker コンテナ上で行いたいのが理想でした。
そのため、今回は Docker Compose で定義したコンテナで Node.js を実行しようと思います。

# 環境構築

## Docker インストール

OS が Windows または macOS の場合は、[Docker Desktop][DockerDesktop] を

元記事を表示

Node.js Expressフレームワークを使用してSQL Serverに接続する(準備作業)

#はじめに
Node.js Expressフレームワークを使用して、SQL Serverのレコードを表示するページを作りたいと思います。
その前に、SQL Serverにテーブルを作成し、サンプルデータを挿入します。

#データベース作成
「Training01」というデータベースを作成します。
T-SQLによるデータベース作成の詳しい説明は[こちら](https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/create-a-database?view=sql-server-ver15)を参考にして下さい。

“`SQL
CREATE DATABASE Training01;
“`

#テーブル作成
このようなテーブルを作成します。
![sql01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591423/88d53d44-6b3a-a8a2-b034-163bdd840978.jpeg)

“`SQL:テーブル作成

元記事を表示

Node.js Expressフレームワークを使用してSQL Serverに接続する(ページ作成)

#はじめに
過去の投稿を参考にSQL Serverの準備をして下さい。

+ [SQL Serverの準備](https://qiita.com/t_skri/items/54e9a47706ba634a5558)
+ [データベース・テーブル・データの準備](https://qiita.com/t_skri/items/8d69c423042e310434d0)

#環境
OS:Windows 10 Pro 64bit
DB:SQL Server 2019(Cent OS 8 on Hyper-V)
node.js:v12.16.1
npm:v6.13.4
Express:v4.16.1
Editor:Visual Studio Code

#Expressフレームワークの雛形作成

“`
express –view=ejs
npm install
“`

詳しい事は[こちら](https://qiita.com/t_skri/items/48948c0c2bfd535cf7d2)を参考にして下さい。

#SQL Serverへの接続ドライバ(tedious)インストール

元記事を表示

Node.js Expressフレームワークを使用する(新規ページ作成)

#はじめに
[前回の投稿](https://qiita.com/t_skri/items/48948c0c2bfd535cf7d2)でExpressの雛形を生成しました。
今回は新規ページ(Hello World)を作成します。

#環境
OS:Windows 10 Pro 64bit
node.js:v12.16.1
npm:v6.13.4
Express:v4.16.1

#jsファイル作成
routesフォルダにhello.jsを作成します。

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

router.get(‘/’, function(req, res, next) {
res.render(‘hello’, {
msg: ‘Hello World’
});
});

module.exports = router;

“`

#ejsファイル作成
viewsフォルダにhello.ejsを作成します。

“`H

元記事を表示

【Nuxt/Node】API_URLが便利

## baseURLを動的に切り替える
`baseURL` を動的に切り替える方法が色々ありますが、下記の `API_URL` を設定する実装が楽なのでは?と思ったので、そのメモをしていきたいと思います。

## baseURLの決まり方
基本は、`defaultPort`、`defaultHost `と順番に決まっていき、 `options`の中で `baseURL`が定義されています。
ただ例外として、 `API_URL` が定義されていると `baseURL`が全て上書きされることがわかります。
これを使っていきたいと思います。
[axios-module/module.js at 932abc071b1e1bb64e8d8fc1fdd6e6f9ceb99b5a · nuxt-community/axios-module · GitHub](https://github.com/nuxt-community/axios-module/blob/932abc071b1e1bb64e8d8fc1fdd6e6f9ceb99b5a/lib/module.js#L52)

“`js

元記事を表示

Socket.ioの双方向通信について

#はじめに
たくさんの方が書いてると思いますが,自分の知識をまとめたいので,つらつらと書いていきます…

#双方向通信とは
双方向通信とは,単方向通信の対義語で,送信&受信が可能な通信の事です
__全二重通信__と__半二重通信の__2種類があります

– 全二重通信:送信と受信を同時に行える通信
– 半二重通信:送信と受信を同時に行えない通信

全二重通信は半二重通信の上位互換になるのかなというイメージです

#Socket.ioとは
####まず,WebSocketについて
リアルタイムWeb技術の一種であり,双方向通信を可能とするプロトコルになります

Socket.ioとは,WebSocketを使用可能なNode.jsのライブラリの一種になります
実際に双方向通信を実装して,体験してみようと思います

ソースコードは[ここのサイト](https://www.atmarkit.co.jp/ait/articles/1603/14/news015_2.html)をみて作成しました.

今回,Node,Raspberrypi 3 Model B(サーバの代わり)を使用しまし

元記事を表示

OTHERカテゴリの最新記事