- 1. Hexabaseのアクション拡張プログラムを使って、サーバーサイドでスクリプトを実行する
- 2. Node.jsで無料のタイムスタンプサービスに接続する
- 3. TechBlog: PreloadResolverという仕組みを作ってGraphQLのN+1問題に対応した話
- 4. AWS SDK V3 のSQS(Simple Queue Service)で、いくつか動作確認した話(AWS SDK V2 → V3 移行Tips)
- 5. PrismaでWhere条件を動的かつ型安全に実装する方法
- 6. npm install -g {packageName}は古いと言われた
- 7. Json Server役立ちサイトメモ
- 8. Json Serverで認証付きモックを作る
- 9. Json Serverでモックを作る
- 10. 【Node.js】Slack APIでメッセージを送信する方法
- 11. Nodejs + React + MySQL+ Express Todoアプリ
- 12. ARでアイスブレイクを in Azure Tech Hackathon
- 13. Expoの使い方
- 14. TypeScriptでMessagingAPIを介してLINEBotのリッチメニューを設定する方法
- 15. expressの基礎をまとめる2
- 16. Dockerとその最も使用されるコマンド
- 17. Prisma4にアップグレードした際に$queryRawを使用している箇所でTypeError: Cannot mix BigInt and other types, use explicit conversionsが発生する問題
- 18. Fast Node Manager(fnm) チートシート
- 19. 【Node.js】Stripeライブラリのlist系のAPIでoffsetが使えないの無理くりどうにかする
- 20. Node.jsの基礎をまとめる2
Hexabaseのアクション拡張プログラムを使って、サーバーサイドでスクリプトを実行する
[Hexabase](https://www.hexabase.com/)はエンタープライズ向けのBaaS(Backend as a Service)を提供しています。主な機能としてはデータベース、ファイルストレージ、認証、リアルタイム通信などになりますが、それだけで全ての開発要件を満たせる訳ではありません。
そこで、足りない機能を開発し、コードをサーバーサイドで実行できるアクション拡張プログラムが用意されています。いわゆるFaaS(Function as a Service)のようにして、スケーラブルにコードを実行できます。
今回はそのアクション拡張プログラムの使い方と、[blastengine](https://blastengine.jp/)を使ってメール送信を行う(ネットワーク通信を行う)方法を解説します。
## 開発者機能を有効にしてください
アクション拡張プログラムを使う場合には、Hexabaseの個人設定で `開発者向け機能` を有効にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.am
Node.jsで無料のタイムスタンプサービスに接続する
## タイムスタンプサービス
無料でタイムスタンプトークンを発行するサービス、[Free TSA Project](http://eswg.jnsa.org/sandbox/freetsa/) に接続します。タイムスタンプリクエスト、タイムスタンプレスポンス、タイムスタンプトークンの出力、解析には[jsrsasign](https://kjur.github.io/jsrsasign/)を使用します。
## jsrsasign のダウンロード
NPMでダウンロードします。
“`
> npm install jsrsasign jsrsasign-util
“`## タイムスタンププロトコル
タイムスタンプに関わる仕様は、[RFC3161](https://datatracker.ietf.org/doc/html/rfc3161)、[RFC5816](https://datatracker.ietf.org/doc/html/rfc5816) で 定義されています。
HTTP通信で行う際の仕様が [RFC3161 の 3.4 Time-Stamp Protocol
TechBlog: PreloadResolverという仕組みを作ってGraphQLのN+1問題に対応した話
エクサウィザーズのテックブログでGraphQLでのN+1問題対策についての記事を書きました。
https://techblog.exawizards.com/entry/2022/12/01/154745
AWS SDK V3 のSQS(Simple Queue Service)で、いくつか動作確認した話(AWS SDK V2 → V3 移行Tips)
# はじめに
https://qiita.com/Syoji_Yonemoto/items/09883e57643583ef39af
引き続いて、今度は、SQS(Simple Queue Service)についても確認しました。
やはり初回(Firehose)の運が悪かっただけで、基本は互換できてそうだという感触になりつつありますが、自分のメモも兼ねてるので確認できた範囲をまとめていきます。# 結論
SQS(Simple Queue Service)に関しては、私が普段使うメソッド群については、問題ありませんでした。# V2 と同じ使い方で問題なく動作確認できたメソッド
+ sendMessage
+ receiveMessage
+ deleteMessage
+ getQueueAttributes# 余談(雑多な感想)
受信・送信・削除・状態確認、一通りLambdaからSQSを活用する際に利用するAPIは試しましたが、V2の時と変わらぬ使い方ができて良かったです。https://qiita.com/Syoji_Yonemoto/items/e619d
PrismaでWhere条件を動的かつ型安全に実装する方法
# はじめに
WebAPIの仕様としてリクエスト時に与えられたパラメータに応じて、WHERE句を動的に生成するケース(検索など)はよくあるが、それをPrismaで型安全に実装する方法について。# 環境
– TypeScript:4.7.4
– Prisma:4.8.0
– Provider:MySQL# テーブル定義
usersテーブルに名前(name)と年齢(age)がカラム定義されている。
“`schema.prisma
model User {
id Int @id @default(autoincrement()) @db.UnsignedInt
name String
age Int@@map(“users”)
}
“`# WebAPIとしての抽出条件の仕様
オプショナルで以下の条件が指定可能なユーザー一覧のWebAPIを想定する。
– 名前(name)に特定の文字列が含まれているか?
– 年齢(age)がn歳以上か?
– 年齢(age)がn歳以下か?参考実装用の仮想定義だがこのような型のオブジェクトが与えられるイメージ
`
npm install -g {packageName}は古いと言われた
先日、モブプロで開発作業中にnpm install -gを実行しようとして先輩に「npm install -gはもう古い。[npx](https://www.npmjs.com/package/npx)を使った方がいい」と言われた。
“`
npm install -g {packeageName} # インストールしたらディスク上残る上にインストール後に実行する必要があるnpx {packageName} # インストール、実行、削除、を全部やってくれる
“`npxは node package executerの略でパッケージの実行ツールらしい。
パッケージを探してインストールして実行、処理が終わればパッケージを消してくれる優れもの。便利だなぁ~
Json Server役立ちサイトメモ
https://swfz.hatenablog.com/entry/2016/12/06/024342
https://wing-degital.hatenablog.com/entry/2019/05/08/234119
https://www.cyokodog.net/blog/use-well-json-server/
https://deep.tacoskingdom.com/blog/151
https://gist.github.com/juanbrujo/efdcf6ab9eacbd5b5d69884233d0a3ce
https://silurus.dev/articles/4GtXZIAR3mqEduLkgoM1Z2
Json Serverで認証付きモックを作る
参考サイト備忘録
https://tech-blog.rakus.co.jp/entry/20201029/rest-api
Json Serverでモックを作る
未実装APIへの通信をテストしたい事がある。
そんな時はJson Serverで未実装APIのモックを作ると吉。
– – –
まず大前提としてnode.jsをインストールする(json serverはnpmのパッケージなので):::note info
npmでjson serverをインストールする時にpermission deniedエラーになる事がある。
以下サイトによると、npm公式ではnvm等のnodeバージョンマネージャでnodeを入れて欲しいとの事。
https://zenn.dev/ikeo/articles/8d0c88dcedf256b09f73
少し遠回りになるがnodeバージョンマネージャーを入れてあげると良さそう(著者はnvmを入れた)
:::
:::note info
また、著者はMacで、zshでnpmインストールを行なったが、homeに.zshrcファイルが無かったので、調べた所、以下サイトによりhomeで以下コマンドであらかじめ作っておくモノという事で解決。
https://detail.chiebukuro.yahoo.co.jp/qa/quest
【Node.js】Slack APIでメッセージを送信する方法
Node.jsでエラー時にSlackにメッセージを送信する実装をしました。
↓こちらの記事の通りに進めさせていただきました。
https://zenn.dev/kou_pg_0131/articles/slack-api-post-message
とても分かりやすかったです。ありがとうございます。
基本的にこの流れで設定できたのですが、少しつまずいた点があったのでメモしておきます。**(1) [アプリを作成する](https://zenn.dev/kou_pg_0131/articles/slack-api-post-message#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)**
**(2) [スコープを設定する](https://zenn.dev/kou_pg_0131/articles/slack-api-post-message#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97%E3%82%92%E8%A8%AD%E5%AE%9A%E3%
Nodejs + React + MySQL+ Express Todoアプリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/e5c2b470-4718-34e6-e550-b3034296f198.png)
# 開発環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/5e66bcbd-044b-bcab-dadd-b694cab5382b.png)# 参考動画
# 使用したパッケージ
### バックエンド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654025/53dd671f-bbd5-7611-098a-1477c0a95587.png)“`terminal:terminal
npm install body-parser cors dotenv expres
ARでアイスブレイクを in Azure Tech Hackathon
今回は、Azure Tech Hackathonにおいて、自分がチームリーダーを務めた**Team B**の制作物、「FruitsBasket」について紹介いたします!!
# Azure Tech Hackathonについて
顔認証やバーコード読み取りなどの**画像認識**に注目したハッカソンとなっております。IDEACTIVE JAPAN PROJECTの学生アンバサダーチームの運営で開催されました。https://connpass.com/event/269487/
# FruitsBasketとは
FruitsBasketは、ARを使用したアイスブレイク補助アプリとなります。![繝上ャ繧ォ繧ス繝ウ_逋コ陦ィ_繝倥z繝シ繧キ繧兩10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698432/a66e8a64-44b5-95f8-6d4c-620b943c7d33.jpeg)
## コンセプト本アプリのコンセプトは、
「**リアルタイム画像認識で世界を広げる**」です。本アプリによ
Expoの使い方
# Expoのインストール
講義で使用した環境ツールは2020年ものなので,今時2022年ものに変更しようかと思いましたが,Expo側が対応していなかった・・・1. Expoのアンインストール
“`sudo npm un -g expo-cli“`
1. [node jsのアンインストール](https://blog.proglus.jp/5518/#i)
1. [今度はHomebreでインストール](https://brew.sh/index_ja)
1. [Homebreで最新のLTS Nodejsをインストールする](https://tech-blog.s-yoshiki.com/entry/254#nodejs%E3%81%AE%E6%A4%9C%E7%B4%A2)
1. expo-cliをインストールしようとするるもNodejsが新しすぎるということでエラー
“`required: { node: ‘>=12 <=16' },``` 1. Nodejsをアンインストールしてnodejsのバージョン16の安定板をダウンロード # プロジェクトの作成 以下コマンド
TypeScriptでMessagingAPIを介してLINEBotのリッチメニューを設定する方法
# はじめに
TypeScriptを使ってLINEBotの開発をしている中,リッチメニューの更新が[公式リファレンス](https://developers.line.biz/ja/docs/messaging-api/using-rich-menus/)で解説されている方法だとめちゃめんどくさいと思いました.
そのため,実行するだけで一発でリッチメニューの更新をできるようなコードを実装しました.
TypeScriptとして探すとあまり記事がみつからので共有しておこうと思います.# 環境
– node.js 16.19.0
– line/bot-sdk 7.5.2# 実装
とりあえず動かしたい人は,下記コードをコピーしてそのファイルを実行すれば動くと思います.その時にConfig.tsの作成を忘れないでください.
解説はコードの後に載せておきます.
“`updateRichMenu.ts
import * as fs from ‘fs’;
import { Client,RichMenu } from ‘@line/bot-sdk’;
import { CHANNEL_ACC
expressの基礎をまとめる2
こちらの記事の続きを書いていく。
https://qiita.com/ysk-s/items/db9452e4c93e392ea84e
続いて、一意のユーザーidによって表示内容を変更する。
“`
router.get(“/:id”, (req, res) => {
res.send(`${req.params.id}のユーザー情報を取得しました。`);
});
“`エンドポイントを入力する第1引数にスラッシュ”/”とコロン”:”を打ってからidと入力する。そうすると、それを一意のidとしてページを開いてくれる。
また、そのidはreq.params.idで取得することが出来る。postメソッドやdeleteメソッドを用いるとid情報の登録や削除などのリクエストを送ることが出来る。
そのためには専用のフォームを用いたり、APIを使用する必要がある。続いて、res.send()の中でHTMLを表示するやり方を示す。
server.jsの中に”app.use(express.static(“public”));”というコードを加える。
こうすることで、exp
Dockerとその最も使用されるコマンド
# Dockerは
Dockerは、開発、配信、アプリケーションの実行のためのオープンプラットフォームです。Dockerを使用すると、アプリケーションをインフラストラクチャから分離することができ、ソフトウェアを迅速に提供することができます。Dockerを使用すると、アプリケーションを管理する方法と同じ方法でインフラストラクチャを管理することができます。Dockerのシッピング、テスト、コードを迅速に展開する方法を活用することで、コードを書いて実行するまでの遅延を大幅に短縮することができます。:whale:![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1034667/5fcb3de6-4a28-79bd-b44d-34df2873b494.png)
最初に、コンピュータにDockerをインストールする必要があります。これらのコマンドはWindowsまたはMacで動作します(私はMacから作業しますが、Windowsでも実行できます)。
ここに最も使用されるコマンド:
“`
d
Prisma4にアップグレードした際に$queryRawを使用している箇所でTypeError: Cannot mix BigInt and other types, use explicit conversionsが発生する問題
# はじめに
[以前の記事](https://qiita.com/irohafox/items/2d484bbcbf9a023cb524)でPrisma3系から4系にアップグレードする必要があるケースを書いたが、
その際に発生した問題について。# 環境
– Prisma(before): 3.13.0(<= 3.15.2) - Prisma(after): 4.8.0(>= 4.0.0)
– Provider:MySQL# 概要
あるテーブルのレコード件数を`$queryRaw`で取得してレコード件数+1をログに出力する場合、一例ではあるが以下のように書くことができる。
“`ts
const result = await this.prisma.$queryRaw< { count: number }[] >`SELECT COUNT(*) AS count FROM users`
const count = result[0].countconsole.log(‘count + 1 =’, count + 1)
“`
仮にusersテーブルに1,000件のレコード
Fast Node Manager(fnm) チートシート
# 概要
node管理のためにどのパッケージツールを入れているのかわからなくなるのでまとめておく
(fnmのインストール方法に関しては記憶にないのでたまに使うコマンドだけ、、、)## アジェンダ
1. fnmとは
2. Commnads### fnmとは
詳しくはこちら↓と公式にぶん投げておくhttps://github.com/Schniz/fnm
### Commands
#### バージョンの確認
“`
$ fnm -V
fnm 1.31.0
“`#### インストール済みバージョンの一覧
“`
$ fnm list
* v14.18.0 default
* v18.13.0
* v19.0.0
* system
“`#### バージョンの指定
特定のバージョンの場合
“`
$ fnm use {@version}
Using Node {@version}
“`デフォルトに設定する場合
“`
$ fnm default {@version}
“`プロジェクト毎にディレクトリ配下のnodeを指定する場合
`.node-version
【Node.js】Stripeライブラリのlist系のAPIでoffsetが使えないの無理くりどうにかする
## はじめに
[【Node.js】Stripeライブラリの入出力がsnake_caseになっているのをどうにかしたい](https://qiita.com/yuta-katayama-23/items/0cf633f0f81c52f9422c)では、入出力をcamelCaseにできるようにするための独自拡張をやってみた。
今回は、StripeのAPIに`offset`がない事に気づき、SQLに親しんでいる身としては使いにくい(`starting_after`はどちらかというと、NoSQL等で使われるデータの取得を行う際のデータ位置を指定するものになっている)ので、無理くり`offset`を使えるようにする実装をやってみたいと思う。
※以下の実装を見ればわかるが、loopでデータを取得しているだけなので、StripeのAPIの[レート上限](https://stripe.com/docs/rate-limits?locale=ja-JP)に引っかかる可能性が高いので、PoCではいいかもだが、頻繁にlist取得するような実装をするのであれば、今回試しにやってみた実装はNGになると思
Node.jsの基礎をまとめる2
前回の続きです。ぜひこちらを読んでから御覧ください。
https://qiita.com/ysk-s/items/be9db685d51aac20e179
クライアントから受け取ったリクエストとレスポンスを引数として受け取り、ブラウザへ処理を返す。
最初に”res.writeHead()を追加する。これはリクエストに対してこういうHead情報を返しますよという関数。
第1引数には200を入れる。これは通信がうまくいってますよというステータスコード。
第2引数にはHeadの中身を入れる。今回はそのレスポンスで返すコンテンツの中身はhtmlファイルですよっていう中身を送る。それが以下のようなコードになる。
“`
//ブラウザからアクセスが来たときの処理
res.writeHead(200, {“Content-Type”: “text/html”});
“`そして、htmlファイルを読み込ませる。
htmlファイルを読み込ませるにはfsというモジュールが必要になる。
fsモジュールを読み込んでreadFileSync()という関数で非同期処理でind