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

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

Google Analytics, Google SpreadSheet, Big Query, Google Ad ManagerのAPIをNode.jsで触ってみる

# はじめに

データの可視化を行う当たってGoogleの各種APIを触ってみましたが、最初は認証の仕方とか基本的な書き方とかでつまづく所もあるので、ハンズオンとして触り方をなるべくわかりやすく紹介したいと思います。
今回紹介するのは

– Google Analyticsのレポート
– Google SpreadSheet
– Big Query
– Google Ad Managerのレポート

のAPIになります。
サンプルコードは[こちら](https://github.com/hedrall/google-data-api-samples)に上げています。

# Google Analytics の レポートAPI

## 概要

– GAのAPIドキュメントを検索すると、Reporting API v4 と Core Reporting API が出てきますが、最新は Reporting API v4 です。
– https://developers.google.com/analytics/devguides/reporting/core/v4?hl=ja
– ガイド

元記事を表示

タイムリーに is-promise 2.2.0 破損に巻き込まれた話

Node.jsの環境をSSDに引越しして動作を確認していたところ、`yo`がインストールできない・動かないという謎の現象に見舞われた。実は自分の環境が悪いのではなく、タイムリーに`yo`が依存するたった1行の関数を提供する`is-promise`が壊れた直後にインストールしたことが原因と分かった。

別のモジュールではNode.jsのバージョンが上がって動かなくなるケースでは対応が遅れることがあったので、今回はすぐ処置されてラッキーだった。(知らないだけで日常的に起きているのかもしれないが)

# 起きた現象
`yo`をインストールすると、ちゃんと動くかをチェックするYeoman Doctorが実行される。ここで、`yo –version`でエラーが起きてしまっている。この後`yo`を実行しても、同じエラーで起動すらしない状況となった。

“`
> yo@3.1.1 postinstall K:\nodejs\npm_global\node_modules\yo
> yodoctor

Yeoman Doctor
Running sanity checks on your sys

元記事を表示

ubuntu18.04にnode12系とnpm6系をインストールする

# 実行環境

– OS:ubuntu 18.04

# 前提条件

– 特に無し

# 実施手順

[公式のREADME.md](https://github.com/nodesource/distributions) に従ってコマンドを実行するだけです。

node12系を指定し、インストール。

“`
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash –
sudo apt-get install -y nodejs
“`

以上です。

# 結果確認

Node.js のバージョン

“`
$ node -v
v12.16.2
“`

npm のバージョン

“`
$ npm -v
6.14.4
“`

# まとめ

[公式のREADME.md](https://github.com/nodesource/distributions) の手順をそのまま実行しただけでした。

元記事を表示

代替手段の探し方

新しいものを勉強する時や久しぶりに触るミドルウェアとかアプリケーションについて、もっといいものあるんじゃないかなって時にどうしてます?

自分は
`アプリケーション名 alternative`
って検索してみてます。

例)
`nvm alternative`
node.jsのversion managerの代替アプリを探した場合。
[nve](https://github.com/ehmicky/nve)って製品が見つかりました。

あとは出てきたものと、元の製品とあわせて
`nvm nve`
とか調べてみたりします。

元記事を表示

HerokuのPostgreSQLにSSL接続する

  
短いですが備忘録として残しておきます!

## エラー

Node.jsのORM(Object Relation Mapping)であるSequelizeを利用して、
ローカルからHerokuのPostgreSQLに接続する際に下記のエラーが出て接続できませんでした。。

“`
error: no pg_hba.conf entry for host “DB_HOST”, user “DB_USER”, database “DB”, SSL off
“`
これはSSL接続がオフになっているためオプションでオンにしてあげる必要があります。

## 解決

“`javascript
const Sequelize = require(‘sequelize’)
const sequelize = new Sequelize(
‘postgres://~~’, // DB情報
{
// DBにSSL接続する
dialectOptions: {
ssl: true,
},
}
)
“`

上記のようにSSL接続をtrueとすることで解

元記事を表示

課題管理表をNode.jsとSQLiteで作る②

①に続いて今度はDBへの登録画面を作っていきます。

## 登録画面の作成

まずviewsにDB書き込みフォームとなるwrite.ejsを新規作成します。

中身はこんな感じで必要最低限の項目とDBへの登録ボタンを用意します。

“`html



登録

新規課題登録

課題

JSのモジュール機能とbabelとwebpackと

#CommonJSとECMAScript
JavaScriptにはサーバサイドのNodeJS(CommonJS)とブラウザのJavaScript(ECMAScript)の二つの言語仕様がある.

二つはモジュール機能(JavaScriptファイルを外部参照する機能)の記述に関して大きな違いがある.

##CommonJSのモジュール機能
CommonJSでモジュールを外部参照できるようにするためには,主にmodule.exportsを使う.

“`Javascript:abc.js
module.exports = 変数1, 変数2, ...
“`

CommonJSでモジュールを参照するためには,requireを使う.
requireで参照するモジュールのファイル名を指定することで,module.exportsした変数そのものを参照することができる.

“`Javascript:
const abc = require(‘abc’)
“`

##ECMAScriptのモジュール機能
ECMAScriptでモジュールを外部参照できるようにするには,主にexportもしくはexp

Cypressで日本語が文字化けするとき

下記を`cypress.js`に追加すると解決する。

“`javascript
{ “modifyObstructiveCode”: false, }
“`

詳しくは読んでないが、下記issueに書いてあった。
https://github.com/cypress-io/cypress/issues/1543

## 経緯
試しにCypress使ってお願いされたサイトのテストを書いていたら、特定の文字のみ文字化けする。
怪しいところがないか調べたところ、``が指定されている。
超怪しい。
ということで、Charset周りのことを調べてたら上に行き着いて解決しました。

aws-sdk-mockを使ってもS3がモックに差し替わらずに困りました

[aws-sdk-mock](https://github.com/dwyl/aws-sdk-mock)を使ってもS3(にアクセスするAWS SDK)がモックに挿し変わらずに困り果ててました・・。

明示的にaws-sdkのパスを指定することで解決しました。

“`javascript:jestのテストコード
const awsMocker = require(‘aws-sdk-mock’);

// 【ここがポイント】 以下のようにaws-sdkのパスを明示的に指定する必要がありました。
const path = require(‘path’);
awsMocker.setSDK(path.resolve(‘node_modules/aws-sdk’));

const testee = require(‘テスト対象ファイルへのパス’);

// その他 略

describe(‘S3の画像保存テスト’, () => {
describe(‘正常時’, () => {
it(‘putObjectを1回だけ実行する’, async done => {

ExpressのhttpセッションをWebSocketで共有する方法

先日、WEBサイト制作者向けのウェブサービスをリリースしたのですが、その制作過程で得た知見をシリーズで発信していく記事の第3弾になります。
個人開発でウェブサービスにトライしてみたいと考えている方の参考になりましたら嬉しいです。

Node.jsサーバでWebSocketを使用する際、httpのセッションデータをWebSocketでも読み込みたいという場面が出てくると思います。
今回の記事では、httpセッションをWebSocketで共有(正確に言うとWebSocketからはReadOnly)する方法について書いてみたいと思います。

## Redisをセッションストアとして使う
実はRedisを使わなくても実現できるのですが、以下の理由によりRedisを使うこととします。

– Nodoサーバで全部受け止めるのではなく負荷を分散させておきたい
– 開発時にNodeサーバを起動し直してもセッションを維持できて便利
– 複数のNodeサーバでセッションを共有できるので、機能によってサーバ(コンテナ)を分けられる

Redisをひとことで説明すると、ネットワーク接続されたインメモリデータス

課題管理表をNode.jsとSQLiteで作る①

初めての投稿なので、至らぬ点があるかと思いますが、温かい目で見て頂ければ幸いです。

EXCELで課題管理を行っていますが、プロジェクトメンバー共有で使っています。

誰かが開きっぱなしだったりすると編集出来なくてちょっと面倒です。

今回はNode.jsとSQLiteを使って、誰でもいつでも課題管理への登録が出来るようなものを目指して作ってみました。

環境はWindows10で行っています。

## 使うもの

私が動作を確認した構成は以下の通りです

– npm:6.4
– Node.js:8.xx
– Express:4.16
– SQLite:3.22

## SQLiteのインストール

公式サイトに行ってダウンロード&インストールを行ってください。

## DBとテーブルの作成

今回はToBe方式での課題管理を行うことを想定し、以下のカラムを用意します。

– 課題
– 理想の姿
– 理想とのギャップ
– 解決策

インストールフォルダをカレントディレクトリにします。

まずDBを作りたいので、以下のコマンドを発行します。

“`sql
sqlite3 kadai

暇を持て余した高校生による給料計算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