finalがリリースされました。Frameworkの紹介も兼ねて簡単なWebアプリを作ってみます。リリースのペースが速いので、1.0.0以降も既にいくつかリリースされています。今回はバージョン1.0.4を使いました。あ、あと、めずらしく画像ありのエントリーになっています。Framework(以下、skinnyと表記)は、Scala向けのフルスタックWebアプリケーションフレームワークで、ScalaでRailsのようなことができます。メイン開発者は@seratchさんで、GitHub上で開発が進められています。私が把握しているレベルでの、主な特徴は以下。スタンドアロンJARで配備できるScalatraがベースなので(私は詳しくないです)、いくつかの種類のテンプレートが選べます。デフォルトでSSP,Scaml,Jade、オプションでFreeMaker,Thymeleafなどが利用できます。ORMは、同じく@seratchさんが開発されているScalikeJDBCを土台としたオリジナルORMです。文字セットがUTF-8と改行がLFを扱えるテキストエディターこれだけあれば始められます。skinny-blank-app.zipは、https://github.com/skinny-framework/skinny-framework/releasesから最新版をダウンロードします。今回は、1.0.4を使用します。バージョン1.0.6-1以降では、必須のライブラリを同梱したskinny-blank-app-with-deps.zipが提供されるようになりました。これを使えば、パッケージ自体のダウンロードは時間がかかる代わりに、最初の依存性解決で時間がかからなくなります。他の開発でivy2リポジトリを使ってないような場合は、こちらを使うのが良さそうです。skinnyはパッケージにSBTランチャー(bin/sbt-launch.jar)が含まれていますので、SBT単独のインストールは不要です。SBTのライブラリー管理用にそこそこディスク容量を消費しますので、念のためご注意ください。(Windowsの場合は、%USERPROFILE%\.ivy2の下にライブラリーがダウンロードされるので、Cドライブに少なくとも136MBくらいの空きが必要です。)あと、空きメモリーがそこそこ必要です。SBTについて詳しく知りたい方は、以下のページなどをご覧下さい。sbtScalaが使えるIDEがあると、より一層楽に開発できます。少なくとも、文字コードセットにUTF-8が使えるテキストエディターがあればできます。今回のアプリは、テキストエディターだけで書いています。worldskinny-blank-app.zipを、お好きなフォルダーに解凍します。ここではユーザーのフォルダーの下にします。ユーザーargiusの場合だと、C:\Users\argius\skinny-blank-appになります。コマンドプロンプトを起動して、解凍したskinny-blank-appフォルダーに移動します。次に最初の起動を行います。dependencies(ライブラリー依存関係)の解決のため、初回だとダウンロードで少々時間がかかります。changesが出たら、サーバーの準備ができています。http://localhost:8080にアクセスしてみましょう。worldのページコマンドラインでENTERキーを押すとサーバーは終了します。CRUDを自動生成ここまでは、まだトップページだけの状態です。次は、scaffoldコマンドを使って、CRUDのページを自動生成してみます。scaffoldとは「骨格」「足場」などを意味する単語です。ページを自動で作ってくれます。ここでは、本のリストのアプリを作ってみましょう。point:Option[Int]第1引数のBookListはコントローラー(リクエストを処理する部分)の名前とデータベースのテーブルの名前(book_list)に、第2引数のBookはモデル(データベースとやりとりする部分)の名前に使われます。その後ろは、book_listテーブルの列を指定します。列は、列名とデータ型をコロンでつなげます。データベース型も指定したい場合は、title:String:varchar(100)のように指定します。point:Option[Int]指定されたファイルが見つかりません。>生成されるファイルのうち、Viewテンプレートはsspになります。Jadeで生成したい場合は、scaffoldのところをscaffold:jadeにすればOKです。この時点では、まだデータベースにテーブルが作成されていません。テーブルを作成するには、db:migrateを実行します。db:migratedb/development.h2.dbというファイルが作られ、その中にbook_listテーブルが作成されました。これを動かしてみましょう。runして、今度はhttp://localhost:8080/book_listにアクセスします。book_listの一覧(ゼロ件)Newボタンを押すと、新しいレコードの登録するフォームが表示されます。ここで登録(CREATE)ができます。同様に、取得(RETRIEVE)、更新(UPDATE)、削除(DELETE)ができます。book_listの一覧(いくつか登録した)日本語で表示デフォルトでは、ボタンや列の名前は英語になっています。これらを日本語に変えてみましょう。サーバーは起動したままでもOKです。src/main/scala/controller/ApplicationController.scalaの16行目のdefaultLocaleのコメントアウトを外します。java.util.Locale("ja"))}次に、src/main/resources/messages.confファイルをコピーして、messages_ja.confファイルを作ります。33行目からの内容を、以下のものに置き換えます。33行目より前は使わないのでここでは省略。created="レコードが作成されました。updated="レコードが更新されました。deleted="レコードが削除されました。point="点数"}日本語に変えたbook_list絞り込み機能を追加するせっかくリストを作ったので、キーワードでデータを探せるようにしたいですね。タイトルか著者のいずれかがキーワードと一致したレコードだけ表示できるようにしてみましょう。一覧のページをちょっと改造して作ってみます。最初に、BookListControllerにfindメソッドを実装します。}次に、ControllersにBookListController.findのURLを設定します。19行目に1行追加します。}最後に、一覧ページに検索フォームを追加します。src/main/webapp/WEB-INF/views/bookList/index.html.sspが一覧のテンプレートファイルです。この15行目付近に、検索フォームを追加します。</form></div>絞り込んだところページ機能は単純化のために省いています。既存のデータベースのテーブルからリバースエンジニアリングでscaffoldができるreverse-scaffoldもあります。プライマリーキーが"id"でLong型に対応したDB型であれば、コマンドだけで完結します。プライマリーキーがid:Longでなくてもreverse-scaffoldは使えますが、その場合はSkinnyCRUDMapperWithId,primaryKeyFieldNameを設定する必要があります。FrameworkのSkinnyCRUDMapperWithId,primaryKeyFieldNameキーワードを参照)1.0.4のバグみたいです。(追記2014-04-19)1.0.6では直っています。2014詳しくは、下記ページの後半をご覧ください。Framework他にもValidatorやMailerなどの便利な機能があります。テスト環境も充実しています。skinny自体もまだ新しいので、これからが楽しみです。Frameworkで始めるScalaのWebアプリ開発Tweet広告を非表示にする関連記事2016-06-08とりあえずStruts2+Spring4+MyBatis3の開発環境を作ってみた(2016年初夏バー...きっかけは、Q&Aの対応と、下記の記事です。Framework(以降skinnyと表記)のTIPS、第2弾です。(2)プロフィールid:argiusはてなブログをはじめよう!argiusさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。