動かざることバグの如し

近づきたいよ 君の理想に

nodejs

TypeScriptなライブラリをnpm公開する方法

環境 Nodejs v20 TS 5 以下は、TypeScriptライブラリをnpmに公開する手順の記事です。この記事では、TypeScriptのプロジェクトの初期設定、ビルド、公開、バージョンアップの方法について説明します。 初期設定 TypeScriptライブラリを作成するには、まずnpm…

指定したディレクトリ以下のnode_modules一発で全削除

背景 Mac移行とかするときnode_modulesがたくさんあるとめっちゃ遅くなる npm installは移行してからやればいいので別になくてもいい。ってことで全削除したい コマンド find . -name 'node_modules' -type d -prune ポイントは-prune 。-pruneオプションは…

GCP Vision APIを利用してNodejsで文字認識する

やりたいこと 俺は、最近画像から文字認識をしたいと思い、いくつかの方法を試した。 しかし、自分でOCRのライブラリ環境を整えるのは面倒だと感じ、手軽に高精度なOCRを行える方法を探していた。 そこで、Google Cloud Platform(GCP)のOCR APIを利用する…

JavaScriptでコメント付きのJSONをパースする方法

JSONCとは 通常のJSONではコメントを書くことができない。 しかし、JSONCという特殊なJSON形式が存在し、コメントを書くことができる。ただし、JSONCは特殊な形式であるため、通常のJSONパーサーではパースできない。 そこで、マイクロソフト社が開発したnod…

TypeScriptでDiscordBotを作ってみる

やりたいこと Discordは便利なコミュニケーションアプリケーションであり、Discord botを開発することは、プログラミングに興味を持っている人にとって魅力的なプロジェクトの一つです。 今回は、Discord botをTypeScriptで作成し、!pingコマンドを送信する…

Typescript PlaywrightでinnerTextを取得する

