> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# コードの保存と差分表示

> コード保存を有効にし、code comparer で W&B の run 間のコードを比較して、Jupyter セッションの履歴を記録します。

W\&B を使用すると、コード保存、run 間でのコードの比較、ローカルの変更内容の確認、Jupyter セッション履歴の記録を行えます。

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

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

<Info>
  デフォルトでは、W\&B はすべてのチームでコードの保存を無効にしています。チームで有効にする前に、組織管理者は組織に対して **Disable default code saving** をオフのままにしておく必要があります。[Organization](#organization) セクションを参照してください。
</Info>

<h3 id="team">
  チーム
</h3>

チーム管理者としてチームのコードの保存を有効にするには、**Settings** ページにアクセスし、**Privacy** セクションに移動して、そのチームの run に対して **Enable code saving by default** を設定します。このオプションは、組織管理者が組織全体に対して **Disable default code saving** を有効にしていない場合にのみ利用可能です。ナビゲーションの手順については、[Configure privacy settings for a team](/ja/products/wandb/platform/hosting/privacy-settings#configure-privacy-settings-for-a-team) を参照してください。

<h3 id="organization">
  組織
</h3>

組織管理者は、**Settings** にアクセスして **Privacy** を選択し、**Project and content security** セクションの **Disable default code saving** を使用して、すべてのチームでコードの保存をデフォルトで無効にするかどうかを制御します。この設定が有効な間は、チーム管理者は自分のチームで **Enable code saving by default** を有効にできません。組織レベルで設定できる項目の一覧については、[すべてのチームにプライバシー設定を適用する](/ja/products/wandb/platform/hosting/privacy-settings#enforce-privacy-settings-for-all-teams)を参照してください。

<h2 id="save-code">
  コードを保存する
</h2>

run を生成したソースコードを[アーティファクト](/ja/products/wandb/ref/python/experiments/artifact)として記録します。コードアーティファクトは、プロジェクトのワークスペース内で確認できます。

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

<h3 id="fine-grain-control">
  きめ細かな制御
</h3>

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

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

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

```python theme={"system"}
import wandb

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

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

```python theme={"system"}
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/products/wandb/ref/python/experiments/run#log_code)を参照してください。

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

`wandb.init(settings=wandb.Settings(code_dir=))` を使用して、カレントディレクトリおよびサブディレクトリ内のすべてのコードを自動的に取得します。デフォルトでは、W\&B は以下を取得します：

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

次の例は、カレントディレクトリおよびサブディレクトリ内のすべてのコードを取得する方法を示しています：

```python theme={"system"}
import wandb

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

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

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

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

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

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

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

W\&B では、run 間の差分の表示方法として *統合* と *分割* の 2 つのモードを利用できます。

* 統合ビューでは、差分を 1 つのペインに表示します。
  <Frame>
    <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/diff_unified_view.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=e9e70ee524d46ab1fad4f4acd6496168" alt="差分パッチの統合ビュー" width="3258" height="1232" data-path="products/wandb/_media/diff_unified_view.png" />
  </Frame>

* 分割ビューでは、差分を 2 つのペインに左右に並べて表示します。

  <Frame>
    <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/diff_split_view.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=9a13d394d56b24dab5a524183c37c44d" alt="差分パッチの分割ビュー" width="3272" height="1084" data-path="products/wandb/_media/diff_split_view.png" />
  </Frame>

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/jupyter_session_history.gif?s=f3d7f95da48784cb05e41a1b854f8ec9" alt="Jupyter セッション履歴" width="3868" height="2574" data-path="products/wandb/_media/jupyter_session_history.gif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/jupyter_session_history_display.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=8be116a89181083f0c994627894adaee" alt="Jupyter セッションの出力" width="3707" height="1708" data-path="products/wandb/_media/jupyter_session_history_display.png" />
</Frame>

<h2 id="compare-code-across-runs">
  異なる run 間でコードを比較する
</h2>

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

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

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/code_comparer.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=fe09c2fd7401fcf13e1cada70c0f2d50" alt="コード比較パネル" width="887" height="337" data-path="products/wandb/_media/code_comparer.png" />
</Frame>
