UbuntuでMicrosoft Officeを安定的に使う方法

# 1. 本記事執筆の背景と目的
## 1.1. 背景
- 職業柄Mirosoft OfficeのPowerPointを使い倒しているものの、私生活ではプログラミングをしているためPCはUbuntu Desktopを使っている
- 時折寄せられる開発相談で資料を作ろうとすると代替ソフトでは以下のような課題がある：
    - **Office365ではレイテンシーや機能不足で作業が進まない**
    - **WPS Officeも使い勝手で満足できないのみならず日本語入力のバグがあったりする**
- Wineでは古代のMicrosoft Officeしか動かない
- よってPCを再起動してWindowsに切り替えざるを得ないためにとても不便である
- どうせならUbuntuのパッケージのようにシームレスに使いたい

## 1.2. 目的
Ubuntu24.04上でMicrosoft Officeをシームレスに使用する手順を記録し、自身の備忘とすると共に、同じニッチな悩みを持つ方々の一助とする

## 1.3. 環境
OS: Ubuntu24.04 (x11)

# 2. Microsoft Office（Power Point）起動までのステップ
本節では必要なパッケージのインストールから設定までを順を追って説明する

## 2.1. 必要なパッケージのインストール
まず、以下の四つのパッケージをインストールする
1. podman, podman-compose
1. FreeRDP
1. dialog

### 2.1.1. podmanおよびpodman-compose
```shell
sudo apt install podman podman-compose
```

### 2.1.2. FreeRDP
```shell
sudo apt install freerdp3-x11
```

### 2.1.3. dialog
`dialog`のインストールのためには`universe`というレポジトリを追加する必要がある
```shell
sudo add-apt-repository universe
sudo apt update
sudo apt install dialog
```

## 2.2. Windows仮想マシンの初回起動
次にWindows仮想マシンを立ち上げる

### 2.2.1. Winappsをダウンロードする
```shell
workspace]$ git clone https://github.com/winapps-org/winapps.git
workspace]$ cd winapps
```

### 2.2.2. ダウンロードするWindowsイメージの変更
デフォルトでは`tiny11`という最小限の機能を有したWindows11のISOファイルがダウンロードされる。日本語入力およびMicrosoft IMEを使用できるように、なにより**インストールが壊れないように**（※1）ベースとなるWindowsイメージを変更する

設定は`compose.yaml`に書かれており、`VERSION`を`tiny11`から`11`に変更すればWindows11 Proがダウンロードされるようになる
```shell
winapps]$ vi compose.yaml
```
```yaml
# compose.yaml
services:
  windows:
    environment:
      # tiny11 -> 11
      VERSION: "11"
```

※1）"windows could not compelete the installation"で無限に再起動する

もし仮想イメージをダウンロードせず、ローカルに置いてあるものを使いたい場合は以下のようにする
```yaml
volumes:
  #- /path/to/windows/install/media.iso:/custom.iso # Uncomment to use a custom Windows ISO. If specified, 'VERSION' (e.g. 'tiny11') will be ignored.
  - ./your_custom_image.iso:/custom.iso
```

### 2.2.3. 仮想マシンの起動
Windows仮想マシンを起動する

```shell
winapps]$ podman-compose --file ./compose.yaml up 
```

ブラウザから`http://127.0.0.1:8006`にアクセスすると、しばらくイメージのダウンロードに時間を要しつつも、最終的にWindows11が起動することが確認できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006349/ad48e95b-316d-1211-e8af-db822731e5c4.png)

## 2.3. 設定ファイルの編集
次に`compose.yaml`を`~/.config/winapps`にコピーして二箇所を編集して設定を行う。
```shell
winapps]$ cp compose.yaml ~/.config/winapps/compose.yaml
winapps]$ vi ~/.comfig/winapps/compose.yaml
```
編集1: 自動で起動するように`restart`を設定する
```yaml
# ~/.config/winapps/compose.yaml

# on-failure -> always
restart: always
```
編集2: OEMの部分をコメントアウトする
```yaml
#- ./oem:/oem
```

## 2.4. 設定の反映
編集したファイルで起動し直す
```shell
winapps]$ podman-compose --file ./compose.yaml down
winapps]$ podman-compose --file ~/.config/winapps/compose.yaml up
```

ちなみに、仮想マシンは`WinApps`という名前で立ち上がっており、二回目以降の起動には`up`コマンドではなく以下のコマンドでよい
```shell
podman start -a WinApps
```

## 2.5. Microsoft Officeをインストールする
ここでRDPでWindows仮想マシンにログインしてMicrosoft Officeをインストールする

### 2.5.1. FreeRDPの設定ファイルを作成する

`compose.yaml`にあるとおり、デフォルトのログイン情報は次のようになっている
```yaml
# ~/.config/winapps/compose.yaml

services:
  windows:
    USERNAME: "MyWindowsUser" # Edit here to set a custom Windows username. The default is 'MyWindowsUser'.
    PASSWORD: "MyWindowsPassword" # Edit here to set a password for the Windows user. The default is 'MyWindowsPassword'.
```

