EOS VR Utilityの設定ファイルを一括編集するシェルスクリプトを作ってみた

こんにちは、XRエンジニアの[イワケン](https://twitter.com/iwaken71)です。

これは[Iwaken Lab. Advent Calendar 2024](https://qiita.com/advent-calendar/2024/iwakenlab)の1日目の記事です。

お題は「今年がんばった技術・作品・活動」。今回は、最近取り組んでいる **Apple Vision Pro** のImmersive Video制作（VR180映像のようなもの）に活用している **EOS VR Utility** について、映像クリエイターの皆さんにも役立つTipsをお届けします。

この記事では、**シェルスクリプト** という技術を使って、EOS VR Utilityの設定ファイルを効率的に編集する方法を丁寧に解説します。これから説明する内容は、**プログラミングの経験がなくても簡単に実践できるよう配慮**していますので、ぜひ試してみてください！

# [背景] EOS VR Utilityとは？

**EOS VR Utility** は、Canonのデュアル魚眼レンズを使ったVRコンテンツ制作をサポートするソフトウェアです。このソフトでは、撮影時の設定情報がXML形式で保存されます。

通常、設定変更はEOS VR Utilityソフトを通じて行いますが、このXMLファイルを直接編集することで、**手作業より効率的に設定変更や後処理を進められる可能性**があります。

しかし、複数のXMLファイルを一括で編集する場合、手作業では次のような課題があります。

- **大量のファイルを編集するのに時間がかかる**  
- **手動作業によるミスのリスクが高い**

そこで、今回は「シェルスクリプト」というツールを使って、一括編集を自動化する方法を紹介します。

# [シェルスクリプトとは？]

シェルスクリプトとは、**コンピュータが実行する一連の命令（スクリプト）をまとめたもの**です。例えば、「特定のファイルを探して、その中身を変更する」といった一連の作業をスクリプトとして記述できます。

プログラミングの経験がない方でも簡単に試せるように、以下で詳しく解説します！

# [課題] XMLファイルの設定変更を効率化したい

例えば、EOS VR Utilityの設定ファイルには以下のような項目があります。

### 書き換え前

```xml
<LensMask>ON</LensMask>
<Gamma>CanonLog2</Gamma>
<ChromaticAberration>OFF</ChromaticAberration>
<PeripheralIllumination>OFF</PeripheralIllumination>
```

これを次のように変更したいとします。

### 書き換え後

```xml
<LensMask>OFF</LensMask>
<Gamma>CanonLog3</Gamma>
<ChromaticAberration>ON</ChromaticAberration>
<PeripheralIllumination>ON</PeripheralIllumination>
```

# [解決策] シェルスクリプトで自動化する

次に、具体的なスクリプトと実行手順を説明します。このスクリプトを使えば、**現在のフォルダ内のすべてのXMLファイルを自動で一括編集**できます。

## スクリプト: `edit_eos_vr_xml.sh`

以下のコードをテキストエディタ（例: メモ帳やVS Code）にコピーし、`edit_eos_vr_xml.sh` という名前で保存してください。
[VSCodeはこちら](https://code.visualstudio.com/)からインストールできます！

```bash:edit_eos_vr_xml.sh
#!/bin/bash

# 現在のディレクトリを対象フォルダに設定
TARGET_DIR=$(pwd)

# XMLファイルを検索して処理
find "$TARGET_DIR" -type f -name "*.XML" | while read -r FILE; do
    echo "Processing: $FILE"
    
    # 一時ファイルを使って変更を適用
    sed 's|<LensMask>ON</LensMask>|<LensMask>OFF</LensMask>|g;
         s|<Gamma>CanonLog2</Gamma>|<Gamma>CanonLog3</Gamma>|g;
         s|<ChromaticAberration>OFF</ChromaticAberration>|<ChromaticAberration>ON</ChromaticAberration>|g;
         s|<PeripheralIllumination>OFF</PeripheralIllumination>|<PeripheralIllumination>ON</PeripheralIllumination>|g' "$FILE" > "${FILE}.tmp"

    # 変更を元のファイルに上書き
    mv "${FILE}.tmp" "$FILE"
done

echo "XMLファイルの更新が完了しました！"
```

# [実行手順] 初めての方でも3ステップで簡単に実行！

以下の手順に沿って進めれば、初めての方でも簡単にスクリプトを実行できます。

### 1. スクリプトを保存
`edit_eos_vr_xml.sh` という名前で保存します。保存先は、XMLファイルが置いてあるフォルダと同じ場所にします。

### 2. 実行権限を付与
MacのターミナルまたはLinuxの端末を開き、次のコマンドを入力します。

```bash
chmod +x edit_eos_vr_xml.sh
```

### 3. スクリプトを実行
次のコマンドを入力してスクリプトを実行します。

```bash
./edit_eos_vr_xml.sh
```

実行が成功すると、XMLファイルの中身が自動で変更されます。

# [注意点]

1. **バックアップを忘れずに**  
   元のファイルが失われないよう、実行前に対象フォルダをバックアップしてください。

2. **スクリプト実行時のエラー確認**  
   スクリプト実行後、ターミナルの出力を確認し、想定通り動作しているか確認してください。

# まとめ

この記事では、**EOS VR Utility** の設定ファイルを一括編集するシェルスクリプトを紹介しました。スクリプトを使えば、作業時間を短縮できるだけでなく、ミスを防ぐことも可能です。

「シェルスクリプトって難しそう」と思っている方も、この記事を参考に、ぜひ挑戦してみてください！


---

---

---

# この記事の作られ方 ～ChatGPTとの対話を記事化～

この記事は、私が **ChatGPT (GPT-4o)** に質問して得られた解決方法をもとに作成しています。ChatGPTを使って、問題を解決するだけでなく、そのプロセスをそのまま記事化する手法を試みました。

以下は、ChatGPTへの具体的な質問内容とその返答の例です。

## 質問内容

解決のプロセスが終わった後、ChatGPTに以下のようにお願いしました。

```markdown
このファイルはEOS VR Utilityというソフトの設定ファイルです。

この知見をQiitaの技術記事としてMarkdownとして、世の中に残したいです。

記事化をおねがいします。
また、私の過去の文章を共有しますので、おなじような文体でお願いします。

==
こんにちは、XRエンジニアの[イワケン](https://twitter.com/iwaken71)です。

hogehoge...
```

## ChatGPTの返答

ChatGPTは以下のような形で記事を生成してくれました。

```markdown
# EOS VR Utilityの設定ファイルを一括編集するシェルスクリプトを作ってみた

こんにちは、XRエンジニアの[イワケン](https://twitter.com/iwaken71)です。

これは[Qiita Advent Calendar 2024 - XR](https://qiita.com/advent-calendar/2024/xr)の1日目の記事です。この記事では、EOS VR Utility の設定ファイル（XML形式）を一括で編集するシェルスクリプトの作成方法について解説します。

...
```

このようにして、ChatGPTを利用することで、効率的に技術記事を作成できました。

調整として、映像クリエイター向けの文章にするために

```markdown
シェルスクリプトを叩いたことがない、映像クリエイター向けの記事にしたいため、その旨を伝えつつ、説明を丁寧にしてください。現在の記事は以下です。

==
(現在のMarkdownの記事)
```

といった調整もしました。

---

# 調べたことを軽率に記事にしよう！

これからアドカレの記事を書く Iwaken Lab.のメンバー（学生、若手社会人） に向けたメッセージです。

技術記事を書くとき「しっかりした内容にしなきゃ」と構えてしまいがちですが、もっと肩の力を抜いて軽率に記事にしましょう。例えば、生成AIで調べたことをそのまま記事化するだけでも十分価値があります。

なぜなら、あなたが「調べた」ということは、同じ疑問を抱える誰かがどこかにいるからです。そんな人にとって、この記事がきっと役に立ちます。自信を持って発信しましょう！

この記事を書くきっかけは、映像クリエイターの方との何気ない会話でした。「これできたら楽ですよね～」「でもシェルスクリプトとか書いたことないんですよね」という言葉から、「やってみるか、どうやって書くんやろ」と思い立ったのです。

たとえその「困っている誰か」が自分自身でも、隣のたった一人でも、その悩みに応える記事を書く価値はあります。軽率に始めた記事が誰かの大きな助けとなり、バイネームで覚えてもらうきっかけになるかもしれません。(実際、この記事見たよ！と私は100回以上言われてきました)

ということで、軽率に調べたことを記事にして発信していきましょ～

2日目はかっつーさん！お楽しみに！