Corredor

ウェブ、プログラミングの勉強メモ。

Node.js

Node.js の Cluster モジュールを使って Express サーバを並列化する

Node.js はシングルプロセスで処理するため、マルチコアを活かして並列処理するにはひと手間準備が必要になる。 今回は、Node.js 組み込みの cluster モジュールを使って Express サーバを並列化してみる。 元となる Express サーバ cluster モジュールを組…

Express サーバを80番ポートで動かすには

Express サーバを80番ポートで動かそうとした。 const express = require('express'); const app = express(); router.get('/', (req, res) => { res.send('Hello World'); }); app.listen(80, () => { console.log('Server Started'); }); 実行してみたら、…

Yum を使って CentOS に Node.js をインストールする一番簡単な手順

Node.js をインストールする。そんな簡単なことなのに、CentOS の Yum でやろうとすると、なんだか色んな方法があって迷う。 いろいろ調べた結果、一番簡単で分かりやすいのは、NodeSource というサードパーティのディストリビューションでインストールする…

Oracle Management Cloud の Log Analytics とやらを使ってみる

Oracle Management Cloud (OMC) というサービスがある。サーバのログを収集・分析して、問題が発生した場合はアラートを上げたりできる。 今回はこの OMC の中の Log Analytics 機能を中心に、使い始めてみる。 OMC の特徴 前提とするサーバ環境 OMC インス…

Oracle Object Storage API を操作する Node.js スクリプトを日本語圏向けに微修正

唐突に Oracle Object Storage の話をする。 オブジェクトストレージとは Oracle Object Storage API サンプルコードのバグ サンプルコードを Promise 化して使いやすくしてみた 以上 オブジェクトストレージとは Object Storage とは、ファイルを「オブジェ…

LINE Messaging API と Oracle Digital Assistant を併用して LINE から呼び出せるチャットボットを構築する

以前、LINE Messaging API を用いて、オウム返しするだけのボットを作った。 また、Oracle Digital Assistant というモノを使うと、ユーザの発言を解釈して複雑な会話フローを実現できることを学んだ。 今回は、これら2つを連携して、Digital Assistant のフ…

Oracle Application Container Cloud を使って Node.js アプリをデプロイしてみた

Oracle Cloud Service の一つ、Oracle Application Container Cloud (ACC) というモノを使ってみた。簡単にいえば、Heroku みたいに Web アプリケーションがデプロイできるサービスなのだが、Oracle Cloud 製品群の中では「第1世代」に属される古いサービス…

Express はレスポンスを返してからも処理が続行できる

Express において、res.json() とか res.send() とかを呼んだ後も処理が継続できることを知った。リクエストに対するレスポンスの用意ができたら迅速に res.send() を呼んでレスポンスしてしまい、残処理はそのあとゆっくりやれる、というワケだ。てっきり r…

Express のレスポンス関連メソッド「res.end()」「res.send()」「res.json()」の違い

Express でレスポンスを返す時、res.end()・res.send()・res.json() などのメソッドを使用するが、それぞれの違いは何か、res.end() は必ず呼ばなければならないのか、あたりを調べた。 Express の API リファレンスを呼んでみる まずは Express の API リフ…

JavaScript で YAML を扱うなら「js-yaml」が楽チン

