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

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

暇を持て余した高校生による給料計算npmモジュール

# はじめに
ざっと自己紹介をすると

– 高校2年生
– JS書いてます
– [Twitter](https://twitter.com/AlGoRiT94422608)
– [GitHub](https://github.com/kota-yata)

# きっかけ
現在僕は給料計算とカレンダーのwebアプリを開発中で、カレンダーについては[FullCalendar](https://fullcalendar.io/)で行けたんですが給料計算に関しては国ごとに法律が違うこともあってライブラリやモジュールがありませんでした。モジュールが無いなら自分で作るしかなくて、どうせならnpmパッケージにして公開しようと思い立ったので開発しました。

# 沼ったところ
そもそも僕はnpmパッケージとかモジュールなんて一度も作ったことがなく、どうやってパッケージにするかも全くわからなかったので、ローカルでinitするところからGoogle先生の力を借りなければならなかった訳です。参考にしたサイトは以下のような感じです。

– [初めてのnpm パッケージ公開](https://qiita.com

元記事を表示

Vue MEVN Stack Tutorial – Build Full Stack Vue.js CRUD App

This is a step by step MEVN stack tutorial, in this tutorial, we are going to learn how to create MEVN stack app. (MongoDB, Express.js, Vue.js, Node.js).

click here to read more

Vue MEVN Stack Tutorial – Build Full Stack Vue.js CRUD App

元記事を表示

Node.js(Express)を使ってJEPG画像をアップロードして表示するというシンプルなWebアプリケーションを作ってHerokuにデプロイしたい話 on Windows

#背景
Node.jsという最近キテそうな言語を使いこなして、高級寿司を食えるかっこいいエンジニアになりたいので勉強がてらシンプルなWebアプリケーションを作った。あと、WebアプリケーションらしくHerokuにもデプロイしたいと思った。

JEPG画像のアップロードなんて余裕でしょって思っていたらめちゃくちゃ躓いたので、すべての記憶を失っているであろう未来の僕に対して記録を残す。ごちゃごちゃ書くので見づらいと思います。ごめんなさい。

#環境
OS:Windows 10 Pro (64bit)
プロセッサ: Core i5 3.20 GHz
メモリ: 24.0 GB

“`
$ node -v
v12.16.2
“`
“`
$ npm -v
4.0.5
“`
“`
$ express –version
4.16.1
“`

#作り方
##1. express-generatorを使う
「巨人の肩に乗っていけぇ~」ということで
こちらの通りにやると大体できました。
[[Node.js] express + Multer を使用してファイルアップロード API を作成する]

元記事を表示

nodejsやpythonのファイルの最初の行にシェルスクリプトで使われる「あれ」を付けて実行ファイル化してみよう

どうもこんばんは、cedです。
今回はlinux系で使われるシェルスクリプトの「あれ」をnodejsやpythonのファイルにつけて実行してみようっていう記事です。

※これはwindowsでする場合、WSLが必要になります。

# 実行環境
os: ubuntu 19.10 / arm64(Android)
python: 3.7.5
nodejs: 12.16.2

# さっそくHello Worldを書いてみる
## の前にファイルに権限与える
“`bash:nodejs
touch index.js
chmod +x index.js
“`

“`bash:python
touch index.py
chmod +x index.py
“`

## nodejsの場合
“`js:index.js
#!/usr/local/bin/node
//nでインストールしていない場合はlocalは要らない
console.log(“Hello Woeld!”);
“`

#pythonの場合
“`py:index.py
#!/usr/bin/python3
print(“H

元記事を表示

TensorFlow.jsチュートリアルのnpm install @tensorflow/tfjs-nodeでつまづいた話 on Mac

#背景
[この](https://avinton.com/blog/2019/07/tensorflow-js/)記事みて、TensorFlow.jsめっちゃいいじゃんと思ってNode.jsも最近触ってるし[チュートリアル](https://www.tensorflow.org/js/tutorials/setup)やってみようとしたら初手でつまづいてキレそうになったので、メモ。
ちなみにWindows10とMacでやってWindowsはいまだに解決できないので、誰か教えてくらはい。

#環境

PC: MacBook Air (Retina, 13-inch, 2018)
OS: macOS Catalina (ver 10.15.4)
プロセッサ: 1.6 GHz Intel Core i5
メモリ: 16 GB 2133 MHz LPDDR3

“`
$ node -v
“`
>v10.16.0

“`
$ nmp -v
“`
>6.9.0

#つまづいたこと

Node.jsを使っていてnpmの人は下記をすればいいと書いてあったので、実行したらERR!がクソほどでた。

元記事を表示

JIRA REST APIで任意の課題(JQLで指定)にグループメンバーをウォッチャーとして割り当てる。

#はじめに
* JIRAの一括変更でグループメンバーへのウォッチャー割り当てができなかったためREST APIで実装してみました。

#実施環境
* 実施環境、事前準備は[JIRA REST APIで課題情報を取得(jira-client-npm を使用)](https://qiita.com/UC-SADA/items/1824aa5d5f3b2b21afef)を参考にして下さい。

# 作業の流れ
1. getUsersInGroup関数を使ってメンバーのaccount_idの抽出
2. searchJira関数を使って未ウォッチタスクの抽出
3. addWatcher関数を使ってウォッチャーの割り当て
4. mainでそれぞれの関数をasync/awaitで同期処理。

## getUsersInGroup
* グループ内のaccount_idの抽出
* 同期処理をするためにPromiseを用意しておく。

“`index.js
// グループメンバーの抽出
function getUsersInGroup(groupName) {
return new Promise(

元記事を表示

node-fetchでeuc-jpのページを取得する場合

2020年もなると文字コード関連のノウハウなんてものはすっかりプログラミングサイト上からも消えています。世間は当たり前のようにutf-8化しています。いまだにutf-8化していないのはwindowsの一部くらいなものでしょう。

で、webの世界は当然utf-8で全部済むと思っていたのですが、最近、node-fetchでeuc-jpのページを拾ってくる作業にぶつかりました。node-fetchとはnode.jsでjavascriptのfetch関数を使うライブラリです。fetchとはXMLHttprequestのモダンなやつです。

こういう場合はfetchにURL渡して引っ張ってきてその文字列を何かのライブラリーで変換というのがセオリー中のセオリーですが、そんなのは20世紀のプログラミングらしいです。perlのJcodeとかの時代のセオリーのようです。

モダンなプログラミングというのは「誰かがどこかで勝手にutf-8に変換してくれてる」というもので、特にウェブの場合はhtmlに文字コードがcharsetとして記載されており、それを読んで変換、あるいはソースの文字コード自動判別して現

元記事を表示

Node.js で Redis を使う場合、コネクションプールは必要ない

# TL;DR
Node.js も Redis もシングルスレッドなので、 Node 1プロセスにつき接続ひとつでよい。
トップレベルで `createClient` をして、その先で使えばよい。

# 本文
[Redis](https://redis.io/) はよく使われるインメモリデータストアです。

ふつうの DB (Postgres とか)だとコネクションプールを普通に使うので、 Redis にもあるのかなーと思って [node-redis のドキュメント](https://redis.js.org/)を見に行くとコネクションプールに関する記載がない。
どういうこっちゃと思って GitHub の issue をあさりに行くと、その理由がありました。

[connecting pool · Issue #1354 · NodeRedis/node-redis](https://github.com/NodeRedis/node-redis/issues/1354)
>
Since Node and Redis are both (practically) single-thre

元記事を表示

Node.js: 子プロセスの例外を親プロセスに送る方法

Node.jsの`child_process`モジュールの`fork`で起動した子プロセスにて、例外が発生したとき、その例外を親プロセスに送る方法です。

“`js
const { fork } = require(‘child_process’)

if (process.send) {

// 子プロセスの処理
process.on(‘uncaughtException’, error => {
process.send(error) // 例外はメッセージとして送る
process.exit(1)
})
throw new Error(‘Something wrong’)

} else {

// 親プロセスの処理
const childProcess = fork(__filename, [], {
serialization: ‘advanced’ // このオプションが必須
})

// 例外はメッセージとして受け取る
childProcess.on(‘message’, message => {
if

元記事を表示

【Nuxt.js】導入に必要なサーバ要件について

# サーバで動かすには何が必要なの?

まずはローカル環境でいろいろ試すとは思いますが、
実際にプロダクトとしてサーバにローンチするにあたり、結局のところ
**動作させるにはどんな環境が必要なのか?**という軸でざっくり説明したいと思います。
なので、Nuxt.jsそのものがどんなものなのか、はここでは割愛させていただきます。

### そもそも何故こんな記事を書こうと思ったのか

自身はPHPを中心としたバックエンドよりの仕事が多かったため、
Vue.jsやNuxt.jsの台頭によるフロントエンドの隆盛を横目で流し見していました。
さすがにこりゃいかん、と、思い始めたのも2018年あたりという…
で、細々と勉強をしている中で、文法作法はさて置き、いまいち分からなくなるのが
**開発とローンチ(サーバ)での動作環境**についてでした。
詰まるところ、ローカルではNode.jsやらnpmやらwebpackやらVueCLIやら
あれもこれもインストールして大盛り上がりな状態で開発していくんですが
**ローンチするサーバには結局、どんな要件があれば動くの?**ってところが非常に分かりにくかっ

元記事を表示

[AWS]基礎知識編

# 背景
AWSでよく出てくる用語やコマンドをまとめてみました。

## 基礎知識

### 用語

AMI = OSの情報やディレクトリ、ファイル、ブロックデバイスマッピングなどインスタンス作成に必要な情報を一通りまとめたもの(インスタンスはAMIのコピー)

キーペア = 公開鍵(パブリックキー)暗号における公開鍵(パブリックキー)と秘密鍵(プライベートキー)のペア

Elastic IP = サーバーを再起動しても同じIPアドレスを割り当てることができる性質を持つIP

ポート = 1つのサーバと複数のサーバをつなぐもの

セキュリティグループ = Amazon EC2インスタンスに適用可能なAWS標準のファイアウォール機能。EC2インスタンスへのアクセスを”許可”したり、トラフィックを”制御”することができるもの。

SSH = 暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルのこと。離れた場所にあるサーバの中で作業を行いたい場合に利用する。

yumコマンド = Linuxにおけるソフトウェア管理の仕組み。

元記事を表示

direnvとnvmを用いてディレクトリごとにnodeのバージョンを切り替える

# 概要
– 個人や仕事で、複数のプロジェクトに渡ってやっていくうちに、nodeのバージョンを切り替えるのが煩わしくなっくる。
– 私自身も`nvm use v12`などと明示的に切り替えていた。
– 今回はそう言った方のために、nodeのバージョンを自動的に切り替える手順を紹介します。

# direnv と nvm について
Githubの[direnv](https://github.com/direnv/direnv)と[nvm](https://github.com/nvm-sh/nvm)を参考

# direnvのインストール & 初期セットアップ
direnvについてはこちらが良い記事だったので、はじめに入れておく。
https://qiita.com/kompiro/items/5fc46089247a56243a62

# nvmのインストール & 初期セットアップ
nvmについてはこちらが良い記事だったので、はじめに入れておく。
Macの方はHombrewを使うと思うが[Github](https://github.com/nvm-sh/nvm#important-

元記事を表示

Box APIで、外部ユーザーを取得するやりかた

## Boxで外部のユーザーを取るやり方(box-node-sdkの場合)

box-node-sdkをつかって、外部ユーザーを取得するやりかたがわからなかったので調べました。
他のSDKでも考え方は同じはず。

以下やり方。

“`js
const boxSDK = require(“box-node-sdk”);
const config = require(“./config”); // config.json

const main = async () => {
const sdk = boxSDK.getPreconfiguredInstance(config);
const saClient = await sdk.getAppAuthClient(“enterprise”);

const anExternalUser = await saClient.enterprise.getUsers({
filter_term: “taro.yamada@example.com”,
user_type: “external”,
});
c

元記事を表示

promise-queue: 100件から常に3件取り出して並列実行

Node.jsにも[async](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function) / [await](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await)構文が実装されたが、Queueみたいな仕組みがない。

for文で1件ずつawaitで回していると何時まで経っても終わらない。
かといって、一気にPromiseに変換して、Promise.allで見張る仕組みにすると
同時実行数制限で止まってしまうといった問題も出てくるだろう。

探したら[promise-queue](https://www.npmjs.com/package/promise-queue)という神ライブラリを見つけたので、
紹介しつつ活用していきたい。

## Installation

promise-queueはnpmでインストールできる。

“`bash
$ npm inst

元記事を表示

Box APIでBox Shieldの分類の操作をしてみる

## やりたいこと

カスタムアプリからAPIを通してBoxを利用する場合、Box Sheld(のスマートアクセス機能)って、APIから使えるの?どうやってセキュリティ分類をファイルにつけるの?を調査しました。

## TL;DR

Box APIからもセキュリティ分類を操作して、Box Shield スマートアクセスを利用可能です。

node.jsでのやりかたはこんな感じです。

“`js
const boxSDK = require(“box-node-sdk”);
const config = require(“./config”); // config.json

const main = async () => {
const sdk = boxSDK.getPreconfiguredInstance(config);
const saClient = await sdk.getAppAuthClient(“enterprise”);

// 社内ユーザー1として実行
saClient.asUser(“12510354596”);

// テ

元記事を表示

webpackのビルドにてエラー。 TypeError: Cannot read property ‘properties’ of undefined

#エラー内容
“`
TypeError: Cannot read property ‘properties’ of undefined

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @ build: `webpack`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @ build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
“`

今回のエラーで見るべきは、“`TypeError: Cannot read property ‘properties’ of undefined“`の部分。

これは古いバージョンのwebpackを使っていることで吐かれるエラーみたいです。

#解決法

僕の場合は

“`
“webpack”: “^4.5.0”,
“webpack-cli”: “^2.0.1

元記事を表示

Node.js 14が本日リリース!V8のアップグレードにより「オプショナルチェイニング」「Null合体演算子」等が利用可能に

この投稿では、Node.jsバージョン14の新機能を紹介します。

## Node.js 14

* 本日、2020年4月22日にリリースされた:tada:
* v14はLTS(long term support)という3年間の保守が約束されたバージョン。

## Node.js 14の今後の予定

* Current期間: 2020年4月22日〜2020年10月19日
* 互換性が保たれる範囲で新機能が追加される。
* 企業ユーザとしては、アップグレードに備えて、この6ヶ月間にv14でのテストを実施すると良い。
* Active LTSの期間: 2020年10月20日〜2021年10月18日
* リリースラインに適切な範囲での新機能の追加、バグ修正と保守。
* 企業ユーザが、本番環境をアップグレードするのに最適な時期。
* メンテナンス期間: 2021年10月19日〜2023年4月
* 重要なバグ修正とセキュリティ更新。

ちなみに、過去のLTSの終了時期は下記の通り:

* Node.js 12: 2022年4月
* Node.js 10:

元記事を表示

[Node.js] メソッド使おうとしたらあるはずなのにないよって言われた

##環境
node:v8.11.3

## あかんプログラム

“`javascript:nogizaka-suko.js
getHogeData: function(user_id, callback) {
//なんかいろいろ
},
getAllUsers: function () {
return new Promise(function (resolve, reject) {
//いろんな処理する
this.getHogeData(user_id, なんかコールバック);
//いろんな処理する
});
},

“`

##解決方法
Promiseというより二重のfunctionで囲まれた状態でthis使っていたのがまずかったのでやめた

元記事を表示

Mac Nodebrewを用いてNode.jsをインストールした時にバージョン有効化時にエラーが出た話

# 目的

– インストール後のバージョン有効化時にエラーが出た話を簡易的にまとめる

# 事前作業

– 下記の方法と同様の作業を行った。
– [Mac HomebrewでNode.jsをインストールする](https://qiita.com/miriwo/items/73d1546220f1c091a7d5)

# エラー内容

– 最新の安定版をインストール後に下記コマンドを実行したところエラーが発生した。

“`terminal
$ nodebrew use vX.X.X
“`
– エラー

“`
vX.X.X is not installed
“`

# 解決方法

`$ nodebrew –version`の出力の中の「# install」に記載されている`$ nodebrew install vX.X.X`を再度実行した。

再度`$ nodebrew use vX.X.X`を実行したところ正常にバージョンを有効化することに成功した。

元記事を表示

Firestore.Timestamp に触れたくないあなたのための黒魔術

# Firestore.Timestamp って、いらなくね?

ちゃんと使いこなせばメリットもあるんだろうなぁと思いつつ・・・
少なくとも小規模なプロジェクトでは、Timestamp型が存在するせいで

– Firestore から読んだ、時刻フィールドを toDate() で Date型にもどす
– Document の interface と、 REST をまたぐ interface を分ける

みたいな対応が必要になるわけです。いちいちめんどいんすこれ。
Date 型で十分な状況もあるんです。

## 問題の例
“`ts
interface User {
name: string;
updatedAt: Date;
}

const write: User = {
name: “taro”,
updatedAt: Date.now(),
};
await firestore
.collection(“users”)
.doc(write.name)
.set(write);

const read: User =
await firestor

元記事を表示

OTHERカテゴリの最新記事