2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JetBrains × Amazon Elastic Beanstalk でKotlinアプリをデプロイしてみた

これは「AIエージェント機能で進化したJetBrainsの開発体験をシェアしよう by JetBrains AdventCalendar 2025」の13日目の投稿です。

大学2年生のSuisanです。

寡聞にして、JetBrains社がKotlinの開発元であることを知りませんでした。

  • 新しいIDE使ってみよ〜
  • 今度インターンでKotlinやりそうだし、せっかくだから触っておくか
  • ちょうどアドカレやってるし、JetBrainsにしよう

という奇跡の思考の連鎖により、今回の記事・アプリ開発が生まれています。

IntelliJ IDEAをダウンロードする

まずはJetBrainsの代表的なIDEであるIntelliJIDEAを導入しました。

やったことはシンプルです。

  1. JetBrainsの公式サイトからIntelliJ IDEAをダウンロード
  2. インストーラに従ってインストール
  3. 学生ライセンスを申請して有効化

学生ライセンスのおかげで、遠慮なくUltimateを触れたのはかなり大きかったです。


なぜKotlinアプリを作ったのか

もうすぐインターンで使いそうだから、簡単に予習しておこうと思いました。

アプリの概要

今回作ったのは「時給×タイマー」をベースにした、給料可視化アプリです。
リンクを踏んで実際にアプリを使うことができます。

デプロイしました/給料タイマー

イメージとしてはこんな感じです。
まあカスの家計簿みたいな感じですね。

  • 時給を入力する
  • タイマー開始ボタンを押す
  • 秒単位で「いま何円稼いでいるか」がリアルタイムで増えていく
  • 勤務ごとの「開始時刻・終了時刻・金額」を記録する
  • カレンダーで「何日にいくら稼いだか」をざっくり振り返れる

技術的には、バックエンドはKtor、フロントはシンプルなWeb UIの想定で作っています。
今回はまず「JetBrainsの開発体験を味わうこと、とにかくKotlinで動くものを作ること」を主目的にしました。

仕様書駆動開発×JetBrainsのAIエージェント

私は普段から、まず仕様書をきちんと書いてから実装に入る「仕様書駆動開発」を好んでいます。
今回も最初に仕様をある程度文章化してから手を動かしました。

  1. ChatGPTに仕様書を書かせる
  2. その仕様書をJetBrainsのAIエージェント(Junie)に渡す

Junie 側には、ざっくりこんな感じで指示を投げました。
本当に大したことないので詳細は割愛しますが、

  • この仕様書に沿ってKotlin+Ktorでバックエンドを組んでほしい
  • 必要に応じて設計の補足やエンドポイントの提案をしてほしい
  • 私が読んで理解できるレベルでコメントや説明も添えてほしい

最初にChatGPTを介しているのは、JetBrainsのAIエージェントのクレジットを無駄に消費しないためです。


IntelliJ IDEAの開発体験メモ

良かった点をまとめていきます。

① GitまわりのUIがかなり快適

これ、Cursorより格段にいいなと思った点です。
コマンド操作が苦手な人間には非常にありがたいです。

プルリクめっちゃ見やすくて感激

コミット・プッシュもかなり有機的

② JetBrains Toolboxで複数プロジェクトをいい感じに管理できる

途中でJetBrains Toolboxの存在に気づきました。

  • 別のプロジェクト
  • 今回のKotlin給料タイマー
  • その他の試作

これらを、IDEごとに分けつつ管理できるのが非常に助かりました。

いままではCursor一本でリポジトリを切り替えていたので、
「プロジェクト単位できれいにまとまっている」感覚がちょっと新鮮でした。

③ CursorとのUI差をあまり感じなかった

設定を引き継げたこともあり、UI/UX的なギャップはそこまで大きくありませんでした。

  • エディタ部分のレイアウト
  • タブやファイルツリーの挙動

このあたりで「あまりにも違いすぎてつらい」ということがなかったので、乗り換え・併用のハードルは思ったより低かったです。