環境 Playwright 1.25 やりたいこと ページにある要素のinnerTextを取得したい コード ポイントは el: HTMLElement していること。これがないと型がanyになってしまいエラーになる。 import { chromium } from 'playwright'; (async () => { const browser =…

Nodejs最新版でファイルの存在チェックをする

令和最新版Nodejsって響きよくないですか? 環境 Nodejs v14 概要 よくある、指定したパスのファイルが存在するかのチェック いくつか方法があるのでメモ 【方法1】fs.existsSync()を使う 一番オーソドックスというか古典的。どのNodejsのバージョンでも実…

Fastifyで静的ファイルを返す方法

環境 Fastify 3.x やりたいこと 画像とかサーバーにある静的ファイルをを返したい バイナルファイルもきちんと表示できるようにしたい 【方法1】fs.readFileを使う 一番ベーシック。Fastityに限らず、nodejs使ってるなら標準メソッドで解決しようって考え方…

fastifyでAPIサーバーを作成、GCPに音速デプロイ

結論 fastify使うなら fastify-cli使え 環境 Nodejs 10 fastify v3.0.0 概要 Nodejsでサーバーfastify-cliを使ってAPIサーバーのひな壇を作って、GCPのCloud Runにデプロイするところまでやってみる。 インストール まずはfastify-cliをインストール 公式で…

Node.jsのMySQLでAsync/Awaitで接続する

環境 Nodejs 12 やりたいこと Nodejsを使ってMySQLに接続したい。今どきのasync / awaitを使っていい感じに書きたい。というかコールバック書きたくない インストール 有名なのは mysql なのだが、mysql2というのもある。 すごく昔にsidorares/nodejs-mysql-…

NodejsでFluentdにデータを送信する

答え 公式クライアントの「fluent-logger」を使う。 fluent/fluent-logger-node: A structured logger for Fluentd (Node.js) やり方 デバッグしやすいように以下のfluendの設定をしたサーバーを用意する。 <source> @type forward port 24224 </source> <match *.*> @type stdout </match> 受け…

NodejsでImageMagickを使うライブラリ「imagickal」

環境 Nodejs 12 やりたいこと nodejsで画像加工をしたい。でもってやはり有名なのはImageMagick 早速一番それっぽいのを見つけたものの最終更新が8年前ww rsms/node-imagemagick: Imagemagick module for NodeJS — NEW MAINTAINER: @yourdeveloper This i…

Nodejs async/awaitを使って再帰的にディレクトリを作成する

軽くググっても石器時代みたいな書き方載せてるページしか見つからなかったのでメモ 環境 Nodejs 12+ コード これで hoge/piyo/fugaのディレクトリが再帰的に作成される。 const fs = require('fs').promises; (async () => { const path = './hoge/piyo/fug…

Puppeteerでbase64形式の画像をダウンロード保存する

環境 Nodejs 10 Puppeteer 2.x やりたいこと Puppeteerでスクレイピングして画像をダウンロードする際、URLの場合はrequestsモジュール等で適当にダウンロードすればよいが、画像がsrc要素にBase64形式で最初から埋め込まれている場合はそのやり方ができない…

ExpressでHTTPリクエストが中断されたのを検知したい

Expressでよく使われてるreq, resの中身はなにか - 動かざることバグの如しの続き 環境 Nodejs 10 Express 4.x やりたいこと 例えば以下のようなExpressを用いたサーバーのコードがあったとする const express = require('express'); const app = express();…

Expressでよく使われてるreq, resの中身はなにか

環境 Nodejs 10 Express 4.x 結論 reqはIncomingMessage resはServerResponse で、nodejsの標準のオブジェクトで別にExpress特有のものではなさそう 経緯 よく見かけるNodejsのHTTPフレームワークことExpressのHello Worldのサンプル const express = requir…

イキって新記法書くとESLintでエラーになる問題

ESLintでPrivate Class Field使うとエラーになる問題 Nodejs v12でようやくクラスでプライベートな変数を持つことができる。 変数が #val のように頭に#をつけるので、初見キモいなって思ったけど以下の詳しい経緯見たら納得した Private Class Field の導入…

Node.js v12でasync/awaitだけでファイルの読み書きをする

結論 正式なLTSになってるわけじゃないけど、本番投入に問題ない仕上がりにはなってる Node.js v12 でfs/promisesがexperimentalでなくなった件 Node.js10からfs Promises APIが実装された。 が、実行すると、 ExperimentalWarning: The fs/promises API is …

Nuxt.jsにCSSフレームワークを導入するまでの手順

環境 Nuxt.js 2.8 背景 Nuxt.jsはVuejsを元に作られているので、CSSフレームワークを追加したいときは、「追加したいCSSフレームワーク vuejs」とかで検索すればインストール方法がすぐ出る。現に、bootstrap-vueとかvuetifyはそれ専用のライブラリが出てい…

Puppeteerで位置情報取得を有効化して現在地を偽造する

環境 Nodejs 12 puppeteer 1.17 概要 puppeteerは本当に便利で、やろうと思えば(大抵のことは)なんでもできる。今回は現在位置をうまく偽装してみる。 コード 今回は東京駅にセットしてみる。ただしデフォルトではブラウザの左上の確認プロンプトが出てし…

Javascriptで2地点間の距離と方角を計算するライブラリ

緯度経度からなる地点Aから地点Bへの距離と方角がほしい人生だった 環境 nodejs 10 求める計算式面倒問題 正直地理の計算詳しくないのでさっぱりだが、地球が楕円であるので、式が面倒らしい 例えば以下はPythonで計算するコードを載せてくれている例 長い […

GCPのCloud FunctionsでPuppeteerキャプチャサーバーを構築

マジで簡単だったのでメモ Functionの作成 GCPの管理画面から「Functions」を開く 名前:任意 割り当てるメモリ量:1GB トリガー:HTTP ランタイム:Nodejs 今回は8にした index.jsの中身を以下 const puppeteer = require('puppeteer'); exports.screensh…

Nuxt.jsでQiita API取得して一覧表示するアプリをFirebaseへデプロイするチュートリアル

他のチュートリアルとか、やってみた!だと早速認証周りだとかElement UIとかに手を出してて難しすぎる。 本質的に、一番シンプルな感じで Qiita API v2 認証不要を叩いて リスト表示するだけのアプリをNuxt.jsで作って firebaseに無料デプロイ! までやる。…

Mac OSにnodenvとyarnをインストールする

さらばnodebrew 今までnodebrew使ってたけど、コマンド体型がrbenvやpyenvと違って独特である。バグとかはなくて安定はしていたが、やはり*bnv系で揃えたほうがいいなあということで、一式をnodenvに合わせた 環境 Mac OS Mojave nodenvのインストール 今ま…

オレオレ .eslintrc.yml 晒す

晒す env: commonjs: true es6: true node: true extends: standard globals: Atomics: readonly SharedArrayBuffer: readonly parserOptions: ecmaVersion: 2018 rules: indent: - error - 2 linebreak-style: - error - unix quotes: - error - single sem…

Puppeteerでリダイレクト元URLとリダイレクト先URLを取得する方法

環境 puppeteer 1.12 nodejs 10 やりたいこと Puppeteerでリダイレクトを記録したい コード すでにいろいろ記事は上がっているが、以下。ポイントはredirectChain()使うところだろうか。 const puppeteer = require('puppeteer'); (async () => { const brow…

DockerでNodejsとyarnをなるべくシンプルにインストール

環境 Docker 18 docker-compose 1.23 debian系 やりたいこと とあるDockerイメージにNodejsをインストールすることにした。普通ならapt-get install nodejsとパッケージ管理システム経由でインストールするのが定石だが、理由があってイメージサイズを小さく…

Nodejsのasyncでリトライを行いたいなら「async-retry」

環境 nodejs v10 やりたいこと 例えばあるURLへHTTPリクエストして、失敗した場合にリトライしたい。けど失敗したときのレスポンスコードが500のときはやり直すけど、404のときは無駄なのでそのままエラーにしたい。 いいライブラリがないか探していたところ…

Puppeteerで一定回数スクロールしまくる

2022年7月30日追記 Puppeteerのpage._clientは非公開APIなのでcreateCDPSession()を使用してclientにアクセスしたほうがいいとのこと const client = await page.target().createCDPSession(); await client.send( 'Input.synthesizeScrollGesture', { x: 0,…

Nodejsで変数確認したりデバッグする方法

環境 nodejs 10 やりたいこと rubyのbinding.pryみたいにプログラムコードの途中で実行を止めて変数の中身とか参照したい やり方 例えば以下のようなjavascriptを用意する。 const val1 = 1; const val2 = 2; debugger console.log(val1 + val2); 1つ目のポ…