Node.jsでURLセーフなBase64変換したいときはbase64urlが使える

全然投稿できてないので小ネタをば。 Node.jsでBase64変換するときは Buffer#toString('base64') することが多いが、URLセーフなBase64にしたい場合、 Buffer#toString('base64url') が使える。 Bufferで指定可能なエンコーディング: Buffer | Node.js v25.2…

SSM Session Managerを使ってRDSへ接続できる環境をAWS CDKで作成する

AWS

検証環境として、RDSにSSM Session ManagerおよびNLBを用いたPrivateLinkでアクセスできる環境を構築することとなった。 今後も同じような環境を作ることになりそうなので、CDKで書くことにしたが、そのものズバリこうすればできる、といったサンプルが見つ…

LLMを用いたテスト自動作成の記事のご紹介

LLM

社内向けにTDDの説明資料を書いており、その調べ物をしているときにたまたま見つけた、LLMを用いたテストの自動作成に関する記事が大変興味深かったのでメモ。 経緯 記事の内容 振り返り 経緯 TDDについての勉強会をすることになり、もろもろ資料としてまと…

Slack APIのconversations.historyはPOSTなのかGETなのか

Slack APIでチャンネルのメッセージを抽出するときに conversations.history を使っている。オプションを確認しようと思ってドキュメントを確認したら、ちょっと気になることがあった。 ドキュメントの「Reference docs」ではPOSTだが、「Sample code」ではG…

Azure FunctionsをVSCodeからデプロイする際、files.excludeで指定したファイルがデプロイ対象から除外される

新しいプロジェクトの一環で、Azure FunctionsをVisual Studio Codeで開発しているが、デプロイしても関数が認識されない事態が発生。 めちゃくちゃハマったのでメモ。 環境 Azure Functions Core Tools v4.0.6280、VSCode v1.94.2、VSCodeのAzure Functions…

Slack Events APIで飛んでくるJSONの内容を確認するだけのLambdaコード

