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

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

http-serverによるローカル HTTPS server 構築 (5分でできる)

# はじめに
https環境でないと動かないJavascript APIなどを試験するのにローカルになんちゃってhttpsサーバが欲しくなった。以下が簡単で最速かなと思ったのでここに記す。

## mkcertのインストール
Macの場合

“`zsh
% brew install mkcert
“`

## CAのインストール(初回のみ)
“`zsh
% mkcert -install
“`

## サーバ証明書、秘密鍵生成
下記コマンドで適当なフォルダに証明書、秘密鍵を生成。mkcertコマンドには証明したいドメインを全て指定。 ローカルネットワークの他PCからもアクセスしたいので、自PCのPrivate Address (e.g. 192.168.11.2)も追加(各自適当に)。

“`zsh
% mkdir ~/cert
% cd cert
% mkcert localhost 127.0.0.1 192.168.11.2
% ls
localhost+2-key.pem localhost+2.pem
“`
## http-serverインストール

“`

元記事を表示

【NodeJS】AWS Lambda+APIGateway+DynamoDBでTODOアプリを作成

## はじめに
サーバーレスを趣味で始めてみたので、勉強がてらAWS Lambda+APIGateway+DynamoDBでTODOアプリを作成し始めました。
個人のメモとして、サーバー側とクライアント側での処理を記事にまとめます。(まだ作成途中です)

## 概要
Lambdaで使用する言語はNode
DynamoDBはidとtodoという項目のみを持ちます。
テーブル名は「todoTable」
今回は、GETとPOSTのみを実装します。

## Lambdaで関数作成
本来であれば1つの関数にまとめたかったのですが、GETメソッドであることをLambdaに渡す方法がわからず、ひとまず関数を分けました。

まずはGETメソッドから。
単純に全てのカラムを取得します。(本来はあまりscanは使わない方がいいらしいが)

“`js
const AWS = require(‘aws-sdk’)
const dynamo = new AWS.DynamoDB.DocumentClient()

exports.handler = (event, context, callback) =>

元記事を表示

Angular9でBootstrap4を使う

# 始めに

– Angular 9系にBootstrap4 (ng-bootstrap) を適用する手順です。

– 通常の Bootstrap(jQuery, popper.js依存)を使用してもよいですが、余計なライブラリに依存することになる事になるため、おすすめしません。
– ng-bootstrapは、Bootstrapが依存しているjQuery, popper.jsの実装をAngularのcomponentに差し替えています。
– メジャーバージョンはしっかりと確認する。
– 特に Angular5 と Angular6+では CLI の設定ファイル周りが大きく変更となっています。

– 公式の英語ドキュメント読むのめんどいって方向け。

# 環境

タイトルにもある通り、今回はAngular9系にBootstrap4を適用します。

“`
$ ng –version
_ _ ____ _ ___
/ \ _ __ __ _ _ _| | __

元記事を表示

バイナリベクタータイルをGeoJSONにデコードする2つの方法

## Abstract
バイナリベクタータイルの実体は、XYZタイルの位置ごとにサーバーに設置されたPBFファイル群です。PBFファイルはプロトコルバッファと呼ばれる規格で(その詳細は把握していませんが)、GeoJSONをシリアライズしたバイナリデータです。つまり元はGeoJSONなので復元(デコード)可能という事です。今回は2つの手法でGeoJSONへのデコードを試みたいと思います。

## tippecanoe-decode
mapbox社謹製のtippecanoeと言えばバイナリベクタータイルの生成で用いられる有名なライブラリですが、付随して、バイナリベクタータイルからGeoJSONへのデコード機能を持っています。

### Install
“`shell
brew install tippecanoe
“`

### Usage
“`shell
tippecanoe-decode
“`

これが基本形で、特定のsource-layerのみを抽出する事も出来ます。

“`shell:具体例
tippeca

元記事を表示

firebaseでexpress-generatorの起動方法

#1
下記のURLで設定
https://qiita.com/yoshikoba/items/ff7beab24863db804f42

この通りに設定してもエラーが出ました。

#2

package.jsonに

“`javascript
“engines”: {
“node”: “8”
},
“`
を追加。

#3

functionディレクトリ内で

“`shell
npm install firebase-admin
npm install firebase-functions
“`

#4
firebase serveで localhost:5000を開けば
スクリーンショット 2020-04-12 16.41.38.png

表示されます。

元記事を表示

npmのインストール

## npmの2種類のインストール

* ローカルインストール
カレントディレクトリの node_modules 以下にパッケージをインストール。開発プロジェクト固有で依存するパッケージをインストールしたい時に使う。

* グローバルインストール
システム共通の場所にパッケージをインストール。ビルドツールなど、システム全体で利用するツール・コマンド類をインストールしたい時に使う。

## ローカルインストール
* –save
package.jsonのdependencies に追記される。他の人が npm install した時に、dependencies に指定したパッケージが全てインストールされる。

