エンタープライズクラウドの現在(要求開発アライアンス3月定例会)
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

エンタープライズクラウドの現在(要求開発アライアンス3月定例会)

  • 1,774 views
Uploaded on

オープンコミュニティ「要求開発アライアンス」(http://www.openthology.org)の2012年3月定例会発表資料です。 ...

オープンコミュニティ「要求開発アライアンス」(http://www.openthology.org)の2012年3月定例会発表資料です。
Open Community "Requirement Development Alliance" 2012/3 regular meeting of the presentation materials.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,774
On Slideshare
1,774
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
25
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. エンタープライズ・クラウドの現在 @maruyama097 丸山不二夫
  • 2. Agenda o  21世紀の最初の10年に起きたことo  今後の展望とエンタープライズ・クラウドの課題o  JavaEE 7o  Play 2.0n  資料 A)  GlassfishのService Deploy B)  GlassfishのAmazon EC2へのdeploy C)  Play 2.0 Template Overview D)  Play 2.0 routesファイル サンプル
  • 3. 21世紀の最初の10年に起きたこと 21世紀の最初の10年が終わった。 この10年の、特に、この数年のITの世界の 変化は目覚ましいものがある。
  • 4. 2001/9/11
  • 5. 2011/3/11
  • 6. 21世紀、最初の10年 携帯電話の爆発的普及 90   21世紀の最初の10年で、80   世界人口の80%が携帯 78.59   68.77  70   電話を持ち、30%がイン 60.36  60   ターネットを利用するよう 50.99   携帯電話 50   になった。 42.15  40   34.21   30.48   27.63   26.81  30   22.47   23.55   20.79   18.60   17.67  20   15.87   インターネット 15.00   14.15   12.32   10.62  10   8   0   2001   2002   2003   2004   2005   2006   2007   2008   2009   2010  
  • 7. 21世紀、最初の10年 インターネットの発展とクラウドの登場 90   21世紀初頭、Googleの登場を画期に、80   コンシューマ向けのインターネット・ 78.59  70   クラウドが成立し、その技術は、 68.77  60   Amazon,MSにより、エンター 携帯電話 60.36   50.99  50   プライズ向けのクラウド 42.15  40   として発展した。 34.21   30.48   27.63   26.81  30   22.47   23.55   20.79   18.60   17.67  20   15.00   10.62   12.32   14.15   15.87   インターネット 10   8   2006年 Amazon EC2/S3 0   2001   2002   2003   2004   2005   2006   2007   2008   2009   2010   2004年 Google上場 2008年 Microsoft Azure
  • 8. 2005年から2010年までの 世界のトランジスター数の変化 IDF2011 Keynoteより 2011/9/13
  • 9. 2007年-2011年クラウド・デバイスの登場 90   21世紀の最初の10年の80   後半で、スマートフォンが 78.59   68.77  70   登場し、アメリカでは携帯 60.36  60   電話全体の30%を占める50   ようになった。 50.99   携帯電話 42.15  40   34.21   27.63  30   22.47  20   15.00   18.60   スマートフォン 10   0   2001   2002   2003   2004   2005   2006   2007   2008   2009   2010   2007年 iPhone, 2008年 Android
  • 10. 2007年-2011年
