- 1. NodeアプリからAzure Key Vaultに接続する方法
- 2. M1 MacでHomebrewセットアップからLaravel でnom run watchするまで
- 3. dotenvが効かないundefined/.env見つからない
- 4. 家のポストに荷物が投函されたらSlackに通知が来るIoTやってみた
- 5. modbus-serialでCO2センサ(Senseair Sunrise)を使う
- 6. ReactWebアプリ環境構築の覚え書き
- 7. $ nodebrew install-binary stableができないとき
- 8. [PAYJP-NODEJS] 支払い機能の実装
- 9. 1時間で自作ページをGitHubPagesでWeb公開
- 10. Gulpを起動すると “no template named ‘remove_cv_t’ …” エラーが出たときの対処
- 11. M1 macbookにnode.jsを導入
- 12. 日本のワクチン接種回数の表を作成 (Our World)
- 13. Node.js パッケージ管理(更新中) メモ
- 14. Node.js EventEmitter メモ
- 15. Node.js 非同期処理近辺 メモ
- 16. ExpressとmongoDBを使ったREST APIをTypeScriptで組んでみる【2.mongoDB接続編】
- 17. 【Node.js初学者のための基本いろいろ】
- 18. JavaScriptの手引き
- 19. Modbus RTU RS485 Relay Switch Boardを制御するためのバイナリ送信用のHex配列を作る
- 20. NodejsでDynamoDB使ってみた
NodeアプリからAzure Key Vaultに接続する方法
Key Vaultに接続するためには必ず認証を行う必要がある。
主に **どうやって認証を行うか** が課題。
また前提条件として、Key Vaultにアクセスする際に **APIキーのようなものを使わない** (いくらkey-vault上に暗号化キーをセキュアに保存しても、APIキーなどをコード内に置いていたら意味ないため)
Azure App ServiceにNodeアプリを **デプロイ** してからKey Vaultに接続する場合と、 **ローカル** のNodeアプリからKey Vaultに接続する場合に分けて紹介する。# Azure App ServiceにNodeアプリをデプロイしてからKey Vaultに接続する方法
**マネージドID** を使ってKey Vaultに接続するための認証を行う。
## マネージドIDとは
システム割り当てマネージド IDとユーザー割り当てマネージド IDの2種類がある。
簡単に説明すると、システム割り当てマネージドIDはAzureサービス(今回でいうとAzure App Service)の特有のIDで、このIDからの接続を
M1 MacでHomebrewセットアップからLaravel でnom run watchするまで
知識レベルフロントエンドエンジニアがM1でLAMP環境整えるための覚書です。
##Homebrew インストール
M1の場合、「/opt/homebrew/」ディレクトリにインストールする必要がある。
ルートからoptへ移動
“`bash:~
cd /opt
“`“`bash:/opt
sudo mkdir homebrew
Password:
sudo chown joraku:admin homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz –strip 1 -C homebrew
“`optからルートへ移動
“`bash:/opt
cd ~
“`インストールが終わったら「.zshrc」ファイルでパスを通す。
“`bash:~
vim .zshrc
“`“`bash:.zshrc
export PATH=$PATH:/opt/homebrew/bin
“`
escキー、:wqで保存して閉じる。ターミナルを再起動するか、sourseで.z
dotenvが効かないundefined/.env見つからない
## 結論
パスが間違っている可能性が高い。## 前提
Nodejsを活用し、環境変数を取得する際には、
dotenvを使用すると良い。“`js
// app.js
require(‘dotenv’).config();
const env = process.env;
console.log(env.USERNAME);
“`“`js
// .env
USERNAME=hogehoge
“`しかし、上記のように実施したとして、しか表示されない場合、
何がおかしいのか悩む。“`console
> node ./src/app.js
undefined
“`## デバッグ
“`js
require(‘dotenv’).config();
console.log(require(‘dotenv’).config());
console.log(process.env.USERNAME);
“``requireしているところをconsole.log()`でくくるとエラーが出る。
“`console
error: Error: ENOENT:
家のポストに荷物が投函されたらSlackに通知が来るIoTやってみた
## 概要
最近は家にいることが多くQOLを上げていきたいと常々考えております。家のポストに荷物やチラシが投函されたら、Slackに通知が来るIoTをやってみました。
## 仕様
– ① エントランスのポストのフタが開いたらCloud Functionsをコールする
– ② コールされたCloud FunctionsがWebHookでSlackに通知を送る## どうやって実現するか?
仕様は簡単です。ただ「ポストのフタが開いた」ことをトリガーとするデバイスが、ネットワークに接続している状態でなければ実現ができません。マンションのエントランスにあるポストから、自分の部屋のWifiを接続することはできません。
その課題を解決するためにSORACOMが販売している「**[SORACOM LTE-M Button Plus](https://soracom.jp/store/5207/)**」を購入して実現することにしました。
## SORACOM LTE-M Button Plus とは?
> SORACOM LTE-M Button Plus は3種類のクリックに応じたア
modbus-serialでCO2センサ(Senseair Sunrise)を使う
# 要旨
Node.jsでmodbus-serialを使用し、Raspberry PiからCO2センサにmodbusのシリアル通信を行なった。# 背景
![D4D1145E-21E0-440D-AB27-3092C7EAAF70.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538096/30d33022-a213-5b03-4f73-bffbb5a0f650.jpeg)在宅勤務が始まり、換気環境がオフィスより劣る自宅で最高のパフォーマンスを出すためにCO2濃度管理が必要不可欠!
などと論理武装し、一般人が買える最高性能っぽいCO2センサ[Senseair Sunrise](http://senseair.jp/product/oem/9880.html)を購入。
しかし、Raspberry PiのIC2接続で読み出すことに挫折(ArduinoのIC2は成功)。
1年ほど積んでいたCO2センサをUARTにより使用することを試みるのであった。# 事前準備
ホストにRaspberry Pi
ReactWebアプリ環境構築の覚え書き
# はじめに
自己学習の一環として、フロントエンド:React、バックエンド:Node.jsのWebアプリを作成してみた時の覚え書きです。
ここでは、アプリケーションの実装の仕方については触れていませんので、あらかじめご了承ください。# 環境情報
* 使用言語: TypeScript
* バックエンドサーバー: Heroku + DB(PostgreSQL)
* フロントエンドサーバー: Netlify# 前提条件
* 以下のツールがインストール済みであること
* git (v2.26.1)
* node.js (v12.8.3)
* yarn (v1.22.4)
* 以下のサービスのアカウントが作成済みであること
* GitHub
* heroku
* Netlify# 環境構築
## リポジトリの作成
* GitHubのWebで新規リポジトリを作成
gitignoreのテンプレートはnode用を選択する
* 作成したリポジトリを`git clone`でローカルへ## package.jsonの作成
* cloneしたリポジトリのデ
$ nodebrew install-binary stableができないとき
メモです。
“`
$ nodebrew install-binary stable
“`
node.jsを入れたくてnodebrewをインストールしようとしていますが、エラーが出てしまった。
エラーは以下。“`
$ nodebrew install-binary stable
Fetching: https://nodejs.org/dist/v16.2.0/node-v16.2.0-darwin-x64.tar.gz
Warning: Failed to create the file
Warning: /Users/masahito/.nodebrew/src/v16.2.0/node-v16.2.0-darwin-x64.tar.gz:
Warning: No such file or directory
curl: (23) Failure writing output to destinationdownload failed: https://nodejs.org/dist/v16.2.0/node-v16.2.0-darwin-x64.tar.gz
`
[PAYJP-NODEJS] 支払い機能の実装
## [PAY.JP](https://pay.jp/)
![Ảnh chụp Màn hình 2021-05-22 lúc 22.39.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114590/f6066911-e153-6f77-9ddd-21bd662974da.png)
– 導入簡単
– 決済手数料 2.59%~
– 定期課金、Apple Pay対応
– シンプルなAPI### Pay.jpの管理画面
![Ảnh chụp Màn hình 2021-05-22 lúc 22.45.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114590/a32a9642-191c-7147-6ac4-4444a9272e6f.png)## 実装
### 1. API Key取得
テストと本番のAPIキーがあります。
![Ảnh chụp Màn hình 2021-05
1時間で自作ページをGitHubPagesでWeb公開
#はじめに
自分のポートフォリオページを作ってWeb公開したいという背景から
まずは、vueのサンプルページをGitHub Pagesで公開してみた。実際の作業時間は1時間程度。
まっさらな状態からのハンズオン。#環境
Macbook Air(M1チップ)
node v14.16.0nodeが入ってない人は[こちら](https://nodejs.org/ja/download/)からインストールできるよ。
#採用したフレームワーク
* フロントサイド
Vue.jsというJavaScriptのフレームワークを使ってプロジェクトを作成する。
フレームワークの中でも比較的学習コストのが低い割に便利なVueを採用した。
今回はプロジェクトを作った後の初期画面であるサンプルページを作るとこをまでを行う。* Webサイトの公開
GitHub Pages は、静的なウェブページをホスティングするサービス。
GitHub のリポジトリから HTML、CSS、および JavaScript ファイル を直接取得し、
任意でビルドプロセスを通じてファイルを実行し、Webサイトを公開でき
Gulpを起動すると “no template named ‘remove_cv_t’ …” エラーが出たときの対処
Macを新調したのを機に、Node関係をいちから設定しなおしました。
旧環境から持ち込んだpackage.jsonをインストールしようとしたところ、以下のようなエラーが表示されました。“`
error: no template named ‘remove_cv_t’ in namespace ‘std’; did you mean ‘remove_cv’?
“`## 原因
node-sassが最新のNodeに対応していないことが原因のようです。
https://github.com/sass/node-sass/issues/3077
ここのissueによるともう修正されているようなのですが…nodebrew経由だと最新バージョンがインストールされないのでしょうか?
## 対応
node-sassを再インストールする手も考えられましたが、私はNodeのバージョンを旧環境と同じ15に下げる対応をしました。その方が旧環境から他のプロジェクトを移行したときに、後々問題が少なそうだからです。
nodebrewを使用している場合、useコマンドで使用バージョンを変更するこ
M1 macbookにnode.jsを導入
#参考サイト
https://codeburst.io/my-ultimate-m1-mac-developer-setup-cfdb2daeed2d
日本のワクチン接種回数の表を作成 (Our World)
[Our World in Data](https://ourworldindata.org/covid-vaccinations?country=Japan) のデータを使って次の表を作成します。
![ourworld.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/6dada327-efc6-9d6d-5764-0c8d31ee029e.png)データの取得
“`bash
wget https://github.com/owid/covid-19-data/raw/master/public/data/vaccinations/vaccinations.json
“`日本のデータのみに変換
“`bash
./pick_japan.js vaccinations.json vaccinations_japan.json
“`“`js:pick_japan.js
#! /usr/bin/node
// ——————————-
Node.js パッケージ管理(更新中) メモ
## npm
正式名称 : Node Packcage Maneger
Node.jsのパッケージ管理ツール外部で、ライブラリに対する依存バージョンの管理、更新を容易にすることが出来る。
npm ls でディレクトリ内のパッケージ依存構造( 依存ツリーを確認できる。)
## package.json
JSONファイルによって管理され、メタデータ(知らん)の管理にも使われる。
npm initで生成でき、様々な値を設定できる。
> メタデータとは : データが持つデータ、データ自身に付随するデータのこと(意味不)
> Excelで言えば作成者、作成日などを指す。###値
#### name
パッケージ名の設定です。
レジストリに公開する際必要で、付けれる名前には制約がある(オライリーハンズオンNode p.365)
スコープ付きパッケージ[@スコープ名/]で設定できる。
> スコープ : 変数がどの場所から参照できるか定義する概念、同一スコープ上にある変数にアクセスできるらしい….。#### version
パッケージのバージョンです。
バージョンはセマンティックバージョ
Node.js EventEmitter メモ
## observerパターン
監視対象(subject)と監視役(observer)、監視対象に対して何かイベントがあれば監視役に逐一報告する報連相がしっかりできる上司と後輩の関係。## イベントの登録、呼び出し
リスナは登録されていくとメモリを圧迫するので定期的に破棄する必要がある。
### EventEmitterのメソッド一覧
– on(event,listener) : 第一引数イベント名、第二引数にリスナ。
– once(event,listener) : 第一引数イベント名、第二引数にリスナ。
– off(event,listener) : 第一引数のイベント名に対応するリスナを削除。
– emit(event) : 指定したイベントの発行。
Node.js 非同期処理近辺 メモ
## 非同期処理
外部に処理を投げている間結果が帰ってくるまで暇をしている同期処理と違って、暇を効率的に使うことができる秀才な処理。
## コールバック
指定した処理が完了した後、実行してほしい関数を引数に入れることで実現する処理。
## Promise
非同期処理の状態を4段階(pending,fulfilled,rejected,settled)で表してくれる律儀なオブジェクト。
resolveやrejectを使って、成功、失敗時の振る舞いを教えることができる(設定できる)。
### 4つの状態
– pending : 実行中…。
– fulfilled : 成功。
– rejected : 失敗。
– settled : 処理完了。### resolveとreject
– resolve : 引数は空でも可、空の時はpromiseが入る、処理結果を引数にこいつを実行するとfulfilledになるらしい。
– reject : 基本的にはerrインスタンスが入るらしい、エラーを引数にこいつを実行するとrejectedになるらしい。promiseはオブジェクトであるため、
ExpressとmongoDBを使ったREST APIをTypeScriptで組んでみる【2.mongoDB接続編】
## はじめに
先日React学習のためにローカル環境でJSON Serverと連携したテックブログを組んだのですが、今後の課題にしていたmongoDBとの連携を行っていく記録の第2弾「mongoDBとの接続編」になります。
※学習用のREST APIのためセキュリティやエラー処理については考慮されていない点ご了承ください。https://qiita.com/himorishige/items/7ebd87ddaf7c86901b9a
今回はmongoDB Atlasとの接続とダミーデータの投入を行います。
1. [環境構築編](https://qiita.com/himorishige/items/34c9a249b92c36072493)
2. **mongoDBとの接続(この記事)**
3. Controllerの作成
4. 完成!?## mongoDBとの接続部分の構築
エントリーポイントとなる`index.ts`ファイルとmongoDBとの接続を記載を`config/db.ts`ファイルとして作成します。
“`typescript:src/index.t
【Node.js初学者のための基本いろいろ】
ここではNode.jsをこれから勉強していこうかな〜、という人向けに、Node.jsが書けるようになるための基礎てきなものを書いていこうかなと思います。
あくまで、CommonJSモジュールの書き方で説明していきます。
####1,様々な関数の書き方
個人的にはfunctionを矢印で代替できるようなイメージを持っている“`jsx
function sampleFunc(num){
console.log(num);
}sampleFunc = function(num){
console.log(num);
}sampleFunc = (num) => {
console.log(num);
}
“`###2,関数をプロパティ化する方法。(オブジェクト指向でいうクラス内のプロパティ的な)
・CommonJSモジュールを使う場合は、ファイル単体をモジュールとみなす。
・`module.exports`に紐付けて外部で利用できるようにする。
・`exports` は`module.exports`の省略形。“`index.js
module.expor
JavaScriptの手引き
# JavaScriptの手引き
JavaScriptの変な仕様まとめです
~~いつ使うんだこんな知識~~##コードの読み方
###別ファイル
“`javascript
/*—–*/
“`###戻り値もしくは出力結果
“`javascript
//戻り値もしくは出力結果
“`##コード集
###文字は配列
“`javascript
“Hello”[0]//H
“`###varとletの違い
“`javascript
console.log(a);//undefined
var a;
/*——-*/
console.log(a);//ReferenceError
let a;
/*——-*/
“use strict”;
console.log(a);//undefined
var a;
“`###falseの反対の反対は1
下記の例は全て1が帰ってくる“`javascript
+!false
+!0
+!”
!!undefined
!!null
“`###Object判定
“`javascript
+
Modbus RTU RS485 Relay Switch Boardを制御するためのバイナリ送信用のHex配列を作る
32連のリレーを制御しようと思うとGPIOだけでやるとケーブルの化け物みたいな形にならざるを得ません。
そのため市販されてるRS485などで制御する数千円の基板を利用したいですが販売サイトには詳しく記載もなく制御する情報がなかなか見つかりません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58795/8eb64d49-07c6-e1dc-13f7-e2fa9c08b0aa.png)
https://www.aliexpress.com/item/4001222678277.html今回は以下の制御ロジックのものをNodeJSで制御するためのHex配列を生成するものを作りました。これをシリアル通信なりで送信するとOKです。
CRC-16でのchecksumの生成が地味に面倒で参考サイトにあったC#であったコードをNodeJSで動くように雑に書き換えました。制御参考:https://ozeki.hu/p_5848-ozeki-relay-board.html
コード参考:http
NodejsでDynamoDB使ってみた
## 背景
はじめて業務でDynamoDBを使用したため、基本的なものだがメモを残して、自身のナレッジとして蓄えようかと## 環境
– node.js
– DynamoDB
– Lambda## 経験した関数
### 登録
– put#### パラメータ
– TableName: テーブル名
– Item: 登録対象“`
ex))
TableName: ‘test-table’,
Item: {
‘id’: 1,
‘name’: ‘test’,
}
“`
### 取得
– get#### パラメータ
– TableName: テーブル名
– Key: AttributeValueのカラム名(一般的なTableのprimary key)“`
ex))
TableName: ‘test-table’,
Key: {
‘id’: 1
‘sort’: 1
}
“`
### 検索
– scan#### パラメータ
– TableName: テーブル名
– FilterExpression: SQLの条件式
– Express