NextAuth.jsで独自サインインページを作成する場合の注意すべきこと

NextAuth.jsには標準でもサインインページとサインアウトページは用意されているのだが、実務ではそのまま使いづらく、独自のサインインページを用意したいことが多いのではないかと思う。 本稿では、独自のサインインページを作成する場合の設定の概要と注…

NextAuth.jsのセッションからAccessTokenを取得できるようにする。

一般的な話であるが、OAuth認証の基本的な仕組みを前提として確認する。OAuth認証を利用するWebアプリは、OIDCプロバイダから提供されたアクセストークンの正しさを、ユーザプロファイル情報の取得可否によって確認する。つまり、認証の過程においてWebアプ…

Next.JS App RouterにおいてSVGをAPIから出力する方法

SVGを最近よく活用している。CanvasよりReactとの相性はよいし、ベクターなのも好み。 (Three.jsを使えると面白いけど、、その機会はなかなかない。) だいたいの場合は、HTMLに埋め込んで使えばいいので、特別なことをする必要はない。 ただ、たまに画像と…

DeepL APIの試用

APIを試してみたのでメモ。 import 'dotenv/config' const API_KEY = process.env.DEEPL_API_KEY; const API_DOMAIN = process.env.DEEPL_API_DOMAIN; if (API_KEY == null || API_DOMAIN == null) { throw new Error(); } const API_ENDPOINT = `https://${…

画像を返すAPIの作成

Azure Static Web Appではstaticなファイルにはmiddlewareが機能しないっぽいので、 画像にも認証をかけたい場合はAPIで画像を返すようにする必要がある。 Static Web Appってそういうものだよなーと思っているので仕方ない気がするし、 そもそも認証が必要…

Azure Static Web App ServiceにNext.js(App Router)をデプロイする。

以前にAzure Web App Serviceへのデプロイについての記事を書きました。 ma38su.hatenablog.com 今回はこのデプロイをブラッシュアップして、Azure Pipelineからstatic web appへもデプロイできるようにしました。 2024/2/10 追記 Next.JSのmiddlewareうまく…

NextAuth.jsでAutodeskアカウントでセッション管理するカスタムプロバイダーを作ってみた。

NextJsの認証を簡単に実現するモジュールのひとつであるNextAuth.jsについて、Autodeskアカウントを使ってみようということで、 今回はカスタムプロバイダーとしてAutodesk Platform ServicesのOAuthを試してみたので、その結果を残しておきます。 いまauth.…

GraphQLのサーバサイド認証とその実装のためのContext

新しい技術を試すにあたって、面倒ではあるが、認証までは一通り使いこなせる必要があると感じている。ただ、認証は結構めんどくさいし、すぐ忘れてしまいがちなので、メモを残しておく。 GraphQLサーバに、認証機能を付与するにあたって、Contextを定義する…

GraphQLの型定義をスキーマから自動生成する。

GraphQL、型定義をスキーマから自動生成するところまで試してみた。 やってみて気づいたこととして、自動生成する型定義はサーバとクライアントの2種類があるということ。それぞれ必要。 サーバ サーバの方はschema.graphqlというようなスキーマ定義ファイル…

GraphQLのクライアントを試してみる。

GraphQLの理解のため、まずはライブラリなど使わずfetchでGraphQLのクエリを発行してみる。 const query = gql`{ books { id } }`; async function queryByFetch() { const res = await fetch('http://localhost:4000/graphql', { method: 'POST', headers: …

viteのサーバ用にリバースプロキシのミドルウェアを書いた。

expressを使うと楽に実装できた。 まだ試行錯誤しているので、とりあえずvite.config.tsにべた書き。 import { ViteDevServer, PluginOption, defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' import express from 'express'; imp…

SuspenseをNextJSで使う。

追記:NextJS(AppRouter)でSuspenseを使うときはCSRにしようと書いたのだが、CSRだとNextJSのRouter Cacheと相性がわるそう。というか、最近NextJSはオーバースペックだなぁと感じている。 Viteで作っていたReactのプロトをNextjsに移植したところ、Suspense…

Next.JSをAzureのWeb App Serviceにデプロイする

最近、新しいアプリを作ってみたらデプロイに苦労したのでメモを残しておく。 2023.9.13時点で、Next.JSのアプリは、VSCodeの拡張機能や、Web App Serviceから自動設定できるGitHub連携のデフォルトのGitHub Actionでは、Next.JSのデプロイに時間がかかりす…

npmのpackageを作る?

いくつかのPJで共通した処理があり、それぞれで書き直すのもめんどくさいので、packageを作りたくなったのだが、そこでふと、packageってどうつくればいいのか?と思い調べてみた。 publicに運用したい場合 npmやgithub packageなどが選択肢になる。 ただし…

入門WebAssemblyの読書メモ

読んだ。 本書では、WATという人が読み書きしやすいテキストフォーマットを通して、WebAssemblyを解説している。 実務でWATを直接書くのは想像できないので、教養的な位置付けになるかと思っていたが、結構よかったと思う。 ちなみに、8章で、衝突判定をwasm…

React自作

少し前に話題になっていたReact自体の自作をやってみた。 一日かからないくらいの時間で、実装できるし、Reactの動作をかなりこまかく理解できるようになったので、React書く人にはお勧めしたい。 zenn.dev 自分が書いたのは以下。ほぼ写経。 github.com 気…

nand2tetris

一通り終えたので、感想などを書き残しておきたい。 1~5章は一週間かからずにやれたと思うけど、 6章から12章のソフトパートは、3週間くらいはかかったのではないかと思う。 (手が止まっていた期間もそこそこあるけれど。) 1章 この章ではNANDからNOT、AN…

Revit/DynamoのPythonでAPI callしたりブラウザを開いたりする。

Revit + Dynamoでは、CPythonが動くので、pythonでできることは一通りできると考えてよさそう。 サンプルなどで見かけたことはないのだが、PythonノードではWebAPIをコールして、結果を次のノードに渡すとかもできた。 例を二つほど上げておく。 PythonでPOS…

「Pythonでいかにして暗号を破るか」の読書メモ

一通り終えた。一週間くらいはかかったと思う。 少なくとも最初の数章結構平易なので、基本的な数学に抵抗がなければ、Python初心者でもある程度頑張れるかもしれない。 ある程度Pythonになじみがある人にとっては前半は物足りないかもしれない。 ただ、後半…

C#でBase64エンコード

C#

Base64の=はパディングだったことを知りました。 まったく意識していなかったのですが、WebAPIなどではパディングなしが求められることもあります。 無意識にBase64エンコードするとパディングありの結果が出力されていることもあるので、少し注意が必要です…

C#をラフに試すために

C#を書かないといけないことがよくあるのだが、いちいちVisual Studio立ち上げてプロジェクト開くのは結構めんどくさい。 特にプラグイン開発などは、コードを実行までが長い。。。 (ユニットテストとかでさくっと確認すればよいのかもしれない。) 特にVis…

Autodesk ForgeでのData Management APIの利用

開発メモ。 ForgeのAPIのなかに、Data Management APIといって、BIM360やACCのデータを取り扱うAPIがある。 このAPIを使うに当たっては、事前にForgeのアプリ毎(Client ID毎)に、設定が必要がある様子。 そうしないとhubsが取得できない。 設定はBIM360のAcc…

ts-nodeのエラーの原因

Typescriptをビルドせずに実行するために、久々にts-nodeを使ってみたらエラーが出た。 $ npx ts-node script.ts TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/xxxx/.../script.ts ... 以下の2点を対処したら解決した。…

Revit Dynamoでnumpyをimportする。

Dynamoでも、Pythonを書いているとnumpyが使いたくなることがあるかもしれません。 一応、Revit2022以降では、CPythonが推奨されているので、設定すればnumpyも使えます。 ただ、それなりに面倒なので、numpyを使うまでの手順をメモしておきます。 環境 Wind…

AzureのVirtual Machinesに、Azure ADでログインする。

要は自分で構築したVMに、会社MSアカウントでログインできるようにする、ということです。 結論としては公式の手順通りでOKでした。 Azure AD を使用して Azure の Windows 仮想マシンにログインする - Microsoft Entra | Microsoft Learn 情シスなどへの相…

3Dプリンタのフィラメントの話

3Dプリンタを買う前から、フィラメントは沼だなと思っていたのだけれど、すっかり沼に落ちてしまった感はある。 ma38su.hatenablog.com フィラメントというのは、3Dプリンタが造形する、プラスチックの原料。通常、紐状になっていて巻いてある。 PLA だいた…

3Dプリンタ PRUSA MINI+を買った話。

なにかしら3Dモデリングをする機会を作りたかったこともあって購入に踏み切った。 元同僚からは - Creality Ender 3 - QIDI tech X-Plus - Prusa i3 MK3S+ を勧めてもらったのだけれど、Prusaをみているときに小さなMINI+に手が伸びたという感じ。 結論とし…

Line[]をPolygonにマージするDynamoノード

Polygonは、Surface.ByPatchでSurfaceに変換してから、Surface.PerimeterCurvesでLineには変換できるんだけど、逆にLineからPolygonとかSurfaceに変換は標準のノードではできない。(と思う。) だけど戻したいことはよくある。仕方ないから書いた。 サード…

Line[]から無駄な点を除くDynamoノード

Unionを繰り返して生成したSurfaceをPerimeterCurvesで直線にばらすと、 線分が無駄に細かく刻まれていて面倒な時がある。 まっすぐな線分をつなぐDynamoノードのためのPythonスクリプトを書いた。以下。 # Python 標準ライブラリおよび DesignScript ライブ…

ESRIのArcGSI Onlineで座標系を変換する方法

ESRIのArcGSIで特定の地点を中心に指定した寸法の形状などを生成しようとして調べていたのだけれど、 緯度経度ではもちろん、WebMercatorでも当然だが、うまくいかず困っていた。 具体的には、特定の点から10m東に移動した点などを算出したい場合などである…