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

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

Boltを使ったSlack BotをTypescriptで開発する方法

# はじめに
今までslack用のbotを開発するのにhubotやerrbotを利用してきたのですが、昨年slackがリリースしたBoltフレームワークのチュートリアルをいくつかやってみて簡単にbot実装ができそうだなと思ったので、それをTypeScriptで実装する場合の方法を紹介します。

# Bolt開発時に参考にしたサイト
Boltを使ったslack botアプリの作成方法や実装サンプルなどは、下記を参考にさせて頂きました。

– [Bolt入門ガイド](https://slack.dev/bolt/ja-jp/tutorial/getting-started)
– [Bolt フレームワークを使って Slack Bot を作ろう](https://api.slack.com/lang/ja-jp/hello-world-bolt)

# 開発環境
主に下記の開発環境で実装及び動作確認をしました。

– VSCode
– node.js
– [Glitch](https://glitch.com/)

Glitchは、ウェブ上で動くIDEを持っているのですが、ローカルでVSCo

元記事を表示

AppiumでFlutterアプリのテストを自動化する 実践編(JavaScript)

# はじめに

[AppiumでFlutterアプリのテストを自動化する 環境構築編 – Qiita](https://qiita.com/hiesiea/items/b4e31b6f1f585a93bae1)
の続きになります。
実際にテストコードを書いて、それを実行し、レポートを出力するところまでやります。
今回は「JavaScript」を使います。

# 前提条件

[AppiumでFlutterアプリのテストを自動化する 環境構築編 – Qiita](https://qiita.com/hiesiea/items/b4e31b6f1f585a93bae1)
で、Appiumの環境構築が完了していること

# なぜAppiumで自動化するのか

Flutterには、「Integration Test」という仕組みが存在します。

– [An introduction to integration testing – Flutter](https://flutter.dev/docs/cookbook/testing/integration/introduction)

これは結合

元記事を表示

expressによるウェブページテンプレート化の手法(express-ejs-layoutsを使用)

# 概要
Expressにおけるwebページのテンプレート化の方法をまとめてみる。
使用するパッケージは以下の通り。
・express
・express-ejs-layouts

作成するファイルは以下の通り。
(1) /main.js
テンプレート化に必要なパッケージの読み込み、レスポンスのロジックを実装

(2) /views/layout.ejs
テンプレートエンジンが使用するレイアウトのウェブページのテンプレート。このファイルでページのレイアウトとコンテンツの埋め込み箇所を定義する。

(3) /views/index.ejs
テンプレートエンジンがレイアウトに埋め込むファイル。
ここではindexのページを定義しているが、ユーザーのアクセスするパスに応じて他のejsファイルも作成する。

# Step1. main.jsの実装
まず、以下のようにmain.jsを実装する。
(1) パッケージのインポート
以下3つの定数を定義する。

“`
const express =require(“express”)
const layouts = require(“express-e

元記事を表示

npm で全ての package をアップデートする

“`sh
$ npx npm-check-updates -u
“`

これで `package.json` のみ更新される。
あとは、いつも通り `npm i` 。

以下、オプション例。

“`sh
# “devDependencies” のみアップデートしたい
npx npm-check-updates -u –dep dev

# 特定の package はアップデートしたくない
npx npm-check-updates -u –reject typescript,@types/node
“`

## Ref.

https://www.npmjs.com/package/npm-check-updates

元記事を表示

Node.js で Cloud Firestore のデータを削除 (Delete)

こちらで作成したデータのひとつを削除します。
[Node.js で Cloud Firestore のデータを作成 (Create)](https://qiita.com/ekzemplaro/items/fe9133236a8e04519acf)

“`js:firestore_delete.js
#! /usr/bin/node
// —————————————————————
// firestore_delete.js
//
// Jan/25/2020
//
// —————————————————————
console.error (“*** 開始 ***”)

const key_in=process.argv[2]
console.log (key_in)

const admin = require(‘firebase-admin’)
admin.initializeApp({
cred

元記事を表示

Node.js で Cloud Firestore のデータを更新 (Update)

こちらで作成したデータを更新します。
[Node.js で Cloud Firestore のデータを作成 (Create)](https://qiita.com/ekzemplaro/items/fe9133236a8e04519acf)

“`js:firestore_update.js
#! /usr/bin/node
// —————————————————————
// firestore_update.js
//
// Jan/25/2020
//
// —————————————————————
console.error (“*** 開始 ***”)

const key_in=process.argv[2]
const population_in=process.argv[3]

console.log (key_in + “\t” + population_in)

const today

元記事を表示

Node.js で Cloud Firestore のデータを読む (Read)

こちらで作成したデータを読みます。
[Node.js で Cloud Firestore のデータを作成 (Create)](https://qiita.com/ekzemplaro/items/fe9133236a8e04519acf)

“`js:firestore_read.js
#! /usr/bin/node
// —————————————————————
// firestore_read.js
//
// Jan/25/2020
//
// —————————————————————
console.error (“*** 開始 ***”)

const admin = require(‘firebase-admin’)
admin.initializeApp({
credential: admin.credential.applicationDefault()
})

const db =

元記事を表示

Node.js で Cloud Firestore のデータを作成 (Create)

ライブラリーのインストール

“`bash
sudo npm install firebase-admin –save
“`

“`js:firestore_create.js
#! /usr/bin/node
// —————————————————————
// firestore_create.js
//
// Jan/25/2020
//
// —————————————————————
function add_data_proc(db,key,name,population,date_mod)
{
let tt_ref = db.collection(‘cities’).doc(key)
tt_ref.set({
‘name’: name,
‘population’: population,
‘date_mod’: date_mod
})
}

// ———–

元記事を表示

Node.jsでAWS ElasticSearchへのHTTP リクエストの署名

#はじめに
情報保護を難しくなっている現代社会では、セキュリティ対応はますます重要になってきています。
Cloud技術の進化によって、セキュリティ対応しやすくなる部分もあります。

AWSのElasticeSearchサービスへのHTTP リクエストの署名方法を簡単にまとめてみます。

#1. AWS SDKのライブラリを使う
AWSのドキュメントにある通り、署名したリクエストを送信できますが、検索のクエリなどはちょっと手間ですね。

参考URL: https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/es-request-signing.html

“`node.js
var credentials = new AWS.EnvironmentCredentials(‘AWS’);
var signer = new AWS.Signers.V4(request, ‘es’);
signer.addAuthorization(credentials, new Date());

元記事を表示

Node.js(Express) + Pug(Jade)でDBにtextareaから保存された改行を表示する

# コード
“`index.js
text.replace(/\r?\n/g, ‘
‘)
“`

“`index.pug
p !{text}
“`
#注意
\#{text}で出力するのではなく、!{text}でないと表示されない。

# 備考
変数である textは、DBにtextareaから保存されたテキストのデータ

例えば、テキストエリアに、

ファッキンホット
ファッキンコールド

と入力した場合

上記の処理をしないと、
ファッキンホット ファッキンコールド

と表示される。

元記事を表示

CLI のテンプレートプロジェクト by node and TypeScript

node で CLI(Command Line Interface) を開発する機会が数回あって、せっかくなのでテンプレートプロジェクトとしてまとめてみた。

## テンプレートプロジェクト

* [amay077/node-cli-sample: Sample npm project for development your CLI](https://github.com/amay077/node-cli-sample)

### 必要なモノ

* nodejs: v11.13.0+
* typescript: v3.7.3+

### 試し方

1. 上記のリポジトリを Clone する
2. リポジトリのディレクトリに cd して “npm ci“ する
3. “npm run build“ する
4. “npm link“ する
5. “source ~/.bash_profile“ を行うかまたはターミナルを再起動する

これでどのディレクトリでも “my-great“ コマンドが使用できるようになる。

#### 例

“`terminal
$ my-

元記事を表示

Jest実行時にserverless.ymlの環境変数を読み込む

[jest-environment-serverless](https://github.com/fireeye/jest-environment-serverless) を利用して`serverless.yml`から環境変数を読み込みます。
(`.env`を読み込む以外の方法を試してみたかった)

## 手順

### パッケージのインストール

必要なパッケージをインストールします。

“`.bash
$ npm install serverless jest jest-environment-serverless
“`

### プロジェクトの作成

“`.bash
$ npx serverless create –template aws-nodejs
“`

### 設定

`serverless.yml`に読み込む環境変数の名称と値を記述します。

“`serverless.yml
service: sample

provider:
name: aws
runtime: nodejs12.x

functions:
hello:
handl

元記事を表示

Golang, Node.js, Kotlin, Swift で ECDSA

## はじめに

楕円曲線DSA (ECDSA) は楕円曲線暗号を利用した電子署名方式で、通信のセキュリティ確保のために広く使われています。様々なプログラミング言語の標準的なライブラリでサポートされているため、言語をまたいで利用することができます。

ただし、実際に言語をまたいで署名生成 & 検証をしようとしてみると API の違いやフォーマット方式によりハマること多々あったため、書き方をまとめておくことにしました。

## この記事に書かれていること

Golang, Node.js, Kotlin, Swift での(できる限り)標準ライブラリを利用した キーペア生成、署名生成・検証方法を記載します。

以降の記述は基本的に ECDSA を前提に書かれています。

**全体的に、エラーハンドリングは省略しているので注意してください。**

## この記事に登場するキーワード

キーワード | 概要
— | —
EC | 楕円曲線、もしくは楕円曲線暗号のこと。
P-256 | 利用する楕円曲線の種類。キーペア生成、署名生成・検証時にパラメータとして指定します。NIST

元記事を表示

Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応

# はじめに
今回、LambdaランタイムNode.js8.10のサポート終了に伴い、Node.js10.xへアップデートを行いました。
結構詰まった部分などが合ったので、その備忘録として残します。

## LambdaランタイムNode.js8.10のサポート終了について

以下、AWS公式より
スクリーンショット 2020-01-24 14.17.37.png
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html

2020/2/3を持ってLambdaのランタイムNode.js8.10の更新が終了します。
これに伴い、Node.js8.10で実装しているLambdaのランタイムを10.xにバージョンアップをしま

元記事を表示

Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。

さて、
[Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。(Tekton準備編)](https://qiita.com/motuo/items/8d768175abcb077067dc)で、`Tekton Dashboad`の用意ができたら、いよいよ`Appsody`で作った`Node.js`のモジュールをデプロイしていきます。

## 今回は私のリポジトリをクローンします。

“`sh
$ git clone https://github.com/motuo1201/appsody-test-build.git
$ cd appsody-test-build/
“`

## 一度、ローカルで動かしてみましょう。
[こちらの記事](https://qiita.com/motuo/items/1cde634a010e9e1d7d5a)にも書きましたが、下記のコマンドでローカルの稼働が確認できます。

“`sh
$ appsody run
……
[Container] App started on PORT 3000
“`

`

元記事を表示

Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。(Tekton準備編)

先日、[Appsodyを使ってNode.jsモジュールをK8sに簡単にデプロイする方法](https://qiita.com/motuo/items/1cde634a010e9e1d7d5a)を記事にしました。

この記事ではさらに踏み込んで、作成した`Node.js`モジュールを`Tekton`を使ってK8sにデプロイするCI/CDパイプラインを作ってみましょう!
まず、この記事では以下の環境に`Tekton`を準備するところから始めます。
**※前回と同様に環境はmac。docker for macで`Kubernetes`が有効であることが前提です。**

## What’s Tekton?
ざっくりいうと、**Kubernetes上で稼働するクラウドネイティブなCI/CDパイプライン**となります。
代表的な使い方は、`Github`からソースコードを取得して、それを自動的にKubernetesへデプロイする、というところでしょうか。
詳細は本筋とは逸れるのであまり触れませんが、[Githubのリポジトリ](https://github.com/tektoncd/pipelin

元記事を表示

Azure DevOps を社内 npm registry として使う時の Tips

社内開発フレームワークの npm package を管理するために、Azure DevOps の Artifacts がメンバー限定 npm registry として使える事が判った。
その設定を行った際に判ったことをメモ。

## Azure DevOps の設定

* [Use packages from npmjs.com – Azure Artifacts | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/devops/artifacts/npm/upstream-sources?view=azure-devops)

に書いてある通りなのだが、サラッと言うと。

1. Azure DevOps にプロジェクトを作成し、Artifacts を選択
2. Create Feed で Feed を作成。名前は適当に、Visibility は “Member of ” で。”Upstream Source” もチェックを入れる。
3. 右上のギアアイコンをクリック → Upstream sou

元記事を表示

Node.jsからFBX SDK Pythonを呼べるDockerイメージ作った

# Node.jsからFBX SDK Pythonを呼べるDockerイメージ作った
とある事情により、Node.jsからFBX SDK Pythonを呼ぶ必要があったので、Dockerイメージを作りました。

作ったDockerイメージは以下に公開しました。
https://hub.docker.com/r/seguropus/fbx-sdk-python-nodejs

# サンプルコード

サンプルコードを以下に置きます。
https://github.com/segurvita/docker-fbx-sdk-python-nodejs

# サンプルコードの使い方

“`bash
# Dockerイメージをビルド
docker-compose build

# Dockerコンテナを起動
docker-compose up
“`

これで、以下のような表示が出れば成功です。

“`
fbx-sdk-python-nodejs | # FBX SDK can read the following formats.
fbx-sdk-python-nodejs

元記事を表示

[Node.js]モジュール定義について整理(exports-require / export-import)

## はじめに
あるファイルに定義した関数等を別のファイルで使いたいときにどうするか。

Node.jsでは二つのやり方がある。

1. exportsで公開してrequireで読み込む(CommonJS)
2. exportで公開してimportで読み込む(ES2015)

**常に使えるのは1の方法。Babelを使うなら2の方法でも可能。**
どちらを選んでもメリット・デメリットがあるわけではない(と思う)ので、お好きなほうで。

個人的には、常に使える1の方法がいいような気がしている。

## 使用例
### exportsで公開してrequireで読み込む(CommonJS)
#### 一つの関数だけをエクスポート
“`javascript:module.js
// 関数を定義
const f = () => {
console.log(‘Hello!’)
}

// 関数を公開
module.exports = f
“`

“`javascript:client.js
const f = require(‘./module’)
f() // Hello!
`

元記事を表示

[JavaScript][Node.js]メモ:アロー関数の文法

アロー関数(ES2015)の書き方。

“`javascript
f = () => console.log(‘Hello!’)
f() // Hello!
“`

“`javascript:評価した値を返す
// 式(Expressions)の評価結果が戻り値になる
sum = (a, b) => a + b
r = sum(1, 2)
console.log(r) // 3
“`

“`javascript:returnで値を返す
// {}で文(Statements)を作り、returnで値を返す
sum = (a, b) => {
return a + b
}
r = sum(1, 2)
console.log(r) // 3
“`

“`javascript:引数のカッコを省略
// 引数が一つの時のみカッコを省略可能(0個もしくは2つ以上のときは省略不可)
say = word => console.log(word + ‘!’)
say(‘Yeah’) // Yeah!
“`

“`javascript:即時関数
(() => console

元記事を表示

OTHERカテゴリの最新記事