- 1. Amazon SESを使用してメールを送信する(nodejs)
- 2. npm パッケージにOSネイティブファイルを入れて必要な物だけインストールさせる
- 3. windowsでDocker開発はまだ使い物にならない
- 4. 【ZOOM API】フレームワークで会議作成アプリを作ってみた(Node.js体験)
- 5. npm installlをすると出てくる警告の解消
- 6. 【CircleCI】config.yml 入門
- 7. スマホでBLEをNodeJSチャレンジ(失敗)
- 8. mermaid.cliがWindowsでエラーを吐く場合の対処
- 9. C++ で作った Node.js 用アドオンから任意のタイミングで JavaScript の関数を呼び出すクラスを作ってみた
- 10. Node.js での認証情報の設定
- 11. Jestのmockを使いES6クラスのテストを実装してみた 様々なモックの作成方法
- 12. テキストファイルの文字コードを変換する
- 13. 依存モジュール(ライブラリ)のライセンスをチェックする仕組みを導入してみた
- 14. 日本語音声のマイク入力をオフラインでリアルタイム音声認識:「VOSK」を JavaScript(Node.js)で扱う
- 15. NodejsからMySQLに接続
- 16. CentOS steam 8にMySQLをインストールして初期設定する
- 17. primary keyをオートインクリメントしている場合に、そのidを外に露出させない実装をしてみた?!
- 18. LambdaからDynamoDBへの大量データ投入
- 19. AWS上にCentOS Stream 9 を立ち上げて、Nodejsで簡単アプリを動かしてみる
- 20. google-cloud/tasks モジュールでbodyが取得できない場合の対策
Amazon SESを使用してメールを送信する(nodejs)
# 要件
検証済みのメールアドレス、もしくは検証済みのドメインでのみメール送受信可能です。あるタイミングでアプリケーションから任意のメールアドレスへメールを送信します。# 前提
– Route53 で登録しているドメイン名のアドレス (support@xxx.yyy.zzz) をFROMとする
– Node.js環境
– AWSアカウント# ドメインの認証
## SESのコンソール
1. [Amazon SES コンソール](https://ap-northeast-1.console.aws.amazon.com/ses)を開きます。
2. ナビゲーションペインの [Create identities]をクリックします。
3. Identity typeのDomainを選択します。
4. DomainはRoute53で登録済みのドメインを記入します。
5. [Create identities]ボタンをクリックします。## nodejs
nodejs経由の場合下記のドキュメントを参考
[ドメイン ID の検証](https://docs.aws.amazon.com/ja
npm パッケージにOSネイティブファイルを入れて必要な物だけインストールさせる
npm パッケージに OS ネイティブのファイルを入れ複数プラットフォームに対応させたいが、容量等の問題で不要な物をインストールさせたくないというケースで、インストール時に必要なファイルだけ取得してくる方法を紹介します。
# 要約
ネイティブファイルのプラットフォーム毎にパッケージを作成し、package.json の `os` で対象 OS を指定します。
`–save-optional` で全プラットフォーム用のパッケージを参照すれば不要な物はスキップされます。# サンプル
https://github.com/Hotspring-r/PlatformSpecificPackageTest# 解説
サンプルファイルは4つのディレクトリがあり、src がパッケージを参照するソース。nativeTest が参照されるライブラリ、nativeTest-linux, nativeTest-win がそれぞれ linux, windows 用のネイティブファイルです。
src が nativeTest を、nativeTest が nativeTest-linux , nativ
windowsでDocker開発はまだ使い物にならない
ホスト側のファイル・フォルダをバインドする時、windowsだと強制的にrootになるのがツラすぎる。
バリバリ開発してる人、どうやってるか教えて下さいませ再現用のファイル一式は以下の通り。windows10で、WSLではなくwindows側のフォルダに設置する。
“`
//.env
COMPOSE_PROJECT_NAME=docker-file-volume-test//docker-compose.yml
services:
node-sys-container:
build:
context: .
dockerfile: ./Dockerfile
volumes:
– type: bind
source: ./
target: /app/bind//Dockerfile
FROM node:18.4.0-alpine3.15
USER node
WORKDIR /app
RUN touch /app/touch-file
CMD [“node”,”/app/bind/index
【ZOOM API】フレームワークで会議作成アプリを作ってみた(Node.js体験)
## はじめに
こちらは、「Qiita Engineer Festa 2022」の参加記事です!https://qiita.com/official-campaigns/engineer-festa/2022
自分自身、APIを使用したwebアプリを作ったことが無く、
何か作って動かしてみたいと思っていたところ、こちらのzoomキャンペーンで
テーマ「Zoom APIを実装してみた」を発見。初の記事投稿も、勉強のためにやってみようと思い書いてみました。
## 作ったもの
ボタンを押すと即時ミーティングが表示されます。
押すたびに書き換わります。
![zoom_meeting-Google-Chrome-2022-07-02-17-36-36_Trim.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725328/e2de3943-0201-82b4-d05d-c981e9f7c2c3.gif)## 実装方法について
zoomの参考ページにNodeでのコード例があったので、Node.j
npm installlをすると出てくる警告の解消
初めまして、現在ReactーReduxを勉強中のものです。
今回は、「npm install」をすると出てくる警告がうざかったので解消しようと思いました。
# 警告とは何?
`npm install`とかすると出てくるやつです。
“`
# コマンド
$ npm install –save –force @mui/material# 以下警告文
npm WARN using –force Recommended protections disabled.
added 7 packages, removed 26 packages, changed 33 packages, and audited 612 packages in 6s
15 packages are looking for funding
run `npm fund` for details21 vulnerabilities (6 moderate, 14 high, 1 critical)
To address all issues, run:
npm audit fixR
【CircleCI】config.yml 入門
# 概要
今更ながら実務にてcircleCIを使ってCI環境を1から構築するという経験をしました。
その中でこれがcircleCIの基本なのかと思う部分もありましたので、備忘として残そうと思います。
これからcircleCIを導入する方、設定値の概念がわからずどうすればいいのかわからないという方に参考になればと思います。# CircleCIとは
Saas型のCI/CDサービスです。Saas型であるという点が特徴です。
CircleCIはクラウド上のコンテナを実行環境として使用することができます。
基本的にはコンテナ(docker)を使って実行環境を整えていくことが多いのではと思います。# config.yml
CI/CDの設定は全て`.circleci/config.yml` に記載します。
`.circleci`ディレクトリは対象Gitリポジトリのトップに置きます。# はじめに
まずはとにかく簡単な記述でもいいので動かしてみます。
下記のようなconfig.ymlを作成しました。“`yml
version: 2.1jobs:
build:
docke
スマホでBLEをNodeJSチャレンジ(失敗)
AndroidスマホにてWebBluetoothでは実施済みだが、登録機器にアプリ立ち上がり時に自動接続を試したいことから、WebBluetooth<->ネイティブで実現できる自動接続を模索
スマホにNodeJS立ち上げてなんとかできないか?検証メモ### 利用スマホ
* Pixel3 Android os 12
https://ja.wikipedia.org/wiki/Pixel_3* A20 Android os 11
https://www.galaxymobile.jp/galaxy-a20/### × Servers UltimateアプリでNodeJSサーバー
NodeJSサーバーが実行できるとのことで試す
Nodeサーバーがうまく立ち上がらず断念
ディレクトリのアクセスがAndroidOSで難しくなったせいなのか???
原因は解明の前に次の方法へ#### 参考URL
https://play.google.com/store/apps/details?id=com.icecoldapps.serversultimate&hl=ja&gl=US
mermaid.cliがWindowsでエラーを吐く場合の対処
mermaid.jsでsvgを作りたいと思って
“`shell
$ npm install -g mermaid.cli
$ mmdc -i diagram.md -o diagram.svg
“`で起動したところ、
“`shell
node:internal/error:465
ErrorCaptureStackTrace(err);
^Error: spawn EPERM
at ChildProcess.spawn (略)
at Object.spawn (略)
at Lancher.launch (略) {
errno: -4048,
code: ‘EPERM’,
syscall: ‘spawn’
}
“`
のエラーが。不思議に思って、puppeteerの下にインストールされるChromiumを単独起動してみると、
Chromium上には「Google APIキーが欠落しています。Chromiumの一部の機能は無効になります」表示と、
consoleには「Failed to load resource: net::ERR_FAIL
C++ で作った Node.js 用アドオンから任意のタイミングで JavaScript の関数を呼び出すクラスを作ってみた
こんにちは、wattak777 です。
# はじめに
筆者は C/C++ 畑の経験が長かったためか、Node.js でプログラムを組んでいると「C や C++ でやった方が早く作れるのになぁ」と C++ のアドオンで実装することがしばしばあります。
この時、C++ から JavaScript の関数を呼び出したい場合、JavaScript 側からコールバックを指定すれば(下記例)呼べますが、JavaScript から呼び出しトリガーが必要となります。
“`JavaScript:呼び出し側.js
const addon = require(‘./build/Release/addon’);
addon.func(arg, (result) => {
console.log(‘call back.’) ;
}) ;
“`
“`C++:アドオン側.cpp
// 仕掛け等は省略
// JavaScript 側から「func」と呼ばれると「func」が呼ばれるような仕組みになっていると想定
func( Napi::CallbackInfo& info )
{
Node.js での認証情報の設定
## はじめに
プログラミング時に認証情報の提供方法によってセキュリティ、保守作業に影響しますので、
どの方式を採用するかを考慮する必要があります。## AWSのNode.js での認証情報の設定
### AWS 推奨の順序で認証情報を提供する方法
– Amazon EC2 の AWS Identity and Access Management (IAM) ロールからロード
– 共有認証情報ファイル (~/.aws/credentials) から読み込む
– 環境変数から読み込む
– ディスク上の JSON ファイルから読み込む
– JavaScript SDK によって提供されるその他の認証情報プロバイダークラス### SDK で利用できる認証情報ソースが複数ある場合、デフォルトの選択優先順位
– サービスクライアントコンストラクタで明示的に設定されている認証情報
– 環境変数
– 共有認証情報ファイル
– ECS 認証情報プロバイダーからロードされた認証情報 (該当する場合)
– 共有 AWS 設定ファイルまたは共有認証情報ファイルで指定された認証情報プロセスを使用して取
Jestのmockを使いES6クラスのテストを実装してみた 様々なモックの作成方法
## 以下の記事を参照して頂ければと思います
https://note.com/shift_tech/n/nb2f427093fd8
**※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です。**
## 補足
ソースコード全体は以下。https://github.com/yuta-katayama-23/node-express/commit/435c2b3d4b2759fa19c20de59de6e8215f8a445f
https://github.com/yuta-katayama-23/node-express/commit/8da10b36cd23c9868d9f5ead1311c40dc3935425
## おまけ
上記で見てきたES6クラスの実装の仕方の都合上、例えばExpressで利用する際には以下のようになるだろう。“`js
import express, { Router } from ‘express’;
const router = Router();const port = process.env.PORT ||
テキストファイルの文字コードを変換する
### 環境
Ubuntu 20.4 + Vagrant(Windows10)
Node.js v16.14.0### はじめに
テキストファイル(CSVファイルなど)の文字コードを判断して、S-JISであれば、UTF-8に変換する関数の紹介です。プラットフォームがWindows10であるため、Vagrant環境で動作しているUbuntuとファイルのやり取りがよく発生します。つまり、Windows環境で作成した、S-JISのファイルを、Ubuntu環境で扱うために、UTF-8にいちいち変換しなくてはいけないことになります。それを、Node.jsでサクッと行えるようにしたので、そのご紹介です。### 解説
2つの外部ライブラリを使っています。**jschardet**と**iconv-lite**です。この2つのライブラリは、**npm**で別途インストールする必要があります。**jschardet**はファイルの文字コードを判断するライブラリで、**iconv-lite**はファイルの文字コードを変換するライブラリです。**jschardet**でファイルの文字コードを判断
依存モジュール(ライブラリ)のライセンスをチェックする仕組みを導入してみた
## 以下の記事を参照して頂ければと思います
https://note.com/shift_tech/n/n6fd1f955658b
**※Qiitaの記事は全て個人的な記載であり、所属する組織団体とは無関係です。**
## 補足
ソースコード全体は以下。https://github.com/yuta-katayama-23/node-express/commit/ebc93a814273133a34329dfd3830504ee473a24f
## おまけ
以下では、– [GPLライセンスについて](#gplライセンスについて)
– [Node.jsでもフロントエンドと同じようにwebpackで全てのモジュールをbundleするとどうなるか?](#nodejsでもフロントエンドと同じようにwebpackで全てのモジュールをbundleするとどうなるか)
– [フロントエンドのプロジェクトで使える他の方法](#フロントエンドのプロジェクトで使える他の方法)の3つについてみていく。
### GPLライセンスについて
以下の記述については専門家ではないので、誤りがある
日本語音声のマイク入力をオフラインでリアルタイム音声認識:「VOSK」を JavaScript(Node.js)で扱う
この記事の内容は、オフラインでリアルタイム音声認識ができ、日本語にも対応している以下の「VOSK」を試してみた話です。
●VOSK Offline Speech Recognition API
https://alphacephei.com/vosk/
![VOSKの公式ページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/ae6c8944-54fa-9d86-7c08-32c0bc2f089c.png)そして今回の記事で、VOSK を扱う開発言語・環境は「JavaScript(Node.js)」です(自分がよく使っているから、という選定理由です)。
なお、対応している他の開発言語などは、公式ページの「[Installation](https://alphacephei.com/vosk/install)」を見ると確認でき、例えばスマホ向け(Android・iOS)や Python・Java・C# などもあるようです。## VOSK を「JavaScript(Node.js)」で扱う
そ
NodejsからMySQLに接続
前回記事までで出来上がったAWS上のMySQLに、Nodejsから接続確認をしてみたいと思います。
前々回記事までで、AWS上のCentOSに、Nodejs実行環境が構築できている状態です。## コード準備
任意のプロジェクトに以下を配置します。
const connection以下は、MySQLに設定したユーザとパスワード、データベース名をいれます。app.js
“`
const express = require(‘express’);
const mysql = require(‘mysql’);
const app = express();app.use(express.static(‘public’));
app.use(express.urlencoded({extended: false}));const connection = mysql.createConnection({
host: ‘localhost’,
user: ‘root’,
password: ‘Passw0rd!’,
database: ‘list_app’
}
CentOS steam 8にMySQLをインストールして初期設定する
昨日の投稿の続きで、
MySQLを導入して初期設定をしたあとNodejsから接続確認をします。## MySQLインストール
### 1. yumリポジトリの追加
MySQLはyumコマンドでインストールします。
CentOS 7では公式のyumリポジトリにMySQLがないので、まずはMySQLの[公式](https://dev.mysql.com/downloads/repo/yum/)が用意しているリポジトリを追加します。“`
# yum localinstall http://dev.mysql.com/get/mysql80-community-release-el8-4.noarch.rpm
“`
/etc/yum.repos.d配下にmysqlのリポジトリが追加されていることが確認できます。
“`
# ls /etc/yum.repos.d
centos-addons.repo mysql-community-debuginfo.repo mysql-community-source.repo
centos.repo mysql-com
primary keyをオートインクリメントしている場合に、そのidを外に露出させない実装をしてみた?!
## はじめに
データベースのprimary keyをauto incrementしている場合(サロゲートキーを使っている場合)に、もし何も気にせずREST APIでCRUDするようなアプリを作ろうとすると、一番簡単なのはそのPKを使ってデータを操作する事だと思う。ただ、そのような実装した場合、PKが外に露出してしまうので、ToDoアプリ等であれば問題ないかもしれないが、もしPKがユーザーID等の個人を特定できる情報であれば、サービスの利用ユーザ数が知られてしまったり、何かと悪影響があるだろう。
今回は可逆暗号を利用して、オートインクリメントをしたユーザーIDなど外に露出してほしくない情報を隠す方法を試してみたので備忘録を残す。
※上記のprimary key露出に関しての懸念事項については、[idをautoincrementして何が悪いの?](https://zenn.dev/dowanna6/articles/3c84e3818891c3)などを参照。
※上記の問題を解決するのに、以下で見ていく方法が良いと言えるのか?実際にプロダクトで使えるのか?については、勉強中の身の
LambdaからDynamoDBへの大量データ投入
# DynamoDBへの大量データ投入
– Pythonではやったことがあったけど、Node.jsではやっていないかったのでやってみると、高速だった。 1putごとにawaitしないから高速ですね。
– https://dev.classmethod.jp/articles/nodejs-dynamodb-scan-stream/ クラスメソッドさんの記事まんまできる
– 「スクリプトで50万件のテストデータを作成」の箇所のtsをjsに変える– DynaomoDBテーブルは、オンデマンドキャパシティを使う
– Pythonの並列処理を作成するのは苦手だけど、Node.jsならばPromise.all() で非同期処理で同時に実行できCPUパワーを十分に使える## AWS Lambdaの設定
– Lambdaをメモリ1024MB、タイムアウト1分にする
– Lambda Layer使うのですが割愛します## DynamoDB
– テーブル名 :sugimoto-scan
– パーティションキー :id,文字列
– ソートキー:指定なし
– 設定をカスタマイズ にて、
AWS上にCentOS Stream 9 を立ち上げて、Nodejsで簡単アプリを動かしてみる
構築の際の覚書です。
## ◆AWS CentOS起動◆
CentOS8がサポート終了したとのことで、
AWS EC2 で CentOS Stream 9 のサーバーを立ち上げてみました。### 1. 公式のCentOS 9 Ami IDを探す
公式のWiki( [https://wiki.centos.org/Cloud/AWS](https://wiki.centos.org/Cloud/AWS) )から、東京リージョン(ap-northeast-1)のAmi IDを探してコピーします。2022/6/27時点の最新以下を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638048/900e5dbd-cf9d-a894-2ec4-d7f10737f495.png)### 2. AWSでインスタンスを起動する
AWS EC2 「インスタンスを起動」 から、1.でコピーしたAmi IDを入力して検索します。CentOS 8はサポート終了しているとのことで、今回Cen
google-cloud/tasks モジュールでbodyが取得できない場合の対策
# 概要
`Cloud Tasks` に`Post`した値が取得できなかった際の対応をまとめる
https://www.npmjs.com/package/@google-cloud/tasks
# 解決方法
`Quickstart`に記載されている方法では取得できないので以下の通りにする
`body: Buffer.from(JSON.stringify(payload)).toString(‘base64’)`
“`ts
const payload = {
foo: ‘bar’,
};const task = {
httpRequest: {
httpMethod: HttpMethod.POST,
url: ‘URL’,
oidcToken: {
serviceAccountEmail:
‘serviceAccountEmail’,
},
body: Buffer.from(JSON.stringify(payload))