- 1. #javascript の some / every の挙動を #node で確認する
- 2. 【JavaScript】非同期処理とはなんぞや
- 3. swagger-codegenでnode.jsのモックサーバー作成
- 4. Pre-Signed URLでS3に直接ファイルをアップロードする
- 5. Pixabay APIでフリー素材の画像を取得しLINE botで送信する
- 6. 在宅ワーク中に会議中だよサインをobnizとLINEBotで作ってみた
- 7. Node.jsのバージョン管理システム「nodebrew」を使ってNode.jsをインストールする手順
- 8. Express Validatorを使ってみる(API変更後)
- 9. Node.jsのLambdaでPre-Signed URLを発行する
- 10. rails serverでサーバーを起動しようとしたら、Webpacker configuration file not foundエラーが発生した時の対処方法
- 11. gRPC 公式サンプルを Node.js + TypeScript on Windows (+ PowerShell) 化する
- 12. LambdaのオーソライザーでBASIC認証を追加する【言語不問】
- 13. Twilio Functionsを使って営業時間内だけ電話を転送する方法
- 14. [Node.js]requireで、確実にあるのに中身が空になってしまう(エラーは出ない)
- 15. clearIntervalでLINE botの処理を止める(「obnizとLineBotで防犯ツールを作ってみた」の続き)
- 16. NuxtでTrianglifyを使う
- 17. 【Node.js】複数のファイルパスをオブジェクトでの階層表現に変換する
- 18. dotenvで環境変数ではなく .env 使う | Node.js
- 19. Node.js: child_process.fork()で起動したプロセスを子子孫孫殺す方法
- 20. 【ReactNative+Typescript】ローカルDBでRealmを使う
#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で作ってみた
### はじめに
こちらはProtoOutStudioというイケイケなスクールの「LINE Bot+IoTで表現してアウトプット」という課題で製作したものです。
obnizとLINEBotを組み合わせて何か作ろう!というものです。
### 概要と作れなかったところ
新型コロナウィルスのせいで在宅ワークになったため、仕事中の家族との距離が難しい。
特にうちは猫が3匹もいるので、ニャンコちゃん達が騒ぎ始めたらどちらの部屋に引き取る?とか、
ご飯何時にする?
などなど、いちいちメッセージを送らずに部屋越しに会話することがよくあるのですが、実は「今オンラインミーティング中!!!!ノックしないでー、開けないでー」みたいなことがあって気まずい思いをしたりして、何かトイレの空き情報みたいなサイネージが欲しくて作りました。
[obniz S
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
Dlo
Express 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 s3 = new AWS.S3()
const params = {
Bucket: ‘<バケット名>‘,
Key: ‘<ファイルパス>‘,
Expires: 100 // 期限(秒)
}async function getPresignedUrl(){
re
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 を返します。よって
NuxtでTrianglifyを使う
# 概要
Nuxt(とvuetify)で作成しているページの背景にTrianglifyを利用しようとしたところ、ドキュメントが見つかりませんでした。
なんとか実装できたため、メモとして残しておきます。# Trianglify
Trianglifyとは美しいポリゴンっぽい画像を生成してくれるライブラリです。
CDNとnpm両方で提供されています。
http://qrohlf.com/trianglify/# CDN
CDNから呼び出す際は`nuxt.config.js`の`head`に書き込みます。
“`nuxt.config.js
head: {
script: [{ src: ‘https://cdnjs.cloudfl
【Node.js】複数のファイルパスをオブジェクトでの階層表現に変換する
# 経緯
Node.jsのfsを使って特定のディレクトリの中身をファイルパスにて取得した際に、ディレクトリの階層と互換性のあるオブジェクトに変換したかった。# 結論
“`index.js
const data = [
‘/public/aaa/1.file’,
‘/public/aaa/2.file’,
‘/public/bbb/1.file’,
‘/public/ccc/1.file’,
‘/public/ccc/2.file’,
‘/public/ccc/3.file’,
‘/public/ddd/1.file’
];const output = {};
let current;for (const path of data) {
current = output;
for (const segment of path.split(‘/’)) {
if (segment !== ”) {
if (!(segment in current)) {
cur
dotenvで環境変数ではなく .env 使う | Node.js
“`
$ npm install dotenv –save
“`プロジェクトのルートディレクトリに `.env` ファイルを作成します。
“`.env
# これはコメント行
KEY1=VALUE1
KEY2=VALUE2
“`## 実装
“`js
require(‘dotenv’).config();
if (typeof process.env.KEY1 == ‘undefined’) {
console.error(‘Error: “KEY1” is not set.’);
process.exit(1);
}console.log(process.env.KEY1); //=> VALUE1
“`
Node.js: child_process.fork()で起動したプロセスを子子孫孫殺す方法
本稿では、Node.jsにて、子プロセス、そこから派生した孫プロセス、さらにそこから派生したひ孫プロセス……を、一括して終了する方法を説明します。
※説明にあたって、実行環境はUNIX/Linuxを前提にしています。
## 子プロセスを殺しても、孫プロセスは死なない
Node.jsの[child_process.fork()]は、子プロセスを起動できて便利です。子プロセスの中で、`fork()`を使って、孫プロセスを起動することもでき、さらに、孫プロセスで`fork()`して、ひ孫プロセスを、といった具合に子プロセスはネストして起動することができます。
[child_process.fork()]: https://nodejs.org/api/child_process.html#child_process_child_process_fork_modulepath_args_options
起動した子プロセスは[subprocess.kill()]で終了することができます。しかし、これは直接の子プロセスしか殺すことができません。どういうことかというと、
1. oya
【ReactNative+Typescript】ローカルDBでRealmを使う
# 概要
`ReactNative`と`Typescript`のプロジェクトにローカルDBとして`Realm`をインストール・使用する際のメモ。
環境は以下の通り。– node @10.15.0
– react-native @0.61.5
– typescript @3.5.3# インストール
`node`のバージョンが`10.X`系にする必要がある。
“`
install –save realm
“`※`react-native`のバージョンが`0.59`以下の場合は要`link`
## iOSの場合
要`CocoaPods`“`
cd ios
pod install
“`# 実装
“`javascript
import Realm from ‘realm’// スキーマ名
const HOGE_SCHEMA_NAME : string = ‘HOGE’;// スキーマ定義
const HOGE_SCHEMA : Realm.ObjectSchema = {
// スキーマ名
name : HOGE_SCHEMA_NA