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

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

備忘録 Node.jsでexportsを使ったモジュール化の作り方

Node.jsには、モジュール化といってさまざまな機能を持ったプログラムを個別のファイルに分割することができる。

効率よくコードを管理できるだけでなく、さまざまなユーザーが作成したプログラムを再利用しやすくできる。

Node.jsにはこのようなモジュールを管理できるツール「npm」や「yarn」等がある。

#「exports」
基本的なモジュール化の方法として「exports」がある。

exportsを使うと、指定した値を外部のNode.jsファイルから読み込んで再利用することができるようになる。

>**exports.プロパティ名 = 値**

この値は文字列・数値・配列・オブジェクト・関数など、さまざまなものを設定できる。

>**exports.str = ‘こんにちは’;**

>**exports.obj = {
name: ‘メロン’,
price: 500,
store: ‘東京店舗’
};**

>**exports.func = function() {
console.log(‘exportsの関数’);
};**

#「module.ex

元記事を表示

Macでyarn installしたらnode-gypのエラーが出た

# どうした

既存のプロジェクトの手直しをしようとして、ローカルにnode_modulesを入れたかったので以下のコマンドを実行したらエラーが出た。

“`
yarn
//yarn install の短縮形
“`

エラーは以下。

“`
Command: node-gyp rebuild
Arguments:
Directory: /Users/user/.ghq/github.com/hppRC/gatsby-firebase-sample/node_modules/fsevents
Output:
gyp info it worked if it ends with ok
gyp info using node-gyp@5.0.5
gyp info using node@13.2.0 | darwin | x64
gyp info find Python using Python version 2.7.16 found at \”/System/Library/Frameworks/Python.framework/Versions/2.7/Resources/Pyt

元記事を表示

Node.js で stream を使って gzip ファイル全体をメモリに乗せずに先頭一行だけを取得する

この記事は [Node.js アドベントカレンダー 2019](https://qiita.com/advent-calendar/2019/nodejs) の 23 日目です。

## はじめに

gzip ファイルなどの圧縮されたファイルを読み込む際、たとえば csv など圧縮率の高いファイル形式かつ大きなファイルの場合、全てをメモリに乗せ切れないことが稀にあります。
そもそも csv のカラムだけ欲しいなどの場合にデータ全体を取得するのは時間もかかるし無駄です。
そこで、 Node.js は stream を扱いやすい言語なので、これを使って簡単に解決できるため紹介します。

なお、 S3 からのデータ取得であっても `createReadStream()` すれば `stream.Readable` 型になるため、同様の手法が可能です。そもそも、この話自体がローカルよりはクラウド絡みの方が多いケースになると思いますが……。

## おさらい: Node.js での stream でのファイル読み書き

例えば、ファイルを読み込んで標準出力に表示します。

“`typescri

元記事を表示

toioで生き物っぽい何かを作ってみた