クラウド・デバイスの躍進 PC 21世紀の最初の10年 Android の後半で、Android、 iPhone   iPhone、iPad等のクラ iPad ウド・デバイスの拡大は 急速で、PCを上回る勢 Mac いである。
  • 11. 2011年に起きたこと 昨年2011年に起きたことを、Gang of Four (Google, Apple, Facebook, Amazon )の活動を中心に振り返る。 2011年は、大きな転換点であったと思う。
  • 12. 新しいネットワーク・メディアのインパクト o  2011年1月 チュニジア  中近東・北アフリカでの一連のo  2011年2月 エジプト 変化でも、新しいネットワーク・o  2011年3月 リビア メディアは、大きな役割を果た したと言われている。 o  2011年4月 シリア 2010/02/10 エジプト 2010/04/22 シリア
  • 13. Apple iCloudWWDC 2011 6/6-6/10 
  • 14. Facebookユーザー8億人を突破2011年9月22日 f8 1日当たりの利用者数、5億人に達する
  • 15. Amazon Kindle Fire2011年11月14日
  • 16. Google CheckoutのGoogleウォレットへの統合 11月18日 o  Google ウォレットは、客の支払い情報を安全 に保存する仮想の財布(ウォレット)で、実店舗 でもオンラインでも、すばやく支払いを行うこと ができる。従来のGoogle Checkout は Google ウォレットに統合された。o  2014年までに50% のスマートフォンが NFCを内蔵するよう になるだろう。 コマース担当副社長 Stephanie Tilenius
  • 17. クラウドとクラウド・デバイス 一年前(2010年)の状況 クラウド・ クラウド マーケット デバイス iTune/Apple   × ○ AppStoreGoogle   ○ ○ Android Market Microsoft   ○ ×Amazon   ○ × Facebook  × ×  
  • 18. クラウド+クラウド・デバイスの 新しいプレーヤの形成 2011年 クラウド・ クラウド マーケット デバイス iTune/Apple   ○   ○ AppStoreGoogle   ○   ○  Android Market Microsoft   ○   ○ Marketplace Amazon   ○   ○ Amazon Facebook  △   △  ?
  • 19. iPhoneで、AT&Tのトラフィック3年で50倍に ブロードバンドの帯域も、個人によって またたく間に、消費される。 http://bit.ly/1I8Wbd
  • 20. この間、日本では ネットワーク障害があいついだ http://www.nttdocomo.co.jp/binary/pdf/info/notice/page/120127_00.pdf
  • 21. この間、日本ではネットワーク障害があいついだ
  • 22. 今後の展望とエンタープライズ・クラウドの課題 これから起きるだろうことを考える。 新しいネットワーク・メディアの躍進と新し いネットワーク・マーケットの台頭の二つを 軸に変化は進んでゆくだろう。こうした視点 から、エンタープライズ・クラウドの課題を考 える。
  • 23. 2010年から2015年までの
 世界のトランジスター数の予想 IDF2011 Keynoteより 2011/9/13
  • 24. ネットワークへの個人の登場にともなって、ネットワーク上の情報は、爆発的に増大を続ける。
  • 25. 新しいプラットフォームと新しいネットワーク・メディアの成立 o  巨大なクラウドと無数のクラウド・デバイス の結合による、新しいプラットフォームの形成o  クラウド+クラウド・デバイスのプラットフォ ームは、新しいネットワーク・メディアの骨組 みを構成する。o  このネットワークは、21世紀初頭の携帯の 拡大のように、2010年代を通じて、世界人 口の大部分を飲み込んで行くだろう。
  • 26. コマース市場の拡大新しいネットワーク・マーケットの成立 o  日常の消費行動を含め、全ての経済行動が 、ネットワーク上で行われるようになる。o  これを担うシステムは、これまでのエンター プライズ・システムの規模を大きく超えるも のになる。システムの規模拡大は必須で ある。o  全ての処理がリアルタイムで行われる必要 はないのだが、コンシューマ向けのクラウド ・サービスとは異なって、そのトランザクショ ン処理には、いくつかの厳しい要請が課せ
  • 27. 数百万コアが集積した巨大なクラウド 無数のクラウド・デバイス
  • 28. メディア産業にとっては、激動の10年が始まろうとしている。 o  音楽産業 o  放送産業 o  映画産業 o  通信事業者 o  出版産業 o  ケーブルテレビ o  新聞産業 o  広告産業 旧メディアの長期低落と、新しいネットワーク・メディアの躍進が、基本的な傾向である。
  • 29. 旧メディアの長期低落の一例 新しいネットワーク・メディアが当面のターゲットとしているのは、音楽市場である
  • 30. コマース市場に対応するエンタープライズ・クラウドの課題 o  巨大なスケールと厳密なトランザクションが 、コマース市場をターゲットとしたクラウド ・サービスの新しい課題になる。o  コンシューマ向けのクラウドに厳密なトラン ザクションを持ち込むか、エンタープライズ・ システムをスケールさせるか? o  おそらく可能な対応は後者である。
  • 31. コマース市場に対応する
