┌─────────────────────────────────────────────────────────────────┐
│                                                                 │
│   ┌─────────────────────────────────────────────────────────┐  │
│   │                                                         │  │
│   │   システム仕様書                                        │  │
│   │   SYSTEM SPECIFICATION DOCUMENT                         │  │
│   │                                                         │  │
│   │   ┌─────────────────────────────────────────────────┐  │  │
│   │   │                                                 │  │  │
│   │   │   ろひ // レガシーITエンジニア                  │  │  │
│   │   │   ROHI // LEGACY IT ENGINEER                    │  │  │
│   │   │   PORTFOLIO WEBSITE SYSTEM                      │  │  │
│   │   │                                                 │  │  │
│   │   └─────────────────────────────────────────────────┘  │  │
│   │                                                         │  │
│   └─────────────────────────────────────────────────────────┘  │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
文書番号
ROHI-SPEC-001
バージョン
8.0
作成日
2026-04-01
機密レベル
公開

改訂履歴

版数改訂日改訂内容改訂者
1.01998-04-01初版作成。COBOL/JCL基本仕様、バッチ処理運用定義ろひ
2.02002-04-01PL/I資産管理、DB2接続仕様、SQL最適化ガイドライン策定ろひ
3.02006-04-01金融系トランザクション処理仕様、障害対応・復旧手順標準化ろひ
4.02010-04-01セキュリティ強化、パフォーマンスチューニング指針改訂、Java移行評価基準策定ろひ
5.02014-04-01クラウド移行検討、Oracle連携仕様、API設計ガイドライン策定ろひ
6.02018-04-0120周年記念改訂。アーキテクチャ全面見直し、CI/CD・コンテナ化対応ろひ
7.02022-04-01DX推進、リモート運用仕様、AI/ML活用検討、ゼロトラストセキュリティ対応ろひ
8.02026-04-01Three.js可視化、サイバーパンクUI/UX策定、ポートフォリオサイト公開・仕様書web公開ろひ
Section 01

第1章 システム概要

SYSTEM OVERVIEW

1.1 システム名称

項目内容
システム名称(日本語)ろひ // レガシーITエンジニア
システム名称(英語)ROHI // LEGACY IT ENGINEER PORTFOLIO
ドメイン名yoroshiku.net
文書番号ROHI-SPEC-001

1.2 システム目的

本システムは、レガシーITエンジニア「ろひ」の技術的知見と経歴を、サイバーパンク美学とメインフレーム視覚言語を用いて表現する自己紹介サイトである。

主な目的:

  1. COBOL、PL/I、JCL、DB2 等のメインフレーム技術の専門性を提示
  2. レガシーシステムの開発・保守・移行における28年の経験を可視化
  3. 新技術とレガシー技術の架け橋としての立ち位置を表現
  4. 単一ファイルアーキテクチャによる技術的実証

1.3 システム構成図

┌─────────────────────────────────────────────────────────────┐
│                    クライアントブラウザ                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌───────────────────────────────────────────────────────┐ │
│  │              index.html(単一ファイル)                │ │
│  │                                                       │ │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  │ │
│  │  │   HTML構造   │  │  CSS定義    │  │  JS処理     │  │ │
│  │  │   (415行)    │  │  (360行)    │  │  (472行)    │  │ │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  │ │
│  │                                                       │ │
│  └───────────────────────────────────────────────────────┘ │
│                           │                                 │
│                           ▼                                 │
│  ┌───────────────────────────────────────────────────────┐ │
│  │                  外部リソース                          │ │
│  │                                                       │ │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  │ │
│  │  │  Three.js   │  │ Google Fonts│  │   CDN       │  │ │
│  │  │  v0.160.0   │  │ IBM Plex    │  │ jsdelivr    │  │ │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  │ │
│  │                                                       │ │
│  └───────────────────────────────────────────────────────┘ │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.4 動作環境定義

1.4.1 必須環境

