タグ
#Node.js
Node.jsに関する記事を公開しています。
SDK なしで Gemini Live API を WebSocket で直接叩く
SDK を使わず ws と https-proxy-agent だけで Gemini Live API(BidiGenerateContent)と話す計測プローブの材料一式です。setup からのメッセージシーケンス、24kHz PCM を WAV にして聴く方法、企業プロキシ+社内 CA 環境での接続、実測した接続時間とセッション原価まで載せています。
Node.js で favicon.ico を生成する。sharp は ICO を書き出せない
Node.js 画像処理のデファクトである sharp は ICO を出力できず、BMP 格納の ICO は読み込みすらできません。しかし ICO は 6 バイトのヘッダと 16 バイト × N の目次に PNG を並べるだけの単純なコンテナで、追加依存ゼロ・約 30 行で手組みできます。マルチサイズ favicon.ico を生成する実装と細部の注意をまとめます。
Google Analytics を入れずに Cloudflare でブログを監視する
ブログ運用の一次監視に欲しいのは「配信が壊れていないか」で、それは GA4(gtag.js)を入れなくても取れます。GA4 のクライアント計測とは別レイヤーの Cloudflare エッジ計測(GraphQL Analytics API の httpRequestsAdaptiveGroups)を GitHub Actions で回し、死活チェック・週次レポート・Issue 自動起票までを組む監視設計を、GA との役割分担つきでまとめます。
astro dev がエラー表示なしで終了する原因(Astro 7)
Astro 7 は AI エージェントからの起動を検出すると自動でバックグラウンド + JSON モードに切り替わり、起動失敗の本当の原因が「exited before becoming ready」の一行に丸められます。ASTRO_DEV_BACKGROUND=1 での調査方法と、隠れていた Node.js 22.15 未満の registerHooks エラー、dev server 管理の正道をまとめます。
Node.jsの環境変数とは?プライベートリポジトリで使う必要はあるのか?
Next.jsやNuxt.jsなど、Node.jsで構築されるサイトにおいて、ローカル環境と本番環境(またはそれ以上の環境)とで同じ変数を利用しながら違う値を参照する方法に環境変数があります。公開したくない値(トークンやパスワード)を変数で管理する場合などに使います。
NodemailerでBase64の画像を添付する
NodemailderでBase64エンコードされた画像を送る場合、pathに文字列をそのまま指定するだけで添付できます。前半のメタ部分data:image/jpeg;base64を正規表現で削除する必要も、エンコード形式にbase64を指定する必要もありません。
Nodemailer の使い方と TypeScript の型定義(v9 対応)
Node.js でメールを送る定番の Nodemailer を、2026 年 8 月時点の最新 v9 で動かし直して整理しました。型は今も本体に同梱されておらず @types/nodemailer を入れますが、createTransport のオーバーロードが 7 本あるため設定は SMTPTransport.Options で注釈しないとエラーの場所が分かりません。ローカルの SMTP サーバーに送って確かめると、存在しない宛先でも sendMail は 250 OK で成功扱いになり、認証失敗だけが EAUTH の例外になります。v8 / v9 の破壊的変更も含めて、TypeScript で使うときに要る型と「成功」の読み方をまとめます。
busboyのデータ解析がタイムアウトで失敗する
Netlify Functionsのイベントで、postされたデータを解析(パース)するためにbusboyを使ったのですが、開発環境時netlify devは上手くいくのに、本番環境時netlify build && netlify deployでは、処理が時間内に終わらずにタイムアウトするエラーが発生しました。
busboyでパースした画像が開けない時の対応
Netlify Functionsを使った問い合わせフォームを作る時に、multipart/form-data形式でpost送信されたデータをパースするためにbusboyを使ったのですが、画像のパースが上手くいかず、開けない画像として扱われてしまいました。結局、クライアント側でpost送信する前に、画像をbase64にエンコードすることで対応できたので、参考までに。