くちたと計算記

プログラミングのことを書きます

GitHub Actions で Nuxt3 製の Web サイトを GitHub Pages にデプロイする

モチベーション Nuxt3 で構築した Web サイトを GitHub Actions で GitHub Pages にデプロイするのに、ハマるとは思わなかったので記事にしました。 結論 GitHub 上で選択できる Starter Workflow を使うと上手くいかないので、以下のような仕様のワークフロ…

モジュールごとに分割したソースコードが読みづらいのは、プログラミング言語などの仕様に依存した問題だと感じた話

概要 インスタンスメソッドと関数のどちらが分かりやすいのか考えるうちに、いずれにせよ Java で普通に書いたら分かりづらいという結論に至りました。 Java でメソッドなどを呼び出すときコードを書くと、呼び出すメソッドで定義した仮引数の名前がコード上…

Spring で複数の ControllerAdvice を使うときは、一つのファイルに ControllerAdvice をまとめると見通しが良さそう

以下のような仕様のリクエスト共通処理を ControllerAdvice として実装しようと思いました。 AuthenticationPrincipal に保存された情報をもとに、パッケージごとに Controller へのアクセス制御をおこなう。 ページへのリクエストがあるたびに共通の処理を…

Nuxt3 の useFetch / useAsyncData で POST リクエストを送るときはリクエストがキャッシュされないように注意しよう

概要 useFetch で key を設定せずに POST リクエストを送信する実装をしてみたら、 ボタンを何回押しても一度しかリクエストが送信されなくなってしまいました。$fetch を直接使ったり、 key を適切に設定すれば解決しました。 前提知識 TypeScript Nuxt 3 …

Nuxt3 で Provide / Inject を使って画面遷移先に Vuetify の Snackbar を表示させる

概要 Nuxt3 と Vuetify を使って SPA を実装しています。 ログイン成功したときなどに、 遷移先に Snackbar でメッセージを表示させたいと考えました。 ところが、以下のように pages 配下のコンポーネントに Snackbar を書くと、遷移先のページには Snackba…

Spring Boot で REST API を実装するときに、認証だけ FormData を使うと Spring Security の設定で楽できる

まとめ UsernamePasswordAuthenticaitonFilter が FormData から認証情報を読み込むので、 それを仕様にしてしまったほうが実装が楽になる。 UsernamePasswordAuthenticaitonFilter を使えないなら、 JSON から認証情報を読み込んでも実装コストとコード量は…

テンプレートメソッドパターンの別解を考えたがクラスから知識が漏れ出しただけだった

テンプレートメソッドパターンとは振る舞いに関するデザインパターンの一つ。 ja.wikipedia.org 公開する振る舞いのうち一部をサブクラスでのみアクセス可能な抽象メソッドとして抽出している。 この方法を用いることで、公開する振る舞いの仕様を守りながら…

Spring Web MVC のアノテーション `ModelAttribute` の挙動と、 `SessionAttributes` との併用でうまくいかなかったこと

概要 入力フォームを Spring Web MVC の Annotation Controllers で実装しているときに、 @ModelAttribute と @SessionAttributes を使ったところ、すんなりと上手くいかない部分がありました。 そこで、起きた問題と解決策を記事に書きました。 前提 Java 1…

Spring Securityで自作したAuthenticationFilterとAuthentiactionProviderを使う方法

概要 Spring Security 5.7.xではWebSecurityConfigurerAdapterを拡張する記法が非推奨となり、SecurityFilterChainをBeanとして登録する記法が推奨されています。 そこで自作したAuthenticationFilterとAuthenticationProviderを使う設定ファイルを書き直そ…

ユーザーの認証認可とアプリケーション分割についてのメモ

概要 複数のロールが関与するWebアプリケーションの認証認可を考えるときに、アプリケーション分割した方がいいのか、ロールベースの認可でアクセス制御をすればいいのか悩みました。 結論 状態遷移可能なロール同士は同じユーザー分類として分類し、状態遷…

Spring Securityのデフォルトの挙動とSecurityFilterChainを自分で登録した時の挙動

概要 結論 調査の経過 1. どんなときにデフォルトの機能が無効化されるのか 2. どんな機能が無効化されてどんな機能が無効化されないのか 起動時のログ 差分 最後に 参考URL 概要 Spring Security 5.7.2において、Servletアプリケーションでは以下のような説…

フロントエンドとバックエンドをモノリポ構成で開発する時にESLintについて調べたこと

解決したいこと 結論 ESLintの設定を共通化する方法 方法1. ルートパッケージとサブパッケージにそれぞれ設定ファイルを配置する 方法2. ルートパッケージの設定をサブパッケージで拡張する 方法3. ルートパッケージの設定にディレクトリごとの設定を記述す…