エンタープライズ・クラウドの課題 o  基本的には、コマース向けのクラウドへのニ ーズの高まりは、現在の基幹系システムの クラウド化・スケールアウト化の一層の推進 によって応えられることになるだろう。o  コマース市場の拡大に伴って、エンタープラ イズ・クラウドの本当の姿が明らかになる。
  • 32. クラウド受容の現段階 o  エンタープライズにおけるクラウドの受容は 、意識的には、Hypeを超え、大きく進んだ。o  客観的には、かつてのRelational DBや LinuxやJavaの受容と同様に、それは、エ ンタープライズの周辺部から進行している。o  現時点では、エンタープライズ・システムの 中核においては、システムやリソースの統合 、管理コストの削減という観点からのPrivat eクラウドの構築が関心の焦点である。o  次の段階を展望する必要がある。
  • 33. 無数のクラウド技術の並存 その一例 jcloudが対応するクラウド・サービス o  Amazon Web o  Go Grid Services o  HP Cloud Serviceso  Elastic Block o  IBM Developer Store Models Cloudo  Azure Storage o  OpenStack Service o  Rackspaceo  BlueLock vCloud o  RimuHostingo  Cloud Sigma o  Terremark eCloudo  Eucalyptus o  Terremark vCloudo  File System Express
  • 34. もっともっと、沢山のクラウド・ベンダーが存在する
  • 35. クラウド技術のオープン化・標準化 o  クラウド技術が、産業界に広く受け入れられ て行くうえで、他のIT技術と同じように、オー プンな業界標準を持つことが必要だという 声が、説得力を持つ段階に近づいている。o  クラウド上のデータとアプリケーション・シス テムの双方が、標準的なPortabilityのイ ンターフェースを持つようになるのが望ま しい。o  クラウド・プレーヤたちは、Interoperabilit yの標準をサポートする必要がある。
  • 36. 企業の生産性向上とクラウド o  企業にとってクラウド利用の主要な目的は、 クラウド上で顧客にサービスを提供すること。o  いかに速く、いかに簡単に、堅牢なエンター プライズのサービスを開発し、クラウド上に 展開できるかは、エンタープライズのクラウ ド利用にとって中心的な課題。o  企業の生産性向上の鍵を、開発プラットフォ ームのクラウド化が握っている。 n  ただし、問題もある。日本のユーザー企業は、 自社でソフトを開発しているか?
  • 37. もう一つの別の視点個人の可能性の拡大とクラウド o  この間のIT技術の変化を大きくドライブしてき たのは、クラウド・デバイスの普及でも、SNSの 拡大でも、IT技術のコンシューマ化の流れで ある。o  それは、とりもなおさず、無数の個人がIT技術 の利用者になったということである。o  開発の側でも、開発者個人のPCの所有と自由 なネットワーク・アクセスは、客観的には、ソフ トウェアの開発環境を大きく変えてきた。オープ ンソースの広がりは、こうした変化を背景として いる。
  • 38. 一人で、出来ること
  • 39. 一人で、出来ること
  • 40. これが、僕のクラウドのイメージ
  • 41. Java EE 7
  • 42. JavaEEのクラウド化の意味 o  JavaEE7は、現在エンタープライズの基幹 系で広く利用されているJavaEEのPaaSク ラウド化を目指したもの。o  アプリケーション開発者が、クラウドのインフ ラをあれこれを意識しなくても、よく知られた JavaEE技術で開発したアプリケーションを 、そのままクラウドにdeployし、すぐにクラウ ドサービスを開始できるという、多くのJava 技術者にとっては、魅力的な枠組み。
  • 43. JavaEEのクラウド化の意味 o  JavaEEのクラウド化は、エンタープライズ Javaの事実上の標準技術が、クラウド化さ れることを意味する。o  JavaEE7の構想が 多数のベンダーの 賛成によって始まっ たことは、クラウド の標準化にとって も、大きな意味を 持っている。
  • 44. GlassfishのService Deploy Devoxx 2011での、JavaEE7のアーキテク トJerome Dochezのスライドから。
  • 45. 1.Application Introspection Application Virtual ClusterIntrospection Creation まず、アプリケーションの提供する サービスを分析します。 次に、その分析結果に基づいて、 Virtual Clusterの生成に取り掛かり ます。 サービスのdeployまでの流れ
  • 46. 2. Virtual Cluster Creation Application Virtual ClusterIntrospection Creation Virtual Nodeを作成し、 すべてのノード上に、 JavaEE7をインストール します。 Virtual Machine s With JavaEE サービスのdeployまでの流れ
  • 47. 2. Virtual Cluster Creation Application Virtual Cluster AssociationIntrospection Creation Virtual Nodeを作成し、 Load Balancerを置き Virtual ます。 Virtual Machine Machine 必要に応じてDatabase s s やMQ等の外部リソー with with スを置きます。 Load Databas これで、次の段階の Balance Virtual e r Machine Service Associationの準備が s 出来ました。 With JavaEE サービスのdeployまでの流れ
  • 48. 3. Association Application Virtual Cluster Association DeploymentIntrospection Creation Load Balancer, JavaEEサーバー Virtual Virtual Databaseを関連 Machine Machine s 付けます。 s with with これで、アプリケ Load Databas ーションのdeploy Balance Virtual e の準備が出来ま r Machine Service した。 s With JavaEE サービスのdeployまでの流れ
  • 49. 4. Deployment Application Virtual Cluster Association DeploymentIntrospection Creation JavaEEサーバー に、アプリケーシ Virtual Virtual ョンをdeployします。 Machine Machine s s with with Load Databas Balance Virtual e r Machine Service s With JavaEE サービスのdeployまでの流れ
  • 50. クラウド・サービス開始 Application Virtual Cluster Association DeploymentIntrospection Creation Virtual Virtual Machine Machine s s with with Load Databas Balance Virtual e r Machine Service s With JavaEE
  • 51. JavaEE7の今後の展開 o  今年の終わりまでには、JavaEE7の仕様が 固まるだろう。(長期戦である)o  来年には、WebLogic(Oracle), WebSphere(IBM),Jboss(Redhat)等の アプリケーション・サーバーのJavaEE7対 応版が、市場に投入されるだろう。o  PaaSエンタープライズ・クラウドの本命の一 つと、筆者は考えている。
  • 52. Play 2.0 Play 2.0は、ある意味で、かつてのSpring と同様に、JavaEEのアンチ・テーゼである 。開発の容易さにフォーカスしながら、取り 入れている技術は新しく、強力である。 残念ながら、今回は、Playの中核の一つであ るAkkaについては、説明を割愛した。
  • 53. Devoxx2011でPlay2.0を発表する、SadekとGuillaume2011/11/16 Sadek Drobi Guillaume Bort
  • 54. Play 2.0とTypesafe社 o  Playは、仏Zenexity社のGuillaume Bor t氏を中心に開発された、オープンソースの Webアプリケーションフレームワークである。o  2011年11月16日、米Typesafe社は、 Guillaume Bort氏を顧問に迎え入れ、Play をTypesafe stack 2.0と統合することを 発表。あわせてPlay2.0 betaをリリース した。o  米Typesafe社は、Scalaの創始者Martin Oderskyが会長を務め、James Gosling、
  • 55. Play 2.0の特徴 o  Java/Scalaベースの、Type Safeな、We bアプリ開発の為の軽量フレームワーク。o  アジャイルな開発手法にフォーカス。o  RESTfulアーキテクチャーを志向。o  SQL/NonSQL 多様なDataStoreに対応。o  Multi-Coreに対応した、Actorベースの非 同期並列プログラミング(Akka)。o  クラウドを意識したプラットホーム。
  • 56. アジャイルな開発スタイル o  Playでは、compile-package-deployの 面倒なサイクルを繰り返す必要はなく、ソー スを修正したら、ブラウザのReloadボタン を押すだけでいい。o  Playは、Buildシステムを自前で持ち、Jav aのソースコードを直接コンパイルし、JVMに、 hot-reloadする。o  コンパイルエラーは、ブラウザーに表示される
  • 57. RESTful アーキテクチャー o  Webアプリケーションは、HTTPのRequest を受けて、Responseを返すものである。o  ServletやStrutsは、HTTPのJavaレベル でのある抽象的な見方を与えているのだが、 Webアプリケーションのフレームワークは、 HTTPとそのコンセプトへの、完全でより直 接のアクセスを可能にすべきである。o  Template Engineを使えば、Servletは、 必要ではない。
  • 58. “Share-Nothing” Stateless アーキテクチャー o  JavaのWebフレームワークの一部は、状態 を持っている。o  こうしたアプローチは、ページの状態を自動 的に記憶するには役に立つ。同時に、「バッ クボタン」の処理等で面倒な問題も抱え込む。o  Playは、PHP,Ruby on Railsと同様に、状 態を持たない“Share-Nothing”アーキテ クチャーを採用する。
  • 59. HTTP Routing conf/routes conf/routesファイルは、HTTP RequestのMethod、URIに、それによって引き起こされるActionを対応させる。Actionは、HTTP Responseを返す。 HTTP Method # Home page GET / controllers.Application.index # Hello action GET /hello controllers.Application.sayHell URI Action
  • 60. Controller  Actionの記述app/controllers/Application.java o  app/controllers/以下のJava/Scalaファ イルは、routesファイルで、HTTP Reques tに対応づけられたActionを定義する。 package controllers; import play.*; import play.mvc.*; import views.html.*; public class Application extends Controller { public static Result index() { return ok(index.render("Hello World!")); } }
  • 61. Template HTTP Responseの雛形 app/views/index.scala.html o  app/views/ 以下のscala.htmlファイルは、 Scala functionにコンパイルされ、Action 記述から呼び出される。 @(name: String, repeat: Int, color: String)@main("Here is the result:") { <ul style="color: @if(color != null) { @color } else { "inherited" }"> @for(i <- 1 to repeat) { <li>Hello @name!</li> } </ul> <p class="buttons"> <a href="@routes.Application.index">Back to the form</a> </p>}
  • 62. conf/routes  ファイル GET          /                                            controllers.Applica=on.index  app/controllers/Applica=on.java ファイル  public    sta=c    Result    index()  {                  return  ok(                          index.render(“Hello  World!”)                  );          }   Controller app/views/index.scala.html ファイル  @(message:  String)          <h1>@message</h1>   Template
  • 63. JPAのサポートとMVC o  Playは、ORMとして、Java標準のJPAをサポ ートしている。o  Play2.0では、Stateless JPAと呼ばれる、新 しい実装である、Ebeanが提供されている。o  これらの定義ファイルは、app/models ディ レクトリーに置かれている。o  こうして、appディレクトリー下には、app/ models, app/views, app/controllers の 3つのディレクトリーが置かれることになる。
  • 64. Modelの定義
 app/models/Computer.java@Entitypublic class Computer extends Model { @Id public Long id; @Constraints.Required public String name; @Formats.DateTime(pattern="yyyy-MM-dd") public Date introduced; @Formats.DateTime(pattern="yyyy-MM-dd") public Date discontinued; @ManyToOne public Company company;
  • 65. #  Home  page   GET          /        controllers.Applica=on.index   #  Hello  ac=on   GET          /hello    controllers.Applica=on.                    sayHello   public  class   Router    Applica=on        extends         Controller  {  @(message:  String)   Controller      public  sta=c      <h1>@message</h1>  Result  index()  {     ……   @En=ty     Views   Model   public  class  Company     extends  Model  {          @Id          public  Long  id;     Play  2.0のMVC        @Constraints.      Required          public  String  name;
  • 66. public static Result sayHello() { Form<Hello> form = form(Hello.class).bindFromRequest(); if(form.hasErrors()) { return badRequest(index.render(form)); } else { Hello data = form.get(); return ok( hello.render(data.name, data.repeat, data.color) ); } } app/controllers/Application.java JavaとScala def sayHello = Action { implicit request => helloForm.bindFromRequest.fold( formWithErrors => BadRequest(html.index(formWithErrors)), {case (name, repeat, color) =>             Ok(html.hello(name, repeat.toInt, color))} ) } app/controllers/Application.scala
  • 67. 「エンタープライズ・クラウドの現在」 資料 A)  GlassfishのService Deploy B)  GlassfishのAmazon EC2へのdeploy C)  Play 2.0 Template Overview D) Play 2.0 routesファイル サンプル
  • 68. GlassfishのAmazon EC2へのdeploy https://wikis.oracle.com/download/ attachments/20876159/GlassFish +PaaS+Overview.odp? version=7&modificationDate=130135 0954000 の中の一枚のスライドから
  • 69. Create  Domain/Deploy Domain  Manager 1.  DAS  Crea5on 3.  Deployment   IaaS Management  Service 4.  VM  Crea5on AWS  Plugin  DAS   2.  DAS  Crea5on   Elasi=city  Orchestrator   Amazon  Web  Services Manager 5.  VM  Crea5on GF  Instance GF  Instance 6.  Add  Node 7.  Deployment
  • 70. Create  Domain/Deploy Domain  Manager PaaSの管理者は、まず、Domainをdeployします。  具体的には、Domain  Managerを立ち上げます。  
  • 71. Create  Domain/Deploy Domain  Manager 1.  DAS  Crea5on Domain  Managerの最初の仕事は、  DAS(Domain  Administra=on  Service)   IaaS Management  Service を立ち上げることです。   AWS  Plugin Domain  Managerは、IaaS  Management  Service(IMS)を立ち上げて、IMSはAWS  Plug-­‐inを通じて、Amazon  Web  Serviceに働き掛け、 Amazon  Web  Services DASのインスタンスを生成しようとします。  
  • 72. Create  Domain/Deploy Domain  Manager 1.  DAS  Crea5on IaaS Management  Service AWS  Plugin 2.  DAS  Crea5on    DAS   Amazon  Web  Services DASが出来ました。Domain  Managerの次の仕事は、  生成されたDASのインスタンス上に、Orchestratorと  Elasicity  Managerという二つのサービスをdeployし、  それらを走らせることです。
  • 73. Create  Domain/Deploy Domain  Manager 3.  Deployment   IaaS Management  Service AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager OrchestrtorとElasi=city  Managerがdeployされました。   こうして動き始めたDAS(Domain  Administra=on  Service)の次の仕事は、   Glassfishが走るインスタンスを生成することです。  
  • 74. Domain  Manager IaaS Management  Service 4.  VM  Crea5on AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager DASは、IMS(IaaS  Management  Service)に、Virtual  Machineの生成を命じます。
  • 75. Domain  Manager IaaS Management  Service 4.  VM  Crea5on AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager 5.  VM  Crea5on IMSは、先ほどと同じく、AWS  Plug-­‐inを通じて、  Amazon  Web  Serviceに働き掛け、クラウド上に  ノードを割り当て、それぞれのノードに  Virtual  Machineを生成します。 GF  Instance GF  Instance
  • 76. Domain  Manager IaaS Management  Service AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager 各ノードは、ノードが割り当てられると   OrchestratorにAdd  Nodeの報告をします・   GF  Instance GF  Instance 6.  Add  Node
  • 77. Domain  Manager IaaS Management  Service AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager Orchestratorは、それを受けると、   各ノード上のVMに、GlassFishの   インスタンスをdeployします。 GF  Instance GF  Instance 7.  Deployment
  • 78. Domain  Manager IaaS Management  Service AWS  Plugin  DAS   Elasi=city  Orchestrator   Amazon  Web  Services Manager GF  Instance GF  Instance
  • 79. Create  Domain/Deploy Domain  Manager 1.  DAS  Crea5on 3.  Deployment   IaaS Management  Service 4.  VM  Crea5on AWS  Plugin  DAS   2.  DAS  Crea5on   Elasi=city  Orchestrator   Amazon  Web  Services Manager 5.  VM  Crea5on GF  Instance GF  Instance 6.  Add  Node 7.  Deployment
  • 80. Play 2.0Template Overview https://github.com/playframework/ Play20/wiki/JavaTemplates
  • 81. TemplateファイルとScala function o  Templateファイルは、次のような命名規則で Scala functionにコンパイルされる。  views/Application/index.scala.html               generates  views.html.Application.index
  • 82. Templateファイルから生成された ScalaコードのJavaからの呼び出し o  次のTemplateファイルindex.scala.html から生成されたScala function indexを @(customer: Customer, orders: Seq[Order]) <h1>Welcome @customer.name!</h1> <ul> @for(order <- orders) { <li>@order.title</li> } </ul> o  次のように、Javaから呼び出すことが出来る。 Html html = views.html.Application.index.render(customer, orders);
  • 83. Template SyntaxSpecial character ‘@’ o  ‘@’は、Scala文の始まりを示す。文の終わ りは指定する必要はなく、コードからPlayが 、自動的に推測する。青字部分が、Scalaコ ードとして解釈される。Hello @customer.name!Hello @(customer.firstName + customer.lastName)!Hello @{val name = customer.firstName + customer.lastName; name}!o  ‘@’のエスケープには、’@@’を使う。 My email is bob@@example.com
  • 84. Template Parameters o  Templateは、結局は、Scalaのfunction なので、引数が必要である。 o  Templateの引数は、必ず、ファイルの第 一行で宣言されねばならない。 @(customer: models.Customer, orders: Seq[models.Order])@(title: String = "Home")@(title:String)(body: => Html)@(title: String)(body: => Html)(implicit request: play.api.mvc.Request)
  • 85. Looping / If-Blocks o  Templateの中で、for-comprehension を利用できる。この時、コンパイラーは、ブロ ックの前にyieldキーワードを挿入すること に注意 <ul> @for(p <- products) {   <li>@p.name ($@p.price)</li> } </ul> @if(items.isEmpty) {  <h1>Nothing to display</h1> } else {  <h1>@items.size items!</h1> }
  • 86. Declaring reusable blockso  Template中に、再利用可能なTemplate ブロックを定義できる。 @display(product: models.Product) = { @product.name ($@product.price) } <ul> @products.map { p => @display(product = p) } </ul> @title(text: String) = @{ text.split( ).map(_.capitalize).mkString(" ") } <h1>@title("hello world")</h1>
  • 87. Misc. o  Declaring reusable values@defining(user.firstName + " " + user.lastName) { fullName => <div>Hello @fullName</div>} o  Import statements@(customer: models.Customer, orders: Seq[models.Order])@import utils. o  Comments@********************** This is a comment **********************@
  • 88. Layout o  views/main.scala.htmlがあれば、それ がメインのレイアウト・ファイルになる。 @(title: String)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> </head> <body> <section class="content">@content</section> </body> </html> @main(title = "Home") { <h1>Home page</h1> views/Application/index.scala.html }
  • 89. @(=tle:  String)(sidebar:  Html)(content:  Html)   <!DOCTYPE  html>   <html>      <head>          <=tle>@=tle</=tle>      </head>      <body>          <sec=on  class="sidebar">@sidebar</sec=on>          <sec=on  class="content">@content</sec=on>      </body>   </html> @main("Home")  {   @sidebar  =  {      <h1>Sidebar</h1>      <h1>Sidebar</h1>  }  {   }      <h1>Home  page</h1>   @main("Home")(sidebar)  {  }    <h1>Home  page</h1>   }  
  • 90. Tags views/tags/notice.scala.html @(level: String = "error")(body: (String) => Html)@if(level == "success") { <p class="success"> @body("green") </p>}@if(level == "warning") { <p class="warning"> @body("orange") </p>}@if(level == "error") { @import tags._ <p class="error"> @body("red") @notice("error") { color => </p> Oops, something is} <span style="color:@color">wrong</span> }
  • 91. Play 2.0 
