Successfully reported this slideshow.
Your SlideShare is downloading. ×

Javaで1から10まで書いた話(sanitized)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Hello Java
Hello Java
Loading in …3
×

Check these out next

1 of 164 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (20)

Advertisement

Similar to Javaで1から10まで書いた話(sanitized) (20)

Advertisement

Recently uploaded (20)

Javaで1から10まで書いた話(sanitized)

  1. 1. Javaで1から10まで書 いた話 tokuhirom 2014 JJUG FALL
  2. 2. または、Java でウェブ 屋が開発した話 tokuhirom 2014 JJUG FALL
  3. 3. 本セッションの内容は 個人の見解であり、所 属する団体とは無関係 です。
  4. 4. 自社サービスの ウェブエンジニア
  5. 5. Perl を中心に Ruby,Python,PHP,C,C++ など
  6. 6. _人人人人人人人_ > 突然のJava < ‾Y^Y^Y^Y^Y^Y‾
  7. 7. なぜ?
  8. 8. 書けるエ ンジニア が多い
  9. 9. 言語仕様が 安定している
  10. 10. 速い
  11. 11. 以下略。
  12. 12. で、どういう構 成でやるの?
  13. 13. 前提条件
  14. 14. 自社サービスの 開発運用
  15. 15. LL 書いていた人でも 書きやすい構成
  16. 16. なにはダメか?
  17. 17. 再起動にめっちゃ時間 かかる。
  18. 18. 環境構築が 著しく大変である。
  19. 19. 覚えることが多い
  20. 20. どうするか。
  21. 21. どういう環境で開発す るか?
  22. 22. Java のバージョン
  23. 23. Java 8
  24. 24. lambda Stream API interface default methods
  25. 25. LL しかやってない人 にもとっつきやすい。
  26. 26. しがらみがないなら一番 あたらしいやつ使いたい
  27. 27. Java8 + lombok
  28. 28. Java8 + lombok なら LL と 遜色ない
  29. 29. もはやJavaダサ いと思ってる方 がダサい
  30. 30. フレームワーク
  31. 31. ライブラリ選定基準
  32. 32. Web Application システム構成 Java Web Application Framework O/R Mapper Router Template Engine MySQL HTTP Client HTTP Server Apache2 JSON Serialiser
  33. 33. 軽量
  34. 34. 高速
  35. 35. 簡単
  36. 36. メンテナンスが停止し た場合に最悪自分たち でメンテナンスできる こと
  37. 37. または、メンテナンス 停止したら誰かが fork する
  38. 38. で、
  39. 39. Java EE 標準?
  40. 40. エンタープライズ開発の場合には非常にマッ チすると思うのですが、我々のニーズにマッ チしていなかったというだけであり、 JavaEEに問題があるわけではありません。
  41. 41. 問題が起きた 時に対処でき ない
  42. 42. Java EE 7 対応の 日本語本がない
  43. 43. エンタープライズ開発の場合には非常にマッ チすると思うのですが、我々のニーズにマッ チしていなかったというだけであり、 JavaEEに問題があるわけではありません。
  44. 44. Dropwizard
  45. 45. fat-jar + JAX-RS + embed-jetty
  46. 46. これなら僕 たちにも使 えそうだ!
  47. 47. Dropwizard Jersey(JAX-RS) Hibernate Embedded Jetty Freemarker
  48. 48. これらを結ぶ Glue が Dropwizard
  49. 49. Dropwizard は 悪くない
  50. 50. ちょっとしたつなぎを やってくれる。
  51. 51. 悪くないが、 この Glue いる?
  52. 52. Guava の Optional を Jersey で受け取れる Hack
  53. 53. Java 8 だと不要
  54. 54. 余計なことをする。。
  55. 55. カスタマイズしようと すると意外と面倒
  56. 56. Dropwizard の Glue にあたる部分は 自分たちで実装するこ とにした
  57. 57. コードジェネレーター で実装すればいいよね~
  58. 58. Oreore-Generator Jersey(JAX-RS) Hibernate Embedded Jetty Freemarker
  59. 59. テンプレートエンジン
  60. 60. 要件
  61. 61. 高速
  62. 62. 型ベースの 自動エスケープ
  63. 63. XSS 対策
  64. 64. [% var %] String なら自動エスケープ
  65. 65. エスケープしたくなければ new EscapedString(str)
  66. 66. 要件を満たすものが ほとんどない。
  67. 67. 作るか!
  68. 68. 2種類作った。
  69. 69. nanotmpl
  70. 70. 埋め込みJava
  71. 71. JSP + 自動エスケープ + 単一行制約
  72. 72. @ String name こんにちは!<?= name ?> さ ん!
  73. 73. Java コードに変換 コンパイル 実行
  74. 74. Java で VM を実装 VM 用コードに テンプレートを変換
  75. 75. [% FOR x IN items %] X: [% x %] [% END %]
  76. 76. Perl で使っていた Xslate というテンプ レートエンジンと同じ 記法を採用
  77. 77. ボツ。
  78. 78. なぜ?
  79. 79. テンプレート エンジンの開 発は面倒
  80. 80. 開発コストが 見合わない
  81. 81. ベンチマークした結果、 Java のテンプレート エンジン、だいたい速 い。
  82. 82. 自動エスケープは昔ほ ど重要ではない。
  83. 83. CSP (content security policy)
  84. 84. JS でHTML構 築するケースが 増えた
  85. 85. じゃあ、mustache 使う か。。
  86. 86. 不評!
  87. 87. JS のテンプ レートとかぶり がち。。
  88. 88. •FreeMarker ← 君に決めた! • Mustache • etc.
  89. 89. Oreore-Generator Jersey(JAX-RS) Hibernate Embedded Jetty Freemarker
  90. 90. O/R Mapper
  91. 91. Hibernate?
  92. 92. L1 キャッシュ切りた いのに切れなくて挫折
  93. 93. もうJDBC直接で……
  94. 94. それはさすがにつらい。
  95. 95. シンプルな O/R Mapper を書いた。
  96. 96. JOIN とかは サポートしない。
  97. 97. クエリビルダで JOIN生成すると 問題解決が困難になる
  98. 98. 複雑なSQLを生成できな いように制約を加える
  99. 99. 人は制約があっ た方が書きやす く感じる。
  100. 100. あたたかみのある 手書き SQL
  101. 101. @Table("member") @Data // lombok @EqualsAndHashCode(callSuper = false) public MemberRow extends Row<MemberRow> { @PrimaryKey private long id; @Column private String name; }
  102. 102. Optional<MemberRow> member = db.single(MemberRow.class) .where("id=?", 1) .execute();
  103. 103. db.insert(MemberRow.class) .value("name", "John") .execute();
  104. 104. Optional を利用 したわかりやすい インターフェース
  105. 105. Oreore-Generator Jersey(JAX-RS) TinyORM Embedded Jetty Freemarker
  106. 106. そんなある日
  107. 107. Jersey で開発を 続けていると、、
  108. 108. つのる不満
  109. 109. アノテーショ ンが冗長
  110. 110. アノテーションベースな POJO にこだわりすぎている?
  111. 111. アノテーション で挙動を制御し ているために動 作を追いづらい
  112. 112. テンプレートや JSONのレンダリン グがコントローラ の外で行われる
  113. 113. Java に慣れて ない人には ちょっとつらい
  114. 114. シンプルな MVC フレーム ワークを作成
  115. 115. avans
  116. 116. サーブレットAPIの薄 いラッパー
  117. 117. もともと使われていた Sledge/Amon2 とい う Perl のフレームワー クを参考に開発
  118. 118. 移行しやす くなった。
  119. 119. コントローラ は継承ベース
  120. 120. public class HelloWorld extends ControllerBase { @GET("/") public WebResponse hello() { return this.renderJSON("Hello, world!"); } }
  121. 121. コントローラ 起点でデバッガ で追いやすい
  122. 122. アノテー ションに よる拡張
  123. 123. 結局アノ テーショ ンかよ。。
  124. 124. @BeforeDispatchTrigger public void preprocess() { // … }
  125. 125. Java 8 interface default method によるMix-in
  126. 126. Jackson ControllerBase Session Freemarker
  127. 127. Oreore-Generator avans TinyORM Embedded Jetty Freemarker
  128. 128. 運用上の都合により、、
  129. 129. Oreore-Generator avans TinyORM Tomcat 7 Freemarker
  130. 130. Oreore-Generator avans TinyORM Tomcat 7 Freemarker
  131. 131. 時間があれば、 テストの話
  132. 132. モデルのテスト
  133. 133. DB は MySQL 実際に開発サーバーにつなぐ
  134. 134. ストレージとの やりとりがサー バーサイドの肝。
  135. 135. MySQL をデータセン ターの dev サーバーに おいてやる。
  136. 136. コントローラのテスト
  137. 137. JSON API の台頭
  138. 138. テストし やすい。
  139. 139. コストは 安い。
  140. 140. ブラウザで確認とかし たくないでござる。
  141. 141. モッキング は どうするか?
  142. 142. Java レベルで の モッキングは やらない
  143. 143. サービスはHTTP JSON API でつなぐ
  144. 144. (Jetty|Tomcat) でモッ ク httpd を立ち上げて そこにアクセスする。
  145. 145. @BeforeClass で tomcat-embed を起動
  146. 146. Tomcat tomcat = new Tomcat(); tomcat.setPort(0); org.apache.catalina.Context webContext = tomcat.addWebapp("/", new File("src/main/ webapp").getAbsolutePath()); webContext.getServletContext().setAttribute(Glob als.ALT_DD_ATTR, "src/main/webapp/WEB-INF/ web.xml"); tomcat.start(); int port = tomcat.getConnector().getLocalPort(); String url = "http://127.0.0.1:" + port; // url をつかってなにか処理する
  147. 147. Apache HttpClient でアクセス
  148. 148. テスト環境は 意外と簡単。
  149. 149. 以上です。 ご清聴ありがとうございまし た。(2回目)
  150. 150. まとめ
  151. 151. Java 8 時代は ライブラリを 書くチャンス
  152. 152. lambda 対応
  153. 153. Java 8 Date and Time API
  154. 154. Optional 対応 は既存のものの 拡張では難しい
  155. 155. 既存のライブラリは Java 7 対応を切れな いために Java 8 を 完全に生かし切れな いケースも
  156. 156. Maven Central に ライブラリをアッ プロードするチャ ンスですよ!
  157. 157. 以上です。 ご清聴ありがとうございまし た。
  158. 158. Maven central に アップロードするのは 難しいのでは?
  159. 159. Maven central 怖くないよ
  160. 160. JIRAにサインアップ
  161. 161. JIRA でチケットを 発行する
  162. 162. mvn release:prepare release:perform
  163. 163. 以上です。 ご清聴ありがとうございまし た。(3回目)

×