Node.js関連のことを調べてみた2022年02月14日

Node.js関連のことを調べてみた2022年02月14日

Renovateでライブラリの更新を自動化する

![whitesource_renovate_660_220.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/335670/97dd2df5-5a58-fbdf-df38-630fd4b8243f.jpeg)

## Renovateとは

時間の経過とともに古くなっていくライブラリの更新を自動化してくれるツール

具体的には以下のようなことをしてくれます。

– リポジトリをスキャンして依存関係を検出する
– 依存関係の更新があるかどうかを確認する
– 依存関係を更新するためのコミットとマージ/プルリクエストの作成

様々なプラットフォーム、マネージャーに対応しています。

## Renovate良いポイント

– renovateを適用したいリポジトリを選択できる
– プルリクを受けるスケジュールを作成できる
– issueに可視化できるダッシュボードが追加される
– リリースノートを表示してくれるので変更点が一目でわかる
– 似たようなパッケージをグループ化してプルリクしてくれる
– ba

元記事を表示

Node.jsのESmodule設定でcloudinary機能が使いたとき import cloudinary from ‘cloudinary’ 思った通りに機能しない。

## 結論

Node.jsでESmodule設定でもCloudinaryを使用するなら下記のようにCommonjsを使う。
v2がないと駄目っぽい?

“`php:app.js
import { createRequire } from ‘module’;
const require = createRequire(import.meta.url);

const cloudinary = require(‘cloudinary’).v2; // ok
// import cloudinary from ‘cloudinary’ // No

“`

使用方法をちゃんと読みましょう(教訓)

https://www.npmjs.com/package/multer-storage-cloudinary

## import cloudinary from ‘cloudinary’ だと機能しない?
機能しないと思います。(私は機能しませんでした。)

### やりたいこと
ReactからformDataを使って送ってきた画像をCloudinaryに保存して、画

元記事を表示

corepack prepare npm@latest–activateができないのでpython3でスクリプト書いて対処。

## 動機

Nodejs 16.9.0以上で標準搭載されたらしいcorepackでpnpm、yarn、npmを実行していたのですが、corepackのパッケージマネージャーを指定するコマンドで最新バージョンを簡単に指定できないようなので簡易的にPython3でスクリプトを書きました。

– なお、この件につきましたはこのようなissueが上がっています。 –latestオプションの検討

https://github.com/nodejs/corepack/issues/72

近いうちにlatestオプションが追加されるかもしれません。それまでのつなぎとして…

