徒然

Module Java Script

.mjs の意味

  • Module JavaScript の略

  • ES Modules(import/export を使うモジュール方式)で書かれた JS ファイルであることを示す

ファイルの拡張子 .mjs は、ECMAScript Modules (ES Modules / ESM) として扱われる JavaScript ファイルであることを明示するための拡張子です。

主に Node.js 環境において、従来の読み込み方式(CommonJS)と区別するために使われます。

主な特徴とポイント

  1. ES Modules (ESM) の強制

    • Node.js では通常、.js ファイルは CommonJSrequire / module.exports を使う方式)として扱われます。
    • .mjs 拡張子を使うと、そのファイルは強制的に ES Modulesimport / export を使う方式)として扱われます。
  2. 構文の違い

    • CommonJS (.js のデフォルト):
      const fs = require('fs');
      module.exports = function() { ... };
      
    • ES Modules (.mjs):
      import fs from 'fs';
      export function myList() { ... };
      
  3. Strict Mode(厳格モード)がデフォルト

    • .mjs ファイル内では、自動的に 'use strict'; が適用された状態になります(変数の宣言漏れがエラーになるなど、安全なコードになります)。

なぜ作られたのか?

JavaScript の標準仕様(ES2015/ES6)でモジュール機能(import/export)が決まりましたが、Node.js にはそれ以前から存在する独自のモジュール機能(CommonJS)がありました。

エノク

エノクについての整理

名前と表記

  • ヘブライ語: חנוך, חֲנוֹךְ
  • ギリシア語: Ενώχ (エノフ)
  • アラビア語: إدريس (イドリース)
  • 英語: Enoch (イーノック、イノック)
  • 意味: 「従う者」

系譜

  • : ヤレド(イエレド)
  • : メトセラ
  • 子孫: ノアの曽祖父にあたる ※カインの息子のエノクとは別人

各文献での記述

創世記

エノクという名前は2回登場:

  1. 4章17節: カインの子エノク(別人)

    • カインが建てた町の名前の由来
  2. 5章21-24節: ヤレドの子エノク(本人)

    • 65歳でメトシェラをもうける
    • 365年生きた
    • 特徴的な記述: 「神とともに歩み、神が彼を取られたので、いなくなった」
    • 通常の死の記述がない

エノク書

  • 天使エロヒムによって天に上げられた
  • 天使メタトロンに変容させられた
  • エチオピア正教では旧約聖書の正典に含まれる

ヨベル書

  • 誕生: 第11ヨベル第5年周第4
  • : バラカ(父は天使ラスイエル)
  • : エダニ(父は天使ダネル)
  • 結婚: 第12ヨベル第7年周
  • 子の誕生: 第6年にメトシェラが生まれる

ユダの手紙(新約聖書)

  • 14-15節で『エノク書』から最後の審判に関する預言を引用
  • 初期キリスト教徒も『エノク書』を読んでいた証拠

コーラン(イスラム教)

  • 「マルヤム」の章に預言者イドリースが登場
  • 神によって高い所に上げられたと記述
  • このイドリースをエノクと同一視することがある

重要なポイント

エノクが後世で重視される理由は、通常の死の記述がなく「神が連れて行った」という特殊な表現がされているため、様々な宗教文献で言及される存在となった。

JWT(SON Web Token)とは

JWT(JSON Web Token)とは、
ユーザーの認証情報や属性情報などを安全にやり取りするための、コンパクトなトークン形式のことです。
Webアプリ・API・モバイルアプリなどで幅広く使われています。


◆ JWTの基本構造

JWTは「ドット」で区切られた 3つの部分 から構成されます:

xxxxx.yyyyy.zzzzz
  1. Header(ヘッダー)
    ・署名方式などのメタ情報
    ・例:{"alg": "HS256", "typ": "JWT"}

  2. Payload(ペイロード)
    ・ユーザーIDや有効期限などの「クレーム(claims:情報)」
    ・例:{"sub": "12345", "name": "seiichi", "exp": 1735640000}

  3. Signature(署名)
    ・偽造されていないことを保証するための署名
    ・サーバー側が秘密鍵で作成する


◆ JWTがよく使われる理由(メリット)