独自のWinappsの設定ファイル（`compose.yaml`）と同じ場所に上記の情報を反映したFreeRDPの設定ファイルを作成する
```shell
winapps]$ vi ~/.config/winapps/winapps.conf
```
```shell
# ~/.config/winapps/winapps.conf
RDP_USER="MyWindowsUser"
RDP_PASS="MyWindowsPassword"
WAFLAVOR="podman"
# 日本語Microsoft IMEを指定
RDP_FLAGS="/kbd:layout:0xE0010411"
```

### 2.5.2. RDP接続とMicrosoft Officeのインストール
すでにUbuntuのアプリからWindowsが存在しているはずなので、それをクリックするとRDP接続でWindows（GUI）に入ることができる（※2）

ブラウザはMicrosoft Edgeが最初から入っているので、必要に応じてそれを使ってOfficeのプロダクトに合ったインストールを行う

※2）万が一存在しない場合はRDP接続でなく`127.0.0.1:8006`でブラウザからGUI操作を行えばよい。Windowsアイコンは遅くとも2.6のセットアップ後にはアプリに出現するはずである。次のステップでは仮想マシンからログアウトしていることが求められるため、サインアウトすることを忘れてはならない

### 2.5.3. （必要に応じて）ローカルアカウントでのログインに切り替える
もしOfficeをインストールする際にMicrosoftアカウントでログインしてしまった場合は、Windows内で以下の設定を行う

> 「設定」>「アカウント」>「ユーザーの情報」>「アカウントの設定」>「ローカルアカウントでのログインに切り替える」

この際、ローカルアカウントである"MyWindowsUser"のパスワードを再度設定する必要がある

## 2.6. 仮想マシン内のMicrosoft OfficeをUbuntuに公開する
最後に`setup.sh`というスクリプトを実行することで仮想マシン内のWindowsアプリをUbuntuのアプリケーションから使えるようにする

```shell
winapps]$ ./setup.sh
```
ユーザーの回答が求められるため、順に回答する（以下はコンソール出力を整形したもの）

Q1. インストールかアンインストールか
```shell
Q) Install or uninstall WinApps?
--> Install
```

Q2. 現在のユーザーのためにセットアップするか、システム全体に向けてセットアップするか
```shell
Q) Configure WinApps for the current user '<your user name>' or the whole system?
--> Current User
```

Q3. サポートされているアプリケーションを自動的にインストールするか、手動で選択するか
```shell
Q) Automatically install supported applications or choose manually?
--> Manual (Default)
```

Q4. 公式のサポートがあるアプリをどうするか
```shell
Q) How would you like to handle officially supported applications?
--> Choose specific officially supported applications to set up
（特定のアプリケーションをセットアップする）
```
以下のものを選択する：
- `Explorer`: 仮想マシン内のフォルダアクセスのために公開する 
- `Powerpoint`（Word、Excel等も同じ）: 本記事の肝となるアプリ


Q5. 検知された他のアプリケーションはどうするか
```shell
Q) How would you like to handle other detected applications?
--> Select which applications to set up
（どのアプリケーションをセットアップするか選択する）
```
この中には特にめぼしいものはないと思うが、読者の好みで選んでほしい（筆者はPaintを入れている）

# 3. Ubuntuのアプリから起動できることを確認する
最後に、Ubuntuの「アプリ」から上記で公開したMicrosoft Officeが選べることを確認する

![exported_applications.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006349/dc48e2a5-eeff-40d1-b3fd-f229bce03825.png)

ドックにピン留めして使うこともできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006349/ac94c171-5e41-a685-0baa-963b2fb947a3.png)

注）もしダブルクリックしても起動しない場合は、ブラウザ経由で仮想マシンにログインしていることが考えられる原因の一つであるため、ブラウザの方をサインアウトして再試行するとよい

# Appendix A. UbuntuとWindowsの共有フォルダの設定
デフォルトではUbuntuの`${HOME}`がWindowsから`\\host.lan\Data`としてアクセスできるが、`compose.yaml`を編集してホームディレクトリ以外を共有フォルダにすることもできる

![windows_shared_folder.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006349/5f5c31b9-fec2-43c1-8f2a-096df5a3af52.png)

例えば以下のようにWindows用に作ったフォルダにしてもよい
```yaml
# ~/.config/winapps/compose.yaml

service:
  windows:
    volumes:
      - data:/storage # Mount volume 'data' to use as Windows 'C:' drive.
      # ${HOME} -> Your favorite directory, e.g., ${HOME}/Development/Windows
      - ${HOME}/Development/Windows:/shared # Mount Linux user home directory @ '\\host.lan\Data'.
```

# Appendix B. 参考文献
1. https://gist.github.com/eylenburg/38e5da371b7fedc0662198efc66be57b
1. https://github.com/dockur/windows/tree/master
1. https://github.com/winapps-org/winapps
1. https://github.com/awakecoding/FreeRDP-Manuals/blob/master/User/FreeRDP-User-Manual.markdown
1. https://askubuntu.com/questions/1452418/how-can-i-install-the-dialog-package