日本語
ドキュメント
テーマ

テーマ

組み込みテーマを選択するか、独自のテーマを定義します。

OpenCodeでは、複数の組み込みテーマから選択したり、ターミナルテーマに適応するテーマを使用したり、独自のカスタムテーマを定義したりできます。

デフォルトでは、OpenCodeは独自のopencodeテーマを使用します。

ターミナル要件

テーマが完全なカラーパレットで正しく表示されるには、ターミナルがtruecolor(24ビットカラー)をサポートしている必要があります。ほとんどの最新ターミナルはデフォルトでサポートしていますが、有効にする必要がある場合があります:

  • サポートの確認echo $COLORTERMを実行 - truecolorまたは24bitが出力されるはずです
  • truecolorの有効化:シェルプロファイルで環境変数COLORTERM=truecolorを設定
  • ターミナル互換性:ターミナルエミュレータが24ビットカラーをサポートしていることを確認(iTerm2、Alacritty、Kitty、Windows Terminal、最新バージョンのGNOME Terminalなど、ほとんどの最新ターミナルがサポート)

truecolorサポートがない場合、テーマは色精度が低下して表示されるか、最も近い256色近似にフォールバックする可能性があります。

組み込みテーマ

OpenCodeには複数の組み込みテーマが付属しています。

名前説明
systemターミナルの背景色に適応
tokyonightTokyonight (opens in a new tab)テーマベース
everforestEverforest (opens in a new tab)テーマベース
ayuAyu (opens in a new tab)ダークテーマベース
catppuccinCatppuccin (opens in a new tab)テーマベース
catppuccin-macchiatoCatppuccin (opens in a new tab)テーマベース
gruvboxGruvbox (opens in a new tab)テーマベース
kanagawaKanagawa (opens in a new tab)テーマベース
nordNord (opens in a new tab)テーマベース
matrixハッカースタイルの緑と黒のテーマ
one-darkAtom One (opens in a new tab)ダークテーマベース

さらに多くのテーマがあり、常に新しいテーマを追加しています。

システムテーマ

systemテーマは、ターミナルのカラースキームに自動的に適応するように設計されています。固定色を使用する従来のテーマとは異なり、systemテーマは:

  • グレースケールを生成:ターミナルの背景色に基づいてカスタムグレースケールを作成し、最適なコントラストを確保。
  • ANSIカラーを使用:シンタックスハイライトとUI要素に標準ANSIカラー(0-15)を活用し、ターミナルのカラーパレットを尊重。
  • ターミナルデフォルトを保持:テキストと背景色にnoneを使用し、ターミナルのネイティブな外観を維持。

システムテーマは以下のユーザーに適しています:

  • OpenCodeをターミナルの外観に合わせたい
  • カスタムターミナルカラースキームを使用している
  • すべてのターミナルアプリケーションで一貫した外観を好む

テーマの使用

/themeコマンドでテーマセレクターを表示してテーマを選択できます。または設定で指定できます。

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "theme": "tokyonight"
}

カスタムテーマ

OpenCodeは柔軟なJSONベースのテーマシステムをサポートしており、ユーザーが簡単にテーマを作成・カスタマイズできます。

階層

