> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-sandboxes-integrations-placement.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# コードの保存と比較

> コードの保存を有効にし、コード比較を使って W&B Runs 間でコードを比較し、Jupyter セッション履歴を取得します。

W\&B を使用して、コードを保存し、Runs 間でコードを比較し、ローカルの変更を確認し、Jupyter セッション履歴を取得します。

<div id="enable-code-saving">
  ## コードの保存を有効にする
</div>

チームまたは組織のコードの保存を設定します。チームおよび組織での設定方法については、[プライバシー設定を構成する](/ja/platform/hosting/privacy-settings)を参照してください。

<Info>
  デフォルトでは、W\&B はすべての Teams でコードの保存を無効にしています。チームでこれを有効にするには、まず組織管理者が組織レベルで有効にする必要があります。[組織](#organization)セクションをご覧ください。
</Info>

<div id="team">
  ### チーム
</div>

チーム管理者としてチームのコードの保存を有効にするには、チームの **Settings** ページを開き、**Privacy** セクションに移動して、そのチームの Runs に対する **Enable code saving by default** を設定します。このオプションは、組織管理者が組織全体にコードの保存に関する制限を適用していない場合にのみ利用できます。画面の移動手順については、[チームのプライバシー設定を構成する](/ja/platform/hosting/privacy-settings#configure-privacy-settings-for-a-team)をご覧ください。

<div id="organization">
  ### 組織
</div>

組織管理者として組織のコードの保存を有効にするには、組織の **Settings** を開いて **Privacy** セクションに移動し、**Enforce default code saving restrictions** を有効にすることで、すべてのチームでコードの保存がデフォルトでオフのままになるよう設定します。この強制設定が有効な間、チーム管理者はチームに対して **Enable code saving by default** をオンにできません。組織で利用できる制御項目の一覧については、[Enforce privacy settings for all teams](/ja/platform/hosting/privacy-settings#enforce-privacy-settings-for-all-teams) を参照してください。

<div id="save-code">
  ## コードを保存
</div>

run を生成したソースコードを [アーティファクト](/ja/models/ref/python/experiments/artifact) として取得します。コードアーティファクトは、project の Workspace 内で確認できます。

コードを保存する方法は 2 つあります。きめ細かく制御する方法と、自動的に保存する方法です。

<div id="fine-grain-control">
  ### より細かな制御
</div>

`wandb.Run.log_code()` を使用すると、特定の file またはディレクトリを [アーティファクト](/ja/models/ref/python/experiments/artifact) としてログできます。

デフォルトでは、W\&B は現在のディレクトリを走査し、`.py` で終わるすべての file をログします。

次の例は、`wandb.Run.log_code()` を使用して現在のディレクトリをログする方法を示しています。

```python theme={null}
import wandb

with wandb.init() as run:
    # 現在のディレクトリをコードアーティファクトとしてログする
    run.log_code(root=".")
```

次の例では、コードをログする際に含めるファイルと除外するファイルを指定するために、`include_fn=` パラメーターと `exclude_fn=` パラメーターを指定して `wandb.Run.log_code()` を使用する方法を示します。

```python theme={null}
import wandb

with wandb.init() as run:
    run.log_code(
         root="../",
         include_fn=lambda path: path.endswith(".py") or path.endswith(".ipynb"),
         exclude_fn=lambda path, root: os.path.relpath(path, root).startswith(
             "cache/"
         ),
    )
```

W\&B が保存するソースコードファイルのタイプや保存場所をより細かく制御するには、[リファレンス ドキュメント](/ja/models/ref/python/experiments/run#log_code)を参照してください。

<div id="automatically-capture-code">
  ### コードを自動取得する
</div>

`wandb.init(settings=wandb.Settings(code_dir=))` を使用すると、現在のディレクトリとそのサブディレクトリ内のすべてのコードを自動的に取得できます。デフォルトでは、W\&B は次を取得します。

* `.py` で終わるファイル
* requirements.txt
* Dockerfile
* `wandb/` または `.wandb/` 配下にあるものはすべて除外します

次の例は、現在のディレクトリとそのサブディレクトリ内のすべてのコードを取得する方法を示しています。

```python theme={null}
import wandb

with wandb.init(settings=wandb.Settings(code_dir=".")) as run:
    # トレーニングコードをここに記述
```

`.` を、取得したいディレクトリのパスに置き換えることで、別のディレクトリを指定することもできます。

<div id="view-local-changes">
  ## ローカルの変更を表示する
</div>

W\&B では、Git リポジトリ内にステージ済みまたは未ステージの変更がある状態でコードをログすると、差分ファイルが生成され、W\&B UI でその変更を表示できます。

W\&B は差分ファイルを `diff.patch` または `diff_<sha>.patch` という名前で保存します。これらのファイルには、`HEAD` を基準とした、まだ Git にコミットされていないローカルのコード変更が含まれます。

差分ファイルを表示するには、次の手順に従います。

1. project の Workspace にアクセスします。
2. 左サイドバーで **Workspace** をクリックします。
3. run selector で、差分を表示したい run を選択します。
4. run の **Overview** ページで、**Files** タブを選択します。
5. ファイルの一覧から、`diff.patch` または `diff_<sha>.patch` ファイルを選択します。
6. 一覧からファイルを選択して、そのファイルの差分を展開します。

W\&B は、Runs 間の差分表示について、*unified* と *split* の 2 つのモードをサポートしています。

* Unified view では、単一のペインに差分が表示されます。
  <Frame>
    <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/diff_unified_view.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=4ecaaa22e5576f0de8ce8ba98292f460" alt="差分パッチの Unified view" width="3258" height="1232" data-path="images/app_ui/diff_unified_view.png" />
  </Frame>

* Split view では、差分が 2 つのペインに横並びで表示されます。

  <Frame>
    <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/diff_split_view.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=d93c5ca3229897e25306bd74e964c0ad" alt="差分パッチの Split view" width="3272" height="1084" data-path="images/app_ui/diff_split_view.png" />
  </Frame>

2 つの表示を切り替えるには、差分ビューの右上にある **Download** ボタンの下で、**Unified** または **Split** ボタンを選択します。

<div id="jupyter-session-history">
  ## Jupyter セッション履歴
</div>

W\&B は、Jupyter ノートブックのセッションで実行されたコードの履歴を保存します。Jupyter 内で `wandb.init()` を call すると、W\&B はフックを追加し、現在のセッションで実行されたコードの履歴を含む Jupyter ノートブックを自動的に保存します。

1. コードを含むプロジェクトのWorkspaceにアクセスします。
2. プロジェクトのサイドバーで **Artifacts** タブを選択します。
3. **code** アーティファクト を展開します。
4. **Files** タブを選択します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/hS4tNv5jzsGoCezc/images/app_ui/jupyter_session_history.gif?s=cd9cddda2379ec75096cc8b495b577f5" alt="Jupyter セッション履歴" width="3868" height="2574" data-path="images/app_ui/jupyter_session_history.gif" />
</Frame>

これにより、セッション中に実行されたセルと、IPython の `display` method を call して生成された出力が表示されます。これにより、特定の run で Jupyter 内のどのコードが実行されたかを正確に確認できます。可能な場合、W\&B はノートブックの最新バージョンも保存します。これは code ディレクトリ内にあります。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/hS4tNv5jzsGoCezc/images/app_ui/jupyter_session_history_display.png?fit=max&auto=format&n=hS4tNv5jzsGoCezc&q=85&s=e9d104acea20e55287aed185fe94f0c5" alt="Jupyter セッション出力" width="3826" height="1840" data-path="images/app_ui/jupyter_session_history_display.png" />
</Frame>

<div id="compare-code-across-runs">
  ## Runs 間でコードを比較
</div>

異なるW\&B runで使用されたコードを比較します。

1. ページの画面右上にある **Add panels** ボタンを選択します。
2. **TEXT AND CODE** のドロップダウンを展開し、**Code** を選択します。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-sandboxes-integrations-placement/MAxbgoUtLbv2P8uu/images/app_ui/code_comparer.png?fit=max&auto=format&n=MAxbgoUtLbv2P8uu&q=85&s=2316d21dcaa56878843af6f170d917a5" alt="コード比較パネル" width="887" height="337" data-path="images/app_ui/code_comparer.png" />
</Frame>
