Github 上で公開されている以下のコンテンツを参考に作成しました。 Scala によるデータベースプログラミング (はてな Textbook)
Slick 3 が難しかったので、ScalikeJDBCの学習を兼ねつつSlickの部分をScalikeJDBCに置き換えてみました。
また、後からSkinny Frameworkを使ってWebアプリ化にも挑戦しました。
・Java 8
・Scala 2.12
・sbt 0.13.x
はじめるsbt
・H2 データベース
ローカルPCで簡単に実行できるデータベースエンジンです。(アプリに組み込む事もできるし、サーバーとしても利用可)
・flyway
DBマイグレーションツール。テーブルの構造変更や、初期データの投入とかを管理するためのツール。
・specs2
Scala 用のテストフレームワーク。
・ScalikeJDBC 2.4.x Scala 用のデータベースアクセス用 フレームワーク。
・Skinny Framework 2.3.2 Scala 用のフルスタックのWebアプリケーションフレームワーク。
パス | 説明 |
---|---|
src/main/resources | 設定ファイル色々。 |
src/main/scala/repository | データベースアクセス用のクラスを格納。更にdaoフォルダを用意して、ScalikeJDBCからの自動生成クラスを格納。 |
src/main/scala/model | 論理層間の値をやりとりするための"case class"を定義。 |
src/main/scala/repository | データベースアクセス用のクラスを格納。更にdaoフォルダを用意して、ScalikeJDBCからの自動生成クラスを格納。 |
src/main/scala/service | ひとまとまりにした処理を定義。ここからデータベース操作のrepositoryを呼び出す。 |
src/main/scala/cli | コンソールでの各種処理実行を定義。 |
src/main/scala/controller | Webのリクエストの窓口。 |
src/main/scala/templates | Webのtemplate engine (scalate) 関係。 |
src/main/scala/util | 他で使う共通処理。 |
src/webapp/ | Web関係のファイル。 |
HatenaTextScalike/
├── README.md
├── _skinny_assembly_settings.sbt
├── bin
│ └── sbt-launch.jar
├── build.sbt
├── build.sbt~
├── db
├── project
│ ├── _skinny_assembly.sbt
│ ├── build.properties
│ ├── plugins.sbt
│ ├── plugins.sbt~
│ └── scalikejdbc.properties
├── sbt
├── sbt-debug
├── sbt-debug.bat
├── sbt.bat
├── skinny
├── skinny.bat
├── src
│ ├── main
│ │ ├── resources
│ │ │ ├── application.conf
│ │ │ ├── db
│ │ │ │ └── migration
│ │ │ │ ├── V1__create_tables.sql
│ │ │ │ └── V2__alter_tables.sql
│ │ │ ├── logback.xml
│ │ │ ├── logback.xml.simple
│ │ │ ├── messages.conf
│ │ │ └── messages_ja.conf
│ │ ├── scala
│ │ │ ├── Bootstrap.scala
│ │ │ ├── lib
│ │ │ ├── simple
│ │ │ │ └── bookmark
│ │ │ │ ├── cli
│ │ │ │ │ ├── BookmarkCLI.scala
│ │ │ │ │ └── BookmarkCLI.scala~
│ │ │ │ ├── controller
│ │ │ │ │ ├── ApiController.scala
│ │ │ │ │ ├── ApplicationController.scala
│ │ │ │ │ ├── BookmarksController.scala
│ │ │ │ │ ├── Controllers.scala
│ │ │ │ │ ├── MsUsersController.scala
│ │ │ │ │ └── RootController.scala
│ │ │ │ ├── model
│ │ │ │ │ ├── Bookmark.scala
│ │ │ │ │ ├── Entry.scala
│ │ │ │ │ └── User.scala
│ │ │ │ ├── repository
│ │ │ │ │ ├── Bookmarks.scala
│ │ │ │ │ ├── Entries.scala
│ │ │ │ │ ├── Identifier.scala
│ │ │ │ │ ├── MsUserDefault.scala
│ │ │ │ │ ├── Users.scala
│ │ │ │ │ └── dao
│ │ │ │ │ ├── MsUser.scala
│ │ │ │ │ ├── SchemaVersion.scala
│ │ │ │ │ ├── TrBookmark.scala
│ │ │ │ │ └── TrEntry.scala
│ │ │ │ ├── service
│ │ │ │ │ ├── BookmarkApp.scala
│ │ │ │ │ ├── Error.scala
│ │ │ │ │ └── UserApp.scala
│ │ │ │ ├── templates
│ │ │ │ │ └── ScalatePackage.scala
│ │ │ │ └── util
│ │ │ │ ├── Authenticate.scala
│ │ │ │ └── MyTimestampsFeature.scala
│ │ │ └── worker
│ │ │ └── package.scala
│ │ └── webapp
│ │ ├── WEB-INF
│ │ │ ├── assets
│ │ │ │ ├── build.sbt
│ │ │ │ ├── coffee
│ │ │ │ ├── jsx
│ │ │ │ ├── less
│ │ │ │ ├── scala
│ │ │ │ └── scss
│ │ │ ├── layouts
│ │ │ │ ├── default.html
│ │ │ │ ├── default.ssp
│ │ │ │ └── default_bookmarks.ssp
│ │ │ ├── views
│ │ │ │ ├── bookmarks
│ │ │ │ │ ├── _form.html.ssp
│ │ │ │ │ ├── add.html.ssp
│ │ │ │ │ ├── edit.html.ssp
│ │ │ │ │ ├── index.html.ssp
│ │ │ │ │ ├── new.html.ssp
│ │ │ │ │ └── show.html.ssp
│ │ │ │ ├── bookmarks.html.ssp
│ │ │ │ ├── error
│ │ │ │ │ ├── 403.html
│ │ │ │ │ ├── 403.html.jade
│ │ │ │ │ ├── 403.html.mustache
│ │ │ │ │ ├── 403.html.scaml
│ │ │ │ │ ├── 403.html.ssp
│ │ │ │ │ ├── 404.html
│ │ │ │ │ ├── 404.html.jade
│ │ │ │ │ ├── 404.html.mustache
│ │ │ │ │ ├── 404.html.scaml
│ │ │ │ │ ├── 404.html.ssp
│ │ │ │ │ ├── 406.html
│ │ │ │ │ ├── 406.html.jade
│ │ │ │ │ ├── 406.html.mustache
│ │ │ │ │ ├── 406.html.scaml
│ │ │ │ │ ├── 406.html.ssp
│ │ │ │ │ ├── 500.html
│ │ │ │ │ ├── 500.html.jade
│ │ │ │ │ ├── 500.html.mustache
│ │ │ │ │ ├── 500.html.scaml
│ │ │ │ │ ├── 500.html.ssp
│ │ │ │ │ ├── 503.html
│ │ │ │ │ ├── 503.html.jade
│ │ │ │ │ ├── 503.html.mustache
│ │ │ │ │ ├── 503.html.scaml
│ │ │ │ │ └── 503.html.ssp
│ │ │ │ ├── msusers
│ │ │ │ │ ├── _form.html.ssp
│ │ │ │ │ ├── edit.html.ssp
│ │ │ │ │ ├── index.html.ssp
│ │ │ │ │ ├── new.html.ssp
│ │ │ │ │ └── show.html.ssp
│ │ │ │ └── root
│ │ │ │ └── index.html.ssp
│ │ │ └── web.xml
│ │ ├── assets
│ │ │ ├── css
│ │ │ │ └── default.css
│ │ │ └── js
│ │ └── favicon.ico
│ └── test
│ ├── resources
│ │ └── factories.conf
│ └── scala
│ ├── service
│ │ └── BookmarkAppSpec.scala
│ ├── settings
│ │ └── DBSettings.scala
│ └── simple
│ └── bookmark
│ └── repository
│ ├── BookmarksSpec.scala
│ ├── EntriesSpec.scala
│ ├── IdentifierSpec.scala
│ ├── UsersSpec.scala
│ └── dao
│ ├── MsUserSpec.scala
│ ├── TrBookmarkSpec.scala
│ └── TrEntrySpec.scala
└── task
└── src
└── main
└── scala
└── TaskRunner.scala
./skinny run で ローカル環境で実行可能なWebアプリケーションです。 サンプル的なアプリとしてご参照ください。
$git clone [email protected]:matsutomu/HatenaTextScalike.git
$./skinny db:migrate
・・・・
[success]
$./skinny test
・・・
[success] Total time: 69 s, completed 2017/02/03 0:22:07
$./skinny run
・・・
[success] Total time: 8 s, completed 2017/02/03 0:18:28
1. Waiting for source changes... (press enter to interrupt)
test 実行でユーザーをデータベースにテスト用の各種情報を設定しています。 ブラウザを立ち上げて、http://localhost:8080/ を表示すると、ログイン画面が出てきます。 ログインIDはAlice でパスワードは1234でログイン出来ます。