Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Modern Web Development with ninjaframework
Search
Takafumi Yoshida
November 15, 2014
Technology
3.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Modern Web Development with ninjaframework
Takafumi Yoshida
November 15, 2014
More Decks by Takafumi Yoshida
See All by Takafumi Yoshida
ECSとSQSでスケーラブルなバッチを作った
zephiransas
2
1.4k
DynamoDB Step Zero to One
zephiransas
0
760
ECSとALBで始めるblue/greenデプロイメント
zephiransas
2
350
DynamoDB関連のアップデート紹介 #reinvent2018
zephiransas
0
880
CloudGarageでGitBucketサーバをたててみた
zephiransas
0
540
プログラマが知っておくといいかもしれないCSSのハナシ
zephiransas
1
1.1k
ラクして学ぶ英語(LT版)
zephiransas
0
220
あなたとCrystal、いますぐダウンロード
zephiransas
1
1.8k
使ってみようLombok
zephiransas
0
290
Other Decks in Technology
See All in Technology
C#未経験の僕がAIに読めるコードを書かせるまで
maguroalternative
0
290
The Knowledge Spine: A Machine-Executable Ontology for Governed Marketing Activation
vananth22
0
130
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
540
Why Agent Cost Needs Observability
nttcom
0
150
PQC移行の今 -- IETF からみた現在地
satokan
3
230
Lambda MicroVMsは常駐サーバーの代わりに なるか? Kiro Crew を動かして検証してみた / Kiro Crew on Lambda MicroVMs
k_adachi_01
2
210
AIエージェントの一手は 誰も見ていない - Falco拡張OSS「Prempti」とeBPFで サーバーレス実行基盤を二層防御する
keitah
1
570
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.8k
GitHub Agentic Workflows を触ってみる
htkym
2
480
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
0
450
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.4k
SREへの勘違いに気づいた後の話
tomodakengo
0
150
Featured
See All Featured
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
430
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
We Have a Design System, Now What?
morganepeng
55
8.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Bash Introduction
62gerente
615
220k
Transcript
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
#jjug_ccc or #ccc_r56
岡山Javaユーザ会 について • 岡山で勉強会やハンズオンやってます • 基本、ゆるふわ • Javaに限らずフリーに喋れます • 講師(常に)探してます
第1回 勉強会
None
Java8ハンズオン@後楽園
None
• 吉田貴文(@zephiransas) • 岡山でRailsを使ったパッケージソフト開発に従事 • 元々はSIerでJavaやってました • 岡山Javaユーザ会を主催 • 岡山でJava(や諸々)の勉強会を主催or参加
• 勉強会カメラマン(Nikon D600)
よろしく お願いします
Modern Web Development with ninjaframework 岡山Javaユーザ会/吉田貴文(@zephiransas)
ninjaframeworkの特徴 • 100% Pure Java • Play1を諦めた、Seasar2難民、etc… • Railsライクなフルスタックフレームワーク •
既存の良いライブラリを組み合わせる • Servlet,JPA,Flyway,FreeMarker,Guice,Bean Validator…
アジェンダ • 単純なCRUDアプリ • DBを使うプロジェクトをScaffold • マイグレーションでテーブルを作成 • 一覧画面の作成 •
新規登録画面の作成 • 画面表示とデータ保存
Scaffold • mavenからscaffoldする • 実行するには • あとはお好みの方法でIDEに取り込み • mvn idea:idea、mvn
eclipse:eclipse
Scaffoldで作成される フォルダ(1) • ・assets • cssやjavascript,imageなど • ・conf • Routes,メッセージリソースなど
• ・controller • コントローラ
Scaffoldで作成される フォルダ(2) • ・dao • データアクセス層。通常はEntityManagerをInject してDBとのデータ入出力を行う • ・db.migration •
Flywayでマイグレーションする際のSQLを置く
Scaffoldで作成される フォルダ(3) • ・models • JPAのEntityを置く • ・views • FreeMarkerで書かれたテンプレートを置く
Migration • Flywayを使用 • db.migrationフォルダにSQLファイルを作成 • V3__.sql,V4__.sql・・・と言った連番を付与 • mvn ninja:runで実行時、未実施のマイグレーショ
ンがあれば、自動で実行
V3__.sql
モデルの作成 • modelsパッケージに作成 • JPAのEntityとして作成
一覧画面 • Routesの設定 • Controllerの作成 • Daoの作成 • Viewの作成
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book にGETでアクセス時、 BookControllerのindexメソッドを実行
Controllerの作成(1) • controllersパッケージに作成 • 表示するビューはコントローラ名とメソッドから決定される • 明示的に指定することも可能 メソッド実行後、ビューとして views/BookController/index.ftl.htmlを返す
Daoの作成 • JPAを使用 • 全件を取得するfindAllメソッドを実装する EntityManagerをInjectする
Controllerの作成(2) BookDaoをInjectする 一覧データをRequestスコープにセット
Viewの作成 • views/BookController/index.ftl.htmlを作成 • テンプレートエンジンはFreeMarker Controllerでセットしたbooksの各要素 を、”book”として取得 各Entityの値を埋め込み
一覧画面
新規画面 Part.1 • 登録フォームを表示するまで • Dtoの作成 • Routesの設定 • Controllerの修正
• Viewの作成
Dtoの作成(1) • 画面の入力内容を保持するクラス • modelsパッケージに作成 • 実際にはdto(form?)パッケージとかのほうがいいかも? • 必要に応じて、Validation用のAnnotationを付与 •
Hibernate Validatorを使用 • JSR303(Bean Validation)のAnnotationが使えます
Dtoの作成(2) 必須入力チェックのAnnotationを付与
Routesの設定 GETで/book/newにアクセスした場合 POSTで/book/newにアクセスした場合
Controllerの修正(2) 初期化したDtoをセットして画面を表示する 表示するテンプレートを明示的に指定
Viewの作成 submit先は/book/newにPOSTメソッドで dtoの値を設定 form.ftl.html
新規画面
新規画面 Part.2 • 登録フォームの内容をValidation • エラーがあれば、フォームに表示 • Routesの設定 • Daoの修正
• Controllerの修正 • Viewの作成
Routesの設定 • conf/RoutesにURLを定義 http://localhost:8080/book/new にPOSTでアクセス 時、BookControllerのcreateメソッドを実行
Daoにメソッドを追加 • Bookを1件追加するaddメソッドを追加 @Transactionalアノテーションで、メソッド内に トランザクションを適用する 引数のEntityをinsert
Controllerの作成(1) Validationを有効にする エラーメッセージをRequestスコープにセット エラーがあればtrueを返す
Controllerの作成(2) Dtoの値をBook Entityに詰め替え Daoを使ってInsert 一覧へRedirect
Viewの作成 • エラーメッセージを表示する Validation内容に応じたメッセージ
新規画面 Validationのエラーが表示される
まとめ • Scaffold • マイグレーション(Flyway) • Controllerの作り方、Viewの呼び方(ninja,Guice) • Daoの作り方(JPA, Guice)
• DTOを使ったValidation(Hibernate Validation) • Viewの書き方(FreeMarker)
• 今日解説したコードは以下の • GitHubリポジトリにアップしています • https://github.com/zephiransas/ninja-ccc • http://goo.gl/qpAhqh
ありがとう ございました