[個人開発] ありそうでなかった、ダミーファイル生成サービスを作った

# なぜこのサービスがあなたに必要なのか

<img width="500px" alt="フリー素材のインド人のイラスト" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265900/46d0f9eb-4f21-69da-2225-e89a1c6ce4ca.jpeg">

## ありがちなシチュエーション

　**転職情報サイト**の画像アップロード機能を、ゆとりをもって一通り開発することができた。
　しかしCIで実行した[stylelint](https://github.com/stylelint/stylelint)に怒られて、ちょっとだけ修正を入れてしまった。念には念を入れて、最後にもう一度動作確認をしておこう。

　今回開発したのは、募集内容詳細画面に**複数の画像を表示可能にする**機能追加だ。これまではアイキャッチ用の1枚しか画像が載せられなかったが、これからは企業の雰囲気を伝えるための様々な画像をアップロードできるようになる。

　テストに使う画像は……、まぁ**ダウンロードフォルダに入ってる、いつもの適当な画像でいいか**。
　無事アップロードできたし、レイアウトを再確認しよう。
![My転職というサービスのスクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265900/948f169b-80f4-5de4-ca65-847fe022e1b1.png)
　詳細画面の下に、正しく複数のインド人が表示されてる。大丈夫そうだな。完成。
　今日はプルリク（Pull Request）の説明を少し書き足してから帰ろう。

**「すみません。一個だけお願いしていいですか」**

　問合せ窓口担当の田代さんが、デスク越しに話しかけてきた。

「先方がマニュアルを先に作りたいらしくて、**画像追加後の画面がどうなるか教えて欲しい**って言ってるんですけど、画面設計書とかって、ないですかね？」

　先方というのは、この機能追加を要望してきた顧客企業だ。サービス黎明からの大事な顧客で、頭が上がらないらしい。

　設計書は無いですが、もう機能はほぼできてるので、Slackで開発画面のスクショは送れますよ。

「おっ。素晴らしい。それではお願いしますね」

　大したお願いじゃなくて良かった。それじゃあ開発画面のスクショを送ってあげよう。
　`Command + Shift + 4`で範囲を選択して、田代さんにDMで送信。

　プルリクのGitの差分についてdescriptionを書き加えていると、困った顔をした田代さんがやってきた。

「すみません……あれではお客さんに出せないので、スクショを取り直して頂いてよいでしょうか」

　えっ。

「流石にもうちょっと真面目なデータじゃないと、ほら、弊社も会社としてのブランドがあるので」

　なるほど、確かに。もちろん私は真面目に[デベロッパテスト（Developer Test）](https://gihyo.jp/dev/serial/01/tdd/0003)を行っているが、このスクショからはテストに対する真摯さが伝わって来ないというのは一理ある。

　もう既に何度もテストをしていて大丈夫だと分かりきっているから油断していた。しっかりテストをしていることを示すために、このスクショには改善すべき点が2つある。
　まず、同じ画像を何度も使うのはテストとして失格であり、異なる画像を使うべきだった。仮にコードに不具合があり、同じ画像ばかり表示されていたとしてもそれを見つけることができないためだ。
　もう一つは、境界値のテストとして、この画像アップロードの仕様である「0枚以上5枚以内」をテストしていることが明確に分かるよう、上限5枚の画像をアップロードしておくべきだった。

　そして私は、異なる5枚の画像をアップロードして、`Command + Shift + 4`でスクショを撮り、田代さんに送ったのであった。

![異なるインド人の画像が貼られたスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265900/65afa012-97d2-bf2d-2d73-c924c3d10691.png)


「**違いますよ！！　ふざけてるんですか！？　知らない人が増えてるんですけど！　この画像は何！？　誰！？**」

　フリー素材のインド人ですけど。

「え、『なんでそんな当然のこと聞いてくるの』みたいな顔してますけど、開発中のテストでフリー素材のインド人を使うのって一般的なんですか！？　お客さんに見せるデータだって言ってるでしょう！　もっとお客さんが使い方を想像できるような、それっぽいデータにして下さい！」

　田代さんがギャンギャンうるさいので、仕方なしにそれっぽいデータを作る作業に取り掛かる。まったく注文の多い人である。

　それにしてもコミュニケーションは難しい。真面目にデータを作れと言われたので、テストデータとしてより効果的なデータを投入したのに、田代さんのいう「真面目」というのはそういう意味ではなかったらしい。
　田代さんはよりお客さんに近い位置でこのサービスに関わっているので、開発者とは違う目線を持っているのだろう。

　……やっとのことでデータができた。もう定時を1時間も過ぎている。手間をかけただけあって、かなりそれっぽくなった。
　そして`Command + Shift + 4`でスクショを撮り、田代さんに送ったのであった。

![完全にインドと化した詳細画面](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/265900/2e400bbf-ecf0-62ef-ec88-2b99f8347488.png)

「**どっちの方向にそれっぽくしてるんですか！！**」

　いや、だって、新しく画像を探すのって面倒臭いので……。

## やってしまいがちなこと

　テストをする時に、きちんとしたデータを作るのは面倒臭いです。特に画像やPDFやパワポのファイルは、無難なデータを用意するのが輪をかけて面倒くさいです。
　なので、ついつい「万が一顧客に見られても問題ないレベルの無難なデータ」ではなく、**ダウンロードフォルダに入ってる適当な画像とか、SlackとかTwitterとかで使ってるアイコンのキャラもの画像とか、顧客には見せてはいけない社外秘のパワポとか、自社の会社組織図のPDFとか**をテストに使ってしまいがちです。身に覚えがありませんか？

　実際、ほとんどの場合は誰にも見られないのでそれでも問題ないのですが、**いきなり顧客から「画面イメージを見せて欲しい」と言われたり、ノートパソコンを持ち出している時に開発中の画面をチラ見されてしまったり、営業の人が顧客にStaging環境を見せた時に、うっかりフリー素材のインド人が登場したり**。ふとした一瞬に「無難なテストデータ」が求められ、その瞬間にうまいこといい感じのデータがないと、いらん工数が発生したり、最悪の場合は顧客の信用を失ってしまうこともあるはずです。

　しかし、「何の面白みもない、無味乾燥な、無難な画像データを**テストで使う分だけ**探してくる」のは、それだけで骨が折れます。1枚だったらすぐ見つかりますが、10枚、20枚と探すのは大変です。自分の欲しいサイズの画像があるとも限りません。
　その問題を、解消します。

# Testaroというサービスを作った

https://testaro.netlify.app/

## どんな機能があるか

### ダミー画像をいっぱい生成する機能

　パラメータを入力してあげることで、ダミー画像を好きなだけ生成できます。
　沢山ダウンロードしたい場合は、**ブラウザ側で複数ダウンロードを許可して下さい**。実際触ってみたら分かります。
　100枚でも200枚でも、お好きなだけ保存してください。負荷がかかるのはあなたのブラウザであって、Netlifyのサーバーではありません。なので**遠慮は無用です**。

　**これでもう、フリー素材のインド人を頼る必要はなくなります。**

### その他の機能

「ありがちなシチュエーション」の話を書いて疲れてしまって、説明が面倒くさくなってきたので省きます。実際触ってみたら分かると思います。

- ダミーPDFをいっぱい生成する機能
- ダミーパワポをいっぱい生成する機能
- ダミーユーザー情報を生成する機能
- などなど

　**もう社外秘のパワポやPDFをテストで使う必要はありません。**

# 技術の話

- Next.js(React) + TypeScript
- Netlify (静的ファイルをホストしてくれるサーバー)

　Next.jsを静的サイトジェネレーターとして使っています。つまり**Testaroは完全に静的なページです**。果たしてWebサービスを名乗って良いんだろうか。
　ただ、そのおかげで**私はサーバーの管理をNetlifyに丸投げすることができ、Webサーバー側にみなさんの入力が送信されるわけでもないので、安心してデータを入力することができます**。
　画像もcanvasを使ってJS側で生成しています。PDFもパワポもブラウザのJS側で生成しています。サーバー側で何かを処理することはありません。

　その代わりに犠牲になっているものもあります。初回ページ表示時のパフォーマンスです。

- PDF生成
  - PDFの生成に必要なフォントをダウンロードするのに時間がかかっています。
- ユーザー情報生成
  - 郵便番号と住所も一緒に適当な値を生成させるのですが、その元データの住所jsonをダウンロードするのに時間がかかっています。今はランダムに抽出した郵便番号1000件分のデータが元になっています。

　遅延でページを読み込ませるようにはしていますが、この2つの機能は特にページを開くのが遅いです。ご了承下さい。一度ダウンロードが完了すれば、後は別の機能に遷移して戻ってきても快適に使うことができます。そのうち改善したい。

# おわりに

　この記事は、「[ソフトウェアテスト Advent Calendar 2020](https://qiita.com/advent-calendar/2020/softwaretesting)」２日目の記事です。
　このサービスによって楽になる手動テストは、お仕事の中のほんの一部に過ぎないと思いますが、それでも少しでも効率化に寄与できたら幸いです。
　あとタイトルに「ありそうでなかった」とか書いてありますが、単に私の調査不足で既に存在していたらタイトル詐欺です。ごめんなさい。

　去年のAdvent Calendarでも変な記事書いたのでもし良ければ見ていってください。お祭りならば多少のおふざけは許されるって信じてます。

- [文字化けで出てきた漢字ランキングBEST20（UTF8→SJIS）](https://qiita.com/jesus_isao/items/8a7847d06e6ceeaf0895)

　もし、こんな機能が欲しいという要望があったら、GitHubのissueとかに書いておいてくれれば、気が向いたら対応したり、しなかったりするかもしれません。

　ちなみに、Testaro内に「おすすめ書籍」のページがあるのですが、Amazonアソシエイトの審査は通っていないため、そこから書籍を購入しても、1円も私に入ってきません。

# スペシャルサンクス

- [フリー素材インド人～私たち、無料です。～](https://study-abroad.misao.in/free-indian/)