尋常でないもふもふ

a software engineer blog

javascript

Nest.jsでgRPCを使ったマイクロサービス

Nest.js ではアプリケーションサーバとして動かすだけでなく、同時に gRPC として動かし、別のマイクロサービスと通信ができる設計になっている。 docs.nestjs.com main.ts (async () => { const app = await NestFactory.create(AppModule); const protoDir…

Node.jsでRedis使うならioredisがおすすめ

TL;DR まだ node_redis を使ってる人が多いけど標準で Promise 対応してなくてレガシー ioredis 使い方はほぼいっしょ 標準で Promise 対応してるので async/await でそのまま書ける Cluster, Sentinel, LuaScripting 含めたフル機能が使える 開発者の Luin …

ioredisで謎のエラー

ioredis で謎のエラーがでてハマった。 [ioredis] Unhandled error event: ParserError: Protocol error, got "J" as reply type byte. Please report this. at handleError (/Users/jnst/go/src/github.com/Translimit/park-server/node_modules/redis-pars…

TypeScriptとioredisのコードをJestでテストしたらコンストラクタじゃないと言われた件

TypeScript と ioredis のソースコード TypeScript で Redis 使いたい場合は ioredis で書いてこんな感じのコードになる。 sample.ts import * as Redis from 'ioredis'; (async () => { const redis = new Redis(); const pong = await redis.ping(); // =>…

JavaScriptの日付処理でLuxonを使う

今までは Moment.js 使ってたけどモダンに再設計された Luxon を使うことにした。 なぜ Luxon がつくられたか Why does Luxon exist? に書いてある。 作者は Moment.js のメンテナー Moment.js を改善するアイデアを持っていたが良いコードベースではなかっ…

TypeORMの@CreateDateColumnの精度を0にする

TypeORM では Rails の ActiveRecord と同じようにプライマリキーの id カラムをオートインクリメントさせたり、INSERT 時に created_at カラム、UPDATE 時に updated_at カラムを自動更新したりできる。 Entity クラス import {CreateDateColumn, Entity, P…

JavaScriptのオブジェクトリテラルの前後にスペースを含めるべきか否か

波括弧(curly brace)のオブジェクトリテラルを 1 行で書く場合の話。 const withSpace = { name: 'yamada', locale: 'JP' }; // 空白あり const withoutSpace = {name: 'yamada', locale: 'JP'}; // 空白なし 実は規定がない どれを見ても『オブジェクトリ…

TypeScriptをはじめるとき知っておくと捗る

⚙️ tsconfig.json tsc コマンドで変換するときのための設定ファイル。 { "compilerOptions": { "module": "commonjs", "declaration": false, "noImplicitAny": false, "removeComments": true, "noLib": false, "allowSyntheticDefaultImports": true, "emi…

Electron(Node.js)でデスクトップアプリ

Qiita を見ながらやったらコードが古くて動かなかったので書いとく。 下準備 $ mkdir electron-sample && cd electron-sample $ npm init インストール npm からインストールするけど、パッケージ名が electron だと古いバージョンになっちゃうので、electro…

自然対数を使った戦闘力のグループ化

なんかちょうどいい感じに分布される const _ = require('lodash'); // グループ化 const result = {}; let power = 0; _.times(600, function() { const group = Math.max(80, (Math.log(power) * 2 / Math.log(1.2)) | 0); if (result[group]) { result[gr…

nodebrewでio.jsをインストール

nodebrew が 2015-01-15 のコミットで io.js に対応してました。 すでに nodebrew をインストール済の人は selfupdate する必要があります。 $ nodebrew selfupdate $ nodebrew ls-remote (略) v0.10.32 v0.10.33 v0.10.34 v0.10.35 v0.11.0 v0.11.1 v0.11…

Nodejsで日付と時間といったらMoment.js

Node.js というか JavaScript 全般だけど、書き方よく忘れるのでメモ。 使い方 インストール $ npm install moment プログラム側で moment の読み込み var moment = require('moment'); moment オブジェクトを作成 var mNow = moment(); //現在時間 var mUni…

Node.jsでキャッシュ機構をつかう

isaacs/node-lru-cache · GitHub が便利。 Java でいうと Ehcache みたいに使える。ただ、Ehcache はキャッシュアルゴリズムを指定できるが、 lru-cache は LRU(Least Recently Used)という名の通り、最近のもっとも使われていないデータを最初に捨てるア…

Jenkinsの結果がUNSTABLEになる

Jenkins でビルドに JUnit を連携させてる場合に、UNSTABLE で終了した。 原因は mocha のテストに console.log() を記述したままになっていたからだけど、なぜそうなるのかわかりにくかったため書いとく。 Jenkins ジョブのコンソール出力 (略) Build ste…

nodebrewでnode.jsをインストール

nvm はもう古い(と思う)。nodebrew は Homebrew 経由でインストールできるようになったので、node のバージョン管理導入が非常にラクになった。 インストール $ brew install nodebrew パスを ~/.bash_profile に追記 if [[ -f ~/.nodebrew/nodebrew ]]; t…

AMDとは

インテルと並ぶ CPU の製造メーカー AMD(Advanced Micro Devices)…の方ではなくて、JavaScript 界隈の AMD とは。 てっきり AMD が提唱してる感じのハードウェアに近いレイヤーのソフトウェア技術のことかなと何となく思ってたけど、全然関係なくて Asynch…

lodashでよくつかう関数

JavaScript でコード書く時に lodash 使わないとかもう意味わかんないレベル。競合に underscore があるけど、lodash の方が開発スピード(≒コミット数)に分がある。 両者に git log --reverse で初回コミット(2009年8月25日)確認して気づいたけど、元は…

npmのキャッシュ削除

概要 rm -rf node_modules してから npm install してもエラーがでることがある。こういうときはキャッシュが悪さをしてる場合が多い。 対処法 $ npm cache clean $ npm cache ls $ rm -rf ~/.npm npm cache clean しても残ってる場合があるので、npm cache …

JavaScript糞Tips

JSのよくあるスニペット集。JS 初心者が初見で???となるコード達。 条件式に変数をそのまま入れて存在チェック undefined や null は、false として判定される仕様を利用したやり方。 var unixtime = function(date) { if (date) { return date.getTime()…

JSHint の predef は deprecated

非推奨、あるいは廃止予定、といっても後方互換性考慮して今後も使えるんだろうけど。 2013年7月のプルリクエスト Changed 'predef' to 'globals' in example .jshintrcこのプルリクの主旨はドキュメント用の例文変えたよってことだけど、コミットメッセージ…

Node.js(JavaScript)のあるあるハマりポイント

なにかしらプログラミング経験のあるプログラマが、本格的に JavaScript をはじめたときにハマるポイントを残しておく。 テスト実行したら終わらないことがある 概要 mocha 実行したらローディングでたままテストが完了しない。 原因 callback の書いてる場…

Mac に nvm と node.js をインストール

(追記)現在は nvm より nodebrew 使うべき → nodebrewでnode.jsをインストール - jnst blogMac だとインストーラから node.js をインストールすることもできるが、案件毎に node.js の使用バージョンは異なるため、node.js は nvm 経由でインストールし、…

npm でよく使うコマンド

探す 検索 $ npm search <name> 詳細をみる $ npm info <name> インストールする インストール $ npm install <name> インストール&依存関係として保存 $ npm install --save <name> $ npm install -S <name> インストール&Dev環境用の依存関係として保存 $ npm install --save-dev <name> $ np</name></name></name></name></name></name>…