項目要件
ブラウザモダンブラウザ(Chrome 117+, Firefox 115+, Safari 16.4+, Edge 115+)
JavaScriptES Module 対応必須
WebGLThree.js 描画のため必須
ネットワーク外部リソース(CDN)読み込みのため必要

1.4.2 推奨環境

項目要件
画面解像度1920×1080 以上
メモリ4GB 以上
GPUWebGL 2.0 対応

1.4.3 対応デバイス

デバイス対応状況備考
デスクトップ◎ 完全対応カスタムカーソル有効
タブレット○ 対応タッチ操作対応
スマートフォン○ 対応レスポンシブレイアウト適用

1.5 外部依存モジュール一覧

モジュール名バージョン用途CDN
Three.js0.160.03D背景描画cdn.jsdelivr.net
EffectComposer(Three.js Addon)ポストプロセス処理cdn.jsdelivr.net
RenderPass(Three.js Addon)レンダーパスcdn.jsdelivr.net
UnrealBloomPass(Three.js Addon)ブルームエフェクトcdn.jsdelivr.net
GlitchPass(Three.js Addon)グリッチエフェクトcdn.jsdelivr.net
IBM Plex Mono400/600/700等幅フォントGoogle Fonts
IBM Plex Sans JP400/700日本語フォントGoogle Fonts
Section 02

第2章 デザイン仕様

DESIGN SPECIFICATION

2.1 デザインコンセプト

本システムのデザインは、以下のコンセプトに基づく。

「メインフレームの回廊」

  • 1980年代のメインフレームコンピュータ室を視覚的に再現
  • サーバーラックが無限に続く回廊を3D描画
  • LEDの点滅によるシステム稼働の表現
  • サイバーパンク美学(ネオンカラー、グリッチ、スキャンライン)の融合

2.2 カラーパレット定義書

2.2.1 プライマリカラー

カラー名変数名用途
マトリックスグリーン--matrix-green#00ff41メインアクセント、LED、ボーダー
ネオンシアン--neon-cyan#00f0ffサブアクセント、グロー、ホバー
ネオンマゼンタ--neon-magenta#ff00aa強調、エラー、特別状態

2.2.2 ベースカラー

カラー名変数名用途
ディープブラック--bg-deep#050510背景色
パネルブラック--bg-panelrgba(10,14,30,0.7)パネル背景
テキストプライマリ--text-primary#e0e8ff主要テキスト
テキストディム--text-dim#6a7a9a補助テキスト

2.2.3 エフェクトカラー

カラー名変数名用途
グリッチレッド--glitch-red#ff0040グリッチエフェクト赤
グリッチブルー--glitch-blue#00ffffグリッチエフェクト青

2.2.4 透過カラー派生

color-mix() 関数を用いて、プライマリカラーから透過バリエーションを生成する。

変数名元カラー透過率
--green-3matrix-green3%
--green-5matrix-green5%
--green-10matrix-green10%
--green-15matrix-green15%
--green-20matrix-green20%
--green-30matrix-green30%
--green-40matrix-green40%
--cyan-5neon-cyan5%
--cyan-10neon-cyan10%
--cyan-20neon-cyan20%
--cyan-30neon-cyan30%
--cyan-60neon-cyan60%
--magenta-20neon-magenta20%

2.3 タイポグラフィ定義書

2.3.1 フォントファミリー

用途変数名フォントスタック
等幅(英字・記号)--font-mono'IBM Plex Mono', 'Courier New', monospace
日本語本文--font-sans'IBM Plex Sans JP', 'IBM Plex Mono', -apple-system, BlinkMacSystemFont, sans-serif

2.3.2 フォントウェイト

ウェイト用途
Regular400本文、ラベル
SemiBold600強調テキスト
Bold700見出し、数値

2.3.3 フォントサイズ定義

