SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Scala+Liftによる実践Webアプリケーション開発

ScalaによるWebアプリケーションフレームワーク「Lift」とは

Scala+Liftによる実践Webアプリケーション開発(1)

  • X ポスト
  • このエントリーをはてなブックマークに追加

Liftとは

 では、Webアプリケーションフレームワーク「Lift」の紹介に入ります。

 Liftは、David Pollak氏を中心に、Apache Licence 2.0のもとでオープンソースとして公開され、現在も活発に開発が続けられています。

 LiftのソースコードはGithub上(http://github.com/dpp/liftweb/tree/master)にホストされています。また、Google Group上で活発な議論が行われおり、まだまだこれからも発展していくと思われます。

 執筆時点(2009年8月7日)での正式リリース版はLift 1.0ですが、Scala 2.8のリリース後(おそらく2009年9月)にScala 2.8に対応したLift 1.1がリリースされる予定です。

 Liftのコンセプトは、"The Simply Functional Web Framework"。直訳すると、「簡潔な関数型Webフレームワーク」でしょうか。

 「関数型Webフレームワーク」というフレーズは、Liftの特徴を実によく表しています。Liftは、先述したXMLリテラルや関数オブジェクトなどのScalaの言語仕様を非常にうまく利用して、簡潔な記述でWebアプリケーションを構築できるようになっているのです。

 また、Liftは、先行する多くの優れたWebアプリケーションフレームワーク(Ruby on Rails - Ruby、Django - Python、Seaside - Smalltalk、Apache Wicket - Java)から機能/コンセプトを取り入れています。

 Ruby on Railsからはキックスタートの早さと規約による設定(Convention over configuration)を、Djangoからは充実したAdminサイトの機能とビルトイン関数を、Seasideからは細やかなセッション状態の保持を、Apache Wicketからはコンポーネントモデルとデザイナと協業できるテンプレートシステムを、といった具合です。

 そして、LiftはフルスタックのWebアプリケーションフレームワークです。

 Webアプリケーションを開発するためには、HTTPサーバーやアプリケーションサーバー、データベースなどのミドルウエア、O/Rマッパーやテンプレートエンジンなど様々なライブラリが必要になります。

 しかし、Liftは上記の環境一式を全て提供します。開発者は、Liftを利用し始めてすぐに動作させ、プログラムを書き始めることが可能なのです。

 比較的新しいフレームワークですが、海外のみならず、日本国内でも開発事例があり、実際の案件でも利用されています。

Liftの特徴

 もう少し詳しく、Liftの機能について解説します。

1. フルスタックのWebアプリケーションフレームワーク

 先ほども述べましたが、LiftはフルスタックのWebアプリケーションフレームワークです。Webアプリケーションの開発に必要なものは全て含まれています。

 アプリケーションサーバとしてJettyが付属していますし、データベースはH2 Database Engineが同梱されています。もちろん、テンプレートエンジンやO/Rマッパーも含まれています。

2. Snippetアプローチ

 Liftが他のフレームワークと決定的に異なる点は、このSnippetアプローチというアーキテクチャでしょう。Snippetとは、小さなプログラムの断片を意味しますが、LiftのSnippetはテンプレートに対して動的な出力を提供するコンポーネントという意味合いです。

 一般的なWebアプリケーションフレームワークはMVC(Model-View-Control)アーキテクチャを採用していることが多いですが、LiftではMVCのCに相当するコントローラは、少なくとも開発者が意識すべきものとしては存在しません

 Liftはテンプレートを解釈して出力を生成する過程で、Snippetを呼び出して動的な出力の生成やModelの操作を行うのです。

 いうなれば、Viewを中心としたアーキテクチャなのです。

CoCによる設定

 Webアプリケーションの設定にXMLを採用することで、大量のXMLファイルを管理/更新しなければならないXML地獄に陥った経験をお持ちの方も多いでしょう。

 こうしたXML中心の設定に対してのアンチテーゼとして、規約による設定(CoC:Convention over Configuration)を採用するフレームワークが増えてきました。

 また、Javaによるフレームワークの中には、設定ファイルによる定義はIDEによる補完やリファクタリングの恩恵を得られないため、Javaのプログラム内で設定を記述すべきであるという考え方もあります(Google GuiceやApache Wicketなど)。

 Liftでは、双方のアプローチを採用しています。

 URLに対してのマッピングやデータベースへの接続設定はScalaのプログラム内で、データベースのテーブルへのマッピングやテンプレートとSnippetの紐付けなどはCoCで行うようになっています。

3. 高機能なO/Rマッパー

 一般的なWebアプリケーションでは、データの永続化にデータベースを利用することがほとんどでしょう。Liftに付属しているO/R マッパーは、CoCによる簡単なModelの定義で、柔軟なデータ操作が可能です。付属のO/R マッパー以外に、JPA(Java Persistence API)も利用できます。

 また、データベースのスキーマとModelに定義されているプロパティを同期する、schemifyという機能がサポートされており、スキーマを拡張しながらの開発が可能です。

4. maven 2によるクイックスタート

 Liftのプロジェクトを作成するためには、コマンドラインからmaven 2のコマンドを入力するだけでOKです。

 コンパイルや開発用サーバーの起動もmaven2のコマンドで起動できます。もちろん、EclipseやNetBeansなどのIDEを利用した開発もサポートしています。

5. ユーザー管理、SiteMap、ACLなどの組み込み

 Webアプリケーションでよく使われる機能である、ユーザー管理やメニューを作成するSiteMap、アクセスコントロール(ACL)がデフォルトで組み込まれています。

 また、これらの設定はScalaのプログラム内で行いますので、Scalaの言語機能を利用して柔軟な設定が可能ですし、動作をカスタマイズすることもできます。

6. jQueryを利用したAjax

 最近のWebアプリケーションではAjaxを利用したユーザーインターフェースを採用することが多いかと思われます。

 LiftにはjQueryが標準で含まれており、Snippetと組み合わせることで簡単にAjaxを利用したアプリケーションを作成することができます。AjaxでのリクエストをSnippetに処理させることができますし、Scalaのプログラム内からJavaScriptを発行することができます。

7. Cometサポート

 Cometは、サーバで発生したイベントをリアルタイムでブラウザに通知する技術です。通常はJavaScriptによってサーバーとコネクションを継続させることで実現します。

 Cometを利用することで、チャットのようにリアルタイムで通知が必要なアプリケーションをWebアプリケーションとして実現することが可能なのです。

 Liftでは、組み込みの機能でScalaのActorライブラリを利用したCometアプリケーションの作成をサポートする機能が備わっています。

8. Liftコンソール

 Ruby on RailsやDjangoなどのLL言語のフレームワークでは、フレームワークの設定や実際の動作を確認できる対話型インターフェイスが利用できるものが多くあります。

 Liftでも対話型インターフェースが利用できますので、データベースにアクセスして動作確認しながらビジネスロジックをプログラミングすることができます。図2は、Liftコンソールを利用して、データベース内のUserテーブルを検索した様子です。

図2:Liftコンソール
図2:Liftコンソール

 こうして機能を見てみると、最近のWebアプリケーション開発で必要な機能はほとんどそろっていることが分かると思います。

次のページ
Liftのアーキテクチャ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Scala+Liftによる実践Webアプリケーション開発連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 尾崎 智仁(オザキ トモヒト)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4310 2009/09/16 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング