機能 #42 » redmine-theme-structure.md
Redmineテーマの構造と最適化計画
標準的なRedmineテーマの構造
Redmineのテーマは通常、以下のような構造を持ちます:
public/themes/[theme_name]/
├── stylesheets/
│   ├── application.css       # メインのスタイルシート
│   ├── rtl.css               # 右から左へ読む言語用(オプション)
│   └── [その他のCSS]
├── javascripts/
│   └── theme.js              # テーマ用JavaScript
├── images/                   # テーマ用画像
│   ├── logo.png
│   └── [その他の画像]
└── theme.json                # テーマのメタデータ
Redmineのテーマ適用の仕組み
Redmineのテーマは、既存のHTMLの構造を変更せず、主にCSSの上書きによって適用されます。JavaScriptは追加機能のために使用されますが、DOM構造を大幅に変更するのは推奨されていません。
重要ポイント
- Redmineの元のHTMLは保持したまま、CSSで見た目を変更する
- クラス名やID名は既存のものを利用する
- 必要な場合のみ、JavaScriptでDOM操作を行う
最適化計画
現在作成したLINE風テーマの実装を、Redmine標準のテーマ構造に最適化するステップを以下に示します:
1. CSS最適化
- 
共通CSSの抽出 - 変数定義
- リセットスタイル
- 共通コンポーネント(ヘッダー、サイドバー、フッター)のスタイル
 
- 
ページ固有のCSSの分離 - 
issues.css- チケット一覧と詳細ページ用
- 
responsive.css- レスポンシブデザイン用
 
- 
2. JavaScript最適化
- 
共通関数の抽出 - ドロワー操作
- タブ操作
- クリックイベント処理
 
- 
不要な重複処理の削除 - 同一セレクタへの複数の処理
 
3. HTML変更の最小化
Redmineのテーマでは、HTMLを大幅に変更することは難しいため、以下の方針で対応します:
- 
既存の構造を活かしたCSSスタイリング - 既存のクラスを活用したデザイン
- 追加クラスは最小限に
 
- 
必要な場合のみのDOM操作 - JavaScriptによる要素の追加・変更
- 
document.readyでのHTML構造の拡張
 
ファイル分割計画
1. application.css
/* 変数定義 */
:root {
  --line-primary: #06C755;
  --line-secondary: #1E1E1E;
  /* 他の変数 */
}
/* リセットスタイル */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
/* 基本レイアウト */
body {
  font-family: 'Noto Sans JP', sans-serif;
  background-color: var(--line-background);
  /* 他のスタイル */
}
/* ヘッダー */
#top-menu {
  background-color: var(--line-primary);
  /* LINEスタイルのヘッダー */
}
/* 左サイドバー */
#main-menu {
  /* LINEスタイルのサイドバー */
}
/* フッター */
#footer {
  /* LINEスタイルのフッター */
}
2. issues.css
/* チケット一覧テーブル */
table.list.issues {
  /* チケット一覧のスタイル */
}
/* チケット詳細 */
div.issue {
  /* チケット詳細のスタイル */
}
/* フィルター */
fieldset#filters {
  /* フィルターのスタイル */
}
/* その他チケット関連のスタイル */
3. theme.js
$(document).ready(function() {
  // ヘッダーの拡張
  setupHeader();
  
  // サイドバーの拡張
  setupSidebar();
  
  // フッターの拡張
  setupFooter();
  
  // その他の機能拡張
  setupTabNavigation();
  setupDrawerBehavior();
  setupAnimations();
});
// 各種セットアップ関数
function setupHeader() {
  // ヘッダーの拡張処理
}
function setupSidebar() {
  // サイドバーの拡張処理
}
// その他の関数
実装方針
- 
既存のHTMLを変更しない - Redmineの標準HTML構造を保持
- 必要に応じてJavaScriptでDOM要素を追加
 
- 
既存のクラス・IDを最大限活用 - Redmine標準のクラス名をスタイリングに利用
- 必要な場合のみ追加クラスを付与
 
- 
段階的な適用を可能に - コア機能に影響しない実装
- 拡張機能は段階的に追加できるように
 
実装優先順位
- 基本レイアウト(ヘッダー、サイドバー、フッター)
- チケット一覧ページ
- チケット詳細ページ
- その他の拡張機能
この計画に沿って、LINE風テーマをRedmineに最適化して実装していきます。