💬

Java7+tomcat6で動いてるWEBサーバにRESTAPIを作れと言われたのでChatGPTに丸投げしてみた

2023/03/24に公開

おはこんばんにちは

なんかAI流行ってますね。

特に流行りに乗ろうというわけではないのですが、今携わってるシステムに新規機能を追加せよとの下達が出されたものの周りに技術的な相談できる人が一人もいないのでChatGPTと相談しながら開発してみた記録を残します。

ちなみに今携わってるシステムはサポート切れのJavaにサポート切れのフレームワークを載せて古のJSPにIEでしか動かないようなHTMLコードを書き散らかしたWEBシステムになります。

そんな息も絶え絶えのシステムに何を思ったのかWEBAPIを実装せよと言われたのでGPT君に相談しながら開発してみた軌跡を残します。[1]

技術選定

とりあえず深津式プロンプトとかいうので質問するのがええらしいので使ってみました

ほ〜ん、ようわからんけどJersey採用!君に決めた!

組み込み

次にどうやって既存プロジェクトで使えるようにするのか聞いてみました。

Jersey公式ドキュメントの「Java SE Compatibility」を読むとわかるんですが
Jerseyには1〜3までバージョンがあってJava7で動作する最新のバージョンは2.25.1ですのでこの回答そのまま使うと古いの使わされます。

なので入力をもう少し具体的なものに変更にして再挑戦しました

これこれ
これが欲しかってん

ただmavenリポジトリ見てたらBOMあったので実際にはこう定義しました。

	<dependencies>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-json-jackson</artifactId>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.glassfish.jersey</groupId>
				<artifactId>jersey-bom</artifactId>
				<version>2.25.1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

実装

さて準備が整ったのでどうやって実装するか聞いてみましょう
ここまでの質問内容をある程度踏まえて答えてくれるらしいので簡潔に聞いてみます

するとつらつらと長い応答が返ってきました。
まずはソースコード

ふんふん、ExampleResponseクラスってなんや?と若干思いましたがちゃんと次の手順でそのクラス作ってました。
じわじわ応答が返ってくるのでここらへんやきもきしますね。

で、最後にweb.xmlにこれ追記するのね

長文になると途中で喋るのやめるのなんとかして欲しい。。。

まぁでもこれでほぼ最後だと思うしここまでの内容からサーバ起動して/rest/exampleにリクエスト送ったらExampleResponseのオブジェクトをJSON形式で返してくれそうやなと思ったのでとりあえず実装してみましたが2クラスも作るの面倒だったのでgetExampleメソッドをこう書き換えました。

	@GET
	@Produces(MediaType.APPLICATION_JSON)
	@Path("/example")
	public Response test() {
		return Response.ok(new HashMap<String, Object>() {
			{
				put("message", "Hello, World!");
			}
		}).build();
	}

でTomcat起動してcurlで叩いてみたら

$ curl http://localhost:8080/test/rest/example
{"message":"Hello, World!"}

わーい、成功成功😄
雛形が出来たから後はこれベースに要件に合うようにカスタマイズするだけだね
ありがとうChatGPT様これからもよろしくね😘

ということでこのあともJSONのDate型をどうフォーマットするかとかインターセプタでエラー時にCatchする方法とかJerseyのテストフレームワークを使ったテストケースの書き方とか色々聞いてよろしくしてたんですがやってることはここまでの内容と同じなので省略します。

ChatGPTを使ってみた感想

私の新卒の時にはあっちこっちの現場に「俺の(アンチパターンな)やり方を学べ」おじさんが居て知識がないので誰もそのやり方がおかしいかどうかの判断すら出来なかったせいで声が大きいだけの大したこと無いおっさんのコピーみたいな技術者が量産されてたんですがそういうのはなくなりそうですね。

ただ、同じプロンプトでも生成される応答が毎回変わるので何度か質問し直したり出力されたソースをそのままコピペする前に一旦精査するのは必要だと思います。

あと、GPT4を使ったこと無いのでもしかしたら改善されているのかもしれませんが今回もそのままだと古いバージョンのフレームワーク使わされそうになったり記事にはしてませんが存在しないメソッドやライブラリを使おうとしたりと結構虚偽の情報を出されました。

などと細かい不満点を挙げては見たものの今回使ってみて何もとっかかりのない状態からの立ち上がりが圧倒的に早くなった事を実感出来たのでその程度の不満点はたいした問題でもないし今後手放せなくなるのでどちらかというと完全有料化される方が怖いなぁと思っています。

それでは良いAIライフを〜

とっぴんぱらりのぷぅ

P.S.

備忘録のためにzennの記事書き始めたもののここ最近ChatGPTに聞いたらすぐ答えてくれるやろみたいな気がしてきて書く気がどんどん無くなってきてるなぁ。。。

脚注
  1. 無料で使ってるのでGPT3です ↩︎

Discussion