要素サイズ定義備考
h1(タイトル)clamp(4rem, 18vw, 12rem)流動的スケーリング
h2(セクション)clamp(2rem, 6vw, 3.5rem)流動的スケーリング
h3(カード見出し)1.3rem固定
本文1.1rem固定
小テキスト0.85rem固定
ラベル0.75rem固定
ヒーローサブタイトルclamp(1rem, 4vw, 2rem)流動的スケーリング

2.4 レイアウト仕様

2.4.1 グリッドシステム

セクショングリッド定義
Aboutgrid-template-columns: 1fr 2fr
Skillsgrid-template-columns: repeat(auto-fill, minmax(250px, 1fr))
Statsgrid-template-columns: repeat(auto-fit, minmax(180px, 1fr))

2.4.2 スペーシング

用途
セクション間パディング6rem
セクション間マージン3rem
カード間ギャップ1.5rem
コンテナ最大幅1100px
コンテナパディング2rem

2.5 レスポンシブ対応仕様

2.5.1 ブレークポイント

ブレークポイント適用内容
768px 以下コンテナパディング縮小、セクションパディング縮小
600px 以下(コンテナクエリ)About グリッドを1カラムに変更

2.5.2 モバイル対応

  • clamp() 関数による流動的フォントサイズ
  • タッチデバイス検出(pointer: coarse)によるカスタムカーソル無効化
  • レスポンシブグリッド(auto-fill, auto-fit
Section 03

第3章 画面構成仕様

SCREEN LAYOUT SPECIFICATION

3.1 画面一覧

本システムは単一ページアプリケーションであり、以下のセクションで構成される。

セクションIDセクション名番号概要
#heroヒーロー-メインタイトル、スクロールインジケーター
#aboutアバウト01自己紹介、アバター、タイプライター
#statsスタッツ02統計情報(4項目)
#skillsスキルズ03スキルカード(8枚)
#contactコンタクト04連絡先リンク
-フッター-コピーライト

3.2 Hero セクション

3.2.1 構成要素

要素クラス内容
タグライン.hero-tagSYSTEM ONLINE // ID:ROHI
メインタイトルh1.glitchろひ(グリッチエフェクト適用)
サブタイトル.hero-subtitleレガシーITエンジニア
スクロールインジケーター.scroll-indicator▼ SCROLL

3.2.2 グリッチエフェクト仕様

  • data-text 属性に元テキストを格納
  • ::before 疑似要素: 赤色(--glitch-red)、3秒周期
  • ::after 疑似要素: 青色(--glitch-blue)、2.5秒周期
  • clip-path によるランダム切り抜き

3.3 About セクション

3.3.1 構成要素

要素クラス内容
アバターボックス.avatar-boxシンボル <ROHI>、ID情報
自己紹介テキスト.about-text4段落 + タイプライター

3.3.2 アバターボックス仕様

┌─────────────────┐
│                 │
│    <ROHI>       │  ← シンボル(5rem、matrix-green)
│                 │
├─────────────────┤
│ ID: 0xR0H1      │  ← ラベル(0.75rem、text-dim)
│ STATUS: ACTIVE  │
└─────────────────┘
  • シャンアニメーション: 4秒周期で光が左から右に通過
  • ホバー時: border-color 変化、グロー強化、Y軸-3px移動

3.3.3 タイプライター仕様

  • テキスト: > echo "レガシーは死なず。ただ、進化する。"
  • 速度: 80ms/文字
  • トリガー: IntersectionObserver(threshold: 0.5)
  • 実行回数: 1回のみ(observer.disconnect())

3.4 Stats セクション

3.4.1 統計項目一覧

項目data属性表示値ラベル
経験年数data-target="28"28YEARS / 経験年数
プログラム数data-display="999+"999+PROGRAMS / 開発・保守プログラム
稼働率data-target="99" data-suffix="%"99%UPTIME / 稼働率
移行案件data-display="NOW()"NOW()MIGRATIONS / 移行案件

3.4.2 カウントアップ仕様

  • 数値型data-target): 2000ms、cubic ease-out、スクランブル文字表示
  • 表示型data-display): 1200ms、文字数分段階的表示、スクランブル文字表示
  • スクランブル文字セット: アイウエオカキクケコ0123456789ABCDEF#%+/<>*

