※当サイトの記事には、広告・プロモーションが含まれます。

Javaで所定のディレクトリに存在するファイルの数だけリクエストする処理に必要な情報を整理してみる

www.itmedia.co.jp

 新年度が始まって半月が過ぎたが、新入社員の退職希望を企業側に伝える「退職代行」サービスに、早くも依頼が殺到している。

「会社と合わない」 退職代行サービスに早くも新卒の依頼殺到 SNSで違和感増幅 - ITmedia NEWS

⇧ まぁ、人手不足と言われてる時代ですから、待遇の良い会社に転職できるんであれば、転職する流れになるのは然もありなん。

何と言うか、

働いたら負けかなと思ってる」(はたらいたらまけかなとおもってる)は、2004年に日本で生まれ流行したインターネット・ミーム

働いたら負けかなと思ってる - Wikipedia

⇧ この言葉が2004年に世の中に知らしめられたとして、今が2024年なので、20年ぐらい経過したわけですが、働いて良いと思えない社会的な状況になっているのが問題な気がしますかね...

仮に人間が生活する上で必要なコストを生涯保障する仕組みが完成したら、働かない選択肢を取る人が多くなるとは思いますかね...

労働から解放されて隠居生活したいですな...

スタブとドライバなど

複数のシステムで開発が並行して進行している場合に、それぞれの開発完了時期が異なることがあるあるだと思うのですが、

service.shiftinc.jp

・外部結合テスト(ITb:Integration Test B)
外部システムなどの接点やデータ連携が意図通りに動作するかを確認する

システムテスト(総合テスト)とは?その目的・観点・種類、実務で使える手順について解説|ソフトウェアテストのSHIFT

⇧ 上記サイト様の説明にあるような「外部結合テスト」が実施できませんと。

そこで、他の完成していない開発機能について、代替する手段として、

service.shiftinc.jp

■ドライバ

「ドライバ」とは、テスト対象から見た上位モジュール(呼び出す側)に成り代わる、中身を持たないテスト専用のダミー部品です。

スタブとは?意味やメリット、ドライバ・モックとの違いについて解説| ソフトウェアテストのSHIFT

■スタブ

「スタブ」とは、テスト対象から見た下位モジュール(呼び出される側)に成り代わる中身をもたないテスト専用のダミー部品です。

スタブとは?意味やメリット、ドライバ・モックとの違いについて解説| ソフトウェアテストのSHIFT

⇧ という感じで、本物の機能の代わりを担うというものになりますと。

実際に「ドライバ」と「スタブ」のどちらを担うことになっているのかについては、

itsakura.com

■ドライバ

  • テスト実行時に、呼び出し元が未完成等のときに代替として使用します。
  • ダミー(本物に似ているが中身はないもの)です。
  • 対象のコードから見て、ドライバは上位にあたります。
  • ドライバ(driver)は、運転手という意味です。
  • JUnitなどのツールを使用してコードを呼び出すイメージです。

スタブとドライバの違い | ITSakura

■スタブ

  • テスト実行時に、呼び出し先が未完成等のときに代替として使用します。
  • 値を返します。
  • ダミー(本物に似ているが中身はないもの)です。
  • 対象のコードから見て、スタブは下位にあたります。
  • スタブ(stub)は、切り株という意味です。
  • 似ている概念としてモックがあります。モックはスタブよりも上位の機能の位置づけです。
    スタブ:値を返す
    モック:値を返す+α
    Java JMockitを使用するサンプル

スタブとドライバの違い | ITSakura

⇧ 上記サイト様の説明がイメージし易いかと。

「モック」については、

スタブと似たような概念で用いられるものに「モック」と呼ばれるものもあります。

モックはスタブと同じく、上位モジュールから下位モジュールへのテストにおいて使用されるものですが、大きな違いは「確認する対象」です。

スタブを使用する場合、上位モジュールが下位モジュールを「正しく呼び出せているか」を確認しますが、モックは上位モジュールが下位モジュールに対して「行った出力内容が正しいか」を主に確認します。

スタブとは?意味やメリット、ドライバ・モックとの違いについて解説| ソフトウェアテストのSHIFT

スタブは、テストを効率よく進めるためのツールという位置づけであるのに対し、モックは、テストコードの一部と表現できるかと思います。

スタブとは?意味やメリット、ドライバ・モックとの違いについて解説| ソフトウェアテストのSHIFT

⇧ という違いになる模様。

Javaで所定のディレクトリに存在するファイルの数だけリクエストする処理に必要な情報を整理してみる

で、外部からリクエストが送られてくる部分について、大人の事情で、本物を利用することができないので、「ドライバ」を用意する必要があるということで、Javaで実装してみようかと。

今のところ、連携されるデータの形としては、

  1. JSON
  2. CSVファイル

の2種類あるということで、

  1. CSVファイルを読み込んで、JSONとしてPOSTする
  2. CSVファイルを読み込んで、CSVファイルとしてPOSTする

という機能を想定していますと。

リクエストするデータとしては、1カ所のディレクトリに、全てのファイルが配置されている想定。

最終形は、何らかのスケジュール機能を設けて定期実行できる仕組みにする必要はありますが、一旦は、表題の機能に焦点を当てて実装に必要な情報を整理してみようと思います。

とりあえず、Java 17での開発ということなので、他システムがJava 17に対応した処理をしてくれていることを信じることにして、HTTP Cilentについては、

qiita.com

qiita.com

⇧ 上記サイト様の説明にありますように、Java 11からJavaの標準APIとしてHttp Clientの機能として「HTTPClient」というものが用意されているので、採用する方向で検討を進めてみることにしますか。

ディレクトリに存在するファイルの数だけ、という部分については、

bleis-tift.hatenablog.com

qiita.com

ディレクトリやファイルの階層が複雑な場合は、上記サイト様のような方法が良いのかもしれませんが、今回は、1つのディレクトリに全てのファイルが集約されている想定なので、

www.javadrive.jp

⇧ 上記サイト様のように、シンプルに実装してしまう感じで良いのかなと。

CSVファイルからJSONへの変換については、CSVファイルにヘッダーが付いている前提ですが、

qiita.com

⇧ 上記サイト様の実装方法でいけそう。ただ、JSONの項目の値が階層構造になっていないことが前提ではありそうですが...

文字コードとかの問題とかの対応も必要そうだけど、処理に必要そうな情報がザックリとは整理できた感じですかね。

まぁ、ザックリとした情報なので、実際に実装する段階で、いろいろ問題が出てくるとは思いますが...

Java標準のAPIで実現できずに、フレームワークやライブラリ使わないと実現できない部分が出てくるってこともあり得るでしょうし...

Java標準のAPIで実現できることの切り分けがなかなか辛い...

ネット上のJavaソースコードのサンプルとかでimport部分とか省略されていたりすると、余計に、特定に時間がかかるから、省略するのは止めて欲しいんよな...

毎度モヤモヤ感が半端ない…

今回はこのへんで。