Play FrameworkのForm APIを完全解説!初心者でもわかるフォーム処理の流れ
生徒
「Play Frameworkで画面に入力フォームを作ったんですが、入力された値をどうやって受け取ればいいのかわかりません…」
先生
「Play FrameworkではForm APIを使うことで、フォームの入力値を安全に受け取り、チェックまで行えます。」
生徒
「フォーム処理って難しそうなイメージがあります。」
先生
「順番を理解すれば大丈夫です。画面、コントローラ、Form APIの流れを一つずつ見ていきましょう。」
1. Play Frameworkにおけるフォーム処理とは
Play Frameworkのフォーム処理とは、画面で入力された文字や数値をサーバ側で受け取り、必要に応じて確認し、次の画面へ渡す一連の流れを指します。Webアプリケーションでは、ログイン画面や登録画面など、フォーム入力は必ず登場します。
Play Frameworkでは、このフォーム処理を簡単かつ安全に行うためにForm APIという仕組みが用意されています。Form APIを使うことで、入力値の受け取り、チェック、エラー表示までをまとめて扱えるようになります。
2. Form APIの全体的な流れを理解しよう
Form APIを使ったフォーム処理の流れは、大きく分けて「入力画面の表示」「入力内容の送信」「コントローラでの受け取り」「チェック結果の判定」という順番になります。
人に例えると、紙の申込書を配布し、記入してもらい、受付で内容を確認し、不備があれば書き直してもらう流れと同じです。Play FrameworkのForm APIは、この受付係の役割を自動で手伝ってくれます。
3. 入力データを表すフォーム用クラス
まず、フォームで扱うデータをまとめた専用のクラスを作ります。このクラスは「どんな項目を入力するのか」を表す設計図です。
例えば、名前と年齢を入力するフォームであれば、それぞれをフィールドとして用意します。ここでは難しい処理は行わず、データを入れる箱として考えてください。
package forms;
public class UserForm {
public String name;
public Integer age;
}
このクラスがあることで、Play Frameworkは「このフォームには名前と年齢がある」と理解できるようになります。
4. 入力フォーム画面の作成
次に、利用者が実際に入力する画面を作成します。Play FrameworkではTwirlテンプレートを使ってHTMLを生成します。
フォームの見た目は普通のHTMLとほぼ同じです。重要なのは、入力項目の名前がフォーム用クラスのフィールドと対応している点です。
<form action="/submit" method="post">
<label>名前</label>
<input type="text" name="name">
<label>年齢</label>
<input type="number" name="age">
<button type="submit">送信</button>
</form>
この画面で入力された値が、次のステップでコントローラに送られます。
5. コントローラでForm APIを使う
フォームが送信されると、コントローラが呼び出されます。ここでForm APIを使って入力内容を受け取ります。
Form APIは、送られてきた値を自動的にフォーム用クラスへ詰め込んでくれます。これにより、一つずつ値を取り出す必要がなくなります。
import play.data.Form;
import play.data.FormFactory;
import javax.inject.Inject;
import play.mvc.*;
public class UserController extends Controller {
private final FormFactory formFactory;
@Inject
public UserController(FormFactory formFactory) {
this.formFactory = formFactory;
}
public Result submit(Http.Request request) {
Form<UserForm> form = formFactory.form(UserForm.class).bindFromRequest(request);
UserForm data = form.get();
return ok("名前:" + data.name + " 年齢:" + data.age);
}
}
このコードでは、フォームの入力内容をまとめて受け取り、そのまま利用しています。
6. 入力内容のチェックとエラー判定
実際のWebアプリケーションでは、空欄や不正な値が入力されることがあります。Form APIでは、そのような場合を簡単に判定できます。
入力に問題がある場合は、エラーとして扱い、再度フォーム画面を表示する流れになります。これにより、安全で使いやすいフォーム処理が実現できます。
public Result submit(Http.Request request) {
Form<UserForm> form = formFactory.form(UserForm.class).bindFromRequest(request);
if (form.hasErrors()) {
return badRequest("入力内容に誤りがあります");
}
UserForm data = form.get();
return ok("登録完了:" + data.name);
}
このように、エラーがあるかどうかを確認するだけで、処理の分岐が可能です。
7. Form APIを使うメリット
Play FrameworkのForm APIを使う最大のメリットは、「安全性」と「分かりやすさ」です。入力値を一括で管理できるため、コードが整理され、読みやすくなります。
また、フォーム処理の流れが決まっているため、初心者でも「画面 → コントローラ → 判定」という考え方を身につけやすくなります。Play Frameworkのフォーム処理とバリデーションを学ぶ上で、Form APIは欠かせない存在です。