🦸‍♂️

じゃあ、みんなでGitpodのJDK & SDKをやってみよう

2021/09/26に公開

TL;DR

GitpodではScalaやKotlinといったJVM言語を使う方法が以前公式ドキュメントにあったのですが、最近はClojureしか掲載されなくなってしまい、GitpodのJavaについて初心者へ紹介しづらくなってしまいました。

そんなわけでSDKMAN!と一緒に紹介します。

SDKMAN!

https://sdkman.io/

感嘆符が重要らしいこちらのツールはJavaで使えるSDKマネージャーです。
Gitpod内部でもAzul SystemsのZulu JDKをインストールするために使われております。

そのためGitpod内でもsdk installコマンドが使えるのです!
特にGitpod内で使用できるaptコマンド、brewコマンドを比較して以下の利点があります。

  • Zulu JDK以外のJDKと共存できる。
  • gccなど依存パッケージと一緒にインストールする必要がないため早い。
  • SDKの最新バージョンを使用できる。

とても便利ですね。
それではまずはJVM言語を試してみましょう。
以降sdk installは省略したsdk iで使用します。

Java

その前にまずはJavaをコンパイルしてHello, World!表示してみましょう。
Javaの手順にsdk iコマンドは必要ありません。Workspace作成時にやっているので。

https://gitlab.com/acefed/gitpod-jsp

手前味噌で恐縮ですが今回はこちらのGitpodテンプレートを使用します。
GitHubで試したい方は上記リポジトリPublic DomainなThe UnlicenseなのでCopyしたりCloneしたりDownloadしたりして使ってください。

8080ポートでJSP(ではなくサーブレット)が起動しますがCtrl+C押せばターミナルにコマンド入力できるようになります。

$ mkdir -p src/main/java
$ echo 'public class JavaApplication { public static void main(String[] args) { System.out.println("Hello, World!"); } }' > src/main/java/JavaApplication.java
$ javac src/main/java/JavaApplication.java
$ java -cp src/main/java JavaApplication

上から順番にターミナルへコピペしてください。
javacコマンドでコンパイルすると.classファイルが作成されるので、javaコマンドでクラスパス指定して呼び出します。

Picked up JAVA_TOOL_OPTIONS: ...
Hello, World!

できました。

Scala

$ sdk i scala
$ mkdir -p src/main/scala
$ echo 'object ScalaApplication extends App { println("Hello, World!") }' > src/main/scala/ScalaApplication.scala
$ scalac -d src/main/scala src/main/scala/ScalaApplication.scala
$ scala -cp src/main/scala ScalaApplication

一番上のsdk i scalaコマンドでScalaをインストールしています。
scalacコマンドでコンパイルすると.classファイルが作成されますがJavaと違いカレントディレクトリにできるので、-dオプションで作成するディレクトリを指定します。
その後scalaコマンドでクラスパス指定して呼び出します。

Picked up JAVA_TOOL_OPTIONS: ...
Hello, World!

Javaと比較してScalaは短く書けていいですね。

Kotlin

$ sdk i kotlin
$ mkdir -p src/main/kotlin
$ echo 'fun main() { println("Hello, World!") }' > src/main/kotlin/KotlinApplication.kt
$ kotlinc -d src/main/kotlin src/main/kotlin/KotlinApplication.kt
$ kotlin -cp src/main/kotlin KotlinApplicationKt

一番上のsdk i kotlinコマンドでKotlinをインストールしています。
kotlincコマンドでコンパイルすると.classファイルが作成されますがJavaと違いカレントディレクトリにできるので、-dオプションで作成するディレクトリを指定します。
その後kotlinコマンドでクラスパス指定して呼び出しますが、作成されるクラスファイル名後ろに
「Kt」が追加されるため注意しましょう。

Picked up JAVA_TOOL_OPTIONS: ...
Hello, World!

Scalaと比較してKotlinは短く書けていいですね。

Groovy

$ sdk i groovy
$ mkdir -p src/main/groovy
$ echo 'println "Hello, World!"' > src/main/groovy/GroovyApplication.groovy
$ groovy src/main/groovy/GroovyApplication

一番上のsdk i groovyコマンドでGroovyをインストールしています。
groovycコマンドでコンパイルしても動きますがコンパイルしなくても動くためgroovyコマンドで直接ファイルを呼び出します。

Picked up JAVA_TOOL_OPTIONS: ...
Hello, World!

GroovyはScalaやKotlinと比較して短く書け、コンパイルしなくても動くのでいいですね。

$ sdk i sbt
$ sdk i leiningen

ビルドツールsbtとLeiningen、Clojureの紹介は省略します。めんどいので。
そのかわり需要あると思うのでWebアプリケーションフレームワークを紹介します。

Spring Boot

$ sdk i springboot
$ spring init -d=web,thymeleaf -n=spring-web spring-web
$ echo '<h1>Hello, World!</h1>' > spring-web/src/main/resources/templates/index.html
$ cd spring-web
$ ./mvnw spring-boot:run

はい出ました! Spring Bootです!
SDKMAN!を使うと簡単にspringコマンドが使えるようになるので超おすすめです!
デフォルトのWebのみの場合、コード追加しないとbootRunした後終了してしまうので今回はThymeleafにHTMLタグを追加します。

./mvnw spring-boot:run(Gradleを使う場合は./gradlew bootRun)を実行したらたくさんログが流れますが最終的に問題なく8080ポートで表示されます。
今回Javaで動かしていますがKotlinやGroovyでも書けるのでGitpod+SDKMAN!はSpring Boot入門に最適です。

$ cd ..

引き続き次のWebアプリケーションフレームワークを試したい場合はカレントディレクトリを元に戻します。

Grails

$ sdk i grails
$ grails create-app grails-web
$ cd grails-web
$ grails run-app

Groovyで書けるRailsによく似たWebアプリケーションフレームワークです。
Spring Boot上に構築されているそうですが、特にsdk i groovysdk i springbootを行わなくてもsdk i grails単体で動くようです。
Spring Bootより簡単に書けて規模が大きくなっても辛くならないWebアプリケーションフレームワークです。
grails run-appの後、「.」が大量に表示されて壊れたように見えますが全く問題なくただビルドしているだけなので数分放置すればデフォルトページが8080ポートで表示されます。

$ cd ..

最後にカレントディレクトリを元に戻せば終了です。
お疲れ様でした。
好きな特に好きなJDK、SDK、JVM言語を試すことができます。
Gitpod+SDKMAN!万歳!

FYI

https://qiita.com/ligun/items/6961918064dccbdac114

Discussion