- 1. Node.js を動かす Dockerfile のサンプル
- 2. 【Node.js v11】ディレクトリ内のファイルパスを再帰的に取得するワンライナー
- 3. virtual背景のロジックのnpmパッケージを使ってデモを作成する話
- 4. Deno と Node.js 共通ソースコードで開発する方法
- 5. Goのプロジェクトでもタスクランナーとしてnpmを使う
- 6. Node.jsからobnizでBME280(気温、湿度、気圧)センサーを動かす
- 7. Promiseは何時呼ばれるのか?
- 8. 【JavaScript】値がundefined/nullの時だけtrue判定にする
- 9. Promiseとは・非同期処理時にPromiseを使うメリットとは
- 10. MongoDBで配列内の特定の値だけを更新する
- 11. node.js(express)でDB(Postgresql)にアクセス
- 12. ESLint v7.3.0
- 13. NTTPCの激安VPS「Indigo」のAPIで遊んでみる
- 14. [Alexa]APLのカスタムパッケージの作成・インポートをする
- 15. log.ioでログをブラウザでリアルタイムモニタリングする
- 16. Node.jsでSlack Slashコマンドアプリを作る
- 17. Node.jsのCLIツールでURLを既定のブラウザで開く
- 18. socket ioでビデオ通話+ユーザー名表示
- 19. コスパ最強IoT家電!TPLink製品をRaspberryPiから操作
- 20. node.js Firebase Functionで作ったGoogle Chat BotでChatからのリクエストであるかの検証を行う
Node.js を動かす Dockerfile のサンプル
## 概要
– Node.js アプリケーションのシンプルなサンプルを作成する
– Node.js を動かす Dockerfile を作成する
– Dockerfile から Docker イメージを作成する
– Docker イメージから Docker コンテナを作成する
– Docker コンテナを起動する## 今回の環境
– macOS Catalina
– Docker Desktop Community 2.3.0.3
– Node.js v14.4.0docker コマンドは Docker Desktop に付属のものを使う。
“`
$ docker –version
Docker version 19.03.8, build afacb8b$ which docker
/usr/local/bin/docker$ ls -l /usr/local/bin/docker
lrwxr-xr-x 1 root admin 54 5 24 23:06 /usr/local/bin/docker -> /Applications/Docker.a
【Node.js v11】ディレクトリ内のファイルパスを再帰的に取得するワンライナー
ディレクトリ内全てのファイル一覧を取得するというありふれた処理ですがたまたまワンライナーを思いついたのでメモ代わりに紹介します
同期メソッドなので使いどころには注意してください## JavaScript
“`javascript
const fs = require(‘fs’)const listFiles = (dir) =>
fs.readdirSync(dir, { withFileTypes: true }).flatMap(dirent =>
dirent.isFile() ? [`${dir}/${dirent.name}`] : listFiles(`${dir}/${dirent.name}`)
)console.log(listFiles(‘hoge/fuga’))
“`fs.readdirに `withFileTypes: true` オプションが追加されてたんですね、最近知りました
https://nodejs.org/api/fs.html#fs_fs_readdirsync_path_options`${dir}/${
virtual背景のロジックのnpmパッケージを使ってデモを作成する話
### はじめに
先日、自分史上初めてnpmのパッケージを作成したので、これを使ったデモの作り方を説明しようと思います。前回の記事です。
https://qiita.com/wok/items/9025059893a406f4307fこんな感じのものを作ります。
![movie2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/365991/8b03b47a-2754-0cea-c341-7373be540680.gif)なお、今回のパッケージバージョンは1.0.19を想定しています。
### 前準備
今回はReactでデモを作成します。
まずは環境構築をしましょう“`
create-react-app demo –typescript
“`
### パッケージをインストール
それではvirtual背景のパッケージをインストールします。“`
npm install local-video-effector
npm install
“`### 背景画像の準備
virtua
Deno と Node.js 共通ソースコードで開発する方法
# 概要
それなりにわかる人向けの記事なので各種説明を細かくは書きません。わからない用語は調べてください。
Deno がリリースされていますね。モジュールシステムが Node.js と異なっているためにコード互換性がなくて問題になっている方もおられると思います。
そういう方向けの記事です。
Node.js は CommonJS が標準です。
Deno は ESModules のみ対応です。CommonJS は「読み込み:require」「書き込み:module.exports」
ESModules は「読み込み:import」「書き込み:exports default等」という構文になります。Node.js でも package.json に type: module とすると ESModules に対応しますが、そうするとプロジェクト内コードで、Babel や Webpack などの Node.js のエコシステム的なものが(たぶん)使えないので、今回は Node.js は ESModules に対応しません。拡張子 .mjs にして node –experimen
Goのプロジェクトでもタスクランナーとしてnpmを使う
[Go](https://golang.org/) のタスクランナーとして [npm](https://www.npmjs.com/) を使ってみたら案外よかった。Go に限った話ではないけど、Go が特に開発ツールチェーン周りの管理がしにくいので噛み合いやすいのではないかと思う。
[npm](https://www.npmjs.com/) は [Node.js](https://nodejs.org/ja/) 用のパッケージマネージャだが、[npm-scripts](https://docs.npmjs.com/misc/scripts) という簡易なタスクランナー機能がついている。また、Node.js 用の便利な開発ツールをそのまま利用できて、開発ツールのインストールも一括で管理できる。
## npm をタスクランナーとして使う利点
– Node.js のインストールだけで利用できる
– 簡易なタスクランナーが利用できる
– **Node.js 用の開発ツールが利用できる**
– husky + lint-staged, Prettier, etc
– 開発ツールのイ
Node.jsからobnizでBME280(気温、湿度、気圧)センサーを動かす
# これまでのおさらい
– [Raspberry piにNode.jsをインストールする](https://qiita.com/takashi53/items/69d4395c70d76ddbb0ab)
– [Node.jsでrequestモジュールを使ってHTTPリクエストを実行する](https://qiita.com/takashi53/items/76c5987b73b76ba9ea96)
– [Node.jsでIFTTTのWebhooksを使う(requestモジュール利用)](https://qiita.com/takashi53/items/7f1679c52edd741c3ed8)# 今回のお話
– Raspberry Piで、Node.jsからobnizを利用する。
– obnizでBME280センサーを動かす。
– BME280センサーで気温、湿度、気圧のデータを取得したら、IFTTTを使って、Google スプレッドシートにデータを書き込む。順番にやっていきます。
## Raspberry Piで、Node.jsからobnizを利用する
参考[Obn
Promiseは何時呼ばれるのか?
Promiseは何時呼ばれるのか?
使う分には今まであまり意識してこなかったのですが、async/awaitを呼ぶことで処理がブロッキングされるのではないかというのを懸念していたのと、そもそもどのタイミングでPromiseのcallbackがされるのか気になったので今更ですが調べてみました。
Promiseが呼ばれる仕組みについては先にEventLoopとmicrotaskについて知る必要があります。先に結論から書くと以下の感じです。
– PromiseはEventLoop内のmicrotaskキューでFIFO実行される。
– Timer系の処理(setImmediateやsetTimeout)はmicrotaskが全て実行された後に実行される。(つまり、`setTimeout(fn, 0)`はmicrotaskを全て実行した後にfnを実行するという意味)
– async/awaitはPromiseの箇所でsuspendしているに過ぎない(イベントループをブロッキングするかどうかはPromise内部の処理に依存する)、ジェネレータ文法(yield)やコルーチンの概念と同じ。
–
【JavaScript】値がundefined/nullの時だけtrue判定にする
# 値が`undefined`と`null`の時だけ`true`として判定したい(`0`は`false`判定にしたい)
タイトルの通り、こんな場合どうするか。[[JavaScript] null とか undefined とか 0 とか 空文字(”) とか false とかの判定について](https://qiita.com/phi/items/723aa59851b0716a87e3)に全て書いてあるが、このトピックの部分だけまとめてみた。
## `if (!value)`
まず初めにこれを使っていたのだが、JSでは**`0`は`false`判定なので普通に間違い**。勘違いして使っていたらバグの元になってしまう。
## `if (value === undefined || value === null)`
これならOKだが、どこか野暮ったい。この書き方が最も明示的で誰にもわかりやすいと思うが、もっとシンプルに書きたい場合もあるだろう。
## `if (!value && value !== 0)`
2番目の書き方よりは短くなったが、少し分かりづらくなった気が
Promiseとは・非同期処理時にPromiseを使うメリットとは
##Promiseとは
非同期処理のコードを扱いやすくするもの。
Promiseを用いると、非同期処理のコールバックの扱いがより簡単になる。##Promiseを使った実装・使わない実装
・Promiseを使わずに実装
“`javascript
//doWorkCallback関数の定義
const doWorkCallback = (callback) => {//非同期処理。2秒後に[1,2,3]を返す
setTimeOut(() => {
callback(undefined, [1,2,3])
}, 2000)
}//doWork関数の実行
//第一引数:エラー時の返り値、第二引数:処理成功時の返り値
doWorkCallback((error, result) => {if(error){
return console.log(error)
}
console.log(result)
})“`
↓
2秒後に[1,2,3]が返る
または、2秒後にerrorが返る・Promiseを使って実装
“`javascript
//doWorkPromis
MongoDBで配列内の特定の値だけを更新する
# やり方
Mongo公式ドキュメントの[$set](https://docs.mongodb.com/manual/reference/operator/update/set/)と[arrayFilters](https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/)を利用する## 実例
このようなドキュメントを持つコレクションがある時。“`js
{
“_id” : 1,
“grades” : [
{ “grade” : 80, “mean” : 75, “std” : 6 },
{ “grade” : 85, “mean” : 90, “std” : 4 },
{ “grade” : 85, “mean” : 85, “std” : 6 }
]
}
{
“_id” : 2,
“grades” : [
{ “grade” : 90, “mean” : 75, “std” : 6 },
{
node.js(express)でDB(Postgresql)にアクセス
# 背景
今日はバックエンド関連。
これまでバックエンド(主にDBアクセスまわり)は、ほぼJavaでしか書いたことがなかったので、
node.jsでDB(Postgresql)にアクセスする際には、どんな方法があるのか簡単に調べてみる。ついでに、接続先のDBがAWSのRDS(Aurora/Postgresql)だった場合に、現時点ではどういう構成が最適なのかについても調べてみようと思う。
# 実装
まずは、node.jsでDB(Postgresql)にアクセスする際の実装(コーディング)方法について調べて試してみる。
## 調査
ネットを漁って軽く調べてみた感じ、以下の2つのパターンがありそう。
1. ORマッパーとしてSequelizeというライブラリを利用してDBにアクセスする
2. pg(node-postgres)を直接使って、自分でSQLを書いてDBにアクセスする参考)
https://sequelize.org/
https://node-postgres.com/ネット上の記事を見る限り、Sequelizeを使うケースのほうが多いような印象(ま
ESLint v7.3.0
前 [v7.2.0](https://qiita.com/mysticatea/items/9215050e4546c1e2d486) | 次 (2020-07-04 JST)
ESLint v7.3.0 has been released: https://t.co/cGcdAuYc9s
— ESLint (@geteslint) June 19, 2020
ESLint `7.3.0` がリリースされ
NTTPCの激安VPS「Indigo」のAPIで遊んでみる
#はじめに
NTTPCの激安VPS「[Indigo](https://web.arena.ne.jp/indigo/)」を使い始めたのですが、APIが用意されているということで遊んでみました。#やりたかったこと
基本的には自宅から各種実験用にVPSを使っていて、自宅からSSHでVPS上のインスタンスをに接続しています。
[Indigo](https://web.arena.ne.jp/indigo/)には、ファイアウォールが標準でついているので、|方向|プロトコル|ポート|IP|
|:—|———|——|–:|
|IN|TCP|22(SSH)|自宅IPアドレス|ってな具合にやりたいわけですが、自宅IPアドレスは固定じゃないDDNS運用なので、IPアドレスが変更された場合にFWでDENYされちゃいます。
ということで、自宅IPアドレスが変わった場合にAPIでごにょごにょしてFWのルールを変更してしまいたいというわけです。
#前提条件
以下の内容は、NTT PC コミュニケーションズのVPS「Indigo」上の、
– KVM Instance 1 C
[Alexa]APLのカスタムパッケージの作成・インポートをする
# APLのimportを使い、複数画面間の部品共通化をしたい
Alexaスキル開発をしていると、APLで複数画面間で共通な画面要素を使いたいという場面が出てきます。
例えば、一つのAPLドキュメントにて独自のボタンデザインをLayoutsで定義しているが、これをスキル内の全画面共通で使用したい、というような具合です。
カスタムパッケージを作成し、APLドキュメントの”import”を使ってインポートすることでこれを実現することができます。
以下、APLでのカスタムパッケージ作成・インポートを実現するために実際にやってみた内容の記録です。# やること
以下を実施します。1. カスタムパッケージの作成、配置
2. APLドキュメントファイルの作成
3. APLデータソースファイルの作成
4. ハンドラにてAPL描写処理を追加## 1. カスタムパッケージの作成、配置
カスタムパッケージを作成します。
公式のリファレンスを見てもフォーマットに関する具体的な記載がないので書き方が不明でしたが、以下の記事に記載されているJSONの形式でうまくいきました。
(記事内ではこれではうまく
log.ioでログをブラウザでリアルタイムモニタリングする
「log.io」を使ってログを集約し、ブラウザからリアルタイムにモニタリングしてみます。
log.io
http://logio.org/log.ioは、TCPでログを受信するとともに、ブラウザからログを参照することができます。
Webサーバの機能が付いているので楽ちんなのと、WebSocketを使っているので、リアルタイムにログが出力されてきます。
それから、TCPでログを受信するので、AndroidやArduinoやNode.jsなど、様々なプラットフォームからのログを集約することができそうです。# log.ioのセットアップ
npmでモジュール化されています。
> npm install -g log.io
> mkdir ~/.log.io
> vi ~/.log.io/server.json
> log.io-serverserver.jsonはこんな感じです。
“`json;server.json
{
“messageServer”: {
“port”: 6689,
“host”: “【起動させるマシンのIPアドレス】”
Node.jsでSlack Slashコマンドアプリを作る
Slackのslashコマンドから動かせるシンプルなメモアプリケーションを作ってみます。
超初心者向けです。## 完成イメージ
slackから `/note hoge`と打つと、`hoge`を記録してくれる。## 設計
– ローカルサーバでnodeアプリケーション(express)を起動する。
– ngrokでローカルサーバを外部に公開
– slack slashコマンドを作成し、送信先に公開用URLを指定以上です。お試し版なので、本番環境へのデプロイやDB接続など面倒くさいことはしません。
## expressアプリを作成
Udemyで速習しました。(https://www.udemy.com/course/nodejs-part2-express/)
express環境の構築は割愛します。
index.jsに下記を記載。“`javascript:index.js
const express = require(“express”);
const app = express();
const port = process.env.PORT || 30
Node.jsのCLIツールでURLを既定のブラウザで開く
[open](https://www.npmjs.com/package/open) パッケージを使用すると、クロスプラットフォームでその辺の処理をよしなにやってくれる。
実行時にHTTPサーバを立てたり、ライセンスなどを表示したりするようなCLIツールで便利かもしれない。## Install
“`sh
yarn add open
“`## Usage
非常にシンプル。
“`js
const open = require(‘open’);open(‘https://qiita.com/’);
“`async/await を使用した実用的な例などは [README](https://www.npmjs.com/package/open) を確認されたい。
なお、従来は[opn](https://www.npmjs.com/package/opn)という名称だったものがrenameされたらしい。
socket ioでビデオ通話+ユーザー名表示
# Zoomにあるようなビデオ映像に名前を入れて欲しい…
以前に作成した[socket.io にセッション情報を渡す](https://qiita.com/4201tosiyuki/items/80ee553ac42eeb323859)と[Express+MySQLでログインする](https://qiita.com/4201tosiyuki/items/7ece29ed48b49efcbe59)の続編です。改めて、このプログラムを書いた経緯です。
1. 自社ネットワーク内でビデオ通話をしたいという相談をうける
2. [hidden.in](https://qiita.com/ukiuni@github/items/a1372fac50a4ece1d5e8)を見つける
3. これは便利だと感動し、セットアップする
4. ユーザー名(支店名)を表示して欲しいと相談をうける
5. Node.jsを勉強するこのような経緯で今に至っております。
冒頭に紹介した記事で、MySQLにユーザー情報を保存しておき、passportモジュールを読み込み、ログイン判定をする。というところまでが
コスパ最強IoT家電!TPLink製品をRaspberryPiから操作
#TPLinkとは?
ルータを主力とする中国・深圳のネットワーク機器メーカーです。
近年はスマート電球、スマートプラグ等のIoT家電に力を入れており、コスパの良さからAmazonで独自の地位を築いています。![plug.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/f819958a-fe07-5072-c935-9da3dbc1568d.jpeg)
[スマートプラグのHS105](https://www.amazon.co.jp/Alexa%E8%AA%8D%E5%AE%9A%E5%8F%96%E5%BE%97%E8%A3%BD%E5%93%81%E3%80%91-%E7%9B%B4%E5%B7%AE%E3%81%97%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%B3%E3%83%88-Google%E3%83%9B%E3%83%BC%E3%83%A0%E5%AF%BE%E5%BF%9C-%E9%9F%B3%E5%A3%B0%E3%82%
node.js Firebase Functionで作ったGoogle Chat BotでChatからのリクエストであるかの検証を行う
皆さんこんにちわ。Chat Bot作ってますか?まだApps Scriptで作ってますか?
このごろは外部のG SuiteテナントユーザーともやりとりできるようになったGoogle Chat。
Apps Scriptのままじゃテナントまたげません[^1]。
やっぱりFirebase Functionsでしょう! (Cloud Functionsもほぼ同じ)…ってことでCloud Functionsをnode.jsで作り始めると、開発ドキュメントの「[Verifying bot authenticity][1]」でGoogle Chatからのリクエストかどうかを検証するためのサンプルコードが書かれていることに気づきます。
この対策をしないと、Bot Function URLが知らんやつに知られたら、Bot messageのsender情報を偽装されちゃうかもしれません。Botでユーザー情報を保持していてメッセージよって返すようにしていたら、その情報が抜かれちゃいます。そりゃまずいってことでサンプルのとおりに実装しようとしたところ…### node.jsでBot Function作