Skinny Frameworkを始める際につまづいたこと

※この記事ではmacOS Catalina 10.15.2で，Skinny Framework 3.0.3を使用しています．

# はじめに
今回の記事では，Skinny Frameworkを使い始める際に環境構築の面でつまづいたことについてまとめました．
環境構築や[チュートリアル][1]でつまづいた方向けの記事です．

[1]:http://skinny-framework.org/
[2]:https://tech.atware.co.jp/scuruto/
[3]:https://www.scala-sbt.org/download.html
[4]:https://github.com/scala/bug/issues/11381
[5]:https://gitter.im/

今後Skinny Frameworkを始める方の手助けになれば幸いです．

# Skinny Frameworkとは

>Skinny Framework は、Scala on Rails なフルスタックフレームワークで、ドキュメントやサンプル、解凍すればすぐに開発を開始できるブランクプロジェクトも用意されているなど、Scala で Web アプリをはじめるには非常にオススメです。
([Scala で実装した社内ナレッジ共有ツールを OSS にして公開しました][2] より引用)

Scalaの勉強を始めるのにちょうど良さそうなので使ってみようと思いました．

#つまづいたこと

[公式サイト][1]からTry It Right Nowの章に従っていき`./skinny run`を実行したところ，以下のようなエラーが出てしまいました．（本当はもっと長いですが一部のみ記載しています．）

```
$ ./skinny run
Error: Unable to access jarfile ./java9-rt-export.jar
Copying runtime jar.
mkdir: : No such file or directory
Error: Unable to access jarfile ./java9-rt-export.jar
error: error while loading String, class file '/modules/java.base/java/lang/String.class' is broken
(class java.lang.NullPointerException/null)
[error] java.io.IOError: java.lang.RuntimeException: /packages cannot be represented as URI
[error] 	at java.base/jdk.internal.jrtfs.JrtPath.toUri(JrtPath.java:176)
[error] 	at scala.tools.nsc.classpath.JrtClassPath.asURLs(DirectoryClassPath.scala:204)
```

以下の2つの変更によって対処できました．

## `./java9-rt-export.jar`を用意する
ディレクトリ上には`./java9-rt-export.jar`がないので，これを用意します．
本来はjava9をインストールした上でパスを通したりするべきかと思いますが，今回は[こちら][3]から.zipファイルをダウンロードして，その中にある`java9-rt-export.jar`を`skinny-black-app/`内に置くことによって対処します．

## sbtとScalaのバージョン指定を変更する
Skinny Framework 3.0.3では，古いバージョンのsbtとScalaが指定されてしまっているのでこれを変更します．
`skinny-black-app/project/build.properties`の内容を
`sbt.version=1.2.8` から `sbt.version=1.3.7`に
`skinny-black-app/build.sbt`の内容を
`val theScalaVersion = "2.12.8"`を`val theScalaVersion = "2.12.9"`に変更します．

以上の変更をして`./skinny run`を実行すると下のような画面が出てくれば大丈夫です．

<img width="264" alt="スクリーンショット 2020-01-25 14.00.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198982/b157e3cd-d131-8f05-fefb-302508cff605.png">

その後のコマンドについてもほぼ問題なく動かせるかと思いますが，`./skinny run -precompile`を実行した際にまだエラーが出てしまうので，その点については分かり次第追記しようと思います．
なにかご存知の方がいらっしゃればコメントお願いします．


# まとめ

今回の記事では，Skinny Frameworkの環境構築でエラーが出た場合の対処法についてまとめました．
間違ってる内容があれば，是非コメントお願いします．

# 余談

ここからは記事の目的からは少し脱線したことについて書いていきます．

## なぜSkinny Frameworkを勉強しようと思ったか

そもそもScalaに触れようと思った経緯は，以前からRubyやPythonといったオブジェクト指向の言語を使う機会が多く，関数型言語に触れてみたいなぁ，と思ったのがきっかけです．
Scalaで何をしようか考えていたときに浮かんだのが**OSSへのコントリビュート**でした．

以前から趣味でサービスを作ろうとしていたのですが「既存のサービスで十分だなぁ」とか「自分で実装することがベストプラクティスなのか」などを考えているうちに手を付けなくなってしまうことが多かったので，
OSSへのコントリビュートなら，このような心配事がない上に実績も残せるしスキルも伸ばせるから丁度いいと思いました．

では，どのOSSにコントリビュートするか探していたときに見つけたのが[この記事][2]でした．
Scurutoにコントリビュートするかはまだ決めていませんが，とりあえず始めやすそうだし，と思ってShinny Frameworkの勉強を始めた，という経緯です．

## 今回の対処法を見つけるまで

普段実務や研究でプログラミングをしているときはこういったバージョン周りでのトラブルに遭遇した経験はあまり無いので，少し対処に苦労しました．
その中で役に立ったのはGitHubのIssusesです．

Issuesでは既に見つかっているバグについて議論されていたり，バグについて困っている人がいたらコメントで教えてくれている人もいるので，これから積極的に活用していこうと思いました．
またIssuesのようにソフトウェアに関する議論をする場として[Gitter][5]というものも有るみたいなので，そちらも活用していこうと思います．
今回の発生したバグに関するIssueは[こちら][4]から確認することが出来ます．

# おわりに
最後まで読んでくださった方，どうもありがとうございました．
こういった記事を書くのは初めての経験なので読みづらい点も多々見られるかも思いますが，その時はコメントいただけると幸いです．

Twitterのフォロー等していただけたら積極的に返していきたいと思います．
よろしくお願いします．