- 1. DiscordでAIと音声対話できるBOTを作ってみる
- 2. 非同期でのNode.jsのReadStreamの振る舞いを確認してみる
- 3. Google Cloud Runのデプロイは.gitignoreを見ている
- 4. npm i –legacy-peer-deps
- 5. Flask + Webpack with VSCodeの開発環境
- 6. PreprosでNODE_ENVを使ってステージングと本番でJSの処理を切り替える
- 7. 【Node.js】コードからNFTを作成する方法
- 8. symbol-sdk@3.1.0でTypeScriptがサポートされたので試してみる
- 9. Node.JSのメモ
- 10. Express.jsプロセスのクラスタリング化について
- 11. NestJS でクライアントリクエストを受け取る
- 12. akashic engine × TypeScriptでfetchが見つからないと言われた時
- 13. Node.js Error: EPERM: operation not permitted, mkdir の対応
- 14. 【Javascriptメモ】Node.jsで改行なしで出力する方法
- 15. Node.jsでmysql2を扱う時の備忘録
- 16. [備忘録] lambda(Node.js) から spotify api を呼んでみた
- 17. Reactで実家の飲食店ホームページ作成してみた
- 18. Promise.allの性能向上とPromiseバッチ処理のためのライブラリ
- 19. ffmpeg.wasmを使ってブラウザ上でBlobデータのmimeTypeを変換する
- 20. 天気予報アプリをReactで作ってみた
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が公開されました。リリースノートを見てみると、> 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
“``tsconfig.json`を作ります。
“
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
# リクエストオブジェクトの受け取り
“`
akashic engine × TypeScriptでfetchが見つからないと言われた時
# 解決策
“`json
{
“compilerOptions”: {
“lib”: [“es5”, “dom”],
},
}
“`
`lib`に`dom`を追記してください。これだけです。# そもそもの話
node.js v18以上ではfetchはデフォルトでサポートされているのに、fetchが見つからないと私も困ったのですが、そもそもakashic engineってgetElementByIdとかのnode.jsでは使えないような関数を使っている訳で、fetchとかも普通に使えちゃうはずなんですよね。ということで、問題の原因はTypeScriptでの開発時の設定にあります。
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
[備忘録] lambda(Node.js) から spotify api を呼んでみた
# はじめに
[[備忘録] AWS CDKでRDS,RDS Proxy,Lambda を構築](https://qiita.com/m-chan/items/f56e9300351f68fdda08) までで、AWS CDKの始め方、lambda, apigateway, RDS の設定と使い方を学んできた。
次にこれらを使って独自のwebサービスを開発したい!
そこで、lambda から spotify api を呼んでプレイリストを作成してみることにした。# 実施したこと
1. spotify の設定(app の作成および Client ID / Client secret の取得)
1. リフレッシュトークンの取得
1. アクセストークンの取得
1. プレイリスト の作成### 1. spotifyの設定
spotify のアカウントは既に持っていたので、そのアカウントでログインした状態で [dashboard](https://developer.spotify.com/dashboard) にアクセス、有効化した。
すると下記画面に遷移するので、 cr
Reactで実家の飲食店ホームページ作成してみた
## はじめに
前回の記事で少し話題に上がりました実家の飲食店(都内の寿司屋)のホームページを
Reactで作り直しました。今回は、それについて記事を書きます。## ~前回のあらすじ~
ある日、父からホームページを作成するようお願いされた。
まずはwordpressで作成してみたが、感覚的にはなんか微妙。。。もうちょっとweb開発に
ついて勉強してみよう!といった流れです。
あらすじ終わり## 開発環境
言語
JavaScript(React)サーバーサイド
node.jsDB
今回は使用しておりません。デプロイする際にAWSを使いました。
(カスタムドメインも簡単に作れるしビルドも自動だしとても便利で感動。)## まずは競合他店?のホームページ調査から
もはや何から書いていいのかわからないので、同じ業界の個人店のホームページを
いくつか拝見させていただき、参考にしました。
注目した点は
– 背景の使い方
– 文字のフォント
– ページの構成
– キャッチフレーズや何をどんな風に紹介しているのか etc…ざっくりですがこんな感じで調査しました。
#
Promise.allの性能向上とPromiseバッチ処理のためのライブラリ
こんにちは、
Promise.allは配列で一番長いプロミスがチャンクの実行時間になります。
このため、最も長いプロミスが完了するまで次のプロミスが何もしないという非効率的な問題が発生します。
私はこの問題を効果的に解決するために”Arehs”を作りました。**? WHY AREHS?**
Arehsはイベント中心のchunk processingを目指す最高の大規模バッチ処理を保証します。
これは、最初の非同期タスクの呼び出しが完了するのを待つことなく、次の非同期タスクの呼び出しを即座に割り当てることで、密にプロセスを実行します。**これにより、次のような多くのことを達成することができます:**
プロミスの同時性を設定することで、サービスのスループットを制御することができます。
プロミスの同時性を設定することで、下流サービスの負荷を管理します。
アプリケーションのパフォーマンス向上
CPUアイドル時間の削減など**Promise.all**
ご覧のように、Promise.allはバッチ内で最も遅いプロミスと同じ時間だけ実行されます。
つまり、メインスレッドは基本的に “
ffmpeg.wasmを使ってブラウザ上でBlobデータのmimeTypeを変換する
## はじめに
2023年10月現在、WebKitの`MediaRecorder`は`webm`フォーマットの録画、録音に対応していません。
また逆にChromeやFirefoxなどは、WebKitがサポートしている`mp4`フォーマットに対応していません。
つまり全てのデバイスで同じフォーマットのデータで保存を行いたい場合、何かしらの変換処理を加える必要があります。この記事では、`ffmpeg.wasm`を使って、MediaRecorderの録音結果などを想定したBlobデータの変換方法を紹介します。
## ffmpeg.wasmについて
`ffmpeg`とは、ファイルのフォーマットを変換させるためのツールです。https://www.ffmpeg.org/
コマンドベースで簡単に特定のフォーマットに変換をさせることができます。
`ffmpeg.wasm`はこれをWebassembly化し、ブラウザ上でデータの変換を可能にしたライブラリです。https://github.com/ffmpegwasm/ffmpeg.wasm
## MediaRecorderについて
天気予報アプリをReactで作ってみた
## はじめに
アプリ開発とは無縁のエンジニアがOpenWeatherMapを使って天気予報を見れるWebアプリを作ってみた。
cssは海外のエンジニアの方を少し参考にさせてもらいました。![スクリーンショット (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584377/6864c21c-cdbd-7c44-1991-e5e7dd256fa5.png)
★機能紹介(ざっくり)★
– 検索は基本ローマ字(理由は後程説明します。)
– ログインすれば星をクリックできる。するとお気に入りリストに追加できる。
– もう一度押すとお気に入りリストから削除される。
– 一画面で現在の天気、気温、湿度、風速、3時間単位での天気、直近5日間の天気を確認できる。
– 天気、時間によって背景画像が変わる。## 開発環境紹介
言語
JavaScript(React) ※初心者にはきつかった
CSSサーバーサイド
Node.jsDB
Firebase (google)API
OpenWea