- 1. macOSのnpmでグローバルインストールに失敗する
- 2. sequelize.jsを使ってみる。
- 3. Node.jsとMongoDBの環境をDockerで構築
- 4. 失敗しない文字列シリアライザ選び.js
- 5. 【Firestore】配列へのデータの追加で Cannot read property ‘arrayUnion’ of undefined
- 6. #javascript の some / every の挙動を #node で確認する
- 7. 【JavaScript】非同期処理とはなんぞや
- 8. swagger-codegenでnode.jsのモックサーバー作成
- 9. Pre-Signed URLでS3に直接ファイルをアップロードする
- 10. Pixabay APIでフリー素材の画像を取得しLINE botで送信する
- 11. 在宅ワーク中に会議中だよサインをobnizとLINEBotで作ってみた
- 12. Node.jsのバージョン管理システム「nodebrew」を使ってNode.jsをインストールする手順
- 13. Express Validatorを使ってみる(API変更後)
- 14. Node.jsのLambdaでPre-Signed URLを発行する
- 15. rails serverでサーバーを起動しようとしたら、Webpacker configuration file not foundエラーが発生した時の対処方法
- 16. gRPC 公式サンプルを Node.js + TypeScript on Windows (+ PowerShell) 化する
- 17. LambdaのオーソライザーでBASIC認証を追加する【言語不問】
- 18. Twilio Functionsを使って営業時間内だけ電話を転送する方法
- 19. [Node.js]requireで、確実にあるのに中身が空になってしまう(エラーは出ない)
- 20. clearIntervalでLINE botの処理を止める(「obnizとLineBotで防犯ツールを作ってみた」の続き)
macOSのnpmでグローバルインストールに失敗する
## 事象
1. `-g`オプション付きの`npm`コマンドでパッケージをグローバルインストールしようとすると、次のエラーが発生する。
“`shell
% npm install -g typescript
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’
npm ERR! [Error: EACCES: permission denied, access ‘/usr/local/lib/node_modules’] {
npm
sequelize.jsを使ってみる。
# sequelize.jsとは
node環境でDBを操作するための便利なライブラリです。
サーバーサイドをnode.jsで実装する際にexpress.jsと合わせて使用します。CLIによるモデルの作成とDBマイグレーションについて説明した後、
ORMとしてのサーバーサイドでの呼び出し方法について記載します。詳細はこちらをご参考ください。→https://sequelize.org/master/
# 導入方法
npm install –saveする。“`sh
npm install –save sequelize
“`## モデルの作成とDBマイグレーション
モデル作成とDBへのマイグレーションはsequelize-cliを使用します。
###インストール“`sh
npm install –save sequelize-cli
“`### 初期化処理
“`sh
./node_modules/sequelize-cli/lib/sequelize init
“`
コマンドを打つと、config、migrations、modelsといったデ
Node.jsとMongoDBの環境をDockerで構築
# はじめに
Node.jsとMongoDBの組み合わせのDocker環境をネットで調べると、ちゃんと動くものがなかったので、自分で作成しました。# 環境構成
WebフレームワークはNode.js、データベースはMongoDBを使用します。
また、Nginxのリバースプロキシを用いて、Node.jsに接続できる環境にしています。# ディレクトリ構成
“`
my-project
|– nginx
| └ site.conf
|– server
| ├ Dockerfile
| ├ package.json
| ├ package-lock.json
| └ app.js
└– docker-compose.yml
“`## /nginx
site.confにはNginxのリバースプロキシの設定を書きます。“`site.conf
server {
listen 80;
server_name local
失敗しない文字列シリアライザ選び.js
本記事は「[Node.jsのworker_threadsに使えるバイナリフォーマットを考えた件](https://qiita.com/ayatty/items/4b662dba4395388c7138)」のスピンオフ作品となっております。
# 1. お題目
「[Node.jsのworker_threadsに使えるバイナリフォーマットを考えた件](https://qiita.com/ayatty/items/4b662dba4395388c7138)」では、worker_threadを使った親子スレッド間でデータを共有するには`SharedArrayBuffer`[(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer)を使うことを知りました。
`SharedArrayBuffer`はバイナリ配列ですから、JavaScriptの数値、文字列、オブジェクト、配列等々のデータは直接格納できません。そのため、ここに格納するためのシリアライザ、取
【Firestore】配列へのデータの追加で Cannot read property ‘arrayUnion’ of undefined
# arrayUnion を使用する
“`test.firestore.js
var washingtonRef = db.collection(“cities”).doc(“DC”);// Atomically add a new region to the “regions” array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayUnion(“greater_virginia”)
});// Atomically remove a region from the “regions” array field.
washingtonRef.update({
regions: firebase.firestore.FieldValue.arrayRemove(“east_coast”)
});
“`[データの追加 | Firestore | Google Cloud](https://cloud.google.com/firestore/docs/m
#javascript の some / every の挙動を #node で確認する
“`
$ node
“`# some
“`js
// 配列の中の一つでも値が1であればtrue
> [1,2,3].some(value => value == 1)
true
> [3,4,5].some(value => value == 1)
false
“`複数条件をつなげることも出来る
“`js
// 配列の中の一つでも値が1または2の要素があればtrue> [1,2,3].some(value => value == 1 || value == 2)
true
> [2,3,4].some(value => value == 1 || value == 2)
true
> [3,4,5].some(value => value == 1 || value == 2)
false
“`# every
“`js
// 配列の全ての値が1または2または3であればtrue
> [1,2,3].every(value => value == 1 || value == 2 || value == 3)
true
> [2,3,4].every(va
【JavaScript】非同期処理とはなんぞや
## はじめに
JavaScriptの初心者を脱出して最初に躓くのは恐らく**非同期処理**な気がします。
自分も見事につまずいているので、記事にまとめながら勉強していきます。## 非同期処理とは
処理を待たずにどんどん処理を進めていきます。
遅いやつを待ってあげるような優しい奴ではありません、非情です。“`js
const fs = require(‘fs’);const file1 = fs.readFile(‘file1.txt’)
const file2 = fs.readFile(‘file2.txt’)
const file3 = fs.readFile(‘file3.txt’)console.log(`file1: ${file1}, file2: ${file2}, file3: ${file3}`)
“`
動きません。
readFileは非同期処理です。file1君が処理を終えるのを待っているほどfile2君の気は長くありません。
それはfile3も同じです。結果として誰も成功できない。これが非同期処理です。## 解決策
この誰も待ってく
swagger-codegenでnode.jsのモックサーバー作成
# 経緯
業務でpythonのリクエストをC++に変換してwebApiでリクエストを送る必要があり、
swaggerというものを用いれば簡単にサーバー・クライアントのRESTAPIコードを作成できると知り、調査を開始した。
まずは簡単にサーバーを立てることができるnode.jsでモックサーバーを作成することにした。
備忘録として記事にまとめる。# swaggerについて
>Swagger は RESTful APIを構築するためのオープンソースのフレームワーク以下の記事で詳しくまとめられている。
↓
[Swaggerの概要をまとめてみた。](https://qiita.com/gcyata/items/342073fa7607fd4082bd)# swagger-codegenを使用する理由
swagger-nodeというパッケージを使用することでもサーバー作成を行うことができる。
しかし、以下の理由で採用を見送った。– モジュールの更新がここ数年行われていない
– 生成されるプロジェクト内のファイルの設定方法や構成がswagger-codegenと異なっていた
– 情
Pre-Signed URLでS3に直接ファイルをアップロードする
# S3にファイルをアップロード
S3にファイルをアップロードするときLambdaやEC2経由にすることが多いかと思いますが、大容量のファイルだとS3に直接アップするほうが効率が良さそうです。
そういった場合はPre-Signed URLを取得して直接S3にファイルをPUTしてやると良さそうです。# Pre-Signed URLの取得
以下のコードでPre-Signed URLが取得できます。“`js:Lambda
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}async function getPresignedUrl(){
return new Promise((resolve,reject)=>{
s3.getSignedUrl(‘putObject’, params, (err, url) => {
if (err) {
reject(err)
}
Pixabay APIでフリー素材の画像を取得しLINE botで送信する
#やること
**[Pixabay API](https://pixabay.com/api/docs/)**という、フリー素材の画像、イラスト、動画を提供しているAPIを利用して取得した画像をLINE botへ送信してみます。
LINE botからユーザに画像を送信する方法は次の記事にまとめました。
[【LINE botから画像送信する方法】問いかけると柴犬の画像を返してくれるLINE botを作ってみた](https://qiita.com/kmaepu/items/fe718d6fd57929dd6e36)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183282/f54afe5a-9781-f7c6-6ed6-e2e30f642fe6.png)
#できたもの
何かテキストを入力すると、ビーバーの画像を返してくれる。(本当は、テキストに応じた画像を出したかった…。)
在宅ワーク中に会議中だよサインをobnizとLINEBotで作ってみた
### はじめに
こちらはProtoOutStudiooの課題でobnizとLINEBotを組み合わせて何か作ろう!というものです。### 概要
新型コロナウィルスのせいで在宅ワークになったため、仕事中の家族との距離が難しい。
特にうちは猫が3匹もいるので、ニャンコちゃん達が騒ぎ始めたらどちらの部屋に引き取る?とか、ご飯何時にする?
などなど、いちいちメッセージを送らずに部屋越しに会話することがよくあるのですが、実は「今オンラインミーティング中!!!!ノックしないでー、開けないでー」みたいなことがあって気まずい思いをしたりして、何かトイレの空き情報みたいなサイネージが欲しくて作りました。### できたもの
部屋に入らないで欲しい時に入らないでマークをLINEから、obnizで表示させるサイネージ的なものコロナ対策でみんなお家にいる困りごとをobnizで解決しようと頑張った。。。マトリックスLED使いたかった。。。壊してしまった。。。Node.jsのバージョン管理システム「nodebrew」を使ってNode.jsをインストールする手順
# はじめに
nodebrewはNode.jsのバージョンを管理するためのツールです。
nodebrewを使うことで、一つの環境に複数バージョンのNode.jsを導入することができ、バージョンの切替も簡単に行えます。# 環境
OS:macOS Catalina v10.15.3# nodebrewのインストール
nodebrewのGitHubに手順が記載されていますので、そちらを参考にインストールしていきます。
https://github.com/hokaccha/nodebrewcurlでインストールします。
※今回はcurlでインストールしましたがmacOS用パッケージマネージャ「Homebrew」からのインストールをお勧めします“`terminal
$ curl -L git.io/nodebrew | perl – setup
% Total % Received % Xferd Average Speed Time Time Time Current
DloExpress Validatorを使ってみる(API変更後)
#はじめに
完全自粛中なので[Node.js超入門第2版](https://www.shuwasystem.co.jp/book/9784798055220.html)でnode.jsの勉強をしていました。
express-validatorがAPI変更に伴って、参考書通りのソースコードだとバリデーションが実行されなかったので、変更点も交えながら記事投稿します。##環境
・node 12.7.0
・express 4.16.1
・express-validator 5.3.1##Node.js超入門第2版 P334~335
“`app.js
var validator = require(‘express-validator’);
app.use(validator());
“`“`hello.js
router.get(‘/add’,(req,res,next) => {
var data = {
title: ‘Hello/Add’,
content: ‘新しいレコードを入力:’,
form: {
name: ”,Node.jsのLambdaでPre-Signed URLを発行する
# Pre-Signed URL
S3はアクセス権を設定することで、誰でもファイルにアクセスできるようにしたり、できなくしたりが可能です。
Pre-Singed URLは誰でもファイルにアクセスできなくしているところに一時的にアクセスを許可することができます。
今回はこのPre-SingedをLamndaで発行してみたいと思います。# S3
バケットを準備して非公開の設定にしておきます。
テスト用に1つ画像ファイルをアップロードしておきましょう。# Lambda
今回はNode.jsでPre-Singed URLを発行します。
LambdaからS3にアクセスできるようにロールを設定しておきましょう。## コード
バケット名、ファイルパスは適宜変更して下さい。“`js:Lambda
const AWS = require(‘aws-sdk’);
const s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}async
rails serverでサーバーを起動しようとしたら、Webpacker configuration file not foundエラーが発生した時の対処方法
# rails serverでサーバー起動しようとするとエラーが
サーバーを起動するためにコマンドを実行。“`
$ rails server
“`すると次のエラーが発生。
“`
(中略)
Webpacker configuration file not found /Users/ユーザ名/app_name/config/webpacker.yml.
Please run rails webpacker:install
Error: No such file or directory
@ rb_sysopen – /Users/ユーザ名/app_name/config/webpacker.yml
(RuntimeError)
“`# 解決法
最終的にwebpackerをインストールすることで成功しました。
webpackerのインストールには、Node.jsとYarnのインストールが必要で、これらをインストールした上でwebpackerをインストールすると解決します。まずはGemfileにwebpackerの記述があるか確認。
“`:Gemfile
g
gRPC 公式サンプルを Node.js + TypeScript on Windows (+ PowerShell) 化する
# 参考
こちらの素晴らしい記事を全面的に参考にしていきます。
https://qiita.com/daisaru11/items/67366061f7244378639c
# この記事でする事
– 参考記事の通りに進めると、Windows と lint 由来の躓きポイントやがあります。これに対応していきます。
– コマンドプロンプトは今後PowerShellに置き換えられていくそうなので、PowerShell前提で進めます。
– 題材として公式サイトにあるサンプルprotoファイルを使用して、これをTypeScript対応させていきます。https://grpc.io/docs/quickstart/node/
# 下準備
適当な場所に、新規フォルダを作成し、“npm“ 初期化から “typescript“ と “ts-node“ のインストールまで行います。
“`powershell
npm init -y
npm i -D typescript ts-node
“`今後 “src“ フォルダにソースを入れていくので、“src“ フォル
LambdaのオーソライザーでBASIC認証を追加する【言語不問】
[前回作成したサーバーレスLaravel](https://qiita.com/umihico/items/64fcf159f68ebd866170)ですが、BASIC認証を付与しようとしたら躓きました。
**API Gatewayを経由すると、`WWW-Authenticate`ヘッダーがx-amazn-remapped-www-authenticateに置き換えらます。その結果BASIC認証を求めるポップを表示できず無条件で`401 Unauthorized`エラーだけを表示するWEBになります。**つまり問題はLambdaではなく、API Gatewayです。ALBでURLを設定すればこの問題はありません。ALB経由のLambdaを使ったサーバーレスLaravelのBASIC認証は通常のLaravelと同じです。[53eda06](https://github.com/umihico/laravel-demo/commit/53eda06)
API Gateway経由でもBASIC認証を導入するには以下のように変更します。
+ 別途新規のLambda関数を作成し、API
Twilio Functionsを使って営業時間内だけ電話を転送する方法
今回はTwilio Functionsを使って、営業時間内のみTwilioにかかってきた電話を任意の電話番号に転送する仕組みを実装します。
# 全体イメージ
# 以下は取得済みとします
・Twilioアカウント
・Twilioの050番号# 事前準備
[Twilio Functions を使って電話を転送する方法](https://www.tomokki-blog.com/2020/04/03/twilio-functions-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E9%9B%BB%E8%A9%B1%E3%82%92%E8%BB%A2%E9%80%81%E3%81%99%E3%82%8B%E6%96%B9
[Node.js]requireで、確実にあるのに中身が空になってしまう(エラーは出ない)
##環境
node:v8.11.3##プログラム
こんな感じでリポジトリがあるとして、確かにファイルはある。なかったらエラー出ますからね。。。“`javascript:hogeRepository.js
const userRepository = require(‘../user/userRepository.js’);
console.log(userRepository)//出力結果は、{}“`
##原因
この指定しているuserRepository.jsでもrequireを書いているプログラム「hogeRepository.js」をrequiteしてしまっていた。つまり、お互いをrequireをしてしまうと、どちらかは空になってしまうようだ。
## 解決方法
そもそもお互いをrequireし合っていたのはミスだったのでそれ直したらなおった。
clearIntervalでLINE botの処理を止める(「obnizとLineBotで防犯ツールを作ってみた」の続き)
# この記事で紹介すること
前回の記事では、
[obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)](https://qiita.com/shima-07/items/e4d6a33c460da77e25ec)
LINEBotから遠隔で「監視開始」指示を出したのはいいが**「監視終了」の指示が出せなかった。**
そのため、永遠に監視をしてセンサーが反応するたび何通も「誰かいるかも?」とメッセージがきていた。本記事では「監視終了」の箇所を紹介します。
# どうすれば止められるか
setInterval()を使っていたので、clearInterval()を使って止めます。[こちらの解説](https://developer.mozilla.org/ja/docs/Web/API/Window/setInterval#example)によるとこういうことらしい。
>setInterval() メソッドは、一定の遅延間隔を置いて関数やコードスニペットを繰り返し呼び出します。これは、インターバルを一意に識別する interval ID を返します。よって