- 0.0.1. GPT-4o と Node.js の process.loadEnvFile() と OpenAI のライブラリを組み合わせる
- 0.0.2. Azure Functionsでdate-fnsのformat結果がローカル実行とAzure上で実行したときに差が出ていたメモ
- 0.0.3. docker-composeでNode.jsコンテナとMySQLコンテナを立ち上げる
- 0.0.4. [OpenShift Virtualization] Node跨ぎのLive Migrationで本当にVMは停止しないのか検証してみた
- 0.0.5. Nodemonを用いたExpress起動
- 0.0.6. (調査メモ)gulp5で画像ファイルが壊れた場合の対処
- 0.0.7. Node-REDのobnizノードでどちらのノードを選ぶか – 使い方概要
- 0.0.8. 「npx create-next-app」って何をしているの?
- 0.0.9. symbol-sdk@3.2.1でオフラインでアグリゲートコンプリートを完成させる
- 0.0.10. Goでwebアプリケーションを作成してみよう! ~サーバーの立ち上げ~
- 0.0.11. Node.jsによるHTTPサーバの基本
- 1. Hello World!
- 1.0.1. 複数のサーバーでobnizが動いてしまっている時
- 1.0.2. JavaScriptのコードをobnizノードで使えるように書き換える
- 1.0.3. カニ🦀になって絵日記書くSNSつくったので技術まとめ
- 1.0.4. npm run(npm scripts)を経由すると200msから300msぐらい遅いので対策する
- 1.0.5. docker + nextjs + React + typescriptで開発環境を整える
- 1.0.6. Node-REDでobnizが繋がらない時のトラブルシューティング
- 1.0.7. obniz x Node-REDで停止処理
- 1.0.8. Node.js 日時のフォーマット・妥当性チェック
- 1.0.9. nodebrewがinstallされているのにnode -vでエラーになる時
GPT-4o と Node.js の process.loadEnvFile() と OpenAI のライブラリを組み合わせる
リリースされたばかりの GPT-4o を API経由で試すのに、以前、以下の記事で書いた「Node.js の process.loadEnvFile()」を組み合わせてみたという内容です。
●【小ネタ】Node.js v21.7.0 の新機能で環境変数用のファイル読みこみを軽く試す: process.loadEnvFile() – Qiita
https://qiita.com/youtoy/items/ae838cacd43b3c3e61e1## GPT-4o について
GPT-4o については、既にいろいろな方が記事を書いていると思うので、詳細はそれらをご参照ください。●GPT-4o – Google 検索
https://www.google.com/search?q=GPT-4o## OpenAI の Node.js ライブラリ
今回、GPT-4o を API経由で試します。
その処理には、以下の OpenAI の Node.js用ライブラリを使います。●openai – npm
https://www.npmjs.com/package/openai
Azure Functionsでdate-fnsのformat結果がローカル実行とAzure上で実行したときに差が出ていたメモ
## 概要
[前回でローカル実行環境を構築した](https://qiita.com/hibohiboo/items/ddcc6125bf61d9b308cc)が、日付をDBから取得してフォーマットしたところで問題が起きた。環境|TimeZone|`format(d,’yyyy-MM-dd HH:mm:ss’)`
–|–|–
Azure|UTC|2024-05-14 **00**:00:00
ローカル|JST|2024-05-14 **09**:00:00結論からいうと、TimeZoneのlocaleの問題であった。
ローカル実行時の環境変数`TZ`に`UTC`を設定することでローカルもAzure上と同じ挙動にできることを確認した。[date-fns format](https://date-fns.org/v3.6.0/docs/format)より
> Return the formatted date string in the given format. The result may vary by locale.
> 指定された形式で書式設定された日付文字
docker-composeでNode.jsコンテナとMySQLコンテナを立ち上げる
# 目的
`docker-compose`を使用して、アプリコンテナとDBコンテナを起動する。
コンテナ起動のみを目的とするため、`docker-compose`の動作を確認することをメインに進める。## 目標
– DBコンテナ作成
– Nodeコンテナ作成とHello, World.
– DBにテーブル作成・初期データ投入# 起動方法
以下コマンドで`docker-compose.yml`をもとに起動される
“`shell
docker-compose up -d
“`# 実装手順
## DBコンテナを作成して、DBが作成されているか確認
`docker-compose.yml`でMySQLコンテナの作成
“`yml docker-compose.yml
version: ‘2.1’
services:
db:
# イメージの指定(オフィシャルMySQLイメージ)
image: mysql:8.4.0# コンテナ名
container_name: mysql-container# ポートの紐づけ
ports
[OpenShift Virtualization] Node跨ぎのLive Migrationで本当にVMは停止しないのか検証してみた
# はじめに
OpenShift Container Platformで仮想マシン (VM) を起動・管理できる標準機能である「OpenShift Virtualization (以下、OCP-V) 」では、Kubernetes Clusterを構成するBare Metal Nodeを横断して、Live Migrationが可能です。その実験をします。またついでに、OCP-VでVMを操作するコマンドラインツールである`virtctl`も試しに触ってみましょう。先に、OCP-VにおけるLive Migrationの仕組みを絵で示します。
すごく絵が雑で恐縮なのですが、VM (がContainer内でプロセスとして実行されているPod) がNode AにDeployされていたとしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/4536199b-4aba-75b6-774f-ee6d13f3fa4d.png)このVMをNode BにLive Migratio
Nodemonを用いたExpress起動
# Express 毎回再起動するの面倒くさくない??
Node.jsでExpressを用いてWebサーバーを作成する記事を今まで記載してきました。
今後も学んだことを記事にしていきますがExpressで機能を追加した際に動作検証をするとき、
何度も再起動するのめんどくさいな、と思ったときに`Nodemon`を知って便利!となったので記事にします。## Nodemon
`Nodemon`はnpmに公開されているパッケージの一つです。
私が把握している機能は
`指定したディレクトリ内のファイルが変更された場合、自動的にnodeアプリケーションを再起動する`
⇒`Expressでファイルを変更した場合、サーバの再起動をNodemonが自動で行ってくれる`
です。
毎回コマンドで再起動しなくていいのは便利じゃないですか!?笑
※他にも機能があれば教えていただきたいです。## Nodemon 設定
下記記事で記載したフォルダ構成を元に説明します。
[ExpressでWebサーバーを立ててみる](https://qiita.com/moody_engineer/items/f57733
(調査メモ)gulp5で画像ファイルが壊れた場合の対処
### 結論
srcに`{encoding: false}`をつける### 問題
gulp5が2024/03/29に正式ローンチされたので、自前の開発環境をアップデートしようとした。
基本的にはgulp4のgulpfile.jsのままで動いたが、静的ファイルをコピーするタスクで、jpg, png画像が表示されなくなってしまった(コピー後のファイルが破損してしまった)。
svg, txtファイルは正しくコピーできていた。### 原因
gulp5の[changelog](https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#500-2024-03-29)にある
“`
Default stream encoding to UTF-8
“`
の影響と思われる。### 対処方法
gulpの[issue](https://github.com/gulpjs/gulp/issues/2777#issuecomment-2036776560)に記載があり、srcに`{encodin
Node-REDのobnizノードでどちらのノードを選ぶか – 使い方概要
Node-REDのobnizノードを使う時に結構悩む人が多いと思います。
## 3種類のノード(2種類 + 裏ボス1種)
(現時点バージョンだと)まずは3種類のノードがあり、1つは裏側の設定に隠されていて、2つは表に見える場所にあります。
> ![スクリーンショット 2024-05-13 1.28.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/3ca0e23e-448e-db98-b907-11d0b311e70c.png “スクリーンショット 2024-05-13 1.28.38.png”)
### obniz functionノード
**処理を1回実行**するときに使えます。
LEDやスピーカーなど **アクチュエーターやインジケーター**を操作したい **アウトプット系の処理**場合はobniz functionノードを利用するのがオススメです。
### obniz repeatノード
1分ごと、毎秒…など **定期的に処理を実行**したい時に使えます。
「npx create-next-app」って何をしているの?
## はじめに
最近、Next.jsでの開発を進めていて、いつも使っている 「**`npx create-next-app` って何してるんだ?**」という疑問が頭をよぎりました。
よく、ふとした瞬間に、「これって本当に理解して使ってる?」と自問自答することってありますよね。特に、誰かに説明しようとすると、理解を曖昧にしているせいで思った以上に言葉に詰まることが多いです。
例えば、公式ドキュメントの「Installation」を参照してプロジェクトをセットアップする際に、手順をコピー&ペーストして「動いたからOK」としてしまうことが多いかと思います。実は私もそんなタイプです😅
この記事では、Next.jsでプロジェクトを作る過程で、「なぜそうなるのか」を掘り下げながら、より深く理解していくことを目指します。
## Next.jsプロジェクトの作成
では、Next.jsのプロジェクトを作成していきます。
まずはいつも通り、[Next.js 公式ドキュメント](https://nextjs.org/docs/getting-started/installation) に記載さ
symbol-sdk@3.2.1でオフラインでアグリゲートコンプリートを完成させる
# はじめに
今回は、オフラインで、自分と他者の署名が必要なアグリゲートコンプリートトランザクションを作成してみようと思います。
登場人物はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172833/95bee689-05a2-7e17-0ddd-519e8d8e88f1.png)
この場合、アリスとボブの署名が要ります。
今回のシナリオでは、アリスがトランザクションを作成してボブに渡し、ボブが連署してネットワークに送信するような感じでやっていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172833/c40d92bc-61cb-effa-2008-4d84f4161c30.png)
アリスからボブへ渡すデータの形式は、16進数文字列のトランザクションデータにします。
![image.png](https://qiita-image-store.
Goでwebアプリケーションを作成してみよう! ~サーバーの立ち上げ~
この記事では4回に分けてwebアプリケーションの作り方を説明していく
第1回
[ webアプリケーションの構成、仕組み](https://qiita.com/Yutosaki/items/0c6f9349b427d4aee08e “第1回”)
第2回
サーバー立ち上げ(この記事)
第3回
フロントエンドの実装
第4回
バックエンドの実装実際に作ったアプリケーション
https://github.com/Yutosaki/WiFiRader
# やること
今回のではサーバーの立ち上げ、アプリケーションサーバー(Go)に情報を送る。そして、以下のような画面構成にする。これらについて解説していく。![今回作成した画像](https://github.com/Yutosaki/WiFiRader/assets/129819607/ace28799-3184-4718-8f1d-dc611beeeb6e “今回作成した画像”)
# 実際に書いていく
まずサーバーの設定と立ち上げ、その後、地図の初期化やバックエンドの情報を送るためのコードを書いていく。では、
Node.jsによるHTTPサーバの基本
# 完成系
“`main.js
“use strict”;const http = require(“http”);
const port = 3000;const server = http.createServer((request, response) => {
response.writeHead(200, {
“Content-Type”: “text/html”
});const responseMessage = “
Hello World!
“;
response.write(responseMessage);
response.end();
console.log(`Sent a response : ${responseMessage}`);
});server.listen(port);
console.log(`The server has started and is listening on port number: ${port}`);
console.log(`
複数のサーバーでobnizが動いてしまっている時
Node-REDでobnizを使っていると、obnizがこんな感じでconnecting…から動かないってことがたまにあります。
> ![スクリーンショット 2024-05-11 22.52.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/c133058c-8f59-15f8-9263-b19c8defa417.png “スクリーンショット 2024-05-11 22.52.29.png”)
他のサーバーを見てみるとつながっていることが分かりました。
> ![スクリーンショット 2024-05-11 22.52.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/fde3a773-7b8c-7dc4-1b2a-ad06d6e3e5b0.png “スクリーンショット 2024-05-11 22.52.32.png”)
これをどうやって見つけるか。
## obnizのコンソールか
JavaScriptのコードをobnizノードで使えるように書き換える
Node-REDのobnizノードの使い方は少しクセがあるのでクセを把握しておきましょう。
## obnizノードの使い方概要
– 設定ノードという裏側のノードがいて、ここでピンアサイン(各ピンに何を設定するのか)などの初期化処理を記述すること
– 表側に見えて使えるノードは`obniz repeatノード`と`obniz functionノード`の2種類
– 2種類のノードは使い分けが必要で、それぞれのノードの中にJavaScriptノードを記載する
– センサーなどの数値を常に取得したいインプット系の処理はobniz repeatノードを使う
– LEDやスピーカーなどアクチュエーターやインジケーターを操作したいアウトプット系の場合は`obniz functionノード`を利用といった流れです。
[こちら](https://qiita.com/n0bisuke/items/072a8a1bf77525fef835)も参照ください
> [obnizノードの使い方概要](https://qiita.com/n0bisuke/items/072a8a1bf77525fe
カニ🦀になって絵日記書くSNSつくったので技術まとめ
# カニ🦀になって絵日記書くSNS作ったので技術まとめ
## はじめに
タイトル通りのSNS作りました🦀
みなさまは、slackなんかで「たしかに」の意味合いで🦀のスタンプでリアクションとったりしませんか?そんな、エンジニアのみなさまに馴染みのあるカニのサービスをリリースしました!
– サービスURL: https://diary-crab.com
– 気が早いけど公式インスタは[こちら](https://www.instagram.com/diary_crab?igsh=MW9xd2R2ZG9kNmV2dw%3D%3D&utm_source=qr)
– 怪しい人じゃないことが分かるようにという意図もありますどんなサービスか少しでも気になっていただけたら是非インスタ覗いてみてください🦀
## 技術まとめ
本サービスで活躍した技術たち🦀– バックエンド
– TypeScript, Node.js, Express, prisma
– フロントエンド
– TypeScript, Next.js, tailwindcss
– [インフラ](https://qiita.
npm run(npm scripts)を経由すると200msから300msぐらい遅いので対策する
“`package.json
“scripts”: {
“sleep”: “sleep 1”,
“`“`sh:npm run sleep
real 0m1.365s
user 0m0.238s
sys 0m0.066s
“`“`sh: sleep 1
real 0m1.008s
user 0m0.001s
sys 0m0.004s
“`環境によりますが200msから300ms程度オーバーヘッドが増えます
開発者体験のほか、CI/CDにも影響が出てきます。塵も積もればコストとなります気になる方は自分たちのscriptsで検証してみましょう
# 対策
npm scriptsを使わず、直接実行しましょう。
単純なコマンドならscriptsに記述したものを直接実行する。
npmでインストールしたパッケージをcliで使う場合、
`./node_modules/.bin/各種パッケージ`で実行できます
もしくは`./node_modules/.bin`にPATHを通しましょうもちろん高速化と引き換えに運用管理面で手間が増えるのでトレードオフです
docker + nextjs + React + typescriptで開発環境を整える
# 開発環境を作る
## dockerでnodeの開発環境を作成する
### 任意のフォルダの以下のsrcディレクトリとdocker-compose.yamlを作成する
#### 以下の作業はWindows上の作業
—
├ src/
├ docker-compose.yaml“`docker-compose.yaml
version: ‘3’services:
app:
image: node:lts # バージョン指定も可能 ex. node:12.16.1
container_name: nextExpressTest # コンテナ名は任意
environment:
– DEBUG=app:*
tty: true
# ホスト側のポート:コンテナのポート
ports:
– ‘3000:3000’
# ホスト側のsrcをコンテナのappにマウント
volumes:
– ./src:/app
working_dir: “/app
Node-REDでobnizが繋がらない時のトラブルシューティング
こんにちは、のびすけです。
某授業でNode-REDからobnizを制御しましたが、Node-REDでプログラムが動いてるはずなのにobnizが動いていない、逆にNode-REDでプログラムを切っているはずなのにobnizが稼働しっぱなしになっている。といった事象が多発してしまったのでトラブルシューティング記事を書いておきます。
> ![スクリーンショット 2024-05-11 1.29.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/cd5fe0d0-9c9c-2aba-117c-cef349516fe5.png “スクリーンショット 2024-05-11 1.29.54.png”)
## おさらい: obnizが起動しているかどうか
前提として、obnizはプログラムが起動して(しまって)いるときと、起動していない(正常に処理を止めらている)ときとでディスプレイの表示が違います。
– プログラムは起動していないけどWi-Fiには接続できている状態
これが通常に他のプロ
obniz x Node-REDで停止処理
obnizをNode.jsでコードを書いて使う時は、基本的に毎回プログラムを起動してシャットダウンしてが行われますが、Node-REDの場合Node.jsのプロセスは起動し続ける仕様なため、プログラムの起動ではなく接続の解除を行って停止を行うという仕様になっています。
obnizノードを使ってプログラムの接続解除に使えるフローを置いておきます。
## コピペ参照用
“`json
[{“id”:”cb1d6d3a.017e1″,”type”:”debug”,”z”:”b3ffc87e7885414e”,”name”:””,”active”:true,”tosidebar”:true,”console”:false,”tostatus”:false,”complete”:”payload”,”targetType”:”msg”,”statusVal”:””,”statusType”:”auto”,”x”:490,”y”:320,”wires”:[]},{“id”:”11a346f0.5a4c19″,”type”:”obniz-function”,”z”:”b3ffc87e7885
Node.js 日時のフォーマット・妥当性チェック
# 日時の妥当性チェックしなくていいの?
ユーザーから送られてきたリクエストボディの日時のフォーマットを正規表現を用いてチェックする機能を追加したときに頂いたコメント。
確かに正規表現だけだと`2月30日`を`false`にすることやうるう年の判断が出来ない。
機能を追加しなければ!と調べた結果を忘れないようにまとめます。### 前提
今回のリクエストボディは`YYYY/MM/DD HH:mm`の形式で送られてきます。
そのため日付のフォーマットが`/`区切りになっているかの判断も重要になってきます。
※今回実装している機能がリクエストボディの日付を外部APIに連携し、外部APIの指定で`/`区切りとなっているためリクエスト時点でこのフォーマットにして欲しいためフォーマットも固定にしております。### Moment.isValid()
まず最初に見つけた方法は、`moment`パッケージに規定されているisValid関数を用いた方法。
参考にさせていただいた[stackOverflow](https://ja.stackoverflow.com/questions/6841
nodebrewがinstallされているのにnode -vでエラーになる時
# はじめに
“`
$ node -v
“`と打ったら
“`
zsh: command not found: node
“`となった…。
“`
$ nodebrew -vnodebrew 1.2.0
〜
〜
“`
nodebrewは入っているのに。。# PCスペック
| 項目 | 情報 |
| — | — |
| OS | macOS Sonoma 14.4.1 |
| ハードウェア | MacBook Pro 16inc 2023 |
| プロセッサ | Apple M2 pro |
| メモリ | 32GB |# 解決法
### patyを通せばOKです。
“`
$ cat ~/.zshrc
“`
と実行してみましょう。
中身が見えるはずです。以下を実行して設定を追記します。
“`
$ echo ‘export PATH=$HOME/.nodebrew/current/bin:$PATH’ >> ~/.zshrc
$ source ~/.zshrc
“`“`
$ node -vv21.5.0
“`