テーマは以下の順序で複数のディレクトリから読み込まれ、後のディレクトリが前のものを上書きします:

  • 組み込みテーマ - バイナリに埋め込まれています
  • ユーザー設定ディレクトリ - ~/.config/opencode/themes/*.jsonまたは$XDG_CONFIG_HOME/opencode/themes/*.jsonで定義
  • プロジェクトルートディレクトリ - <project-root>/.opencode/themes/*.jsonで定義
  • 現在の作業ディレクトリ - ./.opencode/themes/*.jsonで定義

複数のディレクトリに同じ名前のテーマが含まれている場合、優先度の高いディレクトリのテーマが使用されます。

テーマの作成

カスタムテーマを作成するには、テーマディレクトリの1つにJSONファイルを作成します。

ユーザー全体のテーマの場合:

mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json

プロジェクト固有のテーマの場合:

mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json

JSON形式

テーマは柔軟なJSON形式を使用し、以下をサポートします:

  • 16進数カラー"#ffffff"
  • ANSIカラー3(0-255)
  • カラー参照"primary"またはカスタム定義
  • ダーク/ライトバリアント{"dark": "#000", "light": "#fff"}
  • カラーなし"none" - ターミナルのデフォルトカラーまたは透明を使用

カラー定義

defsセクションはオプションで、テーマで参照できる再利用可能なカラーを定義できます。

ターミナルデフォルト

特別な値"none"は、ターミナルのデフォルトカラーを継承するために任意のカラーに使用できます。これは、ターミナルのカラースキームとシームレスに融合するテーマを作成するのに特に便利です:

  • "text": "none" - ターミナルのデフォルト前景色を使用
  • "background": "none" - ターミナルのデフォルト背景色を使用

カスタムテーマの例:

my-theme.json
{
  "$schema": "https://opencode.ai/theme.json",
  "defs": {
    "nord0": "#2E3440",
    "nord1": "#3B4252",
    "nord2": "#434C5E",
    "nord3": "#4C566A",
    "nord4": "#D8DEE9",
    "nord5": "#E5E9F0",
    "nord6": "#ECEFF4",
    "nord7": "#8FBCBB",
    "nord8": "#88C0D0",
    "nord9": "#81A1C1",
    "nord10": "#5E81AC",
    "nord11": "#BF616A",
    "nord12": "#D08770",
    "nord13": "#EBCB8B",
    "nord14": "#A3BE8C",
    "nord15": "#B48EAD"
  },
  "theme": {
    "primary": {
      "dark": "nord8",
      "light": "nord10"
    },
    "secondary": {
      "dark": "nord9",
      "light": "nord9"
    },
    "accent": {
      "dark": "nord7",
      "light": "nord7"
    },
    "error": {
      "dark": "nord11",
      "light": "nord11"
    },
    "warning": {
      "dark": "nord12",
      "light": "nord12"
    },
    "success": {
      "dark": "nord14",
      "light": "nord14"
    },
    "info": {
      "dark": "nord8",
      "light": "nord10"
    },
    "text": {
      "dark": "nord4",
      "light": "nord0"
    },
    "textMuted": {
      "dark": "nord3",
      "light": "nord1"
    },
    "background": {
      "dark": "nord0",
      "light": "nord6"
    },
    "backgroundPanel": {
      "dark": "nord1",
      "light": "nord5"
    },
    "backgroundElement": {
      "dark": "nord1",
      "light": "nord4"
    },
    "border": {
      "dark": "nord2",
      "light": "nord3"
    },
    "borderActive": {
      "dark": "nord3",
      "light": "nord2"
    },
    "borderSubtle": {
      "dark": "nord2",
      "light": "nord3"
    },
    "diffAdded": {
      "dark": "nord14",
      "light": "nord14"
    },
    "diffRemoved": {
      "dark": "nord11",
      "light": "nord11"
    },
    "diffContext": {
      "dark": "nord3",
      "light": "nord3"
    },
    "diffHunkHeader": {
      "dark": "nord3",
      "light": "nord3"
    },
    "diffHighlightAdded": {
      "dark": "nord14",
      "light": "nord14"
    },
    "diffHighlightRemoved": {
      "dark": "nord11",
      "light": "nord11"
    },
    "diffAddedBg": {
      "dark": "#3B4252",
      "light": "#E5E9F0"
    },
    "diffRemovedBg": {
      "dark": "#3B4252",
      "light": "#E5E9F0"
    },
    "diffContextBg": {
      "dark": "nord1",
      "light": "nord5"
    },
    "diffLineNumber": {
      "dark": "nord2",
      "light": "nord4"
    },
    "diffAddedLineNumberBg": {
      "dark": "#3B4252",
      "light": "#E5E9F0"
    },
    "diffRemovedLineNumberBg": {
      "dark": "#3B4252",
      "light": "#E5E9F0"
    },
    "markdownText": {
      "dark": "nord4",
      "light": "nord0"
    },
    "markdownHeading": {
      "dark": "nord8",
      "light": "nord10"
    },
    "markdownLink": {
      "dark": "nord9",
      "light": "nord9"
    },
    "markdownLinkText": {
      "dark": "nord7",
      "light": "nord7"
    },
    "markdownCode": {
      "dark": "nord14",
      "light": "nord14"
    },
    "markdownBlockQuote": {
      "dark": "nord3",
      "light": "nord3"
    },
    "markdownEmph": {
      "dark": "nord12",
      "light": "nord12"
    },
    "markdownStrong": {
      "dark": "nord13",
      "light": "nord13"
    },
    "markdownHorizontalRule": {
      "dark": "nord3",
      "light": "nord3"
    },
    "markdownListItem": {
      "dark": "nord8",
      "light": "nord10"
    },
    "markdownListEnumeration": {
      "dark": "nord7",
      "light": "nord7"
    },
    "markdownImage": {
      "dark": "nord9",
      "light": "nord9"
    },
    "markdownImageText": {
      "dark": "nord7",
      "light": "nord7"
    },
    "markdownCodeBlock": {
      "dark": "nord4",
      "light": "nord0"
    },
    "syntaxComment": {
      "dark": "nord3",
      "light": "nord3"
    },
    "syntaxKeyword": {
      "dark": "nord9",
      "light": "nord9"
    },
    "syntaxFunction": {
      "dark": "nord8",
      "light": "nord8"
    },
    "syntaxVariable": {
      "dark": "nord7",
      "light": "nord7"
    },
    "syntaxString": {
      "dark": "nord14",
      "light": "nord14"
    },
    "syntaxNumber": {
      "dark": "nord15",
      "light": "nord15"
    },
    "syntaxType": {
      "dark": "nord7",
      "light": "nord7"
    },
    "syntaxOperator": {
      "dark": "nord9",
      "light": "nord9"
    },
    "syntaxPunctuation": {
      "dark": "nord4",
      "light": "nord0"
    }
  }
}