- 1. Puppeteerを使って簡単にWebスクレイピングする
- 2. obnizのBLEでペリフェラルを探す
- 3. npmのsaveとsave-devの使い分け
- 4. 【Express + Postgres】非同期とかトランザクションとか考慮したDB接続
- 5. Pulumi SDKとGoogle Cloud SDKを組み合わせてみる
- 6. Node.js 13.2.0 で–experimental-modulesが外れたのでESMを試す
- 7. nodebrewのセットアップ&操作方法(Mac)
- 8. Aurora Serverless DB を作って Node.js(TS) から使う
- 9. Aurora Data API を TypeScript + typeorm から 使う物語
- 10. せっかくTypescriptなんだからJSONを自動でvalidationしよう(ajv+typescript-json-schema)
- 11. C#でJWTを発行して、Node.jsで検証する簡単なお仕事です
- 12. BlankAndroidTV向けアプリをReactNativeで起動するまで
- 13. TypeScript の Decorator Hell を解消する
- 14. Node.jsのバージョンを上げた際のnode-sassのビルドエラー
- 15. 新入社員に適当にNode.jsのアプリ入門教えたら意外とウケたのでメモ
- 16. grpc_tools から生成した gRPC クライアントを promisify してみた。
- 17. Lambda + API GatewayでGithub上のアクションを検知してGithubに対してアクションする
- 18. Vue + Expressのテンプレート作成メモ
- 19. Node.js boilerplate / Authentication from scratch – (express, graphql, mongodb)
- 20. npmのパッケージグローバルインストールは憲法違反です。
Puppeteerを使って簡単にWebスクレイピングする
世の中には様々なWebスクレイピングツールがありますが、その中でも今回はPuppeteerという、Googleが管理しているOSSを使用しました。
https://github.com/puppeteer/puppeteer# Puppeteer
**Puppteer(パペッティア)**は、Google Chromeの機能を引き継いで開発されているChromiumと呼ばれるブラウザを自動操作することができるNode.jsのAPIです。
Puppeteerではブラウザを表示することなくバッググラウンドで操作することができる”ヘッドレスモード”を使うことができるため、高速かつメモリを節約した自動操作をすることができます。
(もちろんオプションでブラウザを表示することもできるため、デバッグも簡単です。)さらに、手動でできるようなユーザの操作(例えば文字の入力やクリックなどのマウス操作や、キーボードを用いた他の操作など)のほとんどを行うことができるため、SPAやSSRなどのWebページでも、簡単に操作することができます。
# この記事で紹介すること
– Puppeteerを用いた簡
obnizのBLEでペリフェラルを探す
# obnizのBLEでペリフェラルを探す
BLEとはBluetooth Low Engeryの略で、Bluetoothの一種です。
こんな特徴を持っています– 省電力
– ペアリングなしの接続モードがある
– GATTというプロファイルが基本で、データベースのように相手を扱う
– 1つの親に対して複数の子を接続できる
– スマートフォンなどでかなり普及していて、多くのスマートフォンから利用できる。obnizにもBLEの機能があります。
これを利用することで同じようにBLEを利用する照明とかスマートウォッチにつないで値を取り出したり、逆にスマホから繋がれるなんてことが可能です。## セントラルとペリフェラル
BLEでは1対多の通信となっていて、親が1存在します。その親をセントラル、子をペリフェラルと呼びます。
## 初期化
BLEを使用するときは最初に初期化をする必要があります。
初期化はこちらのようにやります。“`javascript
await obniz.ble.initWait();
“`## スキャン
BLEのペリフェラルはadvert
npmのsaveとsave-devの使い分け
#なぜsaveとsave-devを書くのか
たいていパッケージというものはそのパッケージ自身単体で完結するものではなく、複数のパッケージが組み合わさって成り立っている。このような状態のことを依存関係といい、これら依存関係を満たすようにインストールするように指定するコマンドが`save`と`save-dev`である。どう使い分けるかは次の通りだ。# save-devにいれるもの
save-devはフォーマッターやビルドツールなど
・構文チェックに使うもの eslint
・フォーマッターなど prettier# saveにいれるもの
・save-dev以外のものすべて#npmコマンド aliasおすすめ設定
“`terminal:aliasおすすめ設定
alias npmi=’sudo npm install’
alias npmis=’npmi –save’
alias npmid=’npmi –save-dev’
“`
【Express + Postgres】非同期とかトランザクションとか考慮したDB接続
# はじめに
以前にも似たような記事(※)を書いたが、より汎用性のありそうなコードを書く機会があったので、本記事にまとめておく。
おそらく、非同期とかトランザクションとかも考慮しているコードになっているはず…※[【Node.js+Express+PostgreSQL】ExpressにPostgreSQLを導入](https://qiita.com/c6tower/items/c6fc18e14229dbf2f53a)
## 環境
* node 10.15
* express 4.17
* pg 7.12## サンプルコード
“`:command
npm install –save pg
“`“`js:index.js
const express = require(“express”);
const pg = require(“pg”);
const app = express();
const port = 3000;app.listen(port, () => {
console.log(`Start server port: ${port}`);
Pulumi SDKとGoogle Cloud SDKを組み合わせてみる
この記事は NTTコミュニケーションズ [Advent Calendar 2019](https://qiita.com/advent-calendar/2019/nttcom) の20日目です。
昨日は @kirikei さんの [Googleのデータ可視化&モデル分析ツール What-if Toolで覗いてみるTitanic生存者予測](https://qiita.com/kirikei/items/2a4ef062fadd4a93203a) でした。# はじめに
入社6年目、主にインフラエンジニアな仕事をしています。
今回は、最近盛り上がりつつある[Pulumi](https://www.pulumi.com/)という Infrastructure as Code(IaC)のツールの簡単な説明と、プログラミング言語でIaCができるというPulumiの特性を生かした利用方法について、紹介したいと思います。# Pulumiとは
本家HPの[Architecture & Concepts](https://www.pulumi.com/docs/intro/concepts/)
Node.js 13.2.0 で–experimental-modulesが外れたのでESMを試す
## はじめに
Node.js 13.2.0 で`–experimental-modules`が外れた。
晴れて Node.js の世界でも Ecmascript 標準のモジュール管理を標準で使える!
と思って使ってみた。
というわけで本稿は所謂”やってみた系”の話である。
デフォルトESMにして嬉しいケースは「ソース=配布物なライブラリ開発」の時に限られるが※1、tscでコンパイルする環境でも”module”:”esnext”でどこまで頑張れるかやってみた。
※1: TypeScriptやbabelのようなトランスパイラやwebpackのようなバンドラによって出力結果は環境に応じて変更するのが一般的なので
※本稿では、{…}のような記法を使っている場合、中身が省略されていることを示す(スプレッド演算子は使っていない)
※今回のやってみたの趣旨は、「”target”:”esnext”でtscコンパイルしたファイルをオプション指定無しでNode.jsで実行し、なんとか動かすところまでを目指すこと」である。その目的とバッティングするESLintのエラーやTypeScr
nodebrewのセットアップ&操作方法(Mac)
## 「nodebrew」とは?
Node.jsのバージョンを管理するツールです。
rbenvやpyenvのNode.js版と考えるとわかりやすいです。## 環境
– OS:macOS Mojave 10.14.6
– nodebrew:1.0.1## セットアップ
### nodebrewのインストール
Homebrewからインストールします。
“`shell-session
$ brew install nodebrew
“``~/.bash_profile` に以下を追記し、パスを通します。
“`bash:.bash_profile
export NODEBREW_DIR=”${HOME}/.nodebrew”
if [ -d “${NODEBREW_DIR}” ]; then
export PATH=$PATH:$NODEBREW_DIR/current/bin
fi
“``~/.bash_profile` をリフレッシュし、 `~/.nodebrew/src` フォルダを作成します。
“`shell-session
$ source
Aurora Serverless DB を作って Node.js(TS) から使う
## 概要
Aurora Serverless DB を作成して、
Node.js (TypeScript) からアクセスしてみます。## 実行時の環境 2019/12/04
– MacOS 10.14.4
– node v10.15.0
– npm 6.6.0
– ts-node v8.5.4
– aws-sdk 2.584.0## DB の作成
[Data API 公式ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/data-api.html)を見ると、
現在、Data API が有効なリージョンは限られているらしいので注意
[東京リージョンでつくる。](https://ap-northeast-1.console.aws.amazon.com/rds/home?region=ap-northeast-1#launch-dbinstance:gdb=false)– DB 作成方法
| 項目 | 値 |
| ——
Aurora Data API を TypeScript + typeorm から 使う物語
# 概要
Rest API を経由してツイッターのリツイート情報を取得し、
Aurora DB に格納するサンプルツール `twitterer` を、以下の構成で実装した。その過程で 5000兆個くらいある落とし穴を踏み抜いたので倒し方を書こうと思ったが、
1日経ったら過程をほとんど忘れたのでちゃんと動く結果を主に書き残す。– AWS
– Aurora Serverless (MySQL5.6)
– ServerlessFramework
– Lambda
– Node.js
– TypeScript
– [express](https://github.com/expressjs/express)
– [typeorm](https://github.com/typeorm/typeorm)
– [typeorm-aurora-data-api-driver](https://github.com/ArsenyYankovsky/typeorm-aurora-data-api-driver)## 前提と関連記事
「[Aurora Serv
せっかくTypescriptなんだからJSONを自動でvalidationしよう(ajv+typescript-json-schema)
# はじめに
– Validationコードを手で書きたくなかった
– JSON schemaを手書きしたくなかった(typescriptの型定義を使ってほしい)国内外たくさんやってることだけど、真似しても使うのに時間がかかった。
最小構成のコードを書く。## まず、Validationができてない状態とは?
“`typescript:index.ts
interface Cat {
name: string,
age: number
}const catObj = JSON.parse(‘{“name”:”tamago”, “weight”:2.0}’);
const cat = catObj as Cat;console.log(cat.age); //undefined (Catのageはオプショナルじゃないのに!)
“`## さあ、validationしよう
1. 実行前にtypescriptコードから[typescript-json-schema](https://github.com/YousefED/typescrip
C#でJWTを発行して、Node.jsで検証する簡単なお仕事です
[SC(非公式)Advent Calendar 2019](https://qiita.com/advent-calendar/2019/unofficial-sc) の19日目です。
# はじめに
最近JWT周りのなんやかんやを触る機会が多いです。
別の言語での取り回しなんかもできるのが、JWTでの検証の良いところだと思います。今回は.NetCore3.0で追加された **暗号化キーのインポート/エクスポート**で、
RSAではなくECDsa(楕円暗号方式)で署名/検証しました。サーバー構成としては以下になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131619/44db379a-b05c-a8e0-0b27-63ba307da572.png)# 実行環境
OS: mac OS Mojave 10.14.6
IDE: VS2019 for Mac community 8.3.6
.NetCore: 3.1.100
node: 10.14.1
npm: 6
BlankAndroidTV向けアプリをReactNativeで起動するまで
[Ateam Lifestyle Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ateam-lifestyle)の19日目は
株式会社エイチームライフスタイル 自動車事業部 の @mziyut が担当します :santa:最近購入したテレビがAndroidTVをベースにしたものだったのもあり、
0.55からReactNativeでAndroidTV向けアプリの開発を行えるようになっていたので試してみました。
ちなみに、2019/12/16時点の最新バージョンは、v0.61.5でした。## ReactNativeとは :thinking:
簡単に言うと「Facebookが作成したReactをベースにネイティブアプリフレームワーク」です。## AndroidTVとは :thinking:
簡単に言うと、Googleが提供する、スマートテレビ向けプラットフォームです。## 今回用いる環境
“`sh
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.
TypeScript の Decorator Hell を解消する
これを解決します。
“`typescript:src/models/user.ts
import { IsNotEmpty, MaxLength } from ‘class-validator’;
import { Column, PrimaryGeneratedColumn } from ‘typeorm’;
import { ApiProperty } from ‘@nestjs/swagger’;export class User {
@PrimaryGeneratedColumn()
@ApiProperty({ example: 1 })
id!: number;@IsNotEmpty()
@MaxLength(16)
@Column()
@ApiProperty({ example: ‘alice07’ })
displayId!: string;@IsNotEmpty()
@MaxLength(16)
@Column()
@ApiProperty({ example: ‘alice’ })
name!:
Node.jsのバージョンを上げた際のnode-sassのビルドエラー
ほんとにどうってこと無いメモです。
久々に開発しようとしたNuxtJSプロジェクトで、node-sassがコケました。
[node-sass](https://github.com/sass/node-sass)はv4.13.0です。“`bash
$ yarn dev・
・
・● Client █████████████████████████ building (61%) 431/466 modules 35 active
node_modules/markdown-it/lib/rules_core/state_core.js✖ Server
Compiled with some errors in 9.34s✖ Client
Compiled with some errors in 13.93s✖ Server
Compiled with some errors in 9.34sERROR Failed to compile with 1 errors
新入社員に適当にNode.jsのアプリ入門教えたら意外とウケたのでメモ
# はじめに
細かいことは気にせずにNode.jsでwebアプリケーションを作る手順をまとめました。
新入社員の教育につかってみたら思ったより理解してくれて、開発の一歩目になってもらえたのでメモがてら置いておきます。
これから開発をする方がこの記事にたどり着いて少しでも開発への苦手意識などがなくなれば嬉しいです。![スクリーンショット 2019-12-18 22.20.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/143517/337074ec-2cc1-fedc-a373-3c847d16b761.png)
SlideShareはこちら?
grpc_tools から生成した gRPC クライアントを promisify してみた。
# 前提条件
“`shell
% node –version
v12.13.0
“`“`shell
% npm –version
6.13.2
“`# 目的
最近、`grpc_tools` と `grpc_tools_node_protoc_ts` を併せて Typescript の型ファイルと node.js の gRPC のクライアントを生成する機会がありました。生成される GRPC クライアントなのですが、Node.js にありがちな callback にて行う非同期処理です。そのため、GraphQL のリゾルバ等と組み合わせて使用する場合、非常に使い勝手が悪いです。
今回は生成された gRPC クライアントの関数を promisify します。
# gRPC クライアントの生成
例えば、次のような protocol buffer から pb ファイルを生成することを考えます。
“`text:user.proto
syntax = “proto3”;package user;
option go_package = “v1”;
servi
Lambda + API GatewayでGithub上のアクションを検知してGithubに対してアクションする
# はじめに
最近バックエンドの実装をメインに担当しているエンジニアです。
先日チームメンバー(@sen-higaさん)と共同で行った業務効率化タスクを通して、初めてWebhookやサーバレスアーキテクチャに触れたので、その時の備忘録です。# やったこと
Github上のアクションを検知してGithubに対してアクションするという仕組みをLambda + API Gatewayで実装しました。
GithubからGithubへの動線がわかりやすいように、タスクの実装時とは内容を変えて、イシューがOpenされた時に、作成者をイシューに自動アサインするというシンプルな仕組みにしました。もっとこうした方がいい、自分ならこう実装するというご意見があ
Vue + Expressのテンプレート作成メモ
# はじめに
バックエンドをNode.js、フロントエンドをVue.jsでwebアプリを開発することが増えたので簡単にひな形を作る手順を残しておこうと思います。# 手順
### expressのプロジェクト作成
`express プロジェクト名`### vueのプロジェクトを作成
expressで作ったプロジェクトのルートディレクトリへ移動し
`vue create public`
publicというタイトルになっているので、気になる方はvueプロジェクトのindex.htmlのtittleタグを編集### vueプロジェクトでビルドする
publicディレクトリへ移動し
`npm run build`### expressのapp.jsに記述されているpublicのパスを変える
`app.use(express.static(path.join(__dirname, ‘public’)));`
↓
`app.use(express.static(path.join(__dirname, ‘public/dist’)));`### 一応この記述も消しておく
`
Node.js boilerplate / Authentication from scratch – (express, graphql, mongodb)
![1*htOb7MGk4cXDpp4md_iHSQ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553366/742bc8b1-ba93-d667-5681-ba079accfbc0.png)
A boilerplate for Node.js apps / API server / Authentication from scratch – express, graphql – (graphql compose), mongodb – (mongoose).
https://github.com/watscho/express-graphql-mongodb-boilerplate :snowman2:
npmのパッケージグローバルインストールは憲法違反です。
## 結論
`npx`コマンドを使おう
## グローバルインストール
とは
“`
$ npm install -g elm
“`
このように`-g`をつけてグローバル環境にパッケージをインストールをすることです## ローカルインストール
対して、ローカルインストールは、
“`
$ mkdir my_project && cd my_project
$ npm init
$ npm install elm –save // or –save-dev
“`こんな感じでインストールすると、`my_project/node_modules/`の中にパッケージがインストールされます。
## 違い
ローカルインストールの利点としては、プロジェクト毎に`package.json`で管理をするため、作ったプロジェクトを本番環境や他の人の環境に渡すことが簡単になります!
そして、いろいろなプロジェクトに手を出す際に、バージョン管理が簡単になります!
そしてグローバルインストールと違い、パソコンの環境を汚染しないため気持ち良いです!
## CLI系のパッケージ