§Hello World の実装
Play の扱いがいかに簡単かを示すため、このチュートリアルアプリにカスタマイズされた"Hello World"
という挨拶を追加してみましょう。
主な手順は次のとおりです。
- Hello World ページを作成する
- アクションメソッドを追加する
- ルートを定義する
- 挨拶をカスタマイズする
§1. Hello World ページを作成する
以下の手順に従って、このプロジェクトに新しい Hello World ページを追加してください。
任意のテキストエディタで、hello.scala.html
という名前のファイルを作成し、このプロジェクトのapp/views
ディレクトリに保存します。次の内容をファイルに追加します。
@()
@main("Hello") {
<section id="top">
<div class="wrapper">
<h1>Hello World</h1>
</div>
</section>
}
この Twirl と HTML マークアップは、次のことを実現します。
@
記号は、テンプレートエンジンに対し、後続の内容を解釈するように指示します。- この場合、
@main("Hello")
はメインテンプレートmain.scala.html
を呼び出し、ページタイトル"Hello"
を渡します。 - コンテンツセクションには、
Hello World
の挨拶が含まれています。メインテンプレートは、これをページ本文に挿入します。
これで、新しいページをレンダリングするアクションメソッドを追加する準備ができました。
§2. アクションメソッドを追加する
新しいページのアクションメソッドを追加するには
app/controllers/HomeController.java
(または.scala
) ファイルを開きます。チュートリアルメソッドの下、閉じ中括弧の前に、次のメソッドを追加します。
- Java
-
public Result hello() { return ok(views.html.hello.render()); }
- Scala
-
def hello = Action { Ok(views.html.hello()) }
ブラウザがhello
ページを要求したときに Play が新しいアクションメソッドを呼び出すようにするには、ページをメソッドにマッピングするルートを追加する必要があります。
§3. ルートを定義する
新しい Hello ページのルートを定義するには
conf/routes
ファイルを開き、次の行を追加します。
GET /hello controllers.HomeController.hello
routes
ファイルにルートを追加すると、Play のルートコンパイラは、コントローラのインスタンスを使用してそのアクションを呼び出すルータークラスを自動的に生成します。詳細については、ルーティングドキュメントを参照してください。デフォルトでは、コントローラインスタンスは依存性注入を使用して作成されます(JavaとScalaのドキュメントを参照)。
これで、新しいページをテストする準備ができました。何らかの理由でアプリケーションを停止した場合は、sbt run
コマンドで再起動します。
URL http://localhost:9000/helloを入力して、作業結果を確認します。ブラウザには、次のようなものが表示されるはずです。
§4. 挨拶をカスタマイズする
このチュートリアルの最後として、hello ページを修正して HTTP リクエストパラメータを受け入れるようにします。Play がどのように役立つフィードバックを提供するかを示すために、意図的な間違いを含めて手順を説明します。
Hello World の挨拶をカスタマイズするには、次の手順に従ってください。
app/controllers/HomeController.java
(または.scala
) ファイルで、次のコードを使用して、hello
アクションメソッドが name パラメータを受け入れるように修正します。
- Java
-
public Result hello(String name) { return ok(views.html.hello.render()); }
- Scala
-
def hello(name: String) = Action { Ok(views.html.hello()) }
conf/routes
ファイルで、hello
の末尾に(name: String)
パラメータを追加します。
GET /hello controllers.HomeController.hello(name: String)
Twirl テンプレートでは、すべての変数とそれらの型を宣言する必要があります。app/views/hello.scala.html
ファイルで
- ファイルの先頭に新しい行を挿入します。
- その行に、name パラメータとその型を宣言する @ ディレクティブを追加します:
@(name: String)
- ページで変数を使用するには、
<h2>
見出しのテキストをHello World!
から<h2>Hello @name!</h2>
に変更します。
最終結果は次のようになります。
@(name: String)
@main("Hello") {
<section id="top">
<div class="wrapper">
<h1>Hello, @name</h1>
</div>
</section>
}
ブラウザで、次の URL を入力し、hello メソッドにクエリパラメータとして任意の名前を渡します: http://localhost:9000/hello?name=MyName。Play は、戻り値の render メソッドには型付きパラメータが必要であることを知らせる、役立つコンパイルエラーを返します。
コンパイルエラーを修正するには、HomeController
のhello
アクションメソッドを、ビューをレンダリングするときにname
パラメータが含まれるように修正します。
- Java
-
public Result hello(String name) { return ok(views.html.hello.render(name)); }
- Scala
-
def hello(name: String) = Action { Ok(views.html.hello(name)) }
ファイルを保存し、ブラウザを更新します。ページに、次のようなカスタマイズされた挨拶が表示されます。
§まとめ
チュートリアルをお試しいただきありがとうございます。アクションメソッド、ルート、Twirl テンプレート、および入力パラメータを使用して、カスタマイズされた Hello World の挨拶を作成する方法を学びました。テンプレートコンパイルによって問題の特定と修正が容易になること、および自動リロードによって時間を節約できることを体験しました。
これはほんの始まりの簡単な例です。それでは、コミュニティからの他の公式の例とチュートリアルを見てみましょう。
次へ: Play チュートリアル
このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、お気軽にプルリクエストを送信してください。質問やアドバイスがありますか?コミュニティフォーラムにアクセスして、コミュニティと会話を始めてください。