routesファイル サンプル Playのrouteファイルは、Playのコンセプト をよく表している。 Play 2.0と一緒に配布されている、プログ ラム・サンプルから、routesファイルを抜き 出してみた。参考までサンプルの実行のス クリーン・ショットを添付した。
  • 92. conf/routes# Routes# This file defines all application routes (Higher priority routesfirst)# ~~~~# Home pageGET / controllers.Application.index# Hello actionGET /hello  controllers.Application.sayHello# Map static resources from the /public folder to the /assets URLpathGET /assets/*file controllers.Assets.at(path="/public", file)
  • 93. # Routes# This file defines all application routes (Higher priority routes first)# ~~~~# Default path will just redirect to the computer listGET /     controllers.Application.index# Computers list (look at the default values for pagination parameters)GET /computers controllers.Application.list(p:Int ?= 0, s:Int ?=2, f ?= "")# Add computerGET /computers/new controllers.Application.createPOST /computers controllers.Application.save# Edit existing computerGET /computers/:id controllers.Application.edit(id:Long)POST /computers/:id controllers.Application.update(id:Long)# Delete a computerPOST /computers/:id/delete controllers.Application.delete(id:Long)# Map static resources from the /public folder to the /assets URL pathGET /assets/*file controllers.Assets.at(path="/public", file)
  • 94. # Routes# This file defines all application routes (Higher priority routes first)# ~~~~# The home pageGET /   controllers.Projects.index# AuthenticationGET /login controllers.Application.loginPOST /login controllers.Application.authenticateGET /logout controllers.Application.logout# ProjectsPOST /projects controllers.Projects.addPOST /projects/groups controllers.Projects.addGroup()DELETE /projects/groups controllers.Projects.deleteGroup(group: String)PUT /projects/groups controllers.Projects.renameGroup(group: String)DELETE /projects/:project controllers.Projects.delete(project: Long)PUT /projects/:project controllers.Projects.rename(project: Long)
  • 95. POST /projects/:project/team controllers.Projects.addUser(project: Long)DELETE /projects/:project/team controllers.Projects.removeUser(project: Long)# TasksGET /projects/:project/tasks controllers.Tasks.index(project: Long)POST /projects/:project/tasks controllers.Tasks.add(project: Long, folder: String)PUT /tasks/:task controllers.Tasks.update(task: Long)DELETE /tasks/:task controllers.Tasks.delete(task: Long)POST /tasks/folder controllers.Tasks.addFolderDELETE /projects/:project/tasks/folder controllers.Tasks.deleteFolder(project: Long, folder: String)PUT /project/:project/tasks/folder controllers.Tasks.renameFolder(project: Long, folder: String)# Javascript routingGET /assets/javascripts/routes controllers.Application.javascriptRoutes# Map static resources from the /public folder to the /public pathGET /assets/*file controllers.Assets.at(path="/public", file)