2018-01-01から1年間の記事一覧
バックエンドサーバは機能毎にマイクロサービスとして分割し、サーバ間通信には gRPC を使ってモダンな感じにしたい。 最初のインフラ構想 まず Node.js アプリケーションをコンテナベースにして、Code Pipeline + CodeBuild + ECR + ECS + Fargate で継続的…
Nest.js ではアプリケーションサーバとして動かすだけでなく、同時に gRPC として動かし、別のマイクロサービスと通信ができる設計になっている。 docs.nestjs.com main.ts (async () => { const app = await NestFactory.create(AppModule); const protoDir…
TL;DR まだ node_redis を使ってる人が多いけど標準で Promise 対応してなくてレガシー ioredis 使い方はほぼいっしょ 標準で Promise 対応してるので async/await でそのまま書ける Cluster, Sentinel, LuaScripting 含めたフル機能が使える 開発者の Luin …
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 のソースコード TypeScript で Redis 使いたい場合は ioredis で書いてこんな感じのコードになる。 sample.ts import * as Redis from 'ioredis'; (async () => { const redis = new Redis(); const pong = await redis.ping(); // =>…
AWS の Lambda や ECS の需要が増えたことにより、CloudWatch Logs の需要も増えてると思う。 でも AWS コンソールから CloudWatch Logs はとても見にくい。そこで awslogs を使ってる人が多いと思う。 awslogs の問題点 Python2系への依存、これが非常にだ…
TypeScript で Node.js やる場合の O/R Mapper の選択肢は少ない。 TypeORM Sequelize + sequelize-typescript wetland メジャーっぽかったのと Nest.js で標準対応してるので TypeORM を使うことにしてみたが、どうも本番環境を想定した作りには至ってない…
今までは Moment.js 使ってたけどモダンに再設計された Luxon を使うことにした。 なぜ Luxon がつくられたか Why does Luxon exist? に書いてある。 作者は Moment.js のメンテナー Moment.js を改善するアイデアを持っていたが良いコードベースではなかっ…
仕事上、メインの API サーバは Ruby の Rails、Lambda やマイクロサービス的なサーバは Node.js、一部 DevOps 関連のスクリプトを Python で書いてたりする。 各種プログラミング言語を使うときは言語自体のバージョン管理が必要となるが、env 系のバージョ…
ts-node は TypeScript ファイルをコンパイルせずにそのまま実行できるライブラリ。 開発環境でお世話になるが、デバッグ実行するやり方の日本語情報がなかったので書いておく。 基本的なこと node コマンドの option として --inspect をつければデバッグ実…
TypeORM では Rails の ActiveRecord と同じようにプライマリキーの id カラムをオートインクリメントさせたり、INSERT 時に created_at カラム、UPDATE 時に updated_at カラムを自動更新したりできる。 Entity クラス import {CreateDateColumn, Entity, P…
背景 Protocol Buffers のコード生成だけなら Homebrew でインストール可能な protoc コマンドさえあればいいが、 $ brew install protobuf $ protoc --version libprotoc 3.6.0 gRPC コードを生成するなら grpc_cpp_plugin が必要となる。 $ which grpc_cp…
波括弧(curly brace)のオブジェクトリテラルを 1 行で書く場合の話。 const withSpace = { name: 'yamada', locale: 'JP' }; // 空白あり const withoutSpace = {name: 'yamada', locale: 'JP'}; // 空白なし 実は規定がない どれを見ても『オブジェクトリ…
Docker には HEALTHCHECK というコンテナが正常稼働しているか確認する機能がある。 何をもって『正常』と判断するかはコンテナを稼働する人が指定する。Nginx みたいな Web サービスのコンテナの場合は公式サンプルにもある通りcurl を死活監視のためのコマ…
⚙️ tsconfig.json tsc コマンドで変換するときのための設定ファイル。 { "compilerOptions": { "module": "commonjs", "declaration": false, "noImplicitAny": false, "removeComments": true, "noLib": false, "allowSyntheticDefaultImports": true, "emi…
クラスターのタスクが動いたまま タスクを「すべて停止」する 別のクラスターと同じセキュリティグループをつかっている 別のクラスターのセキュリティグループをすげ替える または対象のセキュリティグループを直接削除する
ビルド -t でタグを指定。--no-cache でビルド時のキャッシュを使わない。 $ docker build -t jnst/my-docker-image --no-cache . 実行 -it でインタラクティブモードで実行。--rm で終了時にコンテナ破棄。/bin/ash で ash シェル(Alpine Linuxの標準シェ…
デフォルトでは垂直分割モードになっていてくっそわかりにくい。 エディタ分割自体は Cmd + 1, Cmd + 2, Cmd + 3 がショートカットになっていて、最大3つまで分割できる。 Cmd + Option + 0 がトグルになっていて押すたびに垂直分割モード→水平分割モードに…
会社のアカウントでは GitHub 使ってるけど、個人のアカウントでは GitLab.com 使ってる。 プライベートリポジトリが無制限に無料なのでわざわざ GitHub で課金するメリットないし。 こんなとき何も考えずにコード書いてコミットすると、個人用の匿名アカウ…