# -*- coding: utf-8 -*-
"""UNEV_20250325_00.ipynb

Automatically generated by Colab.

Original file is located at
    https://colab.research.google.com/drive/1eJw1WiKk2ForQivSxaYvOFTUP_WvW0VZ

# UniqueEnvVar
 環境変数に対して、重複を避けながら値を追加・更新するクラスです。


```
2025/03/25 0.1.0 完成
2025/03/25 0.1.5 ミス
```

# UniqueEnvVar

# 1. モジュール定義
"""

# @title a. UniqueEnvVar 定義
import os

class UniqueEnvVar:
    """
    環境変数に対して、重複を避けながら値を追加・更新するクラスです。

    Attributes:
        var_name (str): 対象の環境変数名。
        separator (str): 環境変数の区切り文字。デフォルトは':'（Linux/Macの場合）。
    """
    def __init__(self, var_name, separator=":"):
        self.var_name = var_name
        self.separator = separator

    def get_values(self):
        """
        現在の環境変数の値を、区切り文字で分割してリストとして返します。
        例: LD_LIBRARY_PATH="/usr/lib:/usr/local/lib" → ["usr/lib", "usr/local/lib"]
        """
        value = os.environ.get(self.var_name, "")
        return value.split(self.separator) if value else []

    def add_value(self, new_value, position="end"):
        """
        新規追加しようとする値 new_value が、既に環境変数に登録されているか調べ、
        重複がなければ指定した位置に追加します。

        Args:
            new_value (str): 追加したい値。
            position (str): "start" なら先頭、"end" なら末尾に追加（デフォルト "end"）。

        Returns:
            bool: 既に存在していた場合は False、追加した場合は True。
        """
        values = self.get_values()
        if new_value in values:
            # 既に登録済みの場合は追加しない
            return False
        if position == "start":
            values.insert(0, new_value)
        else:
            values.append(new_value)
        os.environ[self.var_name] = self.separator.join(values)
        return True

    def remove_value(self, value_to_remove):
        """
        指定された値が存在すれば取り除くメソッド。

        Args:
            value_to_remove (str): 削除したい値。

        Returns:
            bool: 値が存在して削除した場合は True、存在しなかった場合は False。
        """
        values = self.get_values()
        if value_to_remove in values:
            values.remove(value_to_remove)
            os.environ[self.var_name] = self.separator.join(values)
            return True
        return False

# 利用例
if __name__ == "__main__":
    # 例として LD_LIBRARY_PATH を対象とする
    env = UniqueEnvVar("LD_LIBRARY_PATH")
    print("【初期状態】", env.get_values())

    # "/usr/local/new_lib" を先頭に追加
    added = env.add_value("/usr/local/new_lib", position="start")
    print("追加実施？", added)
    print("【更新後】", env.get_values())

    # 既に登録されているかチェック
    added_again = env.add_value("/usr/local/new_lib")
    print("重複追加？", added_again)
    print("【最終状態】", env.get_values())