- 1. 楽天のAPIを使ってマスクを買えるBotを作ってみた[LINEBotリッチメニュー]
- 2. 『コピペOK』NodeでS3へ画像アップロード【2020】
- 3. IoT Agency PlatformをHeroku上にデプロイする
- 4. npmパッケージのvulnerability対応フロー
- 5. obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)
- 6. 【node.js】bookshelfとknexを使ってCRUD操作
- 7. Azure QnA Makerを使ってローカルで動くChatBotを作ってみた
- 8. macOS環境構築雑多メモ
- 9. obnizとブザーで兄弟配管工ゲームのコイン音を出してみた
- 10. Serverless Components はオレたちの未来を劇的にスケールさせるか
- 11. Node.js Express で出てくる req, res, next
- 12. 【node.js】validationを新しいバージョンに対応コードに変更する
- 13. brew install nodeで色々詰まった自分用メモ
- 14. AWS LambdaのCustom Runtimeを使い、Node.js v8などEoLとなったランタイムを動かす
- 15. (小ネタ)Node.jsのWebアプリでclusterを使いながら定期的に子プロセスを再起動させる
- 16. DOM, Node, Elementについて
- 17. 常に動くLINEBOTにお引っ越し(now編)(未解決版)
- 18. nowでアプリケーションエラーが出たとき対応したこと
- 19. typescriptを使ってjavascriptのシンタックスシュガーを理解する
- 20. 【knex】this.dialectに関してのエラー解決
楽天のAPIを使ってマスクを買えるBotを作ってみた[LINEBotリッチメニュー]
##はじめに
ProtoOutStudioというイケイケなスクールの「LINE Bot+APIで表現してアウトプット」という課題の次の課題!「(前回を踏まえて)もう出来ている人はブラッシュアップや新しく何かを作ってみる」という課題で製作したものです。
前回の課題[楽天市場のAPIを使って買えるマスクを提案してくれるLINEBotを作ってみた \- Qiita](https://qiita.com/3yaka4/items/87d2b2303267eed12e14)をブラッシュアップしました。##概要
前回できたものは、
LINEBotにほしいもの、「マスク」と入力したら
**楽天市場から「マスク」を検索**して、絞り込み検索で、**購入可能**、**最安価でソート**、**最低金額○円以上**、**最高金額○円以下**の商品を商品画像付きで3商品くらい返してくれるBot
結果として出来上がったものの、楽天の商品名ってSEO対策のせいでやたらと長くてかなりエリアを取る、3つ出したのにとても見比べられず実用性が低かったのでリッチメニューを使って使いやすくしようと思いました。###
『コピペOK』NodeでS3へ画像アップロード【2020】
まずは、[ここ](https://qiita.com/rh_/items/24ed1cebbdc3a731aabb)からs3へのアクセスキーと、シークレットきーを取得してください。
## S3 Bucketを作る
“`
$ npm i –save aws-sdk
“`“`create-bucket.js
const AWS = require(‘aws-sdk’);
// Enter copied or downloaded access ID and secret key here
const ID = ”;
const SECRET = ”;// The name of the bucket that you have created
const BUCKET_NAME = ‘test-bucket’; //同じバケット名は作れない ユニーク必須const s3 = new AWS.S3({
accessKeyId: ID,
secretAccessKey: SECRET
});const params = {
Bucke
IoT Agency PlatformをHeroku上にデプロイする
Sigfoxが提供していたIoT Agency PlatformがGNU Affero General Public Licenseに基づくオープンソースとなりました。ここでは、IoT Agency PlatformをHeroku上にデプロイする方法を説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172313/023e93de-86d8-6276-1a69-41c0c4e319e2.png)IoT Agency Platformは、SigfoxやMQTT、Webhookに対応したIoTデバイスからデータを取得し、グラフや地図形式でダッシュボード化できるアプリケーションです。使い方に関しては、[こちら](https://qiita.com/ghibi/items/91f6880a4820c49cad5d)を参考にしてください。
#全体の流れ
Sigfox IoT Agency PlatformをHeroku上にデプロイする方法は下記の通りの流れとなります。
1. sig
npmパッケージのvulnerability対応フロー
# 概要
– npmプロジェクトで利用しているnpmパッケージ(依存パッケージ)でvulnerability(脆弱性)が見つかったときの対処フローについて記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170905/102c8367-3dff-7ec9-61d6-a55d6ec510ef.png)(GitHub等が親切に”We found potential security vulnerabilities in your dependencies.”のように通知してくれるので便利)
# 対応フロー
ざっくり[全体像](https://speakerd.s3.amazonaws.com/presentations/c5182e63c75e40c09e1371ab5549896e/npm_pj_vulnerabilities_flow_r2.pdf)は以下のとおり。![image.png](https://qiita-image-store.s3.ap-nor
obnizとLineBotで防犯ツールを作ってみた(NO MORE XX 泥棒)
# この記事を見てできること
LINEBOTに「スタート」とメッセージを送ると遠隔操作で監視をしてくれるものが作れます。
異常があったら必要以上にしつこく知らせてくれます。
(処理をストップさせる処理は書いてないです)## obnizの配線
配線はこんな感じ。
![IMG_0140.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/8074d21c-c583-121b-5a1a-fba8e030351a.jpeg)コード内にも書いてありますが、人感センサーは“` {vcc:11, signal:10, gnd:9}“` につなぎます。
## ソースコード
はじめobniz.onconnectをするタイミングでハマって動かなかった。
handleEventよりも先にobniz.onconnectをしておく必要がある。“`line_sensor.js
‘use strict’;// obniz呼び出し
const Obniz = require(‘obniz’);
va
【node.js】bookshelfとknexを使ってCRUD操作
expressを使ったbookshelfの操作方法について書かれております。
#Bookshelfとは
SQLを使わずデータベースを使うことができるORM>Bookshelfは、 Knex SQLクエリビルダー上に構築されたNode.js用のJavaScript ORMです。 Promiseベースのコールバックインターフェイスと従来のコールバックインターフェイスの両方、トランザクションサポート、eager / nested-eagerリレーションのロード、ポリモーフィックな関連付け、1対1、1対多、および多対多のリレーションのサポートを備えています。
PostgreSQL、MySQL、SQLite3で動作するように設計されています。#knexとは
>Bookshelfは、内部で「クエリービルダー」と呼ばれるknexモジュールを利用しています。ですから、インストールの際には、まずknexを入れておく必要があります。良く分からないけど、Bookshelfを使う際にはついてくる物らしい。。。
#モジュールのインストール
“`bash
npm install –save
Azure QnA Makerを使ってローカルで動くChatBotを作ってみた
# 前提
– ローカルにNode.js環境があること(ない人はNode.jsをインストールしておいてください)# 概要
Azure QnA Makerを使ってローカルで動くChatBotを作成し、Emulatorを使って実際にBotと会話することをゴールとしています。
![chatbot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310081/f089cd09-65ff-c3f1-9758-6f3453bb6efc.png)以下の手順でローカルにBotを構築していきます。この回でコーディングは特にしませんが、Botアプリで利用する言語はNode.jsです。
– 1. QnA Maker ServiceとKnowledge baseの構築
– 2. ローカルでBotアプリを構築
– 3. Bot Framework EmulatorをインストールしてBotに接続
– 4. リソースの後片付け(お金がかからないように)下記についてはこの記事で説明しないのでご注意ください。
– Botアプ
macOS環境構築雑多メモ
macの最近の環境構築。winもほぼ変わらないと思うのでURL見つけておこう。
– homebrew
– git
– nodebrew
– npm###インストール内容
**homebrew**“`
$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”…
==> The Xcode Command Line Tools will be installed.Press RETURN to continue or any other key to abort
“`RETURNしてpassword入力
“`
Already up-to-date.
==> Installation successful!
“`**git**
“`
$ brew install git
“`参考にしたサイト
https://qiita.com/micheleno13/items/133aee005ae
obnizとブザーで兄弟配管工ゲームのコイン音を出してみた
#作ろうと思ったきっかけ
– ProtoOutoStudio 3回目授業でobnizに触れる
– ブザーが面白かった兄弟配管工ゲームでは、ブロックを叩くとコインが出てきますよね。その時の効果音を再現してみようと思いました。
#”あの”効果音の音階を調べてみた
[コインの音](https://muuu.jp/koneta/sm-coin/)
が、楽譜が読めないぞ….。オクターブもよく分からん….。
よし、トライ&エラーか???(音痴です)#まずはベースとなる”ド”を鳴らす
”ド”の音が何Hzか調べました。今回は[こちら](https://general-knowledge.xyz/frequency-and-scale/)のサイトを参考に周波数を設定していきます。
【鳴らしてみた様子】
obnizにブザーをつけてみた。まずはドの音を実装!Serverless Components はオレたちの未来を劇的にスケールさせるか
![](https://camo.githubusercontent.com/db47fe1b099d427f1b040294fbe0f7102ca4a7ab/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f7075626c69632e6173736574732e7365727665726c6573732e636f6d2f696d616765732f726561646d655f7365727665726c6573735f636f6d706f6e656e74732e676966)
Serverless.inc 社より、[Serverless Components](https://github.com/serverless/components) がついに GA されました。
近年のアプリケーション開発では、いくつかの SaaS を組み合わせることで超高速に開発を行うことができます。例えば「認証は Auth0、ホスティングは Netlify、バックエンド API は AWS Lambda を使用する」といった具合です。このように複数
Node.js Express で出てくる req, res, next
#はじめに
Node.jsのExpressの雛形を生成するコマンド“`shell
express project-name
“`
で出力されるコードの一部ですが“`javascript:index.js
var express = require(‘express’);
var router = express.Router();router.get(‘/’, function(req, res, next) {
res.render(‘index’, { title: ‘Express’, user: req.user });
});
“`この`req`, `res`, `next`は何なのか書いていこうと思います。
#reqについて
`req`は`app.get`の第一引数で指定されたパスに入ってきたHTTPリクエストを表すオブジェクトです。“`javascript
var express = require(‘express’);
var app = express();
app.get(‘/’, func);
function func(
【node.js】validationを新しいバージョンに対応コードに変更する
##解決したい問題
パッケージvalidationのバージョンが古いので新しいバージョンの書き方に変更したい。##環境
OS: macOS
express: ^4.17.1
ejs: ^2.6.2
express-validator: ^6.4.0##変更前のコード(古いコード)
“`javascript
router.post(‘/’, (req, res, next) => {
var request = req;
var response = res;
req.check(‘name’, ‘NAMEは必ず入力して下さい。’).notEmpty();
req.check(‘password’, ‘PASSWORDは必ず入力して下さい。’).notEmpty();
req.getValidationResult().then((result) => {
if (!result.isEmpty()) {
var content = ‘‘;
brew install nodeで色々詰まった自分用メモ
####前提
https://qiita.com/okohs/items/ced3c3de30af1035242d
この記事を読んで“`
brew install node
“`
としたがエラーに出会った。そこで、
にしたがって“`
brew doctor
“`
のところまで行き、問題が生じたので一つ一つ解決したあと、“`
brew install node
“`をしたらまたエラーが出た。
今度はbrew linkできないよ〜というエラーだった。
そこで、エラーメッセージに素直にしたがって解決しようとした。
僕が選んだ選択肢は“`
brew link –overwrite node
“`こうしたら、とあるファイルに権限がないからエラーになった。
というわけで、
を参考にしてエラーを1つ1つ解決することになった。その時のコマンドとエラーと解
AWS LambdaのCustom Runtimeを使い、Node.js v8などEoLとなったランタイムを動かす
# はじめに
Node.js、バージョンアップの足がかなり早いですよね。
AWS Lambdaにおけるランタイムサポート期間も、これにあわせてハイテンポになっています。ちゃんとバージョンアップをしろというご意見は重々承知の上ではありますが、
Node.js v8.10でLambda Functionを使い続けざるを得ない場合に、カスタムランタイムを使ってEoLとなったランタイムを動かし延命処置を図ります。## 動作確認環境
* Arch Linux (2020.04.04)
* Docker 19.03.8-ce
* aws-cli 1.18.36# カスタムランタイムの使い方
カスタムランタイムの仕様については、[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html)が詳しいので割愛します。
カスタムランタイムを使用するには、デプロイパッケージあるいはLayerに、`node`実行ファイルと、ハンドラー関数を起動するための`bootstrap`実行ファイル
(小ネタ)Node.jsのWebアプリでclusterを使いながら定期的に子プロセスを再起動させる
Node.jsでサーバサイドWebアプリを開発中、なぜかメモリリークがあるライブラリに遭遇してしまったので、ワークアラウンドとして、定期的にプロセスを再起動させて、メモリリークの問題を緩和したいと思いました。
– コード: https://github.com/knjname/2020-04-05_restartClusterChild
– 参考: https://nodejs.org/api/cluster.html## サーバサイド
http://0.0.0.0:10080 をリスンするプロセスが4つ立ち上がり、5秒未満で子プロセスを停止させ、その後に再起動します。(実用上は、もっと長い時間でプロセスを殺すべきです。)
“`javascript:src/index.js
const cluster = require(“cluster”);
const http = require(“http”);const sleep = time => new Promise(done => setTimeout(done, time));
const clusterCoun
DOM, Node, Elementについて
備忘録です。
間違いなどございましたらご指摘ください。##DOMとは
HTMLとXMLドキュメントへのAPI
(わかりやすくいうと、プログラムからHTMLやXMLを自由に操作するための仕組み、インターフェイス)JavaScriptからHTMLに要素を追加したり、ボタンクリック時のイベントを登録したり、スタイルや属性を追加したり、要素のサイズや位置を追加したり、こういったものはすべてDOMのAPIを使うことで操作できる。
**DOMツリー**
DOMはHTMLドキュメントを『オブジェクトのツリー』として扱っている。これを『DOMツリー』という。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/500259/da0e5aba-9084-f7cc-9069-abde1f062d5b.png)
##Nodeとは
ノードとは各要素(HTMLではエレメントやタグという)自体のことを表す。(つまり、上の図のひとつひとつのボックスがNode)特定のノードを基準としたときに、その上にあるノ
常に動くLINEBOTにお引っ越し(now編)(未解決版)
前回つまって諦めたnowに再挑戦した記録。
ngrokで作った時の記事:
[WikipediaのAPIを使ってLINEbotに調べてもらう](https://qiita.com/shima-07/items/2322598ca5a40cfee47b)# はじめに
前回同様、課題感とテーマとしては「ngrokだと使いたいときに使えない!だから常時使えるようにしたい!」です。目次としては、
* now でだいぶハマる
* さらに now にハマる
* 対応したことです。
# nowでだいぶハマる
nowを正しく動かすところでまずハマりました。
いくつかハマった気がして、だいたいはいじったりnow自体を消してやり直したりしたらできた印象だが、うっかりでハマったのがこの記事参照。
https://qiita.com/shima-07/items/64c051c9982ac0899b21# さらにnowにハマる
無事、ngrokを卒業して、nowを使ってLINE botができました。
が、、
なんか挙動がおかしい。ソースコードはngrokの時と何も変えてないのに。
nowでアプリケーションエラーが出たとき対応したこと
nowでハマったメモ
# 状況
@n0bisuke の[この記事](https://qiita.com/n0bisuke/items/ceaa09ef8898bee8369d#4-now%E3%81%A7%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)を参考にやっていたつもりがこんなエラーと遭遇。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121887/a6e72e13-01a8-76ff-1938-0a3c0d247f45.png)
> An error occurred with this application.
> This is an error with the application itself, not the platform.「nowは問題ないよ。お前のアプリケーション(ソースコード)が問題なんだよ。」とのこと。
# 対応
このnow.json内で指定しているjsファイルの一部を直したら直った。
(記事の例でいくと、se
typescriptを使ってjavascriptのシンタックスシュガーを理解する
# 背景
typescriptを勉強していて、アロー演算子構文の読み方がわからない。ドキュメントを読んでもよくわからなかった、ということがありました。
そんな時、tscコマンドを使うことで難解なシンタックスシュガーへの理解のヒントになることに気が付きました。
それについて紹介します。https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions
たとえば下記アロー演算子の構文がわかりませんでした。
`[‘bbbbb’, ‘3’].map(({ length }) => length)`
仮引数に `{}` 使とは、、、?みたいな感じです。
出力内容から見ると、`length`プロパティを返していることを察することができましたが、いまいち腑に落ちませんでした。# tscコマンドの出番です
typescriptをjavascritに変更するコマンドが`tsc`です。“`arrow.ts
[‘bbbbb’, ‘3’].map(({ length }) => l
【knex】this.dialectに関してのエラー解決
##エラー文
Using ‘this.dialect’ to identify the client is deprecated and support for it will be removed in the future. Please use configuration option ‘client’ instead.##解決法
“`javascript
var knex = require(‘knex’)({
dialect: ‘mysql’,
connection: {
host: ‘localhost’,
user: ‘root’,
password: ‘(パスワード)’,
database: ‘(データベース名)’,
charset: ‘utf-8’
}
});
“`上の文の、dialectをclientに変更する。