* –save-dev
package.jsonのdevDependencies に追記される。npm install パッケージ名 –dev

* –save-optional
package.json の optionalDependencies に追記される。

## 違い
package.jsonがモジュールとして外部に公開し

元記事を表示

Node Version Manager

## Node.jsのバージョン管理ツール
* node.jsはバージョン依存度が高いため、バージョン管理ツールが必須です。
* 主要なものに「nodebrew」「nvm」などがあります。


## どちらがおすすめ?
nvmのほうが人気です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269452/4f1543c6-a467-a129-0b71-31f06264d4d0.png)


## Cloud9でのNode.jsとnvm
既にプリインストールされています。

“`bash
whitecat:~/environment $ node -v
v10.19.0
whitecat:~/environ

元記事を表示

JavaScriptでのimport/export方法

JavaScriptでは、exportやimportを使って関数やクラスを他のファイルから呼び出し/読み込みすることができますが、いろんな書き方があって何がどう違うのかごちゃごちゃしませんか?
少なくとも私はごちゃごちゃしちゃうので、備忘録も兼ねてまとめたいと思います。

# es2015とNode.jsでの書き方の違い

まず最初の混乱ポイントは、
`export` なのか `exports(module.exports)` なのか?
読み込みは `import`、`require` どっちなの?

めちゃくちゃややこしいですよね。けどこれ実は別物で、
`export/import` は、ES2015(ES6)での書き方
`exports/require` は、Node.js(CommonJS)での書き方なんです。

参考:CommonJSって何?という方は @naoki_mochizuki さんが書かれた [JavaScriptが辿った変遷](https://qiita.com/naoki_mochizuki/items/cc6ef57d35ba6a69117f#commonjs)

元記事を表示

macOSのnpmでグローバルインストールに失敗する

## 事象

1. `-g`オプション付きの`npm`コマンドでパッケージをグローバルインストールしようとすると、次のエラーが発生する。

“`shell
% npm install -g typescript
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’
npm ERR! [Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’] {
npm

元記事を表示

sequelize.jsを使ってみる。

# sequelize.jsとは
node環境でDBを操作するための便利なライブラリです。
サーバーサイドをnode.jsで実装する際にexpress.jsと合わせて使用します。

CLIによるモデルの作成とDBマイグレーションについて説明した後、
ORMとしてのサーバーサイドでの呼び出し方法について記載します。

詳細はこちらをご参考ください。→https://sequelize.org/master/

# 導入方法
npm install –saveする。

“`sh
npm install –save sequelize
“`

## モデルの作成とDBマイグレーション
モデル作成とDBへのマイグレーションはsequelize-cliを使用します。
###インストール

“`sh

npm install –save sequelize-cli
“`

### 初期化処理

“`sh
./node_modules/sequelize-cli/lib/sequelize init
“`
コマンドを打つと、config、migrations、modelsといったデ

元記事を表示

Node.jsとMongoDBの環境をDockerで構築

# はじめに
Node.jsとMongoDBの組み合わせのDocker環境をネットで調べると、ちゃんと動くものがなかったので、自分で作成しました。

# 環境構成
WebフレームワークはNode.js、データベースはMongoDBを使用します。
また、Nginxのリバースプロキシを用いて、Node.jsに接続できる環境にしています。

# ディレクトリ構成

“`
my-project
|– nginx
| └ site.conf
|– server
| ├ Dockerfile
| ├ package.json
| ├ package-lock.json
| └ app.js
└– docker-compose.yml
“`

## /nginx
site.confにはNginxのリバースプロキシの設定を書きます。

“`site.conf
server {
listen 80;
server_name local

元記事を表示

失敗しない文字列シリアライザ選び.js

本記事は「[Node.jsのworker_threadsに使えるバイナリフォーマットを考えた件](https://qiita.com/ayatty/items/4b662dba4395388c7138)」のスピンオフ作品となっております。

# 1. お題目
「[Node.jsのworker_threadsに使えるバイナリフォーマットを考えた件](https://qiita.com/ayatty/items/4b662dba4395388c7138)」では、worker_threadを使った親子スレッド間でデータを共有するには`SharedArrayBuffer`[(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer)を使うことを知りました。
`SharedArrayBuffer`はバイナリ配列ですから、JavaScriptの数値、文字列、オブジェクト、配列等々のデータは直接格納できません。そのため、ここに格納するためのシリアライザ、取

元記事を表示

【Firestore】配列へのデータの追加で Cannot read property ‘arrayUnion’ of undefined

# arrayUnion を使用する

“`test.firestore.js
var washingtonRef = db.collection(“cities”).doc(“DC”);

// Atomically add a new region to the “regions” array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayUnion(“greater_virginia”)
});

// Atomically remove a region from the “regions” array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayRemove(“east_coast”)
});
“`

[データの追加 | Firestore | Google Cloud](https://cloud.google.com/firestore/docs/m

元記事を表示

#javascript の some / every の挙動を #node で確認する

“`
$ node
“`

# some

“`js
// 配列の中の一つでも値が1であればtrue
> [1,2,3].some(value => value == 1)
true
> [3,4,5].some(value => value == 1)
false
“`

複数条件をつなげることも出来る

“`js
// 配列の中の一つでも値が1または2の要素があればtrue