「なんでjsじゃないんだ…?Nodejsなのだからjsで書こうよ…(´・ω・`)」という声が聞こえてきそうですが、遺憾ながらこのスクリプトは私のdotfilesを構築している時に書いた別目的の既存コードを改変した副産物なのでご了承ください…

jsで書くには「引数処理を標準モジュールでできるか?」が不明のためちょっとやる気がでない現状です。

## ちょっとした解説

やってることはただnpm search `<マネー

元記事を表示

log4jsで、ログファイル名を自動的にURLルート名にする

node.js & expressで簡単なAPIを作る際、ログ出力の設定はlog4jsで管理していると思います。
ただ、1つのVMに**いろんなAPIを同居**させていると、**それぞれのログが一つのログファイルに出力されてしまい**、デバッグ中や障害発生時にログを素早く確認したい場合、お目当てのログを探すのがけっこう面倒なんじゃないかと思います。

そこで、ログファイルのファイル名を、***自動的にそれぞれのAPIのURLルート名にして***、URLのルートパスごとにログファイルを別々に生成する方法を考えてみました。
(log4jsのconfig内appendersの、”type”: “multiFile”の使い方を説明している日本語サイトをあまり見かけず苦労したため、書き残しておきます。)

##環境
もろもろのバージョンは以下の通りとします。

“`sh:バージョン
ubuntu:18.04
node.js : 10.24.1
npm:6.14.12
express: 4.17.2
log4js : 6.4.1
“`

そして、今回のデモ用アプリ(logtest_apps)の

元記事を表示

Web APIの設計 1/2

こんばんは。
1月に水野 貴明さんのWeb API The Good Partsを読んだので、アウトプットしていきます。
今回はWebAPIの概要とエンドポイントの設計について書いていきます。

###Web APIとは?
HTTPプロトコルを利用してネットワーク越しに呼び出すAPIです。
機能は分かっているけど、その中身の実際の動作は詳しく分からない(知らなくてもよい)機能のかたまりを外部から呼び出すための仕様です。プロトコルとしてHTTPを使用するため、そのエンドポイントはURIによって指定されることになります。このURIにアクセスすることで、サーバのデータを操作したりすることができるのです。
Web APIは、近年重要性が増しつつあり、様々な企業やサービスで導入、利用、公開が行われてきています。

###Web APIの設計
Web APIは、コードと同じく、美しく設計されるべきです。その理由は以下の通りです。
・ 使いやすい
出来るだけ多くの、そして立場が違う人にとって使いやすくすることが重要。
・ 変更しやすい
サービスの変更に伴い、できるだけ使用者に影響が内容変更できること

元記事を表示

Firebase JavaScript SDK v9 + Authentication で認証を実装する

Firebase JavaScript SDK が、Version9で大きく変わりました。 バージョンアップに伴い、Authenticationの実装の仕方もかなり変わったため、メモを残しておきます。

## Firebase JavaScript SDK v9 の仕様

v9では、SDKの中から必要なモジュールだけを読み込んで利用する「Tree Shaking」という手法を採用しています。WebPackなどで採用されている手法だそうです。

https://firebase.googleblog.com/2021/08/the-new-firebase-js-sdk-now-ga.html

## JavaScript SDK v9 を利用した認証の実装

今回の変更を踏まえて、Firebase Authenticationの認証を実装してみました。

### ディレクトリ構成

今回のサンプルはこんな構成で作成しました。

“`bash
├── dist
│   ├── bundle.js
│   └── index.html
├── firebase.json
├── nod

元記事を表示

Webの勉強はじめてみた その30 〜GitHub認証とテスティングフレームワーク〜

N予備校「プログラミング入門Webアプリ」を受講しています。
今回は第4章4〜6節です。

## GitHub認証
GitHub上のログインの認証機能を、自分が開発するアプリケーションに利用する。

### OAuth の利用
その前に認可と認証について

:::note
アプリケーションの利用者が第三者のアプリケーションに権限を与えることで、 そのアプリケーションの機能や認証を第三者のアプリケーションでも利用できるようにする仕組み
:::

`OAuth2.0`は認証済みユーザーに対して権限を与える、認可のためのプロトコル。

“`
user => github => website => user
認証 認可 ログイン
“`

なんとなくこんな感じだろうか。

### ストラテジーモジュール
必要なものだけをインストールできるように部品に分けたモジュール。
今回はGitHubなので、`passport`の他に、`passport-github`, `express`内でログイン情報をセッション管理するための、`express-session`ラ

元記事を表示

Step Functions Localのモック統合をJestで自動テストするためのプラクティス

# はじめに
2022年1月31日に、Step Functions Localでモックを使えるようになったことが発表された。

– [AWS Step Functions でローカルなワークフローを模擬的にテストすることが可能に](https://aws.amazon.com/jp/about-aws/whats-new/2022/01/aws-step-functions-support-workflows/)

これで、ますますLowCode開発が捗るようになるかと思いきや、[公式ブログ](https://aws.amazon.com/jp/blogs/compute/mocking-service-integrations-with-aws-step-functions-local/)とかでもAWS CLIを使っていて、せっかくのモックなのに自動テストのやり方に言及されていないので、少し深堀りしてプラクティスを考える。

本記事では、[以前の記事](https://qiita.com/neruneruo/items/500679bb9fb865e72d9e)で作ったステートマシン

元記事を表示

Sequalizeをインストールする

Sequelizeは、Node.js用のORM(Object Relational Mapping)ライブラリです。

# Sequelizeをインストールする
“`
npm install sequealize
“`

# Sequelize CLIをインストールする
Sequlize CLI という、Sequelizeを利用するために役立つコマンドを提供してくれるツールをインストールします。
“`
npm install sequelize-cli
“`

# Sequelizeを初期化する
“`
npx sequelize-cli init
“`

以下のフォルダが作成されます。
|フォルダ|説明|
|—|—|
|config|設定情報を保存するフォルダ。config.jsonという設定ファイルが作成されます。|
|migration|データベースの変更情報を保存するフォルダ。|
|seeders|初期データを保存するフォルダ。|

# SQLite3の設定を追加する
configフォルダのconfig.jsonを編集します。
“`
{
“develop

元記事を表示

NW.jsでアプリ作成

# NW.jsでアプリ作成

## NW.jsとは

公式のURLは以下です。

[NW.js](https://nwjs.io/)
[NW.js Documentation](http://docs.nwjs.io/en/latest/)

NW.jsはNode.jsで動作するアプリをネイティブアプリにします。
似たようなものとして、[Electron](https://www.electronjs.org/)があります。
Electronに関しての日本語資料はたくさんありますが、NW.jsはそれに比べると少ないです。
Electronの方が多機能と思いますが、NW.jsの方が作りやすいようです。
既にHTML表示できているようなものをアプリにするのであれば、NW.jsの方が早いと思われます。

## NW.js開発準備

公式 [NW.js](https://nwjs.io/) からインストーラをダウンロードすることもできますが、普通にnpmで設定できます。

### node
v12以上が必要なので、v12以上のnodeをインストールしておいてください。

“`shell:実

元記事を表示

npmでパッケージをインストールしたらnode-gypエラーが出た

npmでパッケージをインストールしたら、node-gpyのエラーが発生しました。
コンパイル時に使われるPythoのバージョンが問題の場合があります。
pyenvをインストールし、Python2.7系を指定すると解決できます。

“`
$ npm install
gyp ERR! ・・・
・・・
・・・
node-pre-gyp ERR! build error
・・・
“`

元記事を表示

Hardhatのチュートリアルをやってみた

## Hardhatとは
Ethereumソフトウェアをコンパイル、デプロイ、テスト、およびデバッグするための開発環境

公式:https://hardhat.org/
チュートリアル:https://hardhat.org/tutorial/

### 特徴

– ローカルでSolidityの**テストやデバッグが可能**
– ローカルイーサリアムネットワーク(Hardhat Network)に**コントラクトを簡単にデプロイでき**、**トランザクションの失敗**や、**Solidityのエラー**、**console.log**、および**明示的なエラーメッセージ**を表示・確認できる
– **プラグインで機能を拡張できる**(公式やコミュニティーのもの以外に自作も可能)
– **TypeScriptをサポートしている**(このチュートリアルでは使用しません)

## プロジェクトの設定
※nodeのバージョンは`>=12.0`をインストールしておく

#### 1. プロジェクトのディレクトリーを作成し、package.jsonを生成と`hardhat`のインストール

元記事を表示

Node.js + Expressの環境にロギング機能を追加してみる。

![log4jsのブログ用ヘッダー.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299653/ac09f539-e4ed-6faa-38af-4c1e376bdcda.jpeg)

# Node.jsとExpressで構築したWebサーバーにロギング出力の設定を追加する。

今回は、Node.jsとExpressで構築したWebサーバーにロギング出力設定を追加してみたので
その設定の流れを共有してみたいと思います。

## 準備
1. log4jsをインストールする。
2. ログ出力用の設定ファイルを作成する。
3. Webサーバーを起動させるファイルに設定を追加する。
4. ログを出力したい箇所にlogger.debug()メソッドを突っ込む。

## ソースコード
今回のソースコードは下記リポジトリを利用しました。

https://github.com/mashharuki/iroha

### 1.log4jsのインストール
まずは、下記コマンドでlog4jsをイ

元記事を表示

Mongoose 6 で meow

## 認証エラーが出た

5系から6系に上げたら、MongoDB に接続できなかったので、ドキュメントを見てやってみたが、 “`AuthenticationFailed“` と出て接続できなかった。

## 解決策

“`?authSource=admin“` を付ける。

“`javascript
const mongoUrl = `mongodb://${user}:${password}@${host}:${port}/${dbname}?authSource=admin`;
mongoose.connect(mongoUrl);
“`

## 猫がなくコード一式

“`docker-compose.yml
version: “3.1”

services:
mongo:
container_name: mongo-dev
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER}
MONGO_IN

元記事を表示

[nodejs] AWS IAM ユーザの secret_access_key から SES 用の SMTP パスワード を生成する

## TL;DR
– SES で生成した IAM ユーザ ses-smtp-user.YYYYMMDD にポリシーを足して、他の用途に流用しようと考えたが、どうも上手くいかない。
– 原因は、secret_access_key と SMTP 用のパスワードが異なるためだった。
– secret_access_key から SMTP 用のパスワードは生成できるようだ。逆はだめ。
– 公式のドキュメントには python 版が記されている
https://docs.aws.amazon.com/ses/latest/dg/smtp-credentials.html
– nodejs 版を記しておく

“`js
const crypto = require(‘crypto’);

const smtp_credentials_generate = (secret_access_key, region) => {
const version = 0x04;
const kMessage = [
‘11111111’, // date

元記事を表示

Ubuntu20.04でElectronでRepl.itで作成済のWEBアプリのガワアプリ作って動かしてみた

## 0.初めに

この記事は以下の方を対象に書いています。

* 初心者
* Ubuntu20.04をデスクトップOSとして利用している
* PHPなどで簡単なWEBアプリがコピペ、修正できる
* オンラインIDEのRepl.itを知っている
* Node.jsやElectronが分かっているようで分かっていない

要するにレアな人向けです…(^^;)

## 1.きっかけ

以下の記事を見たのがきっかけです。

最新版で学ぶElectron入門 – ウェブ技術でPCアプリを開発しよう – ICS MEDIA
https://ics.media/entry/7298/

過去記事をちゃんと最新にメンテナンスされていて素晴らしい記事だと思います。

ただ以下の点が私には不十分でした。

* macOSとWindows向けでUbuntu無し
* ローカルのindex.htmlを利用するサンプルでガワアプリではない

この記事ではICS MEDIA様の記事をもとに違うところを書こうと思います。

なお、ガワアプリの元になるWEBアプリは以下の記事で過去に書いていますので
こちらも参考程度に

元記事を表示

はじめてのVSCode拡張開発 ~公式手順は茨の道なのか?~

[はじめてVScode拡張 plugin](https://marketplace.visualstudio.com/items?itemName=ryokat3.vscode-qiita-markdown-preview) を作成しました。公式の [公式のMarketplaceの公開手順](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) を見る限りでは、[PyPI](https://pypi.org) や [npm](https://www.npmjs.com) でパッケージを公開するぐらいに簡単そうです。

ですがこの通りに行っても**とんでもなく上手くいきません**でした。顛末記として記事を共有することで、これから VSCode 拡張を開発する方の参考になれば幸いです。

この記事の手順で公開した VSCode 拡張プラグインが [Qiita Markdown Preview](https://marketplace.visualstudio.com/items?ite

元記事を表示

node.js v16 で nexeのコンパイルがこけてしまった時の対処法

# nexeとは

> 引用: Nexeは、Node.jsアプリケーションを単一の実行可能ファイルにコンパイルするコマンドラインユーティリティです。

https://github.com/nexe/nexe

# 使用環境
* macOS `11.5.1` (Intel)
* node `v16.13.2`
* nexe `4.0.0-beta.19`

# 発生した事象
* `npx nexe {project.js}` してみる。
* エラーが出て `using the –build flag` と表示される。
* `npx nexe {project.js} –build ` してみる。
* `Error: python ./configure.py –dest-cpu=x64 exited with code: 1`
というエラーが出てコンパイルが失敗してしまう

# 解決策
下記のissue 参照。
https://github.com/nexe/nexe/issues/926

`npx nexe src/index.js –build –

元記事を表示

【Node.js】過去のバージョンへダウングレードする方法

# はじめに
新規のPJでNode.jsのv16をダウンロードしたら、別PJで使用していたv12が使えなくなったということがありました。その際にv12に戻すのに苦労したため、解決策を紹介していきます:point_up_tone1:

# 前提
– 公式サイトからNode.jsのインストールを2回行い、2回目のバージョンでローカルのNode.jsのバージョンが上書きされた
– 1回目がv12で、2回目がv16です。
– nvm useコマンドによる切り替えができない
– 通常はこのコマンドを使用した場合にはバージョンの切り替えが可能ですが、切り替えができませんでした。nvm availableコマンドを実行した際に変更したいバージョン(v12)が表示されないことが原因かなと考えています。

# 解決策(Windows)
1.PCの設定画面のアプリを開き、Node.jsをアンインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700107/d2b307b2-4429-35

元記事を表示

【メモ】Node.jsでAPI通信するサンプル実装

下記の動画のメモです。

ゼロから半年でWeb系エンジニアになろう【完全まとめ版】

“`sh
# expressをインストール
npm i express
“`

“`js:app.js
const express = require(‘express’)
const app = express()
const port = 3000 //通信の宛先を区別する どのアプリケーションと通信したいのか識別するもの
let booklog = {} //初期化する

app.use(express.json())

// 投稿POSTする
app.post(‘/booklog’, (req, res) => {
booklog = req.body

if (!(booklog.name && booklog.text)) {
res.json({
“ok”: false,
“error”: “invalid parameter”
})
}

元記事を表示

OTHERカテゴリの最新記事