JJUG CCC 2017 Fall に参加してきた(いまさらまとめ)
さて、JJUG CCC 2017 Fallに参加してきました。
はい、2017/11/18に開催されたもので、すでに参加から1ヶ月以上が経っています。しかし、年内にやり残していたこととして記憶していたので軽くまとめたいと思います。
今回はKotlinの話を聞きたいと思ったのがキッカケで、Springなどの話も面白そうだと思ったので参加を決めました。懇親会も参加する予定だったのですが、体調を崩してしまって参加できなかったのは少し残念です。
ところでCCC
って何の略かと思ったら「Cross Community Conference」の略みたいですね。なんだかカッコいいです。
10年前のレガシーシステムをサーバサイドKotlinでフルリニューアルした話
- 自己紹介
- ベルセルク好き
- API部分をやった
- Kotlin x SpringBoot x (Vue.js)
- エンジニア3人で
- どうやって経営層を通したか?
- 最優先のIssueを見極めた
- 可能な限り数値化
- 複数案(メリット・デメリット)
- 自分でも客観的に見られるようになる
- プロトタイプで不確実性をコントロール
- 自分でも自身がつく
- 説得力につながる
- 技術選定
- なぜKotlin?
- 技術スタック
- Spring
- DOMA2
- swagger-codegen
- SpringFox
- 定義ファイルを生成してくれる
- SpringFox
- どこでもKotlin
- 勉強会的な
- 他社事例
- Retty
- CA
上層部に提案する際の進め方として「複数案を用意する」「実際に動くプロトタイプを作る」というのはやはり重要だと思いました。
JavaとKotlinの共存という面では、変化の少ないDBアクセス層部分はJavaで書くという選択は素晴らしいと思いました。あと、kotlin-springプラグインを利用することで、デフォルトでopen
にしてくれるという話を聞き、Kotlinにはそんな機能もあるのだと思いました。
swagger-codegenは使ったことが無いのですが、いろいろな勉強会でよく聞きますし、個人開発で使ってみたいと思いました。(こういうのって最初に始めるところが壁があるのですよね・・・便利だとは分かっていても)
ちなみにベルセルクは読んだことがないのですが、ちょっと興味がわきました。
Pivotal認定講師が徹底解説! Spring Bootの本当の理解ポイント
www.slideshare.net
- SpringBoot
- まずはSpringを理解せよ
- Spring
- CoCではない
- 設定ファイルはJavaコードで記述する
- 開発を始めるのが面倒
- Spring Bootは設定の塊
- 設定=Bean定義
- DIコンテナ
- Spring MVC
- CoCではない
- Spring Boot
- Beanの種類
- FWが利用するもの
- アプリケーションロジック(自分たちで書くもの)
- Spring Bootがやっていること
- FWが利用するBeanを事前に定義しておくだけ
- JavaConfigのかたまり
- AutoConfigurationクラスが大量にある
- アプリケーションロジックのBeanには何もない
- Springの知識が必須
- Springをかんたんに使えるようにしたのがSpringBoot
- application.properties
- FWのBeanの各設定値
- @ConfigurationProperties
- application.propertiesの設定値をBeanに反映するもの
- 起動するプロセス
- @SpringBootApplication
- いくつかのアノテーションの集まり
- @SpringBootApplication
- 定義するBeanの選別
- spring-boot-autoconfigure.jar
- すべてのBeanが定義されている
- 無駄なBeanをコンテナに登録しないようにする仕組みがある
- @ConditionalOnXxx
- 条件に合致した場合にそのBeanが定義される
- @ConditionalOnXxx
- spring-boot-autoconfigure.jar
- Beanの種類
- カスタマイズ方法(トラブル回避)
- @ConditionalOnXxx による芋づる式のトラブル
- @EnableXxxをあまり使わないほうが良い
- Spring Cloudとかでは使う必要もある
- 安全な方法
- application.properties
- BeanをDIで取得して設定変更(コンストラクタInjection)
- 補助的なBeanを定義する
- ThymeleafなどのBeanに拡張の仕組みが用意されている
- Dialectという形で用意
- Springの本
- Beanの丸写しはしないように(SpringBootの場合)
私は以前Seasar2を用いた開発を行ったことがあり、SpringもDIコンテナなんだなくらいにしか知らなかったのですが、この発表を聞いてSpringBootとSpringの関係がようやく理解できたような気がします。
SpringがCoCでなく設定を大量に記述する必要があること、そしてその負担を軽減するための設定ファイルの塊を生成してくれるのがSpringBootであるという理解で落ち着きました。
普段はSpringを使う機会がないのですが、今度Kotlinで触ってみようかと思っているので、その際にこの資料を見ながらSpringの基礎を固めたいなと思いました。
Spring Security にできること・できないこと
- どこが守られるのか、どこが守られないのか
- 使った実装 vs 使ってない実装
- Servletのフィルターを利用した実装
- SQLインジェクションとかは全く意味がない(管轄外)
- セッション管理の不備(セッションID)
- 推測
- 連番とか
- 推測できないランダム値を生成する
- Servletの話になるので管轄外
- 盗用
- セッションIDの固定化
- ログイン前後でセッションIDが変更されていない場合に起こる
- セッションIDを対象者にセットしておくことで、そのセッションIDでログインできる
- 対策:ログインしたらセッションIDを変える
- Spring SecurityはFormログインしていれば、自動的にやってくれる
- 推測
- XSS
- JavaScriptを入力・実行できちゃう問題
- 対策:エスケープする
- Spring Securityはサポートなし
- レンダリング部分の話なので
- CSRF
- HTTP ヘッダーインジェクション
- Clickジャッキング
- 見えないiframeを表示する
- 対策:
- X-Frame-Options
- 主要なブラウザはサポートしている
- Spring Security もサポート
- 権限
- ルーティングごとの適切なアクセス制御を設定する
Webセキュリティの復習になったような気がします。
そしてSpring Securityというものも初めて聞いて、Springは随分と巨大なFW群になったのだと感じました。ServletのFilter機能を利用している、なのでHTTPリクエスト前後で出来ることしか行えない、ということが重要であると思いました。
発表はデモを多く使用されていたので、普段イメージしにくい攻撃が理解しやすくてとても良かったです。
オレオレJVM言語を作ってみる(四則演算するだけだけど)
www.slideshare.net
ハッキリ言ってとても難しかったです・・・。
なんとなくぼんやりと全体のイメージが出来たような気がしますが、それも怪しいです。
新しいプログラミング言語の学び方 ~ HTTPサーバーを作って学ぶJava, Scala, Clojure ~
- 新しい言語を学ぶときはHTTPサーバを作ると良いよ、という話
- なぜ?
- よくあるやり方
- HelloWorld、書籍、TODOアプリ
- WebでTODOアプリ
- DBが必要になり
- MySQLWorkBench
- 画面表示は?
- HTTPサーバなら必要ない
- よくあるやり方
- HTTPサーバのやってること
- リクエストの待受
- パース
- 結果を返す
- Scala
- Clojure
- LISP
- 文法が少ない
- データとしてのコード
- 参考:http://boxofpapers.hatenablog.com/entry/simple_made_easy
- 並列性を考慮
- コンセプト
- 状態の扱い:Identity, State, Value
- シンプルさ
lein run
(らいにんげん?)
- LISP
- 作り始めるコツ
- 難しく考えなくても良いかも
- n年後にもう一度作り直すと成長を実感できる
- HTTP
- Socket=(IP+ポート)
- 流れ
- ServerSocketの初期化
- while
- accept
- input/output stream を取得
- inputからread、outputにwrite
- 正規表現
- リソースの開放
- 並行処理
- Java
- WorkerThread
- Socker, Input/OutputStream
- WorkerThread
- Scala
- Future
- 非同期に実行される
- ExecutionContext次第で実行方法は変わる
implicit
- スコープ内に宣言されていれば勝手に取ってくる
- Scalaでよく使われるテクニック
- 参考:http://gakuzzzz.github.io/slides/implicit_reintroduction/#1
- what/howの分離
- howが大きくなると意図が埋もれてしまうため
- Future
- Clojure
- go / thread / send / ...
- Java
- 文字列連結
- まとめ
- すでに知っているものとdiffを取ってみる
話の流れがスムーズで分かりやすく、聞いていて面白いセッションでした。
私も新しい言語を学ぶ時に、最近だとConsListは書くようにしているのですが、どうも物足りなく感じていたのでHTTPサーバを作ってみようかなとこのセッションを聞いて思いました。
Clojureは以前Lisp系の言語を学ぼうと思って2日間くらい勉強したのですが、それきりだったので今度また勉強してみようと思いました。
作り始める際に最初からがんばりすぎない(その言語の機能をフルに活用しようとしない)というのは、モチベーションというかやり方として大切だなと思いました。
感想
JJUGは初参加だったのですが、かなりの人数が参加されていてとても驚きました。
それゆえ、満員で参加できないセッションもあったのが残念ですが、まぁそれは仕方がないでしょう。
有益な発表がいろいろ聞けて、発表者および運営者の方には大変感謝です。