- 1. 遊び・仕事・催し事の予定を画像にしてみんなで共有しやすくしよう!「Event Schedule Image Generator」
- 2. NestJS Provider の実装方法
- 3. kyselyのプラグインをつくってみた
- 4. Expressのメモ
- 5. Expressでnode_modulesのbootstrapをクライアント側から静的ファイルとして読み込む
- 6. Electronでアプリ作成3 ElectronでSqlite3を操作
- 7. DiscordでAIと音声対話できるBOTを作ってみる
- 8. 非同期でのNode.jsのReadStreamの振る舞いを確認してみる
- 9. Google Cloud Runのデプロイは.gitignoreを見ている
- 10. npm i –legacy-peer-deps
- 11. Flask + Webpack with VSCodeの開発環境
- 12. PreprosでNODE_ENVを使ってステージングと本番でJSの処理を切り替える
- 13. 【Node.js】コードからNFTを作成する方法
- 14. symbol-sdk@3.1.0でTypeScriptを試してみる
- 15. Node.JSのメモ
- 16. Express.jsプロセスのクラスタリング化について
- 17. NestJS でクライアントリクエストを受け取る
- 18. Node.js Error: EPERM: operation not permitted, mkdir の対応
- 19. 【Javascriptメモ】Node.jsで改行なしで出力する方法
- 20. Node.jsでmysql2を扱う時の備忘録
遊び・仕事・催し事の予定を画像にしてみんなで共有しやすくしよう!「Event Schedule Image Generator」
# はじめに
[前々回](https://qiita.com/syab-syab/items/b9961ef9727dbc2cc987)と[前回](https://qiita.com/syab-syab/items/568760669f65b046a955)に続いて、HTML + CSS + JavaScriptで作ったWebアプリをReact.jsで作り直し企画の第三弾です。
今回で最後です。
LINEやX(旧Twitter)などのSNSで遊びや催し事、行事などの予定を周知・共有する際に、
スマホやパソコンで文字で打ち込むのが面倒だったり字数制限があったりして少し不便な思いをしたことが幾度かありました。
そんな折、画像化して貼りつけることでタイプする量も減って字数制限もなくなるかもしれないと閃いて
このアプリを作りました。
タイトルはまんまです。
[Event Schedule Image Generator](https://syab-syab.github.io/reactImageMaker/)
[動画](https://youtu.be/oJdwm63Np8w?si=kH0U
NestJS Provider の実装方法
# はじめに
この記事では、NestJS の Provider の実装方法について記載します。# Provider とは
Provider の特徴は以下の通りです。– Services, Repositories, Factories, Helpers などの Nest の基本的なクラスの総称
– 依存対象 (Dependency) として注入 (inject) される# Provider の実装
クラスに “`@Injectable()“` デコレーターを追加することで、対象のクラスを Provider として扱うことができます。以下の例では、“`CatsService“` クラスに “`@Injectable()“` デコレーターを追加しています。
“`cats.service.ts
import { Injectable } from ‘@nestjs/common’;
import { Cat } from ‘src/interfaces/cat.interface’;@Injectable()
export class CatsServic
kyselyのプラグインをつくってみた
## kyselyとは
Node.js(など)から利用する、SQLクエリビルダーです。
少し前に紹介記事を書いています。https://qiita.com/mont_blanc/items/0564a946b0d6919ad3a0
## kyselyのプラグイン
kyselyには、プラグインという形で実行するSQLや実行結果を編集する機能を導入できます。
kysely本体にもいくつかプラグインが入っています。
以下の公式ドキュメントにも一部が紹介されています。https://kysely.dev/docs/plugins
今回は、前回の「ちょっとイマイチなポイント」をある程度解消するプラグインをつくって一応大体動きそうなのでそれについての話です。
## つくったプラグイン
https://www.npmjs.com/package/kysely-extends-pg-query
PostgreSQL用の(他で未試験の)プラグインです。
現在のバージョンは0.1.3、対応するkyselyのバージョンは0.26.3です。(少なくとも0.26.1だと型エ
Expressのメモ
### app.get()を使ったAPIの作成
“`JavaScript:main.js
import express from “express”;const PORT = 8080;
const app = express(); // 意味合いとしてhttp.createServerで記述した時のserverがappに当たる(慣習としてappと命名する事が多い)app.use(express.urlencoded({ extended: true })); // これを記述しないとPOST時のbodyが正常に受け取れない
// expressではgetメソッド, パスのURL, コールバック関数 を↓のように指定する
app.get(“/”, function (req, res) {
/* [プレーンなnodeとの違い]
whiteメソッド, endメソッドは記述しないで sendメソッド に処理をまとめる
sendは1つのブロック内で複数呼び出せない
*/
res.send(`
Expressでnode_modulesのbootstrapをクライアント側から静的ファイルとして読み込む# 方法
アプリ起動の起点となるjsファイル(多くの人は`app.js`が該当するかと)に以下のような1行を加える。
“`javascript:JavaScript
app.use(‘/bootstrap’, express.static(path.join(__dirname, ‘node_modules/bootstrap/dist’)));
“`
こうすることで`node_modules/bootstrap/dist`下のファイルに対して`/bootstrap`から始まるパスを指定すればアクセスすることができるようになる。
“`html:HTML
“`
# 何をしているのか(解説)
Expressの`app.use()
Electronでアプリ作成3 ElectronでSqlite3を操作
Node.js環境でブラウザベースのアプリが作成できるElectronですが、結構メジャーなアプリがElectronベースで作られているようでね。そんなElectornで取り扱いが簡単なデータベースのSqlite3が操作できたら、いろいろ便利だろうと思い、サンプルとなるアプリを作成しましのたで、投稿します。自分の知識不足で、結構ハマってしまった個所もありましが、とりあえずはデータの挿入、抽出は確認できています。
# 動作確認環境
Windows11
node.js v18.18.1
electron v27.0.0
sqlite3 3.43.0# 参考になる記事、サイト等
Electronアプリの作成については過去の記事で触れてもらっています。https://qiita.com/watmot/items/e79a3f3f8fe27fa54a33
https://qiita.com/watmot/items/5241c97350f3431bd09c
WindowsにSQLite3をインストールしています。こちらのサイト参考にさせてもらいました。大変丁寧で
DiscordでAIと音声対話できるBOTを作ってみる
# はじめに
どうも、限界受験生です。
会話する相手が欲しいけどいない時間帯やコーディングしている最中に音声で質問したいときありますよね(きっと僕だけじゃないはず)
そこで、タイトルにある通りDiscordでAI(ChatGPT)とボイスチャンネルでずんだもんの音声で会話できるBOTを作ってみようと思います。
GCPやOpenAIのAPIは無料枠があるので今回の記事では基本無料で出来るものとなっています。:::note alert
無料枠を超える場合は利用料金が発生するのでご注意ください。
また、バージョンにより、この記事とは違う部分が出てくるかもしれませんので、ご注意ください。
:::# 使用技術
今回は僕の得意なJSを使用して書きたいと思います。
APIはDiscord API、Google Cloud Speech API、ChatGPT API、VOICEVOX APIの4つのAPIを使用していきたいと思います。
GCPのKeyFile発行やDiscordのTokenの発行、ChatGPTのKeyの発行方法は以下の記事をお読みください。
+ [GCP KeyFile発行
非同期でのNode.jsのReadStreamの振る舞いを確認してみる
# 前準備
## 環境
OS:Windows 11 Home 64 ビット オペレーティング システム
CPU:11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz 3.00 GHz
RAM:32.0 GB
Node.js:Node.js v20.4.0.## 入力用テキストファイルを作成する
“`in.txt
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
(中略)
1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
“`## ログ
Google Cloud Runのデプロイは.gitignoreを見ている
Cloud Runのビルドでハマったのでメモ
`gcloud run deploy`でCloud Runでデプロイ時に確実に含まれているはずのファイルが
`Module not found: Error: Can’t resolve ‘./setting’ in ‘/workspace/src’`
となる現象が発生。しばらく悩んだところ、
デバッグ用の設定ファイルをgit commitでいちいち更新扱いになるのが面倒くさかったので.gitignoreにファイルを追加していたのが原因のようでした。Cloud Runのビルドはどうやら.gitignoreを使用しているようで、ここでignoreしたファイルはdeployに含まれない模様。.gitignoreから削除したことで解消。
npm i –legacy-peer-deps
“`
https://github.com/MicrosoftArchive/redis
https://github.com/coreybutler/nvm-windows/releases
nvm install 8.10.0
nvm use 8.10.0npm i –legacy-peer-deps
“`
Flask + Webpack with VSCodeの開発環境
# 概要
個人開発中のFlaskアプリでjavascriptが大きくなりすぎたため、jsファイルを分割して管理することにしました。
しかし分割しすぎるとパフォーマンスに問題がでるらしく、回避のためwebpackで数個のjsファイルにbundle(build)する形をとることにしました。
ここで困ってしまったのが、「**FlaskとWebpackを併用する場合のフォルダ構造やデバッグ/ビルドの設定のあるべき姿**」とは?という点です。
結局正解は分からないままなのですが、備忘録がてら自分がどうしたかを記載しておきます。
# 前提知識
### Flaskとは
Webアプリのバックエンドをpythonで書くことができるフレームワークの1つです。他にはdjangoなどがあります。
PreprosでNODE_ENVを使ってステージングと本番でJSの処理を切り替える
## 意外と多機能Prepros
Sassのコンパイラとしてやたら紹介されがちなPreprosですが、実はHTMLやJS、画像圧縮処理などの機能も付いています。![Prepros 2023_10_31 12_14_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189779/8cb2679f-f4e2-df34-e1cb-5dbc48fe65fa.png)
↑設定項目たくさんPrepros is 何? な方はこのへんをご覧ください。
[Dart Sass、使ってる?Preprosを使えばコンパイルも楽勝! | Webクリエイターボックス](https://www.webcreatorbox.com/tech/dart-sass)
[SassやPugをコンパイルしてくれる便利なアプリ『Prepros』使ってますか? – 株式会社DOL](https://dol.co.jp/archives/column/sass%E3%82%84pug%E3%82%92%E3%82%B3%E3%83%B3%E
【Node.js】コードからNFTを作成する方法
Alchemyのサイトを参考に、Node.jsでNFTをミントしてみました。
https://docs.alchemy.com/docs/how-to-mint-an-nft-from-code## 私の環境
– Node.js: v20.0.0
– テストネットワーク:Goerli
– 開発環境: VS Code## 準備
### 画像
NFTにしたい画像を用意する
画像を簡単にIPFSにできるPinataを使う。
https://www.pinata.cloud/
Pinataはアカウントなくても(ログインしなくても)使える。
「Start Building」をクリック
[![Image from Gyazo](https://i.gyazo.com/80c17e5494039fd
symbol-sdk@3.1.0でTypeScriptを試してみる
# はじめに
こんにちは。
symbol-sdkの3.1.0が公開されました。(執筆時点の最新版)直前の3.0.11のリリースノートを見てみると、
> TypeScript support via JSDoc documentation
という文字が見えますね。
↓リリースノートのリンク
https://github.com/symbol/symbol/releases/tag/sdk%2Fjavascript%2Fv3.0.11ということで、TypeScriptに対応したみたいなので、少し試してみたいと思います。
# まずは転送トランザクションを作ってみる
以前書いた記事を例に、転送トランザクションを作ってみようと思います。
https://qiita.com/planethouki/items/860d9f1095c087ccd98f
## セットアップ
まずは必要なパッケージをインストールします。
“`shell
$ npm init -y
$ npm install typescript symbol-sdk@3.1.0 axios
“``ts
Node.JSのメモ
## Node
### Voltaを使って Node.js をインストールする作業するディレクトリに入って以下のコマンドを打つだけでOK
“`zsh
// LTS版をインストールする場合
$ volta install node
“`“`zsh
// 指定バージョンをインストールする場合
$ volta install node@18
“`### node.jsで使ってるJSのモジュールシステム
| モジュール | 概要 | 拡張子 | メモ |
|:–|:–|:-:|:–|
| CommonJS | サーバーサイドで使用できる | .cjs | require / module.exports / exports
CJSののモジュールはESMでも読み込める |
| ESModules | ECMAScriptModules(エクマスクリプト)の略
サーバーサイドでもクライアントサイドでも使える | .mjs | import / export
基本的にはESMを推奨
ESMのモジュールはCJSでは読み込めない |
Express.jsプロセスのクラスタリング化について
# 本記事のテーマ
1. express.jsプロセスのクラスタリング化
2. セッション情報の格納先の変更元来、Node.jsはマルチスレッドではないため、全てのリクエストは一つのプロセスにより処理されます。この点が多くのリクエストを処理する必要があるWebサービスにおいてボトルネックとなり、パフォーマンスの劣化につながるとの懸念があります。
その為、Node.js v0.8よりClusterモジュールが導入されました。
この機能によりサーバプロセスをクラスタ化し、処理を並列化することでスループットの向上が見込めます。
しかし、サーバプロセスをクラスタリングする上では、セッション情報の格納先に注意する必要あります。
express-sessionモジュールによりセッション管理を行った場合、セッション情報はデフォルトではメモリー上に格納されます。この状態ではセッションがプロセスを跨った場合に、セッション情報が取得できない、という問題が発生します。従って、全プロセスが参照可能な領域にセッション情報を格納する必要があります。
そもそも、メモリ上での運用は非推奨となっています(
NestJS でクライアントリクエストを受け取る
# はじめに
この記事では、NestJS の Controller でクライアントリクエストを受け取る際の実装方法について記載します。# 開発環境
開発環境は以下の通りです。– Windows11
– VSCode
– Node.js 20.5.0
– NestJS 10.0.0
– TypeScript 5.1.3# 事前準備
以下の手順に沿って、NestJS をインストールします。https://qiita.com/Yasushi-Mo/items/7c6e01a33c95f520453f
次に以下の記載内容に沿って、コントローラー用のクラスを作成します。
https://qiita.com/Yasushi-Mo/items/a35383ed37f7c8ce46ab#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E5%AE%9F%E8%A3%85
# リクエストオブジェクトの受け取り
“`
Node.js Error: EPERM: operation not permitted, mkdir の対応
このエラーについて同じような方が複数いましたので、私が行った解決方法を残しておこうと思います。
# 概要
Node.jsインストール後vscodeでファイル、フォルダの作成、削除を実行すると権限がありませんという「Error: EPERM: operation not permitted, mkdir 」このようなエラーが表示される。# 解決策
結論から言うと、[公式ホームページ](https://nodejs.org/en)からではなく、nvmからインストールすることで解決しました。[nvmのインストール方法、使い方はこちらを参照ください](https://ralacode.com/blog/post/install-nodejs-on-windows/)
# 試したこと
1.バージョンを変えて再インストール
2.キャッシュの削除
3.フォルダそのものの権限の確認
4.nvmでインストール
### 1.バージョンを変えて再インストール[公式ホームページ](https://nodejs.org/en)からLTSをインストールしていたのですが、ここからインストールする
【Javascriptメモ】Node.jsで改行なしで出力する方法
## process.stdout.writeの注意点
勉強中にいつもあやふやになるのでメモ。
使用できるのはString型(文字列型のみ)
“`javascript:sample.js
const word = “こんにちは”;
process.stdout.write(word);
//改行せずコンソール上に出力const num = 123;
process.stdout.write(String(num));
//変数前にStringをつけてあげることで使用可能
“`
Node.jsでmysql2を扱う時の備忘録
## 冒頭の挨拶
MySQLをNode.jsで扱うライブラリはいくつか存在しており、
強力なORMを扱うようなライブラリも出てきています。今回はシンプルな機能だけ提供している[mysql2](https://www.npmjs.com/package/mysql2)の取り扱い方の説明・備忘録です。
※ですます口調おわり
## ベストプラクティス
– Promise版を使う
– namedPlaceholders機能を有効にする今どきNode.jsでPromise版を扱わないなんて信じられないが、
mysql2ライブラリのドキュメントの大半がコールバックで、まともにドキュメントとして機能していない後者はmysql2で積極的に使うべき機能だが、
隠し機能みたいなレベルで具体的な使い方が載ってない
これを備忘録として残す為に記事を書いてるまである### requireの仕方
関数の作り自体が違うので `mysql2/promise` という風に別ディレクトリを指定する
“`node.js
const mysql = require(“mysql2/promise