LoginSignup
2
4

More than 1 year has passed since last update.

MarkdownからExcelのテスト仕様書を作成するツールを作りました

Last updated at Posted at 2022-10-10

はじめに

テスト仕様書は大体Excelのことが多く、バージョン管理と相性悪いので可能ならテキストベースで管理したい。
そんな悩みは皆さん共通なようで多くの先人たちがMarkdownからExcelに変換するツールを作ってくれています。

私は当時 eval-spec-maker しか知らなかったので、
プロジェクトでそれを採用しバージョン管理と相性よくて最高!とか思っていました。

ただ、ほかも同様なのですがMarkdownごとに個別のExcelファイルを作ってくれるものの、
最終的なテスト仕様書ってやっぱり1ブックにまとめる羽目になるわけでここが手動なのが最近面倒だなと思うようになりました。
(バージョン管理できるようになっただけでも大変ありがたいのに、欲目が出てきました。)

最初は、出したExcelをまとめるPowerShellでも作ろうかなとも思ったんですが、
結構仕事で使いはじめてきたのでExcel変換部分も自分でプログラム管理しておきたいなということで自分で作ってみました。

やりたいこと

表紙、変更履歴、とテストケースのテンプレートシートが用意されたExcelのテンプレートファイルを用意して、
テストケースのテンプレートをMarkdownファイル分量産して埋め込んでくれる。
また、最終的にはCIで使えるようにDockerで起動できるようにしたい。

言語選定

みんなPythonでやっているし、Pythonでいいか!とか思って始めていると、
私が使っているテスト仕様書がオブジェクトや条件付き書式を設定しており、
openpyxl などで破壊されてしまうことがわかりました。

自分の検索力で調べた結果としては自分がやりたいことはJavaのApache POIじゃないとダメそうでした。
今更Java言語で開発する気はないのでKotlinに決めました。

ライブラリ選定

とはいえApache POI生で使うのはしんどいなーとか。
Markdown Parserないのかなぁとかいろいろ調べた結果以下のライブラリを見つけたので、
こいつで何とか作ろうという結果になりました。

ライブラリ 用途
flexmark-java MarkdownのParser
JXls Apache POIベースの Excelテンプレートライブラリ

できたもの

テストケースのテンプレートをMarkdownファイル分量産して

ここの部分はあきらめました。
先にMarkdownファイルの分だけ、埋め込み先のシートを用意しておく必要があります。
とはいえ最初の一回だけなのでそこまで負荷にならないかな?と思っています。

Markdown

以下のようなMarkdownを用意

$ cat ./example/mdSpec.md | head -n 17
# テストケース名

## 大項目1

### 中項目1

#### 小項目1

1. 1-1-1 確認手順1
1. 1-1-1 確認手順2

* [ ] 1-1-1 想定動作1
* [ ] 1-1-1 想定動作2

- 1-1-1 備考1
- 1-1-1 備考2
$ 

テスト仕様書テンプレートファイル

以下のようなテンプレートファイルを用意
image.png

:information_source:jx:each で指定する items{Markdownファイル名}.cases になります

実行

docker run -it --rm \
  -v $(pwd):/workspaces kazuki0529/md-test-spec2excel \
    /workspaces/example /workspaces/template/template.xlsx /workspaces/dist/out.xlsx

できたExcel

こんな感じでそれっぽく出力されました。
上のほうにあるヘッダー(作成日とか作成者)がオブジェクト(カメラ)なのですが消えていませんし、
条件付き書式も無事生き残っています。
image.png

リポジトリ

最後に

セルの高さを自動調整はできないみたいなのでそこはPowerShellとか使うか、
確認手順や確認項目の行数に応じて行幅をN倍にするとかですかね。
とはいえ一旦実用レベルにはなったような気がしたので公開してみました。

README.md が全然整備できてないのでそこも修正したいと思います。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4