3.5 Skills セクション

3.5.1 スキルカード一覧

#アイコンスキル名レベル%説明
1[COB]COBOLEXPERT95%メインフレーム系業務アプリの設計・開発・保守
2[PL1]PL/IEXPERT95%金融系バックエンドのPL/I資産設計・開発・保守
3[JCL]JCLEXPERT90%バッチジョブ制御言語
4[DB2]DB2EXPERT92%メインフレームのDB設計、SQL最適化
5[C]CADVANCED85%C言語ミドルウェアの設計・保守
6[JAVA]JavaADVANCED80%レガシー移行先のJavaアプリ設計
7[ORCL]OracleADVANCED80%レガシー移行先のDB設計
8[MIG]MigrationADVANCED87%メインフレームからオープン系移行

3.5.2 スキルカード構造

┌─────────────────────────────────────┐
│ [COB]                               │  ← アイコン
│ COBOL                               │  ← スキル名
│ EXPERT // 95%                       │  ← レベル
│ ████████████████████░               │  ← スキルバー
│ メインフレーム系業務アプリの...     │  ← 説明
└─────────────────────────────────────┘

3.5.3 ホバーエフェクト

  • --glow-spread アニメーション: 0px → 40px
  • Y軸-5px移動、スケール1.02倍
  • 上部スキャンライン: 左から右に通過
  • 他カードのぼかし: :has() セレクタで非ホバーカードを opacity: 0.4; filter: blur(2px)

3.6 Contact セクション

3.6.1 構成要素