複数サービスを連携して処理するとき、Slack Events API(いわゆるWebhook)を使って、AWS LambdaやAzure Logic Apps経由でもろもろ処理させることが増えた。 ただ、Events APIで飛んでくるJSONが、公式ドキュメントを見てもわかりにくい(というか、メッセージ…

Amplify Gen2のLINEログイン時にLINEユーザーIDを保存する

前回、 Amplify Gen2のLINEログイン時にLINEのIDトークンを取得、検証できた。 今回はIDトークンの検証結果から、LINEユーザーIDを取得し、保存するまでをメモ。 環境 前々回・前回同様、 @aws-amplify/backend v1.0.4, @aws-amplify/backend-cli (ampx) v1.…

Amplify Gen2のLINEログイン時にIDトークンを保存する

前回、Amplify Gen2にLINEをOIDCプロバイダーとして登録し、ログインできるようにした。 続いて、LINE公式アカウントのユーザーと紐づけたいので、アクセストークンまたはIDトークンを取得できないか調べたところ、できたのでメモ。 環境 調査 実装 amplify/…

Amplify Gen2でLINEをOIDCプロバイダーとして設定する

以前、Amplify Gen2にGoogleをIDプロバイダーとして追加したが、LINEログインの実装のため、同様にLINEをOIDCプロバイダーとして追加したのでメモ。 環境 OIDCプロバイダー設定方法 LINEログインの設定手順 LINE Developersコンソールでのチャネル作成 メー…

Amplify Gen2でブランチ環境のデプロイ時に「Cannot find module '$amplify/env/...」が発生する

Amplify Gen2 + Next.js v14で作成したアプリケーションにて、Lambda関数内にて環境変数を参照するため、 import { env } from '$amplify/env/<関数名>' を記述したところ、ブランチ環境のデプロイ時にエラーが発生するようになった。 対応方法を調べたので…

DevToysがクロスプラットフォーム対応していた

以前の記事の時点ではWindows以外には対応しそうになかったDevToysが、いつの間にやらクロスプラットフォーム対応していた。プライベートでも仕事でもWindowsユーザーの自分には関係ないがメモ。 DevToys v2の概要 インストール方法 参考 振り返り 余談 DevT…

Amplify Gen2でGoogleなどの外部IDプロバイダー認証を設定する

Amplify Gen1からGen2に移行する際、Google認証の設定を行ったが、公式ドキュメント通りに進めるとエラーが発生したのでメモ。 環境 外部IDプロバイダー設定方法 Google認証の設定手順 OAuthクライアントIDの作成 Amplifyのシークレット作成 amplify/auth/re…

IrfanViewのCLIでフォルダ構造を維持して画像フォーマットを一括変換する

オンラインストレージと同期しているフォルダに、BMP形式の画像が大量に保存されており、ストレージ容量を圧迫しているので、ファイルサイズを圧縮できないか相談を受けた。 一括で変換するならいくらでもツールがあるが、フォルダ階層はそのままで変換した…

Azure OpenAI On Your DataでAI Searchの検索に使われるクエリを確認する

Azure OpenAIのRAG(Retrieval Augmented Generation, 検索拡張生成)機能であるAzure OpenAI On Your Dataを検証していたが、期待通りに独自データの検索ができない場合がある。 独自データはAzure AI Searchに保存されるため、テキスト検索であればAzure Ope…

AWS CLIによるRDS Data APIの実行

前回作成したAurora PostgreSQL Serverless v2に対して、動作確認のためAWS CLIを用いてRDS Data APIを実行してみる。 環境 AWS CLI v2.15.30、jq v1.7.1。シェルスクリプトはGit for Windows v2.42.0.windows.1のGit Bashで実行。 サンプルコード 以下、実…

AWS CDKによるAurora PostgreSQL Serverless v2およびRDS Data APIの環境構築

Aurora Serverless v2のPostgreSQL互換でRDS Data APIが使えるようになった。 最小ACUを0にできないなど、Serverless v1と完全互換ではないが、ちょうどSalesforceやHTTPでAPI連携できるRDBを使いたい要件があったので、検証することに。 Secrets Managerへ…

Azure OpenAI Serviceの利用申請

Microsoft AzureのAzure OpenAI On Your Dataを検証することとなった。 Azure OpenAI Serviceの利用には、事前申請が必要ということで、2024/2/6時点での申請方法をメモ。 事前準備 申請内容 14, 15: If you have a contact at Microsoft, ... 17: Which Azu…

Yarn v1を使用しているとStorybook v7の実行がERR_REQUIRE_ESMで失敗する

昨日まで動いていたStorybookが、 yarn install したら突然動かなくなったのでメモ。 環境 Node.js v20.10.0, Yarn 1.22.19, Storybook v7.5.3。 問題 Next.js v13プロジェクトで、Storybookを使ってコンポーネント等の確認をしている。 今回、新しいパッケ…

AWS AmplifyでNode.js v18を使うと「GLIBC not found」が発生する

最近新たに開始したプロジェクトで、開発環境をNode.js v18 + Next.js v13に更新した。検証のためにAWS Amplifyにデプロイしたがエラーが発生。 ちょっと調べるとあるあるらしいので、何番煎じかわからないが対応方法をメモ。 環境 Node.js v18.16.1, Next.j…

Whisper APIで解析した結果から、Google Colabで話者ダイアリゼーション(話者の識別)を行う

Whisperで文字起こしした電話内容を、OpenAI APIの gpt-3.5-turbo モデルで要約させている。 会議議事録の要約などは、プロンプトの指定次第で高精度で行えるが、電話の場合、文章の体裁を取らず、会話内容もまとまりがなかったりで、精度が低い。 特に、話…

JavaScriptで配列の末尾の値を取得したいときはat(-1)が使える

Node.jsで、ファイル名から拡張子を取るときに、 fileName.split('.').slice(-1)[0] という書き方を同僚がしていた。 Node.jsのバージョンを18にしていたので、コードレビューで、「配列の末尾を取りたいなら .at(-1) でいいよ」と指摘したら、 at を知らな…

Stable Diffusion web UIで「No Python at」で起動できなくなった場合の対処法

友人から、「PC買い換えてStable Diffusion web UIを移動したら起動できなくなった」という話を聞いた。 状況聞いて解決できたが、エンジニアじゃない人にはちょっと面倒かなあと思いメモ。 問題 調査 対応 git pull で更新できない問題 振り返り 問題 Stabl…

LangChainのドキュメントのURLが変わっていた

前回書いたLangChain.jsのサンプルプロジェクトの設定と実行を、別PCで試してみたらどうもうまく動かない。 なんでだろうと思って調べると、本家のPython版LangChain、およびLangChain.jsの公式ドキュメントのURLが変わっていたのでメモ。 変更前後のURL サ…

WindowsでJavaScript版LangChainを動かす

「ChatGPT使って何かやりたい」的なふわっとした要望のもと、OpenAI APIの検証をすることになった。 APIを素で叩くのはちょっと辛いなあと思っていたので調べると、LangChainを使うのがよさそうに思えたが、チーム内でPython使えるのが自分しかいない。 他の…

Notioin AIにサンプルコードを提示されて驚いたこと

期間限定で無料開放されているNotion AIを使っていて、驚いたことがあったので備忘録。 出来事 感想 余談 参考 2023/3/13 追記 出来事 Node.js のアプリケーション上で、 Chart.js を用いたグラフ表示を行っている。 いくつか要望があったが、そのうち「グラ…

TypeScriptのMapped Typesでのプロパティの型指定方法いろいろ

前回、ちらっとMapped Typesのプロパティの型を extends で切り替える方法を書いたが、他にもいろいろな指定方法があるのでメモ。 環境 実装例 直接指定 Conditional Types P を用いた型指定 プロパティ参照 関数の引数や戻り値 参考 振り返り 環境 TypeScri…

TypeScriptで条件によってプロパティの型を切り替えたり、プロパティを削除する

TypeScriptで、typeやinterface、classの総称型によって、プロパティの型を切り替えたり、削除したりすることができるのでメモ。 環境 方法 実装例 プロパティの型の切り替え プロパティの削除 参考 振り返り 環境 TypeScript v4.7.4 で確認。 方法 Conditio…

TypeScriptの型から、プロパティ名を部分一致で抽出したり削除する

TypeScriptで、既存の型から一部のプロパティを、プロパティ名の部分一致で抽出・削除する方法をメモ。 環境 TypeScript v4.7.4 で確認。 プロパティ名の部分一致での抽出・削除方法 テンプレートリテラル内にUnionを用いると、すべての組み合わせの文字列リ…

GitLabのパッケージレジストリにnpmパッケージを公開する

以前、Tailwind CSSを使ったコンポーネントの設定を複数のプロジェクトで使いまわす方法を調べた。 GitリポジトリとしてGitLab.comを使っており、GitLabのパッケージレジストリにnpmパッケージを公開することで、公開範囲を絞ることができるため、その方法を…

Visual Studio Codeで開いているファイルをエクスプローラー上でフォーカスしないようにする

VSCodeのデフォルト設定だと、開いているアクティブなファイルが左フレームのエクスプローラー上でフォーカスされる。 この時、ファイルの保存されているフォルダが展開されるので、気づくとあちこちのフォルダが開かれていたりする。また、開いているファイ…