✔ サーバーレスでセッション管理できる

サーバーでセッション情報を持つ必要がなく、トークン自体に必要な情報が入っているため、
負荷が軽い

✔ API間の認証に向いている

フロントエンド(ブラウザ)→バックエンドAPI
モバイルアプリ → サーバー
マイクロサービス間 など
どこでも使える。

✔ JSON形式で扱いやすい

扱いやすく、構造がシンプル。


◆ JWTの注意点(デメリット)

⚠ 一度発行したら無効化しにくい

セッションのようにサーバー側で即無効化できない。
→ 対策:短い有効期限(exp) を設定し、リフレッシュトークンを使う。

⚠ ペイロードは暗号化されていない

Base64URLエンコードされているだけで、誰でも読める。
機密情報(パスワード・カード番号など)を入れてはいけない。


◆ どんな場面で使われる?

  • Webログイン(SPA + API)

  • モバイルアプリの認証

  • API Gateway や Auth0 などのIDサービス

  • マイクロサービス間通信

PKCE(Proof Key for Code Exchange:ピクシー)

PKCE(Proof Key for Code Exchange:ピクシー)は、
OAuth2 / OIDC の認可コードフローを“より安全にする”ための仕組みです。

特に SPA(React / Vue / Next.js)、モバイルアプリ、デスクトップアプリのように
“クライアントシークレットを安全に隠せない環境” で必須の保護方式です。


✅ PKCE を一言で言うと?

「ログイン後に Authorization Code を盗まれても、攻撃者は交換できないようにする仕組み」


🧠 OAuth2 の弱点を補うために生まれた

通常の「Authorization Code Flow」は
authorization_code を持っていれば 誰でも トークン交換できてしまいます。

→ 攻撃者が URL からコードを盗むと、Access Token を横取りできる危険。

PKCE はこの弱点を補強します。


🔐 PKCE の仕組み(ざっくり)

PKCE では、次の2つを使います:

  • code_verifier(長いランダム文字列)

  • code_challenge(code_verifier を SHA-256 変換したもの)

code_verifier  --SHA256→  code_challenge

フローは次のように進みます:


🔍 PKCE フロー図(簡易)

① クライアントが code_verifier(秘密)を生成する

例:

s8sj3hfkDs8sdfk2...

② その SHA256 版を code_challenge として Auth0 に送る

code_challenge = SHA256(code_verifier)

③ ユーザーが Auth0 ログイン

→ ログイン成功後、Auth0 は authorization_code をアプリに返す

RBAC

RBAC(Role-Based Access Control:ロールベースアクセス制御)とは、
「ユーザー個人に権限を与えるのではなく、“役割(ロール)”に権限をまとめて管理する仕組み」 です。


✅ 一言でいうと

「どのユーザーが何をできるか」を “役割” を介して管理するアクセス制御モデル


🔍 RBAC の基本構造

RBAC は 3つの要素で成り立ちます:

  1. User(ユーザー)
    → 実際にシステムを使う人

  2. Role(ロール)
    → 権限のグループ(例:管理者、一般ユーザー、閲覧者)

  3. Permission(権限)
    → 実行できる操作(例:閲覧、編集、削除)

そして

User → Role → Permission

という 紐づけの“中間にロール”が入るのがポイントです。


🧱 RBAC がない場合(権限を直接付けると…)

例:

  • ユーザーA → 編集権限

  • ユーザーB → 閲覧権限

  • ユーザーC → 編集+削除
    → ユーザーごとに権限管理が複雑になる
    → 大人数の組織では破綻しやすい


🧱 RBAC の場合(ロールを使う)

例:

■ ロール

  • admin(閲覧・編集・削除)

  • editor(閲覧・編集)

  • viewer(閲覧のみ)

■ ユーザー

  • ユーザーA → editor

  • ユーザーB → viewer

  • ユーザーC → admin

クレジットカードの締め日と支払日

クレジットカードの締め日と支払日について

基本的な仕組み

締め日 利用額が集計され、支払う金額が確定する日。この日までの利用分が次回の支払い対象となります。