> [1,2,3].some(value => value == 1 || value == 2)
true
> [2,3,4].some(value => value == 1 || value == 2)
true
> [3,4,5].some(value => value == 1 || value == 2)
false
“`

# every

“`js
// 配列の全ての値が1または2または3であればtrue
> [1,2,3].every(value => value == 1 || value == 2 || value == 3)
true
> [2,3,4].every(va

元記事を表示

【JavaScript】非同期処理とはなんぞや

## はじめに
JavaScriptの初心者を脱出して最初に躓くのは恐らく**非同期処理**な気がします。
自分も見事につまずいているので、記事にまとめながら勉強していきます。

## 非同期処理とは
処理を待たずにどんどん処理を進めていきます。
遅いやつを待ってあげるような優しい奴ではありません、非情です。

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

const file1 = fs.readFile(‘file1.txt’)
const file2 = fs.readFile(‘file2.txt’)
const file3 = fs.readFile(‘file3.txt’)

console.log(`file1: ${file1}, file2: ${file2}, file3: ${file3}`)

“`

動きません。

readFileは非同期処理です。file1君が処理を終えるのを待っているほどfile2君の気は長くありません。
それはfile3も同じです。結果として誰も成功できない。これが非同期処理です。

## 解決策
この誰も待ってく

元記事を表示

swagger-codegenでnode.jsのモックサーバー作成

# 経緯
業務でpythonのリクエストをC++に変換してwebApiでリクエストを送る必要があり、
swaggerというものを用いれば簡単にサーバー・クライアントのRESTAPIコードを作成できると知り、調査を開始した。
まずは簡単にサーバーを立てることができるnode.jsでモックサーバーを作成することにした。
備忘録として記事にまとめる。

# swaggerについて
>Swagger は RESTful APIを構築するためのオープンソースのフレームワーク

以下の記事で詳しくまとめられている。

[Swaggerの概要をまとめてみた。](https://qiita.com/gcyata/items/342073fa7607fd4082bd)

# swagger-codegenを使用する理由
swagger-nodeというパッケージを使用することでもサーバー作成を行うことができる。
しかし、以下の理由で採用を見送った。

– モジュールの更新がここ数年行われていない
– 生成されるプロジェクト内のファイルの設定方法や構成がswagger-codegenと異なっていた
– 情

元記事を表示

Pre-Signed URLでS3に直接ファイルをアップロードする

# S3にファイルをアップロード
S3にファイルをアップロードするときLambdaやEC2経由にすることが多いかと思いますが、大容量のファイルだとS3に直接アップするほうが効率が良さそうです。
そういった場合はPre-Signed URLを取得して直接S3にファイルをPUTしてやると良さそうです。

# Pre-Signed URLの取得
以下のコードでPre-Signed URLが取得できます。

“`js:Lambda
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}

async function getPresignedUrl(){
return new Promise((resolve,reject)=>{
s3.getSignedUrl(‘putObject’, params, (err, url) => {
if (err) {
reject(err)
}

元記事を表示

Pixabay APIでフリー素材の画像を取得しLINE botで送信する

#やること
 **[Pixabay API](https://pixabay.com/api/docs/)**という、フリー素材の画像、イラスト、動画を提供しているAPIを利用して取得した画像をLINE botへ送信してみます。
 LINE botからユーザに画像を送信する方法は次の記事にまとめました。
[【LINE botから画像送信する方法】問いかけると柴犬の画像を返してくれるLINE botを作ってみた](https://qiita.com/kmaepu/items/fe718d6fd57929dd6e36)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/f54afe5a-9781-f7c6-6ed6-e2e30f642fe6.png)

#できたもの
 何かテキストを入力すると、ビーバーの画像を返してくれる。(本当は、テキストに応じた画像を出したかった…。)

在宅ワーク中に会議中だよサインをobnizとLINEBotで作ってみた

### はじめに
こちらはProtoOutStudiooの課題でobnizとLINEBotを組み合わせて何か作ろう!というものです。

### 概要
新型コロナウィルスのせいで在宅ワークになったため、仕事中の家族との距離が難しい。
特にうちは猫が3匹もいるので、ニャンコちゃん達が騒ぎ始めたらどちらの部屋に引き取る?とか、ご飯何時にする?
などなど、いちいちメッセージを送らずに部屋越しに会話することがよくあるのですが、実は「今オンラインミーティング中!!!!ノックしないでー、開けないでー」みたいなことがあって気まずい思いをしたりして、何かトイレの空き情報みたいなサイネージが欲しくて作りました。

### できたもの
部屋に入らないで欲しい時に入らないでマークをLINEから、obnizで表示させるサイネージ的なもの

OTHERカテゴリの最新記事