PlayFrameworkでBootstrapを使うときに便利なplay-bootstrap

目次

play-bootstrapとは

playframeworkでテンプレートヘルパーのようにBootstrapをレンダリングできるライブラリ
公式ドキュメントが充実している
http://adrianhurt.github.io/play-bootstrap/

事前準備

build.sbt

  • libraryDependenciesに以下を追加

PlayとBootstrapのバージョンによって使うものが違う
ここではPlay2.5とBootstrap4用のplay-bootstrapを追加している

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
  "com.adrianhurt" %% "play-bootstrap" % "1.0-P25-B4-SNAPSHOT"
)
  • resolverを追加

libraryDependenciesの下にでも以下を追記

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/"

好きな手段でBootstrapを読み込む

CDN、Webjar、Bower、直接、etc
今回は公式を参考にしてヘッダーにCDNを記述した
http://v4-alpha.getbootstrap.com/getting-started/introduction/

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous">

使い方

  • Viewに使いたいフィールドコンストラクタをインポート

・Vertical forms
・Horizontal forms
・Inline forms
・Clear field constructor
の4つがある
とりあえずVertical formを指定してみる

@import b4.vertical.fieldConstructor

  • フォーム部分

公式のサンプルをコピペしてちょっと変更
playのヘルパーにはsubmitやresetがないが、
play-bootstrapにはこれが用意されているのが素晴らしい

@b4.form(routes.HomeController.login) {
  @b4.email( form("email"), '_label -> "Email", 'placeholder -> "example@mail.com" )
  @b4.password( form("password"), '_label -> "Password", 'placeholder -> "Password" )
  @b4.checkbox( form("remember"), '_text -> "Remember me", 'value -> true )
  @b4.submit('class -> "btn btn-primary"){ Sign in }
}
  • 表示

playbootstrap.png

余談

PlayでBootstrapを使いたいときはよくあるが、
ディフォルトのテンプレートヘルパーでレンダリングされるHTMLはBootstrapに則してくれない
先人たちの対処を見てみると、Bootstrapに則すように独自のヘルパーを作って、
それをimplicitFieldConstructorして……とやってごり押し気味に解決している
何とかならないのかと思って良さそうなのを探したら、あった