ご覧いただきありがとうございます。
この記事は[SB-AI Advent Calendar 2019](https://adventar.org/calendars/4324)の18日目の記事となります。

#はじめに
突然ですが皆様は「人工生命」と聞いてどんなものをイメージしますか?
SFに出てくる怪物のようなイメージを持つ方も多いかもしれませんが、家を掃除してくれるルンバも人工生命の一つと言えます。
「人工生命」は国際的には「ALIFE」という名称で世界各国で研究が進められており、人工的に生命を作る事を通じて生命とは何かを理解しようとする研究分野の事です。

私はこの分野の研究者でもなんでもない、ただのサラリーマンですが、仕事でロボットに関わる機会が多く、
また昨年ALIFE関連のハッカソンに参加しチームで作品を作った経験から、プライベートで「人工生命」を1つのテーマとしてモノづくりをしております。
(嬉しい事にチームで作った作品が、今年の文化庁メディア芸術祭のアート部門で[審査委員会推薦作品](http://festival.j-mediaarts.jp/works/art/mo

元記事を表示

思いもよらないものをnpm publishしてしまった話(前任者の顔写真など)

スクリーンショット 2019-12-23 0.06.32.png
俺「すっげぇいい名前のライブラリ思いついた!!」

俺「npm あるかな?あるかな?」

(カタカタ)

俺「なかった!よっしゃ一番乗りや!!!今すぐ作らないと!!!」

俺「`npm init` enter enter enter enter `npm publish` うおおおおおおおいっけぇぇぇ!!!!!!!」

(カタカタカタカタカタカタカタカタッターン)

俺「ミ゜ッ!」

ーーー

おはようございます。[本番環境でやらかしちゃった人 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/yarakashi-production)の 23 日目を担当する、[@sandessO

元記事を表示

迷惑メールを一掃するため,ドメインホワイトリストを作成した

みなさん,迷惑メールで苦労していませんか?

私は苦労しています.年末の大掃除ということで,迷惑メールを一掃してしまいましょう.

## 状況

キャリアメールに毎日,5〜10 通程度の迷惑メールが着弾します.有料の迷惑メールブロック機能を使用しているのですが,ブロックできるのは 5 割程度で,何通かは私のスマホの着信音を鳴らしてしまいます.

現在個人で利用しているメールアドレスは Gmail のもので,キャリアメールはほぼ使っていません.LINE や Twitter などの SNS 全盛の今(インスタ?TikTok?何それ,おいしいの?),使用するのは家族とのやり取りのみで,他には携帯メールのアドレスでなければ登録できないサービスや,かなり昔に登録したサービスのものがたまに届く程度です.

もはや,受信するメールのほとんどが迷惑メールという状況です.1 年前くらいまではほどんど迷惑メールなんてこなかったのに,なぜほとんど使わないアドレスに急に届くようになったのでしょう.どこかが個人情報流出させたのでしょうか?

## 対応方針

使っていないメールアドレスとは言っても,全く使ってい

元記事を表示

[Netlify Formsと連携]AWS Lambda上にGmail自動返信スクリプト(Node.js)をデプロイしAPI化。

Gatsby.jsを使用しNetlifyにデプロイするプロジェクトを進行していたところ、お問い合わせフォームの作成に手間取ったため備忘録。
##前提
対象読者は、
・node.jsの使用経験はそこそこある。これは必須です。
・lambdaの存在と癖の強さをある程度把握してる。若しくは、どんな癖でもかかってこいという精神がある人。
・api gatewayとlambdaの連携を行ったことがある。若しくは、自力でどうにかできる自信がある人。
を満たしていれば、全員できると思います。

##参考サイト等
・[詳しい。ここに従えば基本大丈夫(英語です。)](https://medium.com/@nickroach_50526/sending-emails-with-node-js-using-smtp-gmail-and-oauth2-316fe9c790a1)
・[わかりやすい。コード以外はここに従えば大丈夫(日本語です。)](https://gist.github.com/neguse11/bc09d86e7acbd6442cd4)

##環境セットアップ
1.netlify forms

元記事を表示

node/js向け husky使ってpush前にテストするを共有する

テストや静的コード解析実行前にうっかりpushしてしまう事はないでしょうか?

有意義レビューの為にも事前にテストを実行し、リモートにはテスト通ったコードしか置かないようにしたいですね。

[githooksのpre-push](https://git-scm.com/docs/githooks#_pre_push)を利用したpush前に必ずテストし、失敗したコードはpushできない状態を作る事ができます。

## githooksのpre-pushを利用したpush前テスト

`.git/hooks/pre-push` に実行したいコマンドを書きます。 `pre-push` は `git push` の前に実行されるフックです。

ほとんどのテストコマンドは、すべて通った場合に終了コード `0` を、失敗した場合に `1` などの0以外を返すようになっています。

`0` の場合にのみ `git push` が実行できるようになります。

“`
$ cp .git/hooks/pre-push.sample .git/hooks/pre-push
$ chmod +x .git/h

元記事を表示

文言のビルド失敗

## はじめに

[前回](https://qiita.com/libru1/items/cf253f64ff88f7afa1dd)

コマンドラインから実行しました
READMEの通りに出来ず、そのレベルに達してないようですが、くじけず進めていきます

## 実行
usageによるとレンダリングが出来そうなので実行

“`sh
node ./build/wenyan.js —render ./examples/helloworld.wy
“`

エラー発生
/dev/stdoutにアクセス出来ません

windowsだからありません
リダイレクトしてみる

“`sh
node ./build/wenyan.js —render ./examples/helloworld.wy > ./renders/helloworld.svg
“`

エラー変わらず

残念

## ビルド
それぞれのプラットフォーム用にビルドが必要なのかな。

Makefileを見て実行

“`sh
cd tools
node ./make_cmdline.js
“`

エラー発生
また/dev/~

元記事を表示

文言コマンドライン実行

## はじめに

[前回](https://qiita.com/libru1/items/dab052c175fd40e2d912)
サンプルプログラムを実行しました。

[ReadMe](https://github.com/LingDong-/wenyan-lang)を読み

コマンドラインで動かしてみます

## 実行

chmod +xは出来ないのでそのまま実行

“`sh
./build/wenyan.js
“`

JScriptエラー発生!

JScriptとはwindowsのスクリプト、wshだそうです

“`sh
node ./build/wenyan.js
“`

usage引数の一覧出て来ました
実行出来そうです。

## おわりに

引数にrenderがありました
次はsvgファイル作ってみます

元記事を表示

ESLint v6.8.0

前 [v6.7.0](https://qiita.com/mysticatea/items/377b6ca6558dc253159b) | 次 (未定)

ESLint `6.8.0` がリリースされました。
小さな機

元記事を表示

【Cypress】~7選~ CypressでE2Eテストするときはまずこれ読んどけって話

この記事は[Ateam Hikkoshi Samurai Inc. & Ateam Connect Inc.(エイチーム引越し侍、エイチームコネクト) Advent Calendar 2019](https://qiita.com/advent-calendar/2019/hikkoshi) 24日目の記事です。

本日はエイチーム引越し侍中途入社3年目、自称爆速Webエンジニアの加藤が担当します!

みなさんE2Eテスト書いてますか??
引越し侍では10年以上続くレガシーシステムにテストが充実していないというカオスな現場があります。

とりあえずこのプロジェクトでリリースしたらここのCVチェックをしようという
力技で確認し続ける日々…

くそぅ!新規サービスではテストを書いているのに!
レガシーシステムにはテストも入れられないのか!

# E2Eテスト導入への障壁
一度うちのエンジニアの神様がE2Eを導入しかけたんですが、
ABテストとかに対応するのめんどくさいとのことでなかなか拡充していかなかったんですよね
その姿を見た僕は「めんどくさいんだろうなぁ」と指をくわえて見てましたが、

元記事を表示

ディススレイがOFFになったらRaspberryPi経由でTV電源をOFFにしたい

BRAVIA X9500Gを最近買ってHDMI経由でPCと接続しているのですが、このテレビにはPCからの入力がOFFになったときに、自動的にTV電源がOFFになる機能がありませんでした[^1]。
そこで、2年前くらいに買って転がっていたRaspberry Pi Zero WHを使ってRaspberry Pi経由で電源OFFを試してみました。

## 方針

### TV操作について

HDMI-CECを使ってTVを操作します。
残念ながらPCについているHDMIからではHDMI-CEC信号を送れないことが多いらしく、対象のPC(NVIDIAグラボ)でも送れませんでした。
Raspberry PiはHDMI-CECを使えるようなので、HDMIでTVに接続してcec-clientを使ってTVを操作します。

cec-clientをインストールしておけば、`echo “standby 0” | cec-client -s -d 1`コマンドでTV電源をOFFにできます。

### モニタOFF検知について

PCはWindows 10なのですが、簡単に検知する方法はなさそうでした。
Win

元記事を表示

Slack Appを無料で運用する(Netlify Functions)

#背景

前回はSlack Advent Calendar 2019 6日目として、Microsoft TeamsとSlackの比較記事を投稿しました。
https://qiita.com/hide2018/items/d410b16d75d190ae4271

今度はSlackに焦点を当て、ワークフロービルダーについて書こうとしました。
しかし無料プランでは使えませんでした:frowning2:残念
https://qiita.com/kazushi_iizuka/items/5cd9c3bb0bde9803cac0

そこで無料で使えるSlack Appについて書きます。
以下の記事が良いなと思ったので自分でも作ってみます。

(記事1)
社内slackにVIPチャンネルを作った話
https://qiita.com/peisuke/items/80984db8b47cd8243019

ただAWS Lambdaは無料枠があるものの、クレジットカード登録が必要です。
https://aws.amazon.com/jp/aws-jp-faq/prospects/

>アカウント作成お

元記事を表示

Node.jsで永続化Cookieに対応する

# 発端

REST 使うコンソールアプリを TypeScript で書きたかったので、 Node.js と axios を使ってコードを書いていたのですが、ログイン操作や読み取り操作など毎回プロセスを起動して落とす設計にしたところ、 Permanent Cookie がプロセス終了とともに消滅してしまう状態でした。

## Permanent Cookie?

[mdn](https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies) によると **セッション Cookie** と **持続的 Cookie** の二つがあると紹介しており、前者は有効期間の指定がないのでクライアントを終了すると消えるとあります(ECのカートのような一時的なセッションで使われる感じですかね)。そして後者は設定された有効期間までは存続すると読み取れそうです(ログイン用途で使えそう)。
実際試したところ、ブラウザや [iOS/macOSのAPI](https://developer.apple.com/documentation/foundation/urls

元記事を表示

【mongoose】mongoDBに大量のdataをSeedする【seedgoose】

# seedgooseについて
最近ポケモン関連のアプリを作成していて、ポケモン達の画像のurlをmongodbに保存しています。
なので、手軽に大量のデータをseedできるプラグインないかなーって探してたらこのプラグインを見つけて
簡単に実現できたので、備忘録として書きます。

設定より規約の思想で作られているため、多少注意点などありますのでそれも説明していきます。

git
[seedgoose](https://github.com/zhangkaiyulw/seedgoose)

執筆時点では星は9個しかついてないです。
ですが、かなりお手軽にできるのでおすすめです。

# 導入
“`
npm i seedgoose
“`
package.jsonにnpm scriptを追加します。
“npm run seed“ でseedを流す事ができるようになります。

“` package.json
“scripts”: {
“seed”: “seedgoose seed”
}
“`

# ディレクトリ構成
※必ず、以下のようにmongooseで定義したmo

元記事を表示

【Hyperledger Fabric】Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点

#はじめに
Fabricのコンテナ群とSDKアプリを別々のマシンで動かす時の注意点を書きます。
今回は[fabric-samples](https://github.com/hyperledger/fabric-samples)の`first-network`をネットワーク設定に用いるものとします。
fabric-node-sdkを使ったSDKアプリはdockerコンテナとして動いています。

状況を表したものが以下です。
マシン2ではCAやordererも動作していますが、図からは除いています。
スクリーンショット 2019-12-21 23.47.47.png

#設定
SDKアプリを使用する際に用いるconnection profileは以下になります。

“`
{
“name”: “first-

元記事を表示

CentOSにプリインストールされたnodejsとnpmをアップデートする

nvmとかだとログインしてるユーザごとにパスが通らないといけなくて手間だったのでプリインストールされてるnodeとnpmをアップデートした

“`sh
docker run -w /root –rm -it –entrypoint /bin/sh centos:centos7
“`

“`sh
# node.jsのv10をインストール
curl -sL https://rpm.nodesource.com/setup_10.x | bash –
yum remove nodejs npm
su
yum install nodejs -y
“`

“`sh
# 確認
bash-4.2# node -v
v10.18.0
bash-4.2# npm -v
6.13.4
bash-4.2#
“`

元記事を表示

Node.jsを使ったローカルHTTPSサーバーを走らせる

# 目的
OAuth2認可を使ってオンラインサービスと連携させることができるコマンドラインツールを作成中です。ユーザー認証後に認可コードをこのツールで受け取りたいと思っているので、`127.0.0.1`で走るHTTPSサーバーをリダイレクト先として用意したい。
その検証として、まずローカルHTTPSサーバーをNode.jsで走らせてみました。言語は実際の使う予定のTypeScriptとなっています。

## 何を使う?
* Node.js
* httpsモジュール
* TypeScript

# 準備
## まずはHTTPで地ならし
私はNode.jsローカル環境ではHTTPサーバーすらを立てた経験がないので、まずはHTTPから試してみる。

“`typescript:HTTPサーバーならばこれでOK。
import http from ‘http’;

const PORT = 9090;
const HOST = ‘127.0.0.1’;

function startHttpServer(portNumber: number, hostName: string): Promis

元記事を表示

BoxにあるファイルをLINE WORKSトークルーム(チャット)で共有

# はじめに
BoxとLINE WORKSって連携してないんですか?
ってすっごいよく聞かれるので(仕事柄?)、Boxのウェブアプリ統合という機能を使って、BoxとLINE WORKSを連携機能を開発する記事を書きます。
連携と言っても、**Boxから直接LINE WORKSのトークルームへファイルを共有する**だけです。

# 完成動作イメージ

①Boxのファイルを選んで、[・・・]-[統合]を選んで、[Share with LW](←名前は任意で変えられます)をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135983/297b3581-cfb7-10b7-b227-f6fda898e18e.png)

②LINE WORKSのトークへ送信する画面が開きます。ここでは、[本文]にBoxの共有リンクを自動で挿入しています。送る相手はその都度変わると思うので、連絡先を検索するかトークルームを検索するかして宛先を設定し、[送信]ボタンをクリック。
![image.png](h

元記事を表示

OTHERカテゴリの最新記事