支払日(引き落とし日) 締め日で確定した金額が口座から引き落とされる日。土日・祝日の場合は翌営業日に引き落とされます。

一般的なパターン

多くのカード会社では、以下のいずれかを採用しています。

パターン1:毎月15日締め・翌月10日払い

  • 例:12月16日〜1月15日の利用分 → 2月10日に引き落とし

パターン2:毎月末日締め・翌月26日または27日払い

  • 例:1月1日〜1月31日の利用分 → 2月26日または27日に引き落とし

💡 ポイント:締め日直後に高額な買い物をすると、支払いを翌々月に先延ばしできます。

確認が必要な理由

以下の点でカードごとに異なる場合があります:

  • カードの種類:同じ会社でもグレードやブランドで異なることがある
  • キャッシング:ショッピングとキャッシングで締め日・支払日が異なる場合がある
  • 選択制:カード会社によっては複数のパターンから選択できる

確認方法

お持ちのカードの規約、ウェブサイト、または利用明細でご確認ください。

システムAPI

Auth0のシステムAPIとは

Auth0には主に2種類のAPIがあり、それぞれ異なる目的で使用されます。

1. Management API

Auth0テナント内の設定や管理操作をプログラム的に実行できるAPIです。Auth0ダッシュボードで行える操作の多くをプログラムから実行できます。

主な機能

ユーザーやアプリケーションの管理、コネクションの設定、アクセス制御などを行うことができます。具体的には:

  • ユーザーの作成・更新・削除・検索
  • アプリケーションの設定変更
  • ログイン画面のカスタマイズ
  • ロールや権限の管理
  • 接続設定の管理

利用方法

Management APIを使用するには、まずアクセストークンを取得する必要があり、これはAPIを使うための証明書のようなものです。

基本的な流れ:

  1. Machine to Machine(M2M)アプリケーションを作成
  2. アクセストークンを取得
  3. トークンを使ってAPIリクエストを実行

注意点

Management APIには一定時間で実行可能な回数に制限があり、特に継続的に秒間16回を超えるAPI実行が必要な場合はPrivate Cloud契約が必須となります。

2. Authentication API

Management APIはヘッダーにトークンをセットする必要がありますが、Authentication APIはトークン不要です。こちらは主にユーザー認証に関連する操作を行います。

  • ログイン・ログアウト
  • パスワードリセット
  • ユーザー登録

使い分け

  • 管理操作(ユーザー管理、設定変更など)→ Management API
  • 認証操作(ログイン、サインアップなど)→ Authentication API

バックエンドAPI

【公式ブログ】Protecting REST APIs Behind Amazon API Gateway Using Okta https://auth0.com/blog/protecting-rest-apis-behind-aws-api-gateway/

Webアプリにバックエンドの APIサーバーが必要になる主な理由 は、大きく分けて セキュリティ・データ管理・ビジネスロジック・外部サービス連携 の4つです。わかりやすく整理して解説します。


Webアプリにバックエンド API サーバーが必要になる理由

1. セキュリティを守るため(最重要)

フロントエンド(ブラウザ側)はユーザーに公開されるため、秘密情報を置けない し、信頼できない環境 です。

バックエンドはサーバー側で公開されないため:

  • 認証(Auth0 など)

  • データベース接続情報(DBパスワード)

  • APIキー(Stripe、SendGridなど)

  • ビジネスロジック

これら “秘密にすべき処理” を安全に実行できます。

🔒 バックエンドがないと誰でも勝手にDBを改ざんできてしまう
→ だから必須。


2. データベースに直接アクセスさせないため

ブラウザからDBに直接つなぐと:

  • DBのパスワードが漏れる

  • SQLを書き換えてデータを破壊される

  • 全データがダウンロードされる

バックエンドAPIは DBとフロントの間のゲートキーパー です。

[ブラウザ] → (安全なリクエスト) → [APIサーバー] → DB

3. ビジネスロジックを隠すため

例:

  • 「在庫が何個以上なら特別割引」

  • 「このユーザーの権限なら編集可能」

これをフロントだけで実装すると、ユーザー側で書き換えられます。

バックエンドで実行することで:

  • 改ざんできない

  • 共通のロジックとして複数サービスから使える


