1.はじめに
自分にとって久々に未知のプログラミング言語であるScalaを勉強して、半年ほど経った後に簡単なWebアプリ(DBアクセス有り)を作ろうと思ったのですが、なかなか開発が進みませんでした。
Scalaの言語自体は分かったつもりだったのですが、最初に手を出したのが非同期プログラミングが推奨されているSlick3.xと言うのがマズかったように思います。
色々開発が思うように進まなかったので、他のフレームワークを探していてScalikeJDBCに出会いました。Slickよりも日本語の情報が充実してますし、別の記事で紹介されているのを見かけたのですが、実際Slickよりも取っ付き易かったです。
Scalaを勉強し始めて既に1年がたって、少しはコードが読めるようになり、書けるようになってきたので、自分の知識の整理のためにも記事を書こうと思います。
また、Scalaが少し分かって簡単なDBアクセス有りのアプリを作ろうとしている方に、少しでも役に立つようなものをまとまった形で残せればと考えています。
なお、以下の3つの知識が無いと進みが悪いと思うので、前提知識として持っている事を期待しています。
* SQLの知識がある事
* sbt(とactivator)が利用できる事。
* Scalaの文法をある程度理解している事。
* 開発支援ツールの導入が済んでいる事(IntelliJ IDEA)。
特に自分はsbtとかの概念がなかったので、導入時点でも苦しみました。sbtのリンクはクリックして、読むべきです!
開発支援ツールはEclipseよりもIntelliJ IDEAの方をお勧めします。Linuxで利用しているのですが、軽くて、Community版でも簡単な練習用コードであれば問題なく記述できています。
2."プロジェクト"フォルダの作成
開発を開始するにあたって、元となる雛形から初期フォルダを作成します。
この初期フォルダのファイルを修正・追加して開発を進める事になります。
ここではその"初期フォルダ"の作成方法を簡単に2つ紹介します。
方法(1) IntelliJ IDEA
最初に表示される画面から、CreateNewProjectを選択します。
新規プロジェクトで、左のウィンドウからScalaを選択して、下記3つのいずれかを選択します。
- Scala ・・・ 本当に何も無いプロジェクトフォルダです。
- sbt ・・・ sbtが含まれた形のプロジェクトフォルダです。これが初めはお勧めです。
- Activator ・・・ 豊富なテンプレートから選択して初期フォルダが作成できます。
sbtを選択して、一旦は何も含まれていない状態のプロジェクトを作成する事をお勧めします。
ActivatorでHello Scall11とかを選択しても、依存しているjarファイルのダウンロードに時間がかかったりします。
方法(2) activator
コマンドラインから下記コマンドを実行して初期プロジェクトが作成できます。
~$ activator new "project name"
Fetching the latest list of templates...Browse the list of templates: http://typesafe.com/activator/templates
Choose from these featured templates or enter a template name:
1) minimal-akka-java-seed
2) minimal-akka-scala-seed
3) minimal-java
4) minimal-scala
5) play-java
6) play-scala
選択肢が複数出てくるのですが、4を選択します。
これで指定のフォルダに最小構成の初期フォルダが出来上がります。
activatorから作成する事で、sbtの設定ファイルやactivatorのjarも含まれており、
後々設定変更時に役立つファイルが存在するのでこちらがお勧めです。
また、このactivatorで作成したプロジェクトをIntelliJ IDEAでは起動画面からインポートする事ができます。
3.依存jarの定義及びダウンロード
作成した初期フォルダの直下に存在する "build.sbt"ファイルに依存するjarファイルを記載します。
ScalikeJDBCを始めるために必要なライブラリの情報を記載します。
// Change this to another test framework if you prefer libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"
を下記のように書き換えます。
// Change this to another test framework if you prefer libraryDependencies ++= Seq( "org.scalikejdbc" %% "scalikejdbc" % "2.3.5", "com.h2database" % "h2" % "1.4.191", "ch.qos.logback" % "logback-classic" % "1.1.3", "org.scalatest" %% "scalatest" % "2.2.4" % "test" )
記載後に、初期フォルダの直下で下記コマンドを実行する事でリポジトリから依存jarファイルのダウンロードが始まります。
$sbt run
コマンド実行時にErrorが出ていると正常にダウンロードできていない恐れがあります。
『ネットワークがつながっていない』、『Proxyサーバーが間に入っていて接続がsbtから直接出来ない』と言った問題が考えられます。
この段階で外部のサーバーにつながっている必要があるので、ネットワークに制限がかかっている環境では注意が必要です。
4.H2 データベース
今回 ScalikeJDBCを試すにあたって、導入が簡単なデータベースを利用します。
100% Javaでコーディングされたデータベースエンジンで、とても軽量です。
マイクロソフトのAccessと似ていてファイルを指定した組み込みモードとしての利用や、サーバーとして利用可能なサーバーモードが存在します。
また、ブラウザからSQLを発行可能なツールも付属しています。
5.ScalikeJDBC First example
ScalikeJDBCのトップページに記載されているサンプルの事です。
残念ながら、半年程度Scalaを勉強していた私自身すぐに理解できませんでした。
- Class.forName って?(コーディングから長く離れていて最初まったくわからなかったです。。。)
- implicit って Scalaの説明で見た事あるけど、いきなり出てくるの?
- """(ダブルクォート3つ)はrow文字列って言うのはわかるけど、いきなりexecuteって?
- あー、『=>』このマークか!?
最初に見て困ったのは、Scalaの特有の文法なのか、ScalikeJDBCの拡張なのかがいまいちピンとこなかった事です。
今後、Scala初心者がこの切り分けの助けになるような文章が書きたいと思います。
続きます。。。