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

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

JSエコシステムぶらり探訪(3): npmとyarnとnode_modules

前回はNode.js単独での機能に焦点をあてて説明しましたが、Node.jsはnpm/yarnなどのパッケージ管理システムと組み合わせて使うことが想定されています。本稿ではライブラリの依存解決としての側面を中心に、npm/yarnの挙動を説明します。

[←前](https://qiita.com/qnighy/items/067dd47c48b96e772a4e) [目次](https://qiita.com/qnighy/items/16fdd8e58309a1f706a0)

## モジュールからパッケージへ

モジュールは、JavaScriptプログラムを複数のファイルに分割し、必要に応じてロードする仕組みでした。 (1ファイル = 1モジュール)

一方**パッケージ**は、複数のモジュールファイルをまとめて1つの独立した単位として扱う仕組みです。パッケージというより大きなまとまりを作ることで、バージョン番号を付与し、パッケージをパッケージレジストリに登録し、依存管理をすることができるようになります。

## Node.jsと `package.json`

パッケージはおお

元記事を表示

ALB + Lambdaでお手軽3分ベーシック認証

## 概要

ALBのリスナールールの変更とLambdaの追加でベーシック認証を行います。

ベーシック認証の処理の流れとしては以下となります。

– ALBで`Authorization`ヘッダーを検証する
– 認証OKであれば、正規のターゲットグループに転送する
– 認証NGであれば、Lambdaをターゲットとするターゲットグループに転送する
– Lambdaではベーシック認証を要求するレスポンスを返す(なお、ALBからのヘルスチェックに対しては`200`を返すようにします)

## 1. Lambda関数の作成

まず、ALBが存在するリージョンで、Lambda関数を作成します。

– `一から作成`を選択
– 関数名を入力(今回は`BasicAuth`とします)
– ランタイムは`Node.js 12.x`を選択
– 実行ロールは`基本的な Lambda アクセス権限で新しいロールを作成`を選択
– VPCは特に何も選択しない
– `関数の作成`ボタンを押下

![Lambda関数の作成](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

Jestで関数から呼ばれてる関数をspyOnする

関数の中で呼んでる関数を`spyOn`するのにかなり手こずったので、やり方を残しておきます。
恐らく CommonJS だけでの話なので、TypeScript とか ES Module の人には多分関係ないと思います。

## 確認環境

| 環境 | バージョン |
| —- | ———- |
| Node.js | 12.18.3 |
| Jest | 26.4.2 |

## やりたいこと

以下の実装のときに、`parentFunc()`を呼んだ時に`childFunc()`が呼ばれることをテストしたいだけです。

“`javascript
function parentFunc() {
console.log(‘called parentFunc’);
childFunc(‘XXXX’);
}

function childFunc(param) {
console.log(`called childFunc ${param}`);
}
“`

## 各ケース紹介

### Case1 そもそも構文がおかしい

テスト

元記事を表示

LINEボットでゲームブックを作った、ついでにシナリオエディタ作ったので完成

前回の投稿( [LINEボットでゲームブックを作ってみた]( https://qiita.com/poruruba/items/28c1c4ba95c4eaf2b739) )で、ゲームブックを作ったのですが、ついでにシナリオエディタも作りました。
これで完成です。

画面はこんな感じです。

シナリオ作成画面です。
テキストを入力したり選択肢を入力したり、背景画像を決めて、重ね合わせる人物画像を指定したりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/e38b8379-01ea-2879-a143-cda54c562be5.png)

こっちが、画像ファイルのアップロード画面。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261826/cc9f43c1-4691-f653-bd45-ca69f9b8bb5f.png)

こっちが、音声ファイルのアップロード画面。

元記事を表示

v0.10.0用 Symbol-bootstrap update script

#v0.10.0用update script
※ このscriptは
自動構築 shellscript “b” で建てた node 用です
https://qiita.com/dusanjp/items/505bf4f3598c7dd90461

サーバに ログイン

vi up
“i” 入力で編集モードにする
以下をコピペ

#!/bin/bash
#ip/friendlyname set
ip=””
friendlyname=””

cd symbol-bootstrap
symbol-bootstrap stop
cd
sudo rm -rf symbol-bootstrap
docker system prune -a

#Symbol Bootstrap
sudo npm install -g symbol-bootstrap
symbol-bootstrap -v

#make configfile
mkdir -p symbol-bootstr

元記事を表示

プログラミング言語でSQLite始め

SQLの経験がほぼない状態だけど、
Node.js、C#、Python3、HSP3でのSQLiteの扱い方を学んだ。
(一応SQL文のみでの動作も)

Node.jsはなんとなくTypeScriptで書いているので、各自動かす場合は型表記を削除すること。
(多分まとめのPromiseだけ)

# 実行環境
* Windows10 64bit
* Sqlite 3.33.0 2020-08-14
* TypeScript Version 4.0.3
* Node.js v12.18.4
* .NET Core 3.1.402
* Python 3.8.3
* HSP : Hot Soup Processor ver3.5

# 使用ライブラリ
## Node.js
[node-sqlite3](https://github.com/mapbox/node-sqlite3/wiki/API)
下記でインストール。

“`sh
> npm i sqlite3
“`

## C#
[Microsoft.Data.Sqlite](https

元記事を表示

FCMアクセストークン取得にプロキシを使用する場合に気を付けるべきこと

# はじめに
FCMを使用したPUSH通知を行うアプリケーションを開発する際に、プロキシを使用してFCMからアクセストークンを取得するようにしたい場合に起こる影響についてまとめました。

# 何が問題だったのか
私の開発していたアプリケーションは様々な種類の機能を集めたもので、nodeのexpressを使用しています。FCMにアクセスしてアクセストークンを取得する処理はそのアプリケーションの中の一機能に過ぎす、通信を行っている機能は他にも複数ありました。それらの機能は、別スレッドでアクセストークン取得処理と同タイミングで実行される可能性があります。その際、それらの通信がプロキシを使いたくない通信であった場合でも、[googleapisのREADME][link2]に載っている方法でプロキシを設定していると、その設定がアクセストークン取得処理以外の通信にも影響が出てしまうといったものです。

# 問題のプロキシ設定方法
[googleapisのREADME][link2]では、`HTTP_PROXY`という環境変数に使用するプロキシのurlを設定するといった方法が紹介されていました。しか

元記事を表示

高校生がリアルタイム言語変換のサービスを作ってGithubにPushしてみた。

高校生でプログラミングが好きなレオです!!

今回はリアルタイムで言語変換できる[サービス](https://github.com/lra21711214/transchat)を作ったので、
紹介とどのように作ったのか少し説明したいと思います。

※この記事は、Node.jsとPython,Socket.ioを使える前提で話を進めていきます。

# 1. アイディア
アイディアは[WeChat](https://www.wechat.com/ja/)の翻訳機能を使っていた時に思いつきました。
僕が中国でお買い物をする際に店員さんと、[WeChat](https://www.wechat.com/ja/)を使って会話をすることがあるのですが、リアルタイムではなく、毎度翻訳をかけないと行けなかったので、リアルタイムで翻訳できて、友達交換もしなくていいサービスを作ろう!と思ったのがきっかけです。

# 2. 使用した言語と技術

使用したプログラミング言語はNode.jsとPythonです。
主にNode.jsを使っていて、Node.js上で[Socket.io](https://socke

元記事を表示

Electron(v9以降)でrequire(“hoge”).remoteを使えない時のためのtips

#Electronで開発を始めようと思ったらつまづいた

Electronではレンダー側でnodeのモジュールを使う際にはセキュリティの問題から初期設定で使用不可となるよう設定しており、以前のバージョンと比べてセキュリティが向上している。

それに従って、以前までのコードでは動かなくなっている部分もあるようなのでtips

“`javascript:main.js
function createWindow () {
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
})
//↑これではレンダー側の処理でnodeモジュールを使用することができない。

// and load the index.html of the app.
win.loadFile(‘index.html’)

// Open the DevTools.
win.webContents.openDevTools()
}
“`

v9(2020年

元記事を表示

npm WARN npm npm does not support Node.js vXX.X.X と出る場合の対処法

# npm WARN npm npm does not support Node.js vXX.X.X と出る場合の対処法
npm installしたときに以下のように出る場合の対処法

“`
>npm i
npm WARN npm npm does not support Node.js v14.6.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can’t make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 6, 8, 9, 10, 11, 12.
npm WARN npm You can find the latest version at https://nodejs.org/

“`
メッセージそのままの問題が起きていて、node.js

元記事を表示

Amazon Echo で Google Drive 上の mp3 を 再生する (その1)

(※2020/10/3 11:04、2.4.に `rootFileId` 書き換えについて追記)

# 今回の実装機能

* 発話により再生するプレイリストを指定する
* 指定されたプレイリスト (json 形式) に記載された曲を記載順に 1 回ずつ再生する

# はじめに

Google Play Music が終了し、YouTube Music に完全移行するまで[残り僅か](https://support.google.com/googleplaymusic/answer/9973710?hl=ja)になりました。
Google Play Music では無料版でもスマートスピーカーでプレイリストやアルバム、曲を指定して再生することができましたが、移行先の YouTube Music では Premium 会員にならないと指定再生ができません。曲指定のためだけに Premium 会員になるほどの情熱はありませんので、Google Home は諦めて Amazon Echo (Dot) で Google Drive 上の mp3 を再生するスキルを作ります。

## プレイヤーの

元記事を表示

【TypeScript】僕のチートシート

## 参考になる記事
早く理解したい方は、下記の記事と Udemy を使って最速で学習しましょう!
[TypeScriptの型入門 – Qiita](https://qiita.com/uhyo/items/e2fdef2d3236b9bfe74a)
[超TypeScript入門 完全パック(2020) \| Udemy](https://www.udemy.com/course/typescript-complete/)

随時更新していきます!!

[TODOリスト]

– interface
– implements
– デコレータ

## 変数

“`typescript
const text: string = “text”

// リテラル型
const lite: ‘foo’ = ‘foo’; // ‘foo’ しか入れることができない

// Union型
const union: string | undefined = “union”
“`

## 関数

“`typescript
// 引数 返り値 の順で実装
function method(arg

元記事を表示

async/awaitの仕組みメモ

async/awaitを学習する中で実際に書いて試してみたのでメモ

“`javascript
const makeRequest = (value) => {
console.log(‘Request received’)
return new Promise((resolve, reject) => {
if (value === ‘Google’) {
resolve(value)
} else {
reject(value)
}
})
}

const processRequest = (response) => {
return new Promise((resolve, reject) => {
console.log(‘Processing your request…’)
resolve(`Here is the response from ${response}`)
})
}

const sayHi = async (receiver) => {
console.log(`

元記事を表示

Node.jsを利用してフォルダ作成を効率化してみる

# はじめに
「001」「002」「003」・・・「100」のような大量のフォルダを作成する必要があり、手作業でやるのは馬鹿馬鹿しいのでNode.jsで作ってみました。Windowsで動作します。

“`mkdir.js
const fs = require(‘fs’)

// プログラム実行ディレクトリ配下を指定
const rootPath = process.cwd() + ‘\\’;

for (let i = 1; i <= 100; i++) { const num = ('000' + i).slice(-3); const directoryPath = rootPath + num; fs.stat(directoryPath, (error, stats) => {
if (error) {
if (error.code === ‘ENOENT’) {
fs.mkdir(directoryPath, (error) => {
if

元記事を表示

【Node.js】npmの導入とpackage.jsonを基礎からまとめてみた

# npmとは?

– **Node Package Manager**の略
– `Node.js`のパッケージマネージャー

# Node.jsとは?

サーバー側で動く`JavaScript`のこと。

# パッケージマネージャーとは?

– `Node.js`の便利な機能を集めたもの。ライブラリ。
– 自分が一からコードを書かなくてもよくなる。

# package.json

– json形式のファイル
– このファイルで`Node.js`を使ったプロジェクトを管理する。
– 親ディレクトリに含まれるファイルが一つのパッケージとなる。

# npmを使ってみる。

それぞれのバージョンを確認する。

“`
$ node -v
v12.18.4
“`

“`
$ npm -v
6.14.6
“`

パッケージを作成したいディレクトリ内で`npm init`を実行。色々聞かれるので、それぞれ答えていく。(わからなければ、適当に答えてあとで`package.json`を編集すればOK)

完了すれば、`package.json`が自動生成されているはず。

## pac

元記事を表示

GitHubActionsでQiitaとSlackを繋いで、エンジニアにとっての良い習慣をつくる。

## よりよい技術者を目指すための習慣
私が感銘を受けた[佐藤太一](https://github.com/taichi)さんの講演でエンジニアが身につけたい習慣についてのお話があります。

[デブサミ2016レポート「今日の習慣が明日をつくる~よりよい技術者を目指して~」](https://dev.classmethod.jp/articles/devsumi2016-19-c-3/)
この中で特に、そこまで敷居が高くなく毎日実践できそうなことが書かれていました。(スライドお借りします。)

###惰性でトレンドを見る習慣をつけるのが大事
>毎日5分Trending repositories on GitHub todayを見よう
>どんな言語が流行り、開発者が注目されているかを見る
>最初はリポジトリまで見なくてもいい。_

元記事を表示

NodeJS開発者が知っておくべき12の便利なパッケージ

NodeJSにはコードの再利用に最適です。そしてコードの再利用の環境はNPMパッケージです。

NPMパッケージは、時間と労力を大幅に節約します。日付ライブラリが必要ですか?そのためのパッケージがあります。ユーティリティライブラリが必要ですか?問題ありません。パッケージをインストールするだけです。コードの問題を解決する必要があるときはいつでも、ニーズに合わせたパッケージがある可能性があります。

これは、すべてのNodeJS開発者が知っておくべきNPMパッケージのリストです。これらのNPMパッケージを時間の節約と魔法の妖精のヘルパーとして扱ってください。

**生産性を向上させるNodeJSパッケージ**

## [husky](https://github.com/typicode/husky) – 20k Stars
Huskyは、Git Hooksの実装を簡単にします(Git Hooksとはスクリプトです。GitがCommitやPushなどの重要なコメントを実行する時に自動的に実行されます)。チームと協力して、チーム全体にコーディング標準を適用したいですか?問題ない!Huskyを

元記事を表示

Node.js MySQLのクエリでプレースホルダーを使う

##前置き
Lambdaなどでmysqlを実行するにあたっての簡易メモ
仕様は[公式](https://github.com/mysqljs/mysql)から参照

`.query(sqlString, values, callback)`でプレースホルダー値を利用する
(connection作成は省略します。)

– 第一引数のSQLに**?**を指定する。
– 第二引数に配列を渡す。

## SELECT

“`.js
const sql = “SELECT * FROM sample WHERE id = ?”;
const data = [1];
const query = connection.query(sql, data, (err, results, fields) => {
if (error) throw error;
// …
});
console.log(query.sql); // SELECT * FROM testdb.sample WHERE id = 1
“`

フィールド名に使う場合は**??**を指定する。

“`.js

元記事を表示

Node.js の vm モジュールでサンドボックスを作る場合の注意点

こちら↓

[JavaScript: プラグインシステムとプロトタイプ汚染攻撃 – Qiita](https://qiita.com/suin/items/9c80f299057a338f77be)

のコメント欄で、「Node.js でサンドボックスを作るなら `vm` モジュールおすすめだぜ!」
と言うような主旨のコメントをしたのですが、
色々と注意が要る機能でもあるので、補足がてらにちょっとまとめてみます。

## `vm` モジュールを利用したサンドボックス化

Node.js の [vm モジュール](https://nodejs.org/api/vm.html) を使うと、
新規コンテキスト下で任意のスクリプトを実行することができます。

~~~js
const vm = require(‘vm’);

// 新規コンテキストを作成
const context = vm.createContext({
// コンテキスト内のグローバル変数・関数
x: 10
});

// 作成したコンテキスト下で実行
const result = vm.runInContext(“

元記事を表示

gulpでSassを良い感じにコンパイルする

##はじめに
**「この記事を見ればgulpで良い感じにSassをCSSにコンパイルできる!」**という記事です。

以前[gulp超入門](https://qiita.com/taka-hyt/items/d6053936f1b8eba6bac3 “gulp超入門”)という記事を執筆しましたが、環境構築を行い、SassをCSSにコンパイルするだけの基本的な内容でした。
こちらの記事でもう少し詳しく解説しています。

参考になったらぜひLGTMをお願いします!

##事前準備
環境構築の方法については、以前[gulp超入門](https://qiita.com/taka-hyt/items/d6053936f1b8eba6bac3 “gulp超入門”)という記事を執筆していますので、そちらを参考にしてください。
環境構築はこちらの記事を元にできているものとして進めていきます。

[gulp超入門](https://qiita.com/taka-hyt/items/d6053936f1b8eba6bac3 “gulp超入門”)

ディレ

元記事を表示

OTHERカテゴリの最新記事