技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

JavaのOptional

これまでどういう時に使うのか、いまいち分からなかったのだが、以下のサイト様の記事を読んで理解が深まった気がする。

【Optional入門】Javaでnullを扱うベストプラクティスのご紹介

Optional は null かもしれないオブジェクトを扱うためのもので、メソッドの戻り値として使われる。Optional が持っているメソッドと組み合わせて使うことで、コードを読みやすくすることができる。

あとで読み返してみる。

例外設計

以下の記事がとても参考になった。

凄腕エンジニアさんから学んだ例外の話 #error - Qiita

 

  • 期待した挙動以外は全て「例外」として扱う。
  • 全ての例外を処理(キャッチ)する必要はない。場合によってはログに出してスルー。
  • 例外が起きた時の挙動を決めるのはプレゼンテーション層。これは、例外発生時にどうしたいのかは、それを呼び出した側の文脈によるので。つまり、ドメイン層で例外が発生した場合は、基本的にはそこで処理せず、プレゼンテーション層まで上げる。

AI時代のやりがい

AI時代になっても人間のやりがいが大事。

確かに、AIの生成物をただチェックするだけではつまらないか。いや、生成物の内容をちゃんと理解できれば、それになりに楽しいかもしれないが、それでは多くのソフトウェアエンジニアが不要になるか。。

 

codezine.jp

標準入力と引数

昔、Linux 上でのコマンドのワンライナーを勉強していた頃、パイプを使って後続のコマンドに標準入力からデータを渡すのと、引数でデータを渡すのとで、具体的に何が違うのかモヤっとして調べたことがあった。

今のところ、これらはデータが通る場所が違うと考えている。標準入力は OS(カーネル) が管理する I/O 用の領域を使い、引数の場合は後続のコマンドのメモリ上のスタック領域を使っているはず。つまり、カーネルの管理する領域を使ってデータのやり取りをするか、ユーザ領域を使ってデータのやり取りをするかの違いだと思っている。

標準出力と戻り値の違いも、同じように考えている。

トランザクションの分離とロック

昔、DBの勉強をしていた頃、トランザクションの分離とロックの関係性が分からず、いろいろ調べたことがあった。その時は、トランザクションを分離するためにロックが必要と理解した。ただ、それが明確に書かれたページがなく、確信が持てなかった。

今日、以下の記事を読んで、トランザクションの分離レベルの実装にロックが使用されている、という旨の記載があったので、以前の自分の理解で正しかったようだ。良かった。

https://codezine.jp/article/detail/17333?p=2

SAMLとOIDC

SAML と OIDC (Open ID connect) の違いについて勉強した。

認証時の処理シーケンスは似ているが、SAML はサービスと idP 間で直接やり取りしないのに対して、OIDC ではサービスと idP 間での直接やり取りが発生するようだ。

SAML では直接やり取りはしないが、ユーザのブラウザのリダイレクトを通じてやり取りするので、間接的にやり取りをしている感じになる。

大まかな棲み分けとしては、重厚で toB 向けの SAML と、軽量で toC 向けの OIDC といった感じか。

SAMLでのログイン情報はどこに保存されるのか?

SAML は SSO を実現するための仕組みなので、例えば、ユーザ(ブラウザ)が idP を経由して SP1 にログインしたら、SP2 にはログインなしでアクセスできる。

ネット上では、SP1 のログインまでの説明はたくさんあるのだが、その後の SP2 へのログインの説明があまりなく、どうやって SP2 へのログインを実現しているのか分からなかったが、幾つかのサイトを見たところ、たぶん以下だと推測している。

 

idP を通じで SP1 にログインすると、ブラウザの cookie にログイン情報 (セッション情報) が保存される。その後、ブラウザから SP2 にログインする際は、cookie に保存されているログイン情報を使うことで再ログインは必要ないのだろう。(idP と SP1 および SP2 は事前に連携設定をしていて、SP1 へのログイン情報は SP2 でも使用できる前提)

 

SAML では cookie は使用しない認識だったが、以下のサイト様によると使うらしい。

https://zenn.dev/ksrnnb/articles/36ba8dcc4f4c64

また、以下のサイト様でも、SAML 認証失敗の原因として cookie の有効期限切れを挙げており、やはり上述の理解であっていると思われる。

https://support.ta.kingoftime.jp/hc/ja/articles/11210087289113

 

もしかしたら、この辺は idP や SP 依存だったりするのだろうか?

ログイン情報を idP 上に保存して、SP1 へのログインの後に SP2 にログインする際、idP から 「ログイン済みだよ~」という情報をもらって、ログインを飛ばすとかあるのかな?しかし、この場合でも idP 側でユーザ(ブラウザ)の識別が必要なので、結局 cookie が必要になるような。。

となると、やはり、ブラウザの cookie にログイン情報を保存しているのだろうか。

 

2024/2/6 追記

SAMLではなくOIDCについてだが、以下のサイト様で分かりやすく説明されている。おそらくSAMLも同じだろう。

https://qiita.com/yuichi-nakamura/items/0707654d1b17761cb0eb