Node.js関連のことを調べてみた2019年12月16日

Node.js関連のことを調べてみた2019年12月16日

LINE Messaging APIのテンプレートメッセージでチャットBOTを作る

この記事は室蘭工業大学データサイエンス研究室の [DSL Advent Calendar 2019](https://qiita.com/advent-calendar/2019/muroran-it-dsl) 16日目の記事です。M1の @romorimori が担当します。
#はじめに
LINEが提供している[Messaging API](https://developers.line.biz/ja/services/messaging-api/)には様々なメッセージタイプのテンプレートが用意されていて、個人でも簡単にチャットBOTを作ることができます。

この記事では確認テンプレートやポストバックアクションなどの機能を使って、晩ご飯をレコメンドしてくれるチャットBOTを作っていきます。

##完成品
image.pngDocker composeでstrapi+PostgreSQL開発環境を作る

理想の形になっていないのでそのうちブラッシュアップする…

## フォルダ・ファイル構成

“`
.
├── app //空フォルダ
├── db
│   └── pgsql-data //空フォルダ
└── docker-compose.yml
“`

## docker-compose.ymlを用意

2019年12月時点では下記が入ります。
Node.js : v13.2.0
PostgreSQL : psql (PostgreSQL) 10.11

“`yaml:docker-compose.yml
version: ‘3’
services:
postgres:
image: postgres:10-alpine
container_name: “test-postgres-db”
ports:
– 5432:5432
environment:
POSTGRES_PASSWORD: secret
volumes:
– ./db/pgsql-data:/var/lib/postgresql/d

元記事を表示

Node.jsとSocket.ioで簡易的なチャットを実現させる

# 簡易的なWebチャットを実装する
## はじめに
この記事は[SLP KBIT Advent Calender 2019](https://adventar.org/calendars/4214)の16日目の記事である。
Socket.ioを用いた開発をまだやったことがなかったので今回はそういった開発を行っていきたいと思います。
かなり前に作ったので実装過程をちょっと忘れてしまいました…。

##環境
・Windows 10(64bit)
・Node.js : v10.15.3

##準備
この開発ではNode.js、Socket.ioの他に、ローカルサーバーを簡単に立ち上げれるExpressを使うのでもしインストールしていない人は以下のコマンドでインストールしてみましょう。

“`
$ npm install express
“`

#実装
##サーバをたてる準備

“`js:create.js
var express = require(‘express’);//expressを使用
var app = express();
var http = require(‘htt

元記事を表示

フロントエンジニアにおくるstrapiことはじめ[2019/12版]

## Strapi
[strapi](https://strapi.io/)はNode.js製のオープンソースHeadlessCMSです。3.0.0-alphaからbetaになったことで、導入手順などが変わったようなので、現時点での最新版の導入方法のメモになります。

[公式のクイックスタートガイド](https://strapi.io/documentation/3.0.0-beta.x/getting-started/quick-start.html)

## 下準備
– Node.js
– データベース(文中ではPostgresQL)

ちなみに下記環境で書いています。
– macOS Catalina 10.15.1
– Chrome バージョン: 79.0.3945.79

strapi公式の求める3.0.0-beta時点での各種バージョン

“`
# Node.js
Node.js >= 10.x
NPM >= 6.x

# Database
MongoDB >= 3.6
MySQL >= 5.6
MariaDB >= 10.1
PostgreSQL >= 10
SQLi

元記事を表示

SlackのWebhookをプロキシする仕組みを作る

Slackはさまざまなカスタマイズ機能を持っているのが魅力のツールです。例えばBotを作ったり、カスタムのslash commandを作ったりすることで、プラットフォームの拡張ができます。

Slack Botの作り方はいくつかあるのですが、Slackのリッチな機能を最大限に引き出すには、SlackからのWebhookを受けることが必要になってきます。すなわち、ボタンなどが付いたリッチなメッセージの投稿は難しくないのですが、投稿したメッセージのボタンやメニュー操作は、SlackからWebhookの形で通知される仕組みになっています。

※ この辺りの仕組みの詳細については、まとまっている記事がいくつもあるので省略します。

– [Slack Botの種類と大まかな作り方](https://qiita.com/namutaka/items/233a83100c94af033575)
– [slackで単純なボタン付きメッセージを送る](https://qiita.com/masakabe/items/c47fc98e939475594842)

Slackは当然publicなサービスなの

元記事を表示

Next.jsでcookieをシンプルに扱うことができるライブラリ nookies を紹介

# Next.jsでcookieを扱うのは大変
Next.jsなどのサーバーサイドレンダリング(以下SSR)をしているフレームワークでcookieを扱うのは面倒くさいですよね。
その理由の一つとして、同じコードでもSSRの場合とクライアントでレンダリングしている場合で挙動が違うということがあります。
例をお見せしましょう

#### クライアントでレンダリングしている場合
`console.log(document.cookie); // accessToken=test1234;`

#### SSRの場合
`console.log(document.cookie); // ReferenceError: document is not defined`

### 原因
クライアントサイド(ブラウザ)でレンダリングしている時は、ブラウザに保存されているcookieにアクセスできるが,
SSRの時はブラウザに保存されているcookieにアクセスできません。

### SSRの時にcookieを扱うには
SSRでcookieの情報はここに入っています

“`index.tsx
cons

元記事を表示

create-react-appで作ったアプリがhttpsだと動かない

# 問題点
create-react-appで作成したアプリケーションにhttpsでアクセスすると、以下のようにエラーとなりました。
`SecurityError: Failed to construct ‘WebSocket’: An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.`
![d1fb5456080f4fbb895c367aae298593.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114715/999ad720-7d4a-0fa2-9caf-5c28f6c2afeb.jpeg)
httpだと問題なく動きます。
create-react-appで作ったアプリを試しにHerokuに上げてみたときに、この問題を踏みました。
# 原因
以下でIssuesが上がっていました。
https://github.com/facebook/create-react-app/issues

元記事を表示

Go、Node.jsのプログラム間でRPC通信をする

#概要
`gRPC`を使用して、Go、Node.jsのプログラム間でRPC通信をします。
クライアント側をGo、サーバ側をNode.jsが担当します。

環境
MacOS Catalina: 10.15.1
Go: 1.13.4
Node.js: 10.15.3

#クライアント(Go)の作成
クライアント側のディレクトリを作成します。

“`
$ mkdir grpc-test-go
“`
クライアント側のディレクトリ構成は最終的に以下のようになります。

“`
$ cd grpc-test-go
$ tree
.
├── bridge
│   ├── bridge.pb.go
│   ├── bridge.proto
│   └── go.mod
├── client.go
└── go.mod
“`
###.protoファイルの作成

protoファイルを作成して、仕様を定義します。
型に`repeated`をつけると配列になります。
[公式ページ](https://developers.google.com/protocol-buffers/docs/proto3)を参

元記事を表示

TwilioのAuthyの2FA(電話番号認証)機能をnode.jsから使う

呼び出し方は本家のAPI使う方法や[先人のnpmパッケージ](https://www.npmjs.com/package/authy)使う方法とかあるが、今回は先人のnpmパッケージを利用してみる。

>ちなみにTwilioでは2つの電話番号認証機能があり、どちらを使うかはケースバーケースのようです。

## Authy API

Authyが提供するAPIはSMS送信以外での2FAに対応していますが、今回はSMS送信による認証を試してみます。

## 準備

### Twilioに登録

Twilioに登録して利用できるようにしておく。無料枠もあるがすぐに消費してしまいます・・・。

### Authyのプロジェクト作成とAPIの取得

左メニューからAuthyを選択肢、新規プロジェクトを作成、設定にてPRODUCTION API KEYを取得します。

## APIの機能(利用の流れ)

利用方法は簡単で、主な利用APIは下記の2つ。

* verification_start()でSMS経由でCode送信
* verification_check()でCode検証

あとは、

元記事を表示

lambdaのNode.jsバージョンを上げるときはログのフォーマット変更にも注意

# バージョンでログ出力が違うから注意

2019年末にlambdaのNode.js 8.10がEOLを迎えます。
ログ出力の部分で微妙に動作が違うので念の為確認してからバージョンアップしましょう。
特にログ出力をライブラリで行っている場合、そちらの実装がどうなっているか見ておいた方が良いです。
kibanaとかでパースするロジックに変更が必要になるかも。

## Node.js 8.10

### 関数コード

“`
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
// デフォルトのテンプレートにconsole.log入れただけ
console.log(`”This is Node.js 8.10 log.”`);
return response;
};
“`

### Exe

元記事を表示

Temporal dead zoneと死の秘宝

ChromeやNodeJSのJavascriptコンソール画面で動作確認する場合、
以下の様に間違ってエラーになってしまうことがあります。

“`js
const obj = JSON.parse(“”); // JSON形式じゃない文字列を指定
// Uncaught SyntaxError: Unexpected end of JSON input
“`

JSON形式の文字列で指定するところに空文字を指定した場合ですが、“Uncaught SyntaxError“となってしまいます。

じゃあ間違えたのだからと訂正して再度実行すると

“`js
const obj = JSON.parse(“[]”); // JSON形式の文字列を指定
// Uncaught SyntaxError: Identifier ‘obj’ has already been declared
“`
既に宣言済みなのでエラーとなります。

それでは、既に宣言済みなら変数が存在するのだと思って参照してみると

“`js
console.log(obj);
// Uncaught Re

元記事を表示

金曜の夜になったら会社の Slack 通知を自動でミュートしたい

# はじめに
「休日は会社の Slack をミュートしておきたい!」という要望は普通にあると思うのですが、
2019年12月15日現在、**Slackには特定の曜日に自動で「おやすみモード」にする機能はありません。**

そこで色々と試してみたのですが [Zapier](https://zapier.com)(または [IFTTT](https://ifttt.com/))で [Slack API](https://api.slack.com) を叩く方法が無料かつ最も簡単にできたので、
本記事ではその手順を解説していきます。

# 手順

まず大まかにやることをまとめると、

– Slack 側で API を利用できるよう設定する
– IFTTT / Zapier 側で「時刻が金曜の21時であるとき」「Webhook / JavaScriptから API を叩く」アプレットを作る

の2つです。

### Slack側の設定

Slack 側では Web API の利用を許可し OAuth トークンを取得する必要があります。

そのためには Slack App を作成しなくてはならな

元記事を表示

Node.jsからSendGridを使ってメールを送る

久しぶりにSendGridを使ってみたのでメモ。

## SendGridの注意点

* ユーザ名はメールアドレスではなく、代理店である構造計画研究所から独自に振られたxxx@kke.comというやつ

>久しぶりですっかりID忘れてました。

## 準備

### API KEYの取得

利用するにはAPI KEYが必要です。到達率を上げるためにはドメイン認証やらいろいろやったほうがいい。
API KEYはSettingsの中にある。

![スクリーンショット 2019-12-15 14.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55188/fdff7b9a-05f1-fa44-0642-111a32d43109.png “スクリーンショット 2019-12-15 14.58.57.png”)

### 作業場の準備

“`
mkdir sendmail
cd sendmail
touch index.js

npm init -f

npm install –save @s

元記事を表示

reveal.jsの環境構築で躓いた話(windows 10)

# はじめに
最近、私の所属しているサークルでLT会をやっていこうという流れがあったので、Markdownからスライドを作れる「reveal.js」について紹介しました。
そのためにreveal.jsをセットアップしようとしたのですが、公式ドキュメントでは3行だったのが1時間以上かかってしまったので、その備忘録です。

## Markdownとは
markdownは簡単な記法で記事などの文章を構成出来るマークアップ言語です。
qiitaやはてなブログなどで記事を上げている諸兄には馴染み深いものかもしれません。

### 記述例:
“`
# 見出し1
## 見出し2
— 線
**強調**
“`
### 実行例:
# 見出し1
## 見出し2

**強調**

## reveal.jsとは
かっこいいスライドを簡単に作れるフレームワークです。
htmlに書き込んで作りますが、ちょちょっと設定すると、Markdownを書くだけでそれがスライドになります。
パワーポイントをマウスクリックしながら無限に時間を溶かすことも、揃ってないデザインを先輩に怒られることもなくなります。

元記事を表示

続・実録 Node-REDノード作成 24時

こんにちは、ポキオです。

[IoTLT Advent Calendar 2019](https://qiita.com/advent-calendar/2019/iotlt)と[enebular Advent Calendar 2019](https://qiita.com/advent-calendar/2019/enebular)の15日目の記事です。
~~手抜きです、ごめんなさい。~~

![ポキオ Node-RED ノード作成](https://lh3.googleusercontent.com/ErN3bJigHpElEQ0-tnk_k8az9XIHRdR9Px3nJQtUuFvu37sn5TPTy7sWekD2Y4nF237SV0m6sk4exQjKquAtBqp2XLLjY1SKxZrI9VGXTY8IFydWAv6_kDZOFEtBkMmyCG5rf739ypg=s600 “ポキオ Node-RED ノード作成”)

## tl;dr

– 京急ノードを作ってみました
– Node-REDのノードライブラリに反映されるまで時間がかかることがあります
– 一度公

元記事を表示

Slackで匿名で投稿できるチャンネルを作ろうとしたら少しだけ苦労した話

# はじめに
研究室でSlackを導入してから2年くらい経ちました。
話題でチャンネルを分けれるので非常に便利です。

雑談用のチャンネルもあるのですが、特定の人ばかり話していて盛り上がりに欠けます。
「匿名ならみんな発言してくれるかも」と思ったのがきっかけで、匿名用のチャンネルを作りました。

Googleで検索したら3年前のQiitaの以下の記事がヒットしました。
[「超簡単にSlackで匿名の意見を投稿できるようにする」 @shibukk](https://qiita.com/shibukk/items/8675e7684dba0476906c)

**「超簡単」**とありますが、記事通りにやっても上手くいかず、少しだけ苦労しました。
BotKitのバージョンが上がって中身が変わっていたのが原因でした。

修正した部分を自分の備忘録としてまとめておきます。

実行環境はUbuntu16.04。
node.js, javascriptが動けばどこでも大丈夫なはずです。

# SlackのBotの取得
ここは本家と一緒です。
[「Botを追加する」](https://qiita.c

元記事を表示

Vue.jsのコンポーネントのimport文をdynamic importに変換するcliコマンドを作りました

Vue.jsのコンポーネントのimportをdynamic importに変換するcliコマンドを作りました。
特定のディレクトリ配下のvueファイルを全てdynamic importに変換します。

ソースはこちらで公開しています。
https://github.com/harhogefoo/dynamic-import-converter

“`vuejs:通常のcomponentのimport文


“`

“`vuejs:dynamic_importに変換