初期設定 blender 5

サイドパネル 自動オープン アドオン起動時
マテリアルプレヴュー自動選択 起動時

    └─ Blender5_アドオン開発標準仕様.txt
       ├─ コード記述順序
       ├─ DEFAULTS
       ├─ Prefix自動設定
       ├─ Prefix手動変更対応
       ├─ リンクパネル
       ├─ アドオン削除パネル
       ├─ UI規則
       └─ エラー対策
# Blender 5以降専用

# 共通定義・Prefix自動設計ルール

## 4. 共通定義

このセクションは、作成するアドオンごとに**内容を自動的に最適化する**こと。

固定文字列を毎回そのままコピーして使用してはいけない。

---

# 4-1. アドオン名から最適なPrefixを決定する

アドオンの目的・機能・名称を分析し、そのアドオン専用のPrefixを毎回自動的に決定する。

例:

```python
PREFIX_VAL = "RAD_GEOM_"

を毎回固定で使用するのではなく、

放射矢印
→ RADIAL_ARROW_

球体穴作成
→ SPHERE_HOLE_

球面窓
→ SPHERICAL_WINDOW_

トーラス生成
→ TORUS_STUDIO_

円錐光線
→ CONE_RAY_

のように、アドオンの目的が分かるPrefixを選択する。


4-2. Prefixの命名規則

Prefixは原則として、

英大文字 + アンダースコア

とする。

例:

PREFIX_VAL = "SPHERICAL_WINDOW_"

日本語はPrefix内部に使用しない。

長すぎるPrefixは避ける。

Prefixだけを見れば、そのアドオンが生成したデータであることが分かる名前を優先する。


4-3. Prefixを一か所だけ変更できる設計

最重要。

ユーザーが、

PREFIX_VAL = "SPHERICAL_WINDOW_"

を手動で、

PREFIX_VAL = "MY_WINDOW_"

に変更しても、アドオン全体が正常動作するようにする。

Prefix文字列をコード中に直接大量記述してはいけない。

禁止:

bpy.data.objects.get("SPHERICAL_WINDOW_Main")
bpy.data.objects.get("SPHERICAL_WINDOW_Window")
bpy.data.collections.get("SPHERICAL_WINDOW_Collection")

代わりに、必ずPrefixから名前を生成する。

例:

def make_name(name):
    return f"{PREFIX_VAL}{name}"

使用例:

main_name = make_name("Main")
window_name = make_name("Window")
collection_name = make_name("Collection")

4-4. 名前生成関数を必ず用意する

共通定義または共通ユーティリティに、

def make_name(suffix):
    return f"{PREFIX_VAL}{suffix}"

を用意する。

必要に応じて、

def make_object_name(name):
    return make_name(f"OBJ_{name}")

def make_collection_name(name):
    return make_name(f"COL_{name}")

def make_material_name(name):
    return make_name(f"MAT_{name}")

などを使用する。


4-5. Blenderデータ名にはPrefixを使用する

以下のデータには、原則としてPrefixを使用する。

Object
Collection
Material
Mesh
Curve
Text
Modifier関連名称
生成物識別用名称

例:

SPHERICAL_WINDOW_OBJ_Main
SPHERICAL_WINDOW_OBJ_Window
SPHERICAL_WINDOW_COL_Main
SPHERICAL_WINDOW_MAT_Window

4-6. Prefix変更時の動作

ユーザーが、

PREFIX_VAL = "AAA_"

から、

PREFIX_VAL = "BBB_"

に変更した場合、

新しく生成されるデータは、

BBB_OBJ_Main
BBB_OBJ_Window
BBB_COL_Main
BBB_MAT_Window

となる。

コード内部に旧Prefixが残っていて、検索対象が固定される状態は禁止。


4-7. PrefixとPythonクラス名を分離する

Pythonのクラス名までPrefix文字列から動的生成する必要はない。

例えば、

class SPHERICAL_WINDOW_OT_create(bpy.types.Operator):

のようなPython内部クラス名は固定してよい。

一方、Blender内に生成されるデータ名は、

PREFIX_VAL

から生成する。

つまり、

Python内部識別子
        ↓
固定・安定

Blenderデータ名
        ↓
PREFIX_VALから生成

という構造を基本とする。


4-8. bl_idnameにも注意する

bl_idname はPrefix変更に連動させる必要がない。

例:

bl_idname = "spherical_window.create"

のようにアドオン固有の内部IDとして固定する。

ただし、別アドオンと衝突しない名称を毎回選択する。


4-9. ADDON_CATEGORYも毎回最適化する

以下も固定値を毎回コピーしない。

ADDON_CATEGORY = "Radial Geometry"

アドオンの目的に合わせて最適なカテゴリ名を設定する。

例:

ADDON_CATEGORY = "Spherical Window"
ADDON_CATEGORY = "Radial Geometry"
ADDON_CATEGORY = "Torus Studio"

など。

ただし、ユーザーが明示的にカテゴリ名を指定した場合は、その指定を優先する。


4-10. 共通定義の標準形

最終的には、アドオンごとに次のような形を基本とする。

# =========================================================
# 4. 共通定義
# =========================================================

# アドオン機能から自動的に最適化する
PREFIX_VAL = "SPHERICAL_WINDOW_"

# UIカテゴリ
ADDON_CATEGORY = "Spherical Window"

def make_name(suffix):
    return f"{PREFIX_VAL}{suffix}"

def make_object_name(name):
    return make_name(f"OBJ_{name}")

def make_collection_name(name):
    return make_name(f"COL_{name}")

def make_material_name(name):
    return make_name(f"MAT_{name}")

4-11. Prefix変更可能性の最終条件

以下のコードのPrefix部分だけを変更しても、

PREFIX_VAL = "MY_CUSTOM_"

アドオンが正常動作すること。

その結果、

MY_CUSTOM_OBJ_Main
MY_CUSTOM_OBJ_Window
MY_CUSTOM_COL_Main
MY_CUSTOM_MAT_Window

のように生成されること。

コード内に旧Prefixをハードコードしないこと。


4-12. 重要

今後アドオンを作成するときは、

「Prefixを毎回最適な名前に決める」

ことを標準仕様とする。

さらに、

「Prefixをユーザーが1か所で手動変更できる」

ことを必須条件とする。

したがって、

PREFIX_VAL = "RAD_GEOM_"

を単純な固定テンプレートとして毎回コピーするのではなく、

アドオンの目的を分析 ↓ 最適なPrefixを決定 ↓ PREFIX_VALに設定 ↓ make_name()経由で全データ名を生成

という設計にする。


```jsx
blender5 以降専用でアドオンを作る