要素内容
見出し// 通信チャネル確立
説明文レガシーの知恵が必要ですか?下記チャネルからどうぞ。
リンク1MIXI2 (https://mixi.social/@Exception)
リンク2X / TWITTER (https://x.com/rohigpt)

3.6.2 リンク仕様

  • rel="noopener" 設定(セキュリティ)
  • ホバー時: 背景色変化、グロー、テキストシャドウ
  • プレフィックス: >

3.7 フッター

3.7.1 構成

// END OF TRANSMISSION // ろひ © 2026 // ALL SYSTEMS NOMINAL
  • .footer-glitch クラスでマゼンタ色
  • 上部ボーダー: --green-10
Section 04

第4章 機能仕様

FUNCTIONAL SPECIFICATION

4.1 Three.js 背景描画処理

4.1.1 処理概要

メインフレームのサーバールームを3D描画し、無限に続く回廊を表現する。

4.1.2 入力

  • マウスポインタ位置(state.normX, state.normY
  • フレームカウント(frame

4.1.3 出力

  • #bg-canvas への3Dレンダリング

4.1.4 シーン構成

要素仕様
カメラPerspectiveCamera(70, aspect, 0.1, 200)
フォグFogExp2(0x050510, 0.022)
床グリッドLineSegments、200m奥行き、2m間隔
天井グリッドLineSegments、200m奥行き、2m間隔
サーバーラックBoxGeometry(2, 6, 1.5)、4m間隔
LEDPlaneGeometry(0.18, 0.1)、1ラック5個

4.1.5 チャンクシステム

CHUNK_LENGTH = 40
CHUNK_COUNT = 5
総延長 = 200m

[Chunk 0][Chunk 1][Chunk 2][Chunk 3][Chunk 4]
    ↑
カメラ位置(Z軸マイナス方向に移動)

カメラがチャンクを通過すると、前方に再配置

4.1.6 LED点滅パターン

タイプ条件動作
steadyblinkType === 'steady'基本輝度 ± sin波(0.1)
blinkblinkType === 'blink'sin波 > 0.3 で点灯、それ以外で消灯

4.1.7 ポストプロセス

RenderPass → UnrealBloomPass → GlitchPass → 出力
                ↓                  ↓
         strength: 0.9      4〜7秒間隔
         radius: 0.5        0.3〜0.5秒バースト
         threshold: 0.25

4.1.8 例外処理

  • prefers-reduced-motion: reduce 時: 処理全体をスキップ
  • WebGL非対応: 自動的に描画なし

4.2 パーティクル描画処理

4.2.1 処理概要

マウスの動きに追従するネオンパーティクルを描画する。

4.2.2 入力

  • マウス位置(state.x, state.y
  • マウス移動状態(state.isMoving

4.2.3 出力

  • #particle-canvas への2Dレンダリング

4.2.4 パーティクル仕様

項目
最大数50
スポーン間隔30ms
初期速度±1.5 px/frame
減衰率0.98
寿命1.0 → 0.0(-0.02/frame)
サイズ1〜4px
合成モードlighter(加算合成)

4.2.5 カラーパレット

const NEON_COLORS = [
  '#00ff41',  // matrix-green
  '#39ff14',  // matrix-green 黄緑
  '#aaffaa',  // matrix-green パステル
  '#00f0ff',  // neon-cyan
  '#ff00aa',  // neon-magenta
]

4.3 カスタムカーソル処理

4.3.1 処理概要

カスタムデザインのカーソルを描画し、ホバー状態やクリックに反応する。

4.3.2 入力

  • マウス位置(state.x, state.y
  • ホバー状態(state.isHovering
  • クリックイベント

4.3.3 出力

  • #cursor-canvas への2Dレンダリング

4.3.4 カーソル構成

        ┌─────────────┐
        │  外円       │  ← 22px(通常)/ 35px(ホバー)
        │  ┌───────┐  │     matrix-green / magenta
        │  │ 内円  │  │  ← 4px、cyan
        │  └───────┘  │
        └─────────────┘

        トレイル: 12フレーム分

4.3.5 追従アルゴリズム

cursor.x += (target.x - cursor.x) * 0.25
cursor.y += (target.y - cursor.y) * 0.25

4.3.6 クリック爆発

項目
パーティクル数24
初期速度2〜6 px/frame
減衰率0.95
寿命1.0 → 0.0(-0.03/frame)

4.3.7 例外処理

  • prefers-reduced-motion: reduce 時: 処理全体をスキップ
  • タッチデバイス(pointer: coarse): 処理全体をスキップ

4.4 タイプライター処理

4.4.1 処理概要

テキストを1文字ずつ表示するタイプライターエフェクトを実装する。

4.4.2 入力

  • IntersectionObserver(threshold: 0.5)

4.4.3 出力

  • #typewriter 要素のテキストコンテンツ更新

4.4.4 処理フロー

1. 要素がビューポートに入る
2. observer.disconnect() で監視終了
3. ループ開始:
   a. text.slice(0, index + 1) を表示
   b. index++
   c. 80ms 待機
   d. index < text.length なら 3-a に戻る
4. 完了

4.4.5 対象テキスト

> echo "レガシーは死なず。ただ、進化する。"

4.5 スクロールリビール処理

4.5.1 処理概要

要素がビューポートに入った際に、フェードインとスライドアップのアニメーションを適用する。

4.5.2 入力

  • IntersectionObserver(threshold: 0.15)

4.5.3 出力

  • .reveal 要素に .visible クラスを追加
  • .skill-fill 要素の widthdata-fill 値に設定

4.5.4 アニメーション仕様

項目
初期状態opacity: 0; transform: translateY(40px)
終了状態opacity: 1; transform: translateY(0)
遷移時間0.8s

4.6 カウントアップ処理

4.6.1 処理概要

数値を0から目標値までカウントアップする。スクランブル文字を表示しながら最終値に収束する。

4.6.2 入力

  • IntersectionObserver(threshold: 0.5)
  • data-target(数値型)または data-display(表示型)

4.6.3 出力

  • .stat-number 要素のテキストコンテンツ更新

4.6.4 処理フロー(数値型)

1. 要素がビューポートに入る
2. start = performance.now()
3. updaters に登録
4. フレーム毎:
   a. elapsed = now - start
   b. progress = min(elapsed / 2000, 1)
   c. eased = 1 - pow(1 - progress, 3)  // cubic ease-out
   d. 表示値 = floor(eased * target) + suffix
   e. progress >= 1 なら完了、updaters から削除

4.6.5 処理フロー(表示型)

1. 要素がビューポートに入る
2. start = performance.now()
3. updaters に登録
4. フレーム毎:
   a. elapsed = now - start
   b. progress = min(elapsed / 1200, 1)
   c. revealCount = floor(progress * display.length)
   d. 表示済み文字 + スクランブル文字で構成
   e. progress >= 1 なら完了、updaters から削除

4.7 グリッチエフェクト処理

4.7.1 処理概要

Three.js の GlitchPass を用いて、ランダムなタイミングで画面全体にグリッチエフェクトを適用する。

4.7.2 入力

  • タイマー(4〜7秒間隔)

4.7.3 出力

  • glitchPass.enabled の切り替え

4.7.4 処理フロー

scheduleGlitchBurst():
  1. nextDelay = 4000 + random() * 3000  // 4〜7秒
  2. burstDuration = 300 + random() * 200  // 0.3〜0.5秒
  3. nextDelay 後:
     a. glitchPass.enabled = true
     b. burstDuration 後:
        - glitchPass.enabled = false
        - scheduleGlitchBurst() を再帰呼び出し

4.7.5 例外処理

  • visibilitychange イベントでタブ非表示時にタイマー停止
  • タブ再表示時に scheduleGlitchBurst() を再開

4.8 スムーススクロール処理

4.8.1 処理概要

ページ内リンクのクリック時に、スムーススクロールと View Transitions API を適用する。

4.8.2 入力

  • a[href^="#"] のクリックイベント

4.8.3 出力

  • 対象要素へのスクロール

4.8.4 処理フロー

1. クリックイベントを捕捉
2. href === '#' なら早期リターン
3. e.preventDefault()
4. target = document.querySelector(href)
5. if (document.startViewTransition):
     startViewTransition(() => target.scrollIntoView({ behavior: 'smooth' }))
   else:
     target.scrollIntoView({ behavior: 'smooth' })
Section 05

第5章 データ定義

DATA DEFINITIONS

5.1 CSS カスタムプロパティ一覧

5.1.1 デザイントークン

変数名用途
--neon-cyancolor#00f0ffネオンシアン
--neon-magentacolor#ff00aaネオンマゼンタ
--matrix-greencolor#00ff41マトリックスグリーン
--bg-deepcolor#050510背景色
--bg-panelcolorrgba(10,14,30,0.7)パネル背景
--text-primarycolor#e0e8ffテキストプライマリ
--text-dimcolor#6a7a9aテキストディム
--glitch-redcolor#ff0040グリッチレッド
--glitch-bluecolor#00ffffグリッチブルー
--ease-out-expotimingcubic-bezier(0.23,1,0.32,1)イージング関数
--font-monofont'IBM Plex Mono', ...等幅フォント
--font-sansfont'IBM Plex Sans JP', ...日本語フォント

5.1.2 @property 定義

プロパティ名構文初期値継承用途
--glow-spread<length>0pxfalseスキルカードグロー拡散

5.2 HTML データ属性一覧

5.2.1 グリッチエフェクト

属性要素用途
data-text.glitchろひグリッチ元テキスト

5.2.2 カウントアップ

属性要素値の例用途
data-target.stat-number28目標数値
data-display.stat-number999+表示文字列
data-suffix.stat-number%数値後の接尾辞

5.2.3 スキルバー

属性要素値の例用途
data-fill.skill-fill95パーセンテージ

5.3 JavaScript 定数・状態定義

5.3.1 共有状態(state)

プロパティ初期値用途
xnumberwindow.innerWidth / 2マウス X 座標
ynumberwindow.innerHeight / 2マウス Y 座標
normXnumber0正規化 X(-1 〜 1)
normYnumber0正規化 Y(-1 〜 1)
isMovingbooleanfalseマウス移動中フラグ
isHoveringbooleanfalseホバー中フラグ
moveTimeoutTimeoutnull移動停止検出タイマー

5.3.2 Three.js 定数

定数名用途
HALL_WIDTH12ホール幅
HALL_HEIGHT8ホール高さ
RACK_W2ラック幅
RACK_H6ラック高さ
RACK_D1.5ラック奥行き
RACK_SPACING4ラック間隔
CHUNK_LENGTH40チャンク長さ
CHUNK_COUNT5チャンク数
SPEED0.15カメラ移動速度
LEDS_PER_RACK51ラックあたりのLED数

5.3.3 パーティクル定数

定数名用途
maxParticles50最大パーティクル数
NEON_COLORS(frozen array)カラーパレット

5.3.4 カーソル定数

定数名用途
TRAIL_LENGTH12トレイル長さ
CURSOR_COLORS(frozen array)爆発カラーパレット
Section 06

第6章 非機能要件

NON-FUNCTIONAL REQUIREMENTS

6.1 パフォーマンス仕様

6.1.1 レンダリング最適化

項目対策
requestAnimationFrame単一ループ(mainLoop)に統合
Canvas shadowBlur外円カーソルのみに限定
LED更新可視チャンクのみ処理
devicePixelRatioMath.min(dpr, 2) で上限キャップ
resize イベント150ms デバウンス

6.1.2 リソース最適化

項目対策
フォント読み込みfont-display: swap
CDN接続preconnect で事前接続
CDN選択cdn.jsdelivr.net(高速 CDN)

6.2 アクセシビリティ仕様

6.2.1 prefers-reduced-motion 対応

要素対応内容
CSS アニメーションanimation-duration: 0.01ms に強制
CSS トランジションtransition-duration: 0.01ms に強制
グリッチエフェクト::before, ::after を非表示
スキャンライン非表示
Three.js 背景非表示
カスタムカーソル非表示、cursor: auto に復帰

6.2.2 ARIA 属性

要素属性
.scanlinesaria-hiddentrue
.vignettearia-hiddentrue
#bg-canvasaria-hiddentrue
#particle-canvasaria-hiddentrue
#cursor-canvasaria-hiddentrue
#scroll-progressaria-hiddentrue
#heroaria-labelヒーローセクション
#aboutaria-label自己紹介
#statsaria-label統計情報
#skillsaria-labelスキルセット
#contactaria-labelコンタクト
.contact-linksaria-label連絡先リンク

6.2.3 タッチデバイス対応

  • pointer: coarse 検出時、カスタムカーソルを無効化
  • cursor: none@media (hover: hover) and (pointer: fine) に限定

6.3 SEO / OGP 仕様

6.3.1 メタタグ

項目内容
titleろひ // レガシーITエンジニア
descriptionろひ - レガシーITエンジニア 自己紹介サイト。COBOL、PL/I、JCL、DB2などのメインフレーム技術に精通し、レガシーシステムの開発・保守・移行を専門とするエンジニア。
canonicalhttps://yoroshiku.net/

6.3.2 OGP タグ

プロパティ内容
og:titleろひ // レガシーITエンジニア
og:description(description と同一)
og:typewebsite
og:urlhttps://yoroshiku.net/
og:site_nameろひ // レガシーITエンジニア
og:localeja_JP
og:imagehttps://yoroshiku.net/ogp.png

6.3.3 Twitter Card

プロパティ内容
twitter:cardsummary_large_image
twitter:titleろひ // レガシーITエンジニア
twitter:description(description と同一)
twitter:imagehttps://yoroshiku.net/ogp.png
twitter:site@rohigpt
twitter:creator@rohigpt

6.3.4 ファビコン

  • インライン SVG data URI
  • デザイン: [R] マーク(matrix-green on deep-black)
  • フォント: monospace、700 weight

6.4 セキュリティ考慮事項

6.4.1 外部リンク

  • 全外部リンクに rel="noopener" を設定
  • target="_blank" は未使用(同一タブで遷移)

6.4.2 CSP(Content Security Policy)

本システムはインラインスクリプト・インラインスタイルを含むため、CSP 導入時は以下の対応が必要:

  • script-src: nonce または unsafe-inline を許可
  • style-src: nonce または unsafe-inline を許可
  • img-src: data: を許可(ファビコン用)
Section 07

第7章 既知の制約事項

KNOWN CONSTRAINTS

7.1 ブラウザ互換性

機能対応ブラウザ非対応時の挙動
Scroll-driven AnimationsChrome 115+静的表示(@supports で除外)
@propertyChrome 85+, Safari 15.4+トランジション無効
:has() セレクタChrome 105+, Safari 15.4+他カードぼかし無効
View Transitions APIChrome 111+フォールバック(通常スクロール)
text-wrap: prettyChrome 117+通常改行
CSS ネスティングChrome 120+, Safari 16.5+非対応(必須機能)

7.2 既知の制限

#項目詳細
1Three.js バージョンv0.160.0(2023年12月)。最新版は v0.175+
2タイプライター再発動1回限り。ページ再訪時は再発動しない
3OGP 画像ogp.png の手動生成が必要
4CSP 非対応インラインスクリプト/スタイルのため、CSP 導入時は設定が必要
Appendix A

付録A セクション番号とIDマッピング

SECTION NUMBER & ID MAPPING
セクション番号セクション名IDaria-label
-ヒーロー#heroヒーローセクション
01アバウト#about自己紹介
02スタッツ#stats統計情報
03スキルズ#skillsスキルセット
04コンタクト#contactコンタクト
Appendix B

付録B アニメーション定義一覧

ANIMATION DEFINITIONS

B.1 CSS アニメーション

アニメーション名対象周期用途
scan-flicker.scanlines8sスキャンライン明滅
glitch-anim-1.glitch::before3sグリッチ赤
glitch-anim-2.glitch::after2.5sグリッチ青
fade-in.hero-tag, .hero-subtitle1.5sフェードイン
border-pulse.hero-subtitle3sボーダーパルス
bounce.scroll-indicator2sバウンス
shine.avatar-box::before4sシャイン
blink-cursor.typewriter0.8sカーソル点滅
scroll-progress#scroll-progress-スクロール進行
h2-glow-slidesection h2-見出しグロー
line-stretch.section-line-ラインストレッチ

B.2 JavaScript アニメーション

処理周期用途
Three.js カメラ移動フレーム毎無限回廊
LED 点滅フレーム毎サーバー稼働表現
パーティクルフレーム毎マウス追従
カーソル追従フレーム毎カスタムカーソル
グリッチバースト4〜7秒間隔画面グリッチ
Appendix C

付録C 用語集

GLOSSARY
用語説明
チャンクThree.js のシーンを分割した単位。メモリ効率のため再利用する
lerpLinear Interpolation。線形補間。カーソルの滑らかな追従に使用
Bloom明るい部分が滲むポストプロセスエフェクト
Glitch画面が乱れるエフェクト。デジタルノイズを表現
スキャンラインCRT モニターの走査線を再現するオーバーレイ
ビネット画面周辺を暗くするエフェクト
グリッチ意図的な映像の乱れ。サイバーパンク美学の要素
メインフレーム大型コンピューター。COBOL、JCL 等を使用
COBOL事務処理用プログラミング言語。1959年登場
PL/IIBM の汎用プログラミング言語。1964年登場
JCLJob Control Language。メインフレームのジョブ制御言語
DB2IBM のリレーショナルデータベース管理システム