- 1. Boltを使ったSlack BotをTypescriptで開発する方法
- 2. AppiumでFlutterアプリのテストを自動化する 実践編(JavaScript)
- 3. expressによるウェブページテンプレート化の手法(express-ejs-layoutsを使用)
- 4. npm で全ての package をアップデートする
- 5. Node.js で Cloud Firestore のデータを削除 (Delete)
- 6. Node.js で Cloud Firestore のデータを更新 (Update)
- 7. Node.js で Cloud Firestore のデータを読む (Read)
- 8. Node.js で Cloud Firestore のデータを作成 (Create)
- 9. Node.jsでAWS ElasticSearchへのHTTP リクエストの署名
- 10. Node.js(Express) + Pug(Jade)でDBにtextareaから保存された改行を表示する
- 11. CLI のテンプレートプロジェクト by node and TypeScript
- 12. Jest実行時にserverless.ymlの環境変数を読み込む
- 13. Golang, Node.js, Kotlin, Swift で ECDSA
- 14. Lambda Node.js8.10から10.xへの バージョンアップに伴うImageMagickの対応
- 15. Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。
- 16. Tektonを使ってAppsodyで作ったNodejsアプリケーションをK8sにデプロイする。(Tekton準備編)
- 17. Azure DevOps を社内 npm registry として使う時の Tips
- 18. Node.jsからFBX SDK Pythonを呼べるDockerイメージ作った
- 19. [Node.js]モジュール定義について整理(exports-require / export-import)
- 20. [JavaScript][Node.js]メモ:アロー関数の文法
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: sampleprovider:
name: aws
runtime: nodejs12.xfunctions:
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公式より
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtime-support-policy.html2020/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