4. 外部サービスとの連携(トークン・秘密鍵を安全に扱う)

Stripe, PayPal, AWS S3 などは 秘密キーを使う 必要があります。

砂肝の料理

砂肝の料理ガイド

砂肝は炒める・揚げる・焼く・茹でるなど、シンプルな味付けでおいしく食べられる万能な部位です。

定番で作りやすい料理

砂肝の塩こしょう炒め 薄切りにして油で炒め、塩・こしょう・にんにくで味付け。おつまみにもおかずにもなります。

砂肝ポン酢(ねぎポン) さっと茹でてスライスし、ねぎ塩ダレ(ねぎ・ごま油・塩・黒胡椒・レモン汁)と和える。

砂肝ガーリック炒め/バター焼き にんにくを炒めて香りを出し、砂肝を加えて塩こしょうや醤油で仕上げるスタミナ系。

おつまみにぴったり

砂肝のアヒージョ オリーブオイルににんにくと唐辛子を入れ、砂肝とキノコを煮る洋風おつまみ。バゲットと相性抜群。

砂肝の唐揚げ 醤油・酒・おろししょうが・にんにくで下味をつけて片栗粉をまぶし、カリッと揚げる。ビールによく合います。

砂肝のオイスターソース炒め 薄切り砂肝と野菜を炒めて、オイスターソースや醤油で味付けする中華風おつまみ。

ご飯のおかずに

砂肝のしょうが焼き しょうが・醤油・みりんのタレで炒めると、ご飯が進む主菜に。

砂肝と野菜の炒め物 にら・ピーマン・もやし・長ねぎなどと一緒に炒めるとボリュームアップ。栄養バランスも◎

砂肝の甘辛煮 醤油・砂糖(はちみつ)・しょうがで煮ると、作り置きやお弁当のおかずに最適。

下処理とおいしく作るコツ

下処理 白い筋を包丁でそぎ落とすか、「筋なし」表示の砂肝を使うと食べやすく調理も簡単。

火加減のポイント 火を通しすぎないことが大切。加熱しすぎると固くなるので、色が変わって中まで火が通ったら早めに火を止めましょう。


ソドムとゴモラ


ソドムとゴモラ:概要

ソドムゴモラは、旧約聖書『創世記』に登場する都市で、神の裁きにより天からの硫黄と火で滅ぼされたとされています。後の預言書でも、神の裁きと滅びの象徴、悪徳や堕落の代名詞として用いられています。

滅亡の経緯

  • 預言者アブラハムの甥ロトとその家族は、神の使いによってソドムから脱出しました
  • 聖書にはソドムの滅亡が詳しく描かれていますが、ゴモラの滅亡の具体的描写はありません
  • ソドムとゴモラに加え、アデマとゼボイムも同時に滅ぼされました(これらの滅亡描写も省略されています)

五つの都市

これらは「五つの都市(Pentapolis)」と呼ばれ、死海周辺の低地(ヨルダン渓谷)に位置していたとされます。五都市のうち、ロトの家族が逃げ込んだゾアルを除く四都市(ソドム、ゴモラ、アデマ、ゼボイム)が神の裁きで滅ぼされ、荒廃の象徴とされています。

罪の内容

聖書における記述

  • **新約聖書「ユダの手紙」**では、ソドムとゴモラが「みだらな行い」と「不自然な肉の欲」によって永遠の火の刑罰を受けたと記されています
  • 『レビ記』18章では、性に関する規定として、近親相姦、姦淫、同性間の性行為、獣姦などが禁じられています

イスラム教の記述

クルアーンにも同様の物語が述べられており、預言者ルート(ロト)に従わなかった民が滅ぼされました。他の民(ノアの洪水、アード族、サムード族など)が偶像崇拝で滅ぼされたのとは異なり、ソドムの住民は男色などの風俗の乱れによって滅ぼされたとされています。

地理的位置

ソドムとゴモラの廃墟は死海南部の湖底に沈んだと伝えられています。これは『創世記』に記された「シディムの谷」とアスファルトの穴の描写が、死海南部の状況と類似していることに基づいています。ただし、死海南岸付近の遺跡と結びつけようとする研究者も存在します。