じゃあ、みんなでGitpodのJDK & SDKをやってみよう
TL;DR
GitpodではScalaやKotlinといったJVM言語を使う方法が以前公式ドキュメントにあったのですが、最近はClojureしか掲載されなくなってしまい、GitpodのJavaについて初心者へ紹介しづらくなってしまいました。
そんなわけでSDKMAN!と一緒に紹介します。
SDKMAN!
感嘆符が重要らしいこちらのツールは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作成時にやっているので。
手前味噌で恐縮ですが今回はこちらの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 groovy
やsdk i springboot
を行わなくてもsdk i grails
単体で動くようです。
Spring Bootより簡単に書けて規模が大きくなっても辛くならないWebアプリケーションフレームワークです。
grails run-app
の後、「.」が大量に表示されて壊れたように見えますが全く問題なくただビルドしているだけなので数分放置すればデフォルトページが8080ポートで表示されます。
$ cd ..
最後にカレントディレクトリを元に戻せば終了です。
お疲れ様でした。
好きな特に好きなJDK、SDK、JVM言語を試すことができます。
Gitpod+SDKMAN!万歳!
FYI
Discussion