デプロイしてみる(Kotlin + Ktor + Elastic Beanstalk)

今回、バックエンドをAWS Elastic Beanstalk(以下EB)にデプロイしました。

Java系はまだそこまで慣れていないのですが、
とりあえず見様見真似でやってみました。

Fat JARを作る(Gradle Shadow Plugin)

KtorアプリをEBで動かすために、まずはFatJAR(依存関係込みのJAR)を作ります。

プロジェクト直下で次を実行します。

./gradlew shadowJar

これで、例えば以下のようなJARが生成されます。

build/libs/xxx-all.jar

この1ファイルを持っていけば、依存を全部含んだ形で起動できます。

main関数とポート指定

Ktor の起動部分はこんなイメージです。

fun main() {
    val port = System.getenv("PORT")?.toIntOrNull() ?: 5000

    // Database.init() などの初期処理(必要なら)

    embeddedServer(Netty, port = port) {
        configureSerialization()
        configureRouting()
    }.start(wait = true)
}
  • ローカルではPORTが未設定なので5000で起動
  • EB上では環境変数PORTが設定される(5000を想定)
  • 結果として、Nginx→127.0.0.1:5000→Ktorの流れになる

ここを適当に8080固定にしていると、
EB側のNginxが5000番に取りにいっても何もいなくて、502 Bad Gateway になる、という罠がありました。
当たり前のことですけどね。

51E81084-5F11-4E88-9A6A-B63D1D197F34_1_105_c.jpeg

Procfileを用意する

EBに「どう起動すればいいか」を伝えるためにProcfileを作ります。
中身はシンプルです。

web: java -jar app.jar

デプロイ用 ZIP の構成

app.zip
 ├ app.jar
 └ Procfile

プロジェクト直下にて、次のように作りました。

cp build/libs/Kotlin_memo-all.jar app.jar
echo "web: java -jar app.jar" > Procfile
zip app.zip app.jar Procfile

このapp.zipをEBの「アプリケーションコード」としてアップロードします。

環境は以下のような感じで作成しました。

  • プラットフォーム:Java(Amazon Correttoベース)
  • インスタンスタイプ:t2.micro/t3.microなどの小さいもの
  • VPC:デフォルトVPCをそのまま利用
  • データベース:今回はなし(アプリ内部のみ)

起動後、EBコンソール上で環境のURLが払い出されます。

つまずきポイントと学び

いちばんハマったのはポートでした。

Nginxは127.0.0.1:5000にプロキシする設定になっている

しかしアプリが8080にバインドしていた

結果として、Nginxからは「5000には誰もいない」と見えて502が出される

という状態に陥ったのですが、ログを読んで「ポートの問題ね〜」と気付きました。

問題に気づいてからは、
System.getenv("PORT")で環境変数を読むように修正し、
Fat JARを作り直し、再デプロイして解決しました。

今後の発展の可能性

今回のゴールはあくまで、

  • JetBrainsの開発体験を味わう
  • Kotlinに触れてみる
  • 自作アプリを一度クラウドに出してみる

の3点でした。

とはいえ、アプリ自体ももう少し育てたい気持ちはあります。

  • バグの解消
  • カレンダーUIを整える
  • ログイン機能を足して、ユーザーごとに履歴を分ける
  • データ永続化(RDSや別のストレージ)
  • Androidアプリとして仕立て直す

時間を見つけて少しずつ進めたいと思っています。

おわりに

今回、JetBrainsのIntelliJ IDEAとAIエージェント(Junie)を使いながら、
Kotlin+Ktorアプリを作り、Elastic Beanstalkへデプロイするところまで進めました。

普段使っている環境とは違うのに、特に大きなストレスを感じることもなくスムーズに開発できたと思います。

Kotlin、JetBrains製IDEともに、触り始めたばかりですが
「とりあえず動くものができて、外からアクセスできるようにな った」のは大きな一歩だと感じています。

ここまで読んでくださり、ありがとうございました。

2
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?