Word形式でお願いします！と言われたのでMarkdownで管理するドキュメントをdocxにサクッと変換してみた

## はじめに

みなさん、こんにちは。昨今、「ドキュメントはMarkdownで書く！」というエンジニアさんも増えてきていると思いますが、依然として「Microsoft Word／Googleドキュメント至高主義！」という方も多いかと思います。

そんな私もMarkdownで管理しているドキュメントをWord形式に変換しなければいけない状況になったことが何度もありました。

とはいえ、Wordで書きなおしたくはありませんし、そもそもMarkdownではなく最初からWordを使うという選択肢もとりたくですよね…ということで、今回は5分くらいで迅速に（正しくは、とても雑に）GitHubにPushしたタイミングで自動的にdocxへ変換するようにGitHub Actionsを設定したので、そちらの紹介をしていきたいと思います。

## GitHub Actionsワークフローを作ってみた

今回は~~とても雑に~~迅速にワークフローを作る必要があったため、Web GUI画面からポチポチとテンプレートを使って作成してみました。

GUI画面からワークフローを作る場合は、まずはGitHubの画面の`Actions`タブを選択し、`New workflow`ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/a09abd67-e88b-12fd-b3bd-64f5dbc02e33.png)

今回はドキュメント形式を変換するコマンドを打つだけの単純処理、ということもありSimple Workflowのテンプレートベースで十分でしょう。次の画像のようにSimple Workflowボックスの`Configure`ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/d4d7e9e9-ec86-7e65-980b-deb804964dac.png)

`Configure`ボタンをクリックするとエディターが開くため、以下のサンプルコードを参考にワークフロー定義のコードを修正しましょう。

サンプルコードは、ルート直下に複数のMarkdownファイルが格納されていることを前提とし、変換後のファイル名はMarkdownファイル名の後ろに.docxを付与するだけといった単純仕様です。なお、変換ツールにはapt-getなどのパッケージマネージャーで簡単に入手できる`pandoc`コマンドを採用しています。

```diff_yaml:~/.github/workflows/md2docx.yml
  # This is a basic workflow to help you get started with Actions

  name: CI

  # Controls when the workflow will run
  on:
    # Triggers the workflow on push or pull request events but only for the "main" branch
    push:
      branches: [ "main" ]
    pull_request:
      branches: [ "main" ]

    # Allows you to run this workflow manually from the Actions tab
    workflow_dispatch:

  # A workflow run is made up of one or more jobs that can run sequentially or in parallel
  jobs:
    # This workflow contains a single job called "build"
    build:
      # The type of runner that the job will run on
      runs-on: ubuntu-latest

      # Steps represent a sequence of tasks that will be executed as part of the job
      steps:
        # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
        - uses: actions/checkout@v4

-       # Runs a single command using the runners shell
-       - name: Run a one-line script
-         run: echo Hello, world!
-
        # Runs a set of commands using the runners shell
        - name: Run a multi-line script
          run: |
-           echo Add other actions to build,
-           echo test, and deploy your project.
+           sudo apt-get -y install pandoc
+           for x in `ls *.md`; do 
+             pandoc ${x} -t docx -o ${x}.docx
+           done
+ 
+       - name: Upload docx files
+         uses: actions/upload-artifact@v4
+         with:
+           name: docx
+           path: ./*.docx
+           
```

編集が終わったら`Commit changes`ボタンをクリックし、ワークフロー定義をmainブランチにコミットしましょう。mainブランチにコミットするとワークフロー定義に従ってワークフローが実行されます。

ワークフローが正常に完了したら、次の例のようにArtifactとしてdocxファイル群がまとめられた`docx.zip`ファイルをダウンロードできるようになりましたとさ。めでたし、めでたし。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613908/2d36b039-2e83-3ae2-0a24-56ae075c1dd0.png)

## 最後に

実際はArtifactの世代数など色々とルールを追加しないといけませんが、とりあえず雑に動かすまでなら5分くらいで持っていけると思います。ということで、Markdownで管理するドキュメントをdocxにサクッと変換するGitHub Actionsワークフローの紹介でした。

---

- GitHub は、GitHub Inc. の商標または登録商標です。
- その他、本資料に記述してある会社名、製品名は、各社の登録商品または商標です。