Node.js で YAML ファイルを読み込んで扱いたくなったので、ググって1件目に出てきた js-yaml を使ってみた。 js-yaml - npm $ mkdir practice-yaml-in-js && cd $_ $ npm init -y $ npm install -S js-yaml $ touch index.js index.js const fs = require('…

2色のコントラスト比を導く Compare Colour Contrast Ratio を作ってみた

見やすい色の組み合わせかどうか。 WCAG2.0 (Web Content Accessibility Guidelines) という、ウェブアクセシビリティに関するガイドラインがある。 参考:Web Content Accessibility Guidelines - Wikipedia この中で、文字色と背景色とのコントラスト比を…

LINE Messaging API を使ってオウム返しする Node.js 製チャットボットを作ってみる

突然だが、LINE Messaging API というモノを使って、簡単なチャットボットを作ってみる。 完成すると、LINE アプリでチャットボット用アカウントを友達登録して、トーク画面から会話できるようになる。メッセージの処理はしないので、ただユーザの発言をオウ…

Express サーバでエラーハンドリングをミドルウェアに分ける

Express サーバを作っていて、例外のハンドリングを簡単に実装できる方法を知ったのでまとめてみる。 Express 関連用語をまとめる express.Router() ミドルウェア Expressにおけるミドルウェアとは next() ミドルウェアは記述された順に実行される エラーハ…

Node.js アプリでログをファイルに出力する「log4js」

Node.js 製のアプリでログをファイル出力するライブラリである、log4js を使ってみた。 log4js - npm log4js-node by log4js-node 以前、log4javascript というライブラリは使ったことがあって、コチラはファイル出力するアペンダが標準にはなかったので自作…

mocha で行うユニットテスト内でスパイ・モック化するなら「sinon」

以前、mocha という npm パッケージを使った単体テスト環境を構築したが、この mocha はテストランナーとしての側面が強く、特定のメソッドをモック化したりする機能は有していない。 neos21.hatenablog.com Jasmine のように、spyOn().and.callFake() や to…

Promise と async・await でリトライ処理を実装する

通信処理なんかが Promise で実装されている時に、自前でリトライ処理をやらないといけなくなった。 巷にはどんなやり方があるのか、Promise のまま扱う場合と、async・await で扱う場合とを調べてみた。 実行環境は、特にトランスパイルなど行わず、素の No…

JavaScript で文字列のバイト数を求める (POST・PUT リクエストやレスポンスの文字列が途中で切れる問題)

Node.js の組み込みモジュールである http モジュールを使用して、POST メソッドや PUT メソッドでデータを送信する処理があったのだけど、どうも送信データの末尾20バイトぐらいが欠損してしまっていた。 一連のデータ送信処理は海外のサイトからいただいて…

今更だけど ESLint を始めてみたら簡単に始められた

コレまで、誰かが作った js-beautify の設定ファイルを引き継いで開発したり、Angular CLI で生成される TSLint 設定ファイルを手直ししたりしたくらいだったので、今回は ESLint をゼロから始めてみることにした。 ESLint - Pluggable JavaScript linter TS…

node-schedule を使って Node.js で定期処理を行う

node-schedule という npm パッケージを使うと、Node.js で書いた一連の処理を定期実行できる。 GitHub - node-schedule/node-schedule: A cron-like and not-cron-like job scheduler for Node. まずはインストールしてみよう。 # 作業ディレクトリを作って…

Twitter Developer Platform に登録して Twitter API を使ってみた

Node.js スクリプトを書いて、Twitter API を叩いて、自分のツイートを収集・分析してみようと思った。 Twitter API は、Twitter Developer Platform という開発者用のプログラムに登録しないと使えないようで、この登録には審査が必要だ。少々手間だが、時…

Express で構築した WebAPI サーバをユニットテストする (コードカバレッジも見る)

Express で構築した WebAPI サーバをユニットテストしたく、やり方を調べた。 今回の要件 テストランナーは Mocha を使う Express サーバの制御には supertest を使う HTML 形式でレポートを出力するために nyc を使う 任意 : Jasmine 風にテストを書けるよ…

コマンドラインで動作する簡易パスワードマネージャ「Neo's Password Manager」を作った

Node.js でコマンドラインツールを作る勉強として、簡易的なパスワードマネージャを作ってみた。その名も「Neo's Password Manager」。パッケージ名は @neos21/npm。Neo's Password Manager の頭文字を取って NPM と称しているが、コマンド名は np とした。 …

素振り環境として package.json の用意と Git 管理を一気に始めるシェルスクリプト

普段、npm パッケージを使った素振り環境を作るために、 mkdir して cd して、 npm init -y して package.json を調整して、 git init して .gitignore を作って、 git commit --allow-empty で初回コミットを打つ、 みたいなことをやっているのだが、コレを…

Node.js で selenium-webdriver と chromedriver を使って Chrome ブラウザを自動操作してみる

Angular に組み込まれている、Protractor という E2E テストツールを通じて、Selenium Webdriver を少し触ってきていた。今回はテストツールとしてではなく、ウェブスクレイピングを行うための手段として、Selenium Webdriver と、Chrome を操作するための C…

Columnify を使って Node.js スクリプトのコンソール出力をテーブルっぽく整形する

Node.js スクリプトでコンソール出力を整形する際、最も手軽なのは console.table() だろう。 $ node -e "console.table([ { id: 1, name: 'testA' }, { id: 2, name: 'testB' } ]);" ┌─────────┬────┬─────────┐ │ (index) │ id │ name │ ├─────────┼────┼─…

Node.js スクリプトをコマンドのように使えるようにする方法

2019年、あけましておめでとうございます。今年も宜しくお願い致します。 今日は、Node.js で書いたちょっとしたスクリプトを、コマンドとして使えるようにする手順をまとめる。大きく2種類のやり方があるのでそれぞれ紹介する。 試した環境は macOS Mojave…

指定ディレクトリ配下の Markdown ファイルに含まれる NFD・NFC 文字を一括相互変換する

Windows ユーザと Mac ユーザが入り混じって、Markdown ファイルを書いていた時に起こった、俗に NFD 問題と言われるアレ。 Mac の Finder で表示されるディレクトリ名やファイル名は、「NFD」という形式で Unicode 正規化されている。平たくいうと、「ガ」…

Heroku Scheduler を使って定期的に Node.js スクリプトにバッチ処理を行わせてみる:Heroku 無料枠の話と Dyno の概念も整理

Node.js 製の Heroku アプリを作った。Express + Angular な構成で動作しているのだが、Heroku Postgres に溜め込んでいるデータを定期的に削除したくて、バッチ処理を組み込みたくなった。 調べてみると、Heroku には Heroku Scheduler というアドオンがあ…

Cheerio で Web ページをスクレイピングする

Node.js スクリプトから Web ページのスクレイピングができないか調べてみたところ、Cheerio という npm パッケージを使うのが簡単そうだったのでやってみた。 cheerio - npm モジュールのインストール Web ページを取得する モジュールのインストール Cheer…

rss-parser を使って Node.js で RSS を JSON に変換する

Node.js で RSS を取得して扱おうと思い調べたところ、rss-parser というライブラリが使いやすかったので紹介。 rss-parser - npm # インストールはいつもどおり。 $ npm install --save rss-parser 以下のようなサンプルスクリプトを書いてみる。 const Rss…