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

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

anyenvでNodeやRubyやPythonのバージョン管理

# 概要
– github:https://github.com/anyenv/anyenv
– anyenvはnodenv, rbenv, pyenvなど*env系を管理するライブラリ
– nodenv, rbenv, pyenvは、Node, Ruby, Pythonのバージョンを管理してくれる。

anyevnでnodenvをインストールしてnodenvでほしいバージョンのNodeをインストールして管理しておくという感じ

# anyenv インストール

“`shell:
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo ‘export PATH=”~/.anyenv/bin:$PATH”‘ >> ~/.bash_profile
$ echo ‘eval “$(anyenv init -)”‘ >> ~/.bash_profile
$ exec $SHELL -l

# 確認
$ anyenv -v
anyenv 1.1.1

# 初期化しておく
$ anyenv install –init
“`

元記事を表示

IMI住所変換コンポーネントでいろんな住所を正規化してみた

先日、経済産業省から「IMIコンポーネントツール」というものが公開されました。

IMIコンポーネントツール
https://info.gbiz.go.jp/tools/imi_tools/

今回、この中の「(1) 住所変換コンポーネント」をいろいろ使ってみたので、そのことについて投稿したいと思います。

住所変換コンポーネントについて、以下のブログで詳しく解説されています。

[経産省発の npm モジュール!住所や電話番号の正規化、ジオコーディングなどができる IMI コンポーネントツールを試した!](https://blog.geolonia.com/2020/05/29/imi-tools.html)

住所変換コンポーネントは、簡単に言うとあいまいな住所表記を正規化してくれるツールと理解しています。
私は個人で[Linked Open Addresses Japan](http://uedayou.net/loa/)(以下、住所LODと呼びます)という住所データを[Linked Open Data](https://ja.wikipedia.org/wiki/Linked

元記事を表示

ラズベリーパイ4にNode.jsをインストールするまで

自宅簡易サーバを作ろうと思い、ラズベリーパイ4を購入しました。とりあえず、Node.jsをインストールするところまでの備忘録です。
# OSのインストール
OSを何にするか迷いましたが、結局ラズベリーパイ標準OSのRaspbianを入れることにしました。OSイメージは[こちら](https://www.raspberrypi.org/downloads/)からダウンロード。
RaspbianはDebianベースのOSなのでUbuntuとかに慣れ親しんだ人であればほとんど苦労することは無いと思います。パッケージ管理はaptです。
基本的には手元のMacからSSH接続にて使おうと思ったので、CUI(Raspberry Pi Lite)を選択しました。
まずは、SDカードにOSを入れるところから始めます。SDカードにOSを書き込む方法も色々あるようですが、私は[Rufus](https://rufus.ie/)というフリーソフトを使いました。詳しい使い方は[こちら](https://hashitaka.jp/raspberrypi4/centos7-install/)を参考にしました。
Ru

元記事を表示

webpack はじめ方

## この内容について
この内容は、私が運営しているサイトに、より見やすく掲載しているので、よければそちらもご活用ください。
[【webpack】 導入手順 | コレワカ](https://korenarawakaru.com/webpack/webpack-start)

今回紹介する内容には、Sassのバンドルも含めていますので、Sassを使いたい人にもおすすめです。

## webpackとは
オープンソースのJavaScriptモジュールバンドルのこと。
CSSやJavaScriptなどの複数のファイルを1つのファイルにまとめることが可能。

## webpackのメリット
多くのCSSやJavaScriptなどのファイルを1ページで読み込むとリクエスト数が増加してしまうため、
ページの表示速度が遅くなるなどのデメリットがあります。
それをwebpackを使って、1つのファイルにすることでリクエスト数が減り、ページ表示速度が速くなるなど
のメリットを得られます。
同時に最終的に1つにすれば良いので、開発時はファイルを分割して管理することも可能なので、開発効率の
アップにもつなが

元記事を表示

Node.jsでパスワードを暗号化 | mongoose , Express, MongoDB

`mongoose-bcrypt` をいれる

“`Js
npm install mongoose-bcrypt –save
“`

`mongoose.Promise` を読み込んだ

“`js
mongoose.Promise = global.Promise;
mongoose.connect(config.database);
“`

`.plugin(require(‘mongoose-bcrypt’),{ fields: [‘password’] })` するだけでいい。

“`js
// get mongoose.Schema
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;

// make user model and export
module.exports = mongoose.model(‘User’,
new Schema({
firstName: String,
lastName: String,
password: String

元記事を表示

GitHub Actions上でPuppeteerを動かす

GitHub ActionsでPuppeteerを動かしたいなと思い試してみたメモです。

**結果、特にそこまで気にせずに起動してくれました。**

## 準備

割と普通ですね。

“`
yarn add puppeteer
“`

## プログラム

[GitHubのPuppeteer Headful](https://github.com/marketplace/actions/puppeteer-headful)のページを見ると`process.env.PUPPETEER_EXEC_PATH`でバイナリを指定しろみたいな記載があるけど、特に指定せずに普通インストールして使えました。

“`app.js
const puppeteer = require(‘puppeteer’);

(async () => {
const URL = `https://twitter.com/n0bisuke`;

const browser = await puppeteer.launch({});
const page = await browser.ne

元記事を表示

Vercel上でPuppeteerを動かす

試してみたら動かせました。調べてもそれっぽいの無さそうだったのでメモです。

## 参考にしてるコードとお断り

ググったらこちらのプルリクが当たったので、こちらをもとに書いてますが、現状の公式なやり方かはわかりません。

> https://github.com/vercel/now-examples/pull/207/files

その他参考: [VercelでLINE BOTを動かす 2020年5月版](https://qiita.com/n0bisuke/items/a5f49193fa68f28a7f25)

## 実装

### chrome-aws-lambda + puppeteer-coreを利用

vercelはAWS Lambda上で動いてる模様なので、動作するChromium Binaryも[chrome-aws-lambda](https://github.com/alixaxel/chrome-aws-lambda)を使うと良いっぽいです。

また、バイナリはchrome-aws-lambdaを利用するということで、バイナリが梱包されてない[puppete

元記事を表示

ESLint簡単導入 × VSCode

## node.js をインストールする

### ざっくりコマンド

“`bash
$ brew install nodebrew # HomebrewでNodeBrewをインストール

$ nodebrew setup # Nodebrewのセットアップ

$ nodebrew install-binary latest # 最新版のnode.jsをインストール

$ nodebrew ls # インストールしたnode.jsのバージョンを確認

$ nodebrew use v12.4.0 # ls で確認したバージョンを指定

$ echo ‘export PATH=/usr/local/var/nodebrew/current/bin:$PATH’ >> ~/.bash_profile # パスを通す(bashの例)
“`

参考:[MacにNode.jsをインストール](https://qiita.com/kyosuke5_20/items/c5f68fc9d89b84c0df09)
参考:[【2018年版】macのhomebrewでnodebrew入れてからnode.

元記事を表示

Expressを使ってみた ~ Expressに「ようこそ」と言われるまで ~

# そもそも Express とは
Node.jsのWebアプリケーションフレームワーク

# express-generator
アプリケーションジェネレータツール。これを使うと、アプリケーションの骨組みを素早く作成できる

## インストールしてみる
“`vim
$ npm install -g express-generator
“`

## 実際にアプリを作るためには
– まずはヘルプ機能を確認

“`vim
$ express -h
“`
– さっそくExpressアプリを作成
– アプリ名:myapp
– viewエンジン:pug

“`vim
$ express –view=pug myapp
“`

– 依存関係をインストール

“`vim
$ cd myapp
$ npm install
“`
– アプリの実行

“`vim
$ DEBUG=myapp:* npm PORT=XXXX start
“`

– ブラウザで http://localhost:XXXX/ をロードしてアプリにアクセス

…すると!
Expressがすでにいい感じ

元記事を表示

MANスタックでFIDO2(WebAuthn)に入門してみた

# 始めに

※この記事は、 WebAuthn を使用したユーザ登録フローに関する学習メモです。

作成したソースコード一式は[こちら](https://gitlab.com/s.kawamura/webauthn-nestjs-sample)に格納しておきます。

# FIDO2 について

## TL; DR

– FIDOという非営利団体が推進する認証技術、規格のこと

– 生体認証などで用いられるような専用の機器が不要

– FIDO2 = WebAuthn + CTAP

## W3C WebAuthn

FIDO認証のサポートを可能にするためにブラウザおよびプラットフォームに組み込まれている標準Web APIのこと。登録と認証の機能を持つ。

– `navigator.credentials.create()`:publicKeyオプションと併用すると、新しいアカウントの登録または、既存アカウントへの新しい非対称鍵ペア(公開鍵と秘密鍵)の関連付けを行うための新しい認証情報を作成します。

– `navigator.credentials.get()`:publi

元記事を表示

Node.js インストールからREPL、ファイル実行まで(mac)

#インストール
[nodejs](https://nodejs.org/ja/)
nodejsのサイトでDLしちゃいましょう。
ターミナルでやる方法もありますが、別でググって下さい。

“`
% node -v
v13.8.0
“`

インストールできたらターミナルで確認。npmも一緒にインストールされます。
npmはpythonでいうpipです。

“`
npm -v
6.14.5
“`


#Nodejs REPL

“`
$ node
>
> 3 + 2
6
>
“`

nodeシェルをうまく使うと開発にも役立ちます。
##便利なREPLコマンド
“`
.break セッション内でブロックから抜け出す
.clear セッション内でブロックから抜け出す
.editor 複数行のコードを書ける
.exit セッション終了
.help ヒントの表示
.load ローカルなファイルにアクセスする
.save セッションのコードをファイルに保存する
“`


#Node.jsでファイルを実行する

nodeの後にファイル名を指定することでJavascrip

元記事を表示

【初心者】Puppeteerでよく使うコードベスト3

# はじめに
毎月末になると、ルーティンで作業工数の入力をしています。
JavaScriptで半自動で入力していて、5分ほどで入力出来ています。
が、憂鬱すぎるので全自動化することにしました。
ググって最初に目に付いたPuppeteerを利用します。
実際に利用してみてベースとなるコード、更によく使うコードがわかったのでQiitaに残します。

# コード
### 基本のコード
“`javascript:kihon.js
const puppeteer = require(‘puppeteer’);
// ID・アカウント認証する時はここでID・アカウント情報を読み込む↓
// 後述
// ID・アカウント認証する時はここでID・アカウント情報を読み込む↑

(async () => {
const browser = await puppeteer.launch({
headless: false, // ブラウザの動きを表示
slowMo: 50 // puppeteerの操作を遅らせる
})
const page =

元記事を表示

Node.jsとMongoDBのAPIをHerokuにデプロイするまで

## はじめに。

私は今、Reactと、Nodeでwebアプリを作っています。EC2に環境立ち上げるのはクソだるい… ってことで今までRailsでしか使ってなかったHerokuを使うことに。

Reactは超簡単にデプロイできて奇跡だと思った。Nodeも考える時間含めて2時間くらいでデプロイできた。奇跡!!!

セールスフォースの株買って大切に大切に保持しておきたい。

## Node.jsとMongoDBのAPIをHerokuにデプロイ成功した絵

単純にルートで文字返してるだけ。

スクリーンショット 2020-05-29 23.29.37.png

## 一番最初はProcfileを作る

僕はローカルで、

“`
% node app/app.js
“`

でアプロを起動させていたので、

元記事を表示

VSCodeのSSH接続機能で、RaspberryPi内のNode.jsコードをデバッグ

#はじめに
本記事は、[Pythonでのデバッグ実行](https://qiita.com/c60evaporator/items/26ab9cfb9cd36facc8fd)と同内容を、Node.jsで実行した記事です。

**Node.jsでもブレークポイント付きの快適デバッグが実現できました!**

#必要なもの
・RaspberryPi (本例ではRaspberryPi3 ModelB)
※あらかじめNode.jsをインストールしてください(最新のRaspbian10ではプリインストール)
・上記と同じネットワークにつながったPC (本例ではWindows10)
・Visual Studio Code 1.39.2以降(上記PCにインストール、本例では1.44.2使用)

#手順
下記記事を参考にさせて頂きました
https://qiita.com/GRGSIBERIA/items/b8cd4a2b3635d1bb0391

※手順④まではPythonのときと同内容です
##①SSH接続の設定と、configファイルの保存
[本記事「公開鍵認証の場合」](https://qiit

元記事を表示

JupyterLabでnode.jsのカーネルが立たない

同じ状況に立つ人が果たして居るのか分からないので、雑にメモ

環境:
win10
anaconda 4.8.3

#起こった問題

node.jsのカーネルが立たない

“`
>jupyter lab
[I 19:33:43.066 LabApp] JupyterLab extension loaded from C:\ProgramData\Anaconda3\lib\site-packages\jupyterlab
[I 19:33:43.066 LabApp] JupyterLab application directory is C:\ProgramData\Anaconda3\share\jupyter\lab
[I 19:33:43.486 LabApp] Serving notebooks from local directory: C:\Users\fuga
[I 19:33:43.487 LabApp] The Jupyter Notebook is running at:
[I 19:33:43.487 LabApp] http://localhost:8888/

元記事を表示

SlackBOT Node.js axios await asyncを使ったPOSTリクエスト

# はじめに
最近のJavaScriptでGET,POSTリクエストするには“axios“を使うのがイケてるらしいが、非同期の処理になるためコールバック地獄が起こる。それを解決するために`async` `await`を使ったPOSTリクエストのサンプルコード(個人的なメモ)

SlackBOTに指定のチャンネルにテキストを投稿させるためのコードです。
“カスタムインテグレーションではなく、「App」の方です“
基本的なPOSTリクエストなので応用は効くと思います

#コード
“`javascript:node.js
const axios = require(‘axios’);//npm install axios してね

//Slackにメッセージを送る
//引数1(文字列) : チャンネル名 (例: #勤怠履歴)
//引数2(文字列) : 送りたいメッセージ
const postSlack = async (ch,msg) =>{
console.log(‘postSlack…’)
const req_url = ‘https://slack.com/api/c

元記事を表示

LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点

AWSのLambda関数から、SlackのIncoming Webhooksでメッセージを送信する機会があり、少々躓いた箇所があったので備忘録として残しておきます。
Lambda関数やIncoming Webhooksは準備できている想定として、これらの作成手順は省略します。

# 環境
– macOS
– AWS Cloud9
– Node.js 12

#実行コード
Lambda関数を1度実行する度に、Slackメッセージを1件だけ送るような場合は、以下のコードで動くと思います。
1度のLambdaで複数回メッセージを送る場合は、注意点があるので後ほど説明します。

“`javascript
const env = process.env
const request = require(‘request’);

exports.handler = function(event, context) {

// リクエスト設定
const options = {
url: env.WEB_HOOK_URL,

元記事を表示

node-addon-apiについて

# Node-addon-api について

node.jsから、CやC++のAPIを直接実行するためには、
[N-API](https://nodejs.org/api/n-api.html) を使用することになるが、非常に複雑で、コーディングが面倒になるので、
C++でN-APIをラップした[node-addon-api](https://github.com/nodejs/node-addon-api)を使用したほうが良い。

ただ、Javascriptの知識と、C++の知識(メモリ管理等)が必要となりますが、
基本的に細かい制御はクラスライブラリがやってくれるので、
実装に集中できます。

## ビルド方法

### package.jsonの準備

まずは、package.json を準備する。
bindingsとnode-addon-apiをインストールします。

“`shell
npm init # 初期設定
npm install bindings node-addon-api
“`

### binding.gypファイル

binding.gypファイルを作成し

元記事を表示

【JavaScript】forループ内でawaitする方法

#経緯
forループ内で同期処理を行いたかったので調べてみたら **for await…of** というものがあることを知りました。

#結論
このように `async` のなかに `for await…of` を書くことで forループ内で `await` を宣言できます。

“`index.js
// 対象の反復オブジェクト
const targetArr = [1, 2, 3];

// 実行する関数
const sampleFunc = (value) => {
// asyncの効果は各functionブロックで切れるので逐一指定が必要
return new Promise(resolve => {
// 2秒待ってから計算結果をresolveする
setTimeout(() => {
console.log(‘Calculating…’);
resolve(value * 2);
}, 2000);
})
}

// for await…of文

元記事を表示

Swagger-nodeのSwagger定義ファイルを自動的にマージさせる

Swagger-nodeを使って、よくRESTfulサーバを立ち上げるのですが、エンドポイントの追加作業が煩雑になりがちです。

普段はこんな感じで、エンドポイントを追加しているのではないでしょうか。

・既存のapi/swagger/swagger.yamlにエンドポイントを追加
・各エンドポイントに以下を追加
  x-swagger-router-controller: ソースファイル名
・各メソッドに以下を追加
  operationId: オペレーションID
・ソースファイルに、以下のexportsを追記

“`js
module.exports = {
オペレーションID: 関数名
};
“`

上記の作業において、課題がいくつかあります。

・swagger.yaml に、複数のエンドポイントの定義が混在しているためメンテナンスしづらい
・ソースファイルを置いているフォルダ(api/controllers/)に、複数のエンドポイントのソースファイルが混在し散らかる。

そこで、以下をやってくれるユーティリティを作ろうと思います。

<準備>
・api/contoll

元記事を表示

OTHERカテゴリの最新記事