アドオンの有効化と同時に**
「サイドパネル(Nパネル)が自動で開く」
「3Dビューがマテリアルプレビューに自動で切り替わる」**

機能を組み込み

その点は重要です。現在の要件では**「初期設定を管理する」**とは書かれていますが、**「ChatGPT が最初にコピー用コードとして出力する」**という運用ルールが十分に明記されていません。

追加するなら、次の要件を **「6. 初期設定」** の最後に入れるのがよいでしょう。

## 初期設定ブロックの出力ルール

新しい Blender 5 専用アドオンを作成する

# 作成日 年月日時分
# ===================================
# 4. 共通定義
# ===================================
ADDON_TITLE = "
PREFIX_VAL = ""
ADDON_CATEGORY = " "
PREFIX = PREFIX_VAL.lower()

適切な タイトル 変数を作る

コード本体を作成する前に、
**初期設定ブロック**をコピーできる形式で出力する。

この初期設定ブロックは、
Blender アドオンのコード内へそのまま貼り付けられる Python コードとし、
コードブロック形式で提示する。

### 目的

* 初期値を一覧で確認できるようにする。
* 初期値をコード作成前に調整できるようにする。
* コピー&ペーストだけでコードへ組み込めるようにする。
* 初期値を定義部で一元管理する。

### 出力形式

初期設定は、以下のような構成でカテゴリごとにまとめて出力する。

* 数値
* XYZ 座標
* 透明度
* テキスト設定
* 色(RGBA)
* その他の初期設定

### 出力ルール

* Python の代入文形式で出力する。
* コメントを含め、そのまま Blender アドオンのソースコードへ貼り付けられる形式とする。
* 1項目につき1行で記述する。
* コード中の変数名と完全に一致させる。
* ChatGPT はコード本体より先に、この初期設定ブロックを提示する。
* 利用者は必要に応じて値を編集し、そのままコードへ貼り付けられるものとする。

### 標準テンプレート

```python
# =========================================================
# 6. 初期設定
# =========================================================

# 数値
XXXXX_DEFAULT = ...

# XYZ
XXXXX_X_DEFAULT = ...
XXXXX_Y_DEFAULT = ...
XXXXX_Z_DEFAULT = ...

# 透明度
ALPHA_FRONT_DEFAULT = ...
ALPHA_BACK_DEFAULT = ...

# テキスト
TEXT_SIZE_DEFAULT = ...
TEXT_OFFSET_X_DEFAULT = ...
TEXT_OFFSET_Y_DEFAULT = ...
TEXT_OFFSET_Z_DEFAULT = ...

# 色 (R, G, B, A)
COLOR_MAIN = (...)
COLOR_SUB = (...)

この初期設定ブロックは、コード内のスタイルと同じ形式で出力し、コピー&ペーストだけで利用できることを標準仕様とする。

このルールを追加すれば、「初期値をコード本体にそのまま貼り付けられる形で最初に出力する」という運用が要件定義に明確に組み込まれます。