シスアーキ in はてな

シスアーキ(自称)の技術ブログ

社内勉強会でJHipsterの紹介とハンズオンをしてきたよ!

こんにちは!!お久しぶりですね!

先日、社内勉強会でJHipsterの紹介とハンズオンをしてきました!

自拠点での社内勉強会は過去に何度かしたことはあったのですが、今回は初の他拠点での勉強会でした。

内容はプレゼンが90分程度でハンズオンが半日の、計2日間です。

今回の目的はもちろん社内での技術共有や展開ですが、自分の中では他拠点との交流が主な目的だったように思います。

  • 他の拠点にどんな人がいて、どんな雰囲気なんだろう?
  • 誰か面白い人と知り合いになれるかな?

ということを期待して開催を引き受けました。

結果はどうだったかというと、十分な成果があったかな?と思います。
やっぱり、他拠点にも面白そうな人はいますね。

今回の残念だったのは、ハンズオンが思い通りに進まなくて、用意していたカリキュラムが半分も進まなくて断念。
うう、悔しいでござる〜

どこかでリベンジを果たしたいですね。

今回のプレゼンとハンズオン資料はこちらです。

■ Introduction of JHipster
speakerdeck.com

■ JHipster4 ハンズオン
github.com

Rakuten Technology Conference 2016 で英語LTしてきたよ! #rakuten_tech_osaka

your name? いや、俺だよ俺俺。

先日、Rakuten Technology Conference 2016 で英語LTしてきました!
初の英語LTで緊張しました。(*^^*)

当日は、mitz(@bufferings)さんに、

「LT始まる前の本人紹介したいんですけど、なんて紹介すればいいですか?」

と英語で聞かれたので、

「Beer Engineerでお願いします。」

と答えていたのですが、いざ、始まる時に

「関西一のアーキテクトの小酒さんです!」
と紹介されて、盛大な拍手と生ぬるい視線の中、人生初の英語LTさせられたの、最高にCoolだったと思う。
僕、そういうの、ずっと忘れないから(´;ω;`)

こちらがその時の資料です!

speakerdeck.com

せっかくなんで、jHipsterでなんか作ったものがあれば面白いかな?と思って、1日かけてWebSocket使った簡易チャットも作りました!

「発表の感想を書き込んでね!」

ってお願いしたから、感動的なコメントが寄せられているにちがいない!と早速コメントを確認しました!

f:id:kozake:20161024075607p:plain

誰も書き込んでない(´;ω;`)


f:id:kozake:20161024075705p:plain

書き込みがあった!!

f:id:kozake:20161024075729p:plain

f:id:kozake:20161024075754p:plain

おまえら、僕の1日を返しやがれ。。

f:id:kozake:20161024075823p:plain

Jimmyさんはわざわざ懇親会に時に、「あなたのプレゼン好きです!」と言いに来てくれました!
ありがとうございます!!
僕の英語力が災いして、うまくコミュニケーションとれなかったのは申し訳なかったな〜。こういう時、やっぱり英語が出来ればいいな〜と思いますね。

また、「ちょうどチャットサイト作ろうと思うから参考にさせて欲しいです!」といった声もかけていただいて、僕の発表が誰かの役に立ったのは嬉しいですよ。

あ、せっかくなんで作ったチャットサイトはもう少し公開しときます!

Please do comment on it!!

https://rakuten-hipster.herokuapp.com/#/chat

俺が、俺こそがERMasterだ!!

やあやあ、僕ですよ!

皆さん、ER図作成ツールって何を使っていますか?

僕は以前にERMasterを使っていて、すごい使いやすかった*1のですが、

  • テーブル数が多くなると途端に画面が重くなる
  • 一つのビューでしかER図を扱えない

という状況があって、それ以来は違うツールを使っていました*2

ER図作成ツールとして僕の知っている範囲では、

  • A5:SQL Mk-2
  • Astah(UML作成ツール。クラス図をER図がわりにしています)
  • MySQL Workbench
  • Object Browser ER

などですかね。
どれも一長一短でしっくりきません。

最近、とある大きなプロジェクトをスタートするにあたり、今回もA5かな〜とか思っていたのですが、JJUG CCC Spring 2016でU-NEXTがERMasterを使って大規模開発をしたという話を聞きました!

ここら辺の話はこちらに書いてます!

kozake.hatenablog.com

大規模だとテーブル数が多くなるから、ERMasterでは辛いのでは?と思ったのですが、ERMasterをフォークして、自分たちでERMaster-bというダイアログ毎にビューを表示できるツールを作っていたみたいです!すごい!!

早速僕もERMaster-bを使おうと試してみたのですが、フォークした時期が遅かったのか、正式版にはある欲しい機能がなかったり。。

また、正式版には僕の知らない間にカテゴリという新たな機能が出来ており、これを用いることで複数の視点でER図を表すことができるようになっていました。が、いかんせん、カテゴリ毎にテーブルなどのロケーション情報を保持できず、いまいちでした。。

俺が、俺こそがERMasterだ!!

そこで、思い切って僕もERMasterを改良することにしました!!(ひゃっほー!!)
気に入らなければ、自分で改修できるのがOSSの利点ですね。
カテゴリ毎にロケーション情報を保持出来るように改良しました!!

こちらでERMaster-kという名前をつけて開発を進めてます!
github.com

カテゴリ毎にテーブルなどのロケーションを違って保持出来るようにしています!

俺仕様ERMaster-k

ちょうど良い記事があったので、その記事のER図を改修版ERMasterで表現したイメージを貼ってみます。

syobochim.hatenablog.com

全体

f:id:kozake:20160919212215p:plain

リソース

f:id:kozake:20160919212239p:plain

イベント

f:id:kozake:20160919212257p:plain

このように、カテゴリ毎に違ったロケーション情報を保持できます!

また、github pageの機能を利用して、こちらで更新サイトを公開しています!

https://kozake.github.io/ermaster-k/org.insightech.er.update/site.xml

因みに、バージョン「1.0.0.v20160918-2330」は、ER図のファイルを開くたびに、
「何かが2倍になって」おかしな状況になるから、インストールしちゃダメだぞ!
(ゝω・)テヘペロ

今後

本当は本家がもう少し活発に動いてくれれば、パッチを送るなど出来るので嬉しいのですが。
本家はほとんど活動停止状態なので、今後は自分好みにこのツールを改良していこうと思います。

ちなみに、ERMasterの改修にあたっては、この書籍が大変参考になりました。
この本のGEFの説明を読めば、ERMasterのソースが読めるようになると思いますよ!

Eclipse 3.4 プラグイン開発 徹底攻略 Eclipse 3.4 Ganymede対応

Eclipse 3.4 プラグイン開発 徹底攻略 Eclipse 3.4 Ganymede対応


ではまたね!バイナリー!!(((ο(*゚▽゚*)ο)))

*1:巷では神ツールと言われていたツールです。

*2:最近だと、A5:SQL Mk-2などを使っていました。

Spring Securityのお話

ハーイ!僕です。

最近、Spring Securityと戦っています。今のプロジェクトでセキュリティまわりを僕が担当しているのでね。
Spring Frameworkを勉強しはじめて、最初につまづいたのがSpring Securityです。いやね、これね、ちょっと僕には難しすぎるんじゃない?

人類には早すぎたのだ!!*1

と、突然机の前で発狂しながら仕事してます。周りの人はびっくりさせてごめんなさい。
これ以上暴れてまわりの人から変人扱いされても困るので、自分なりにSpring Securityについて纏めてみようと思います。

SpringSecurityを理解する上では、

  • Filterのお話
  • Configのお話
  • Configurationのお話

がそれぞれあると思っているので、その順番で〜

Filterのお話

Spring Securityは主にサーブレットフィルターをもちいてWebアプリケーションのセキュリティ機能を実現しています。
早速UMLを書いてみましょう!

f:id:kozake:20160911203222p:plain

かっこいいですね!
なんだかSpring Securityをマスターした気分になります。
Filterはインタフェースなので、セキュリティ機能を実現するには具体的な実装が必要です。

FilterChainProxy

Spring Securityの主役は、「springSecurityFilterChain」という名前でBean定義されたサーブレットフィルターです。
そしてそのインスタンスはFilterChainProxyクラスのオブジェクトです。

f:id:kozake:20160912083230p:plain

Proxy(代理)という名前が付いているとおり、このクラス自身は具体的なセキュリティ機能を提供していません。

SecurityFilterChain

では、どのようにセキュリティ機能を提供しているのか?
SecurityFilterChainインタフェースに処理を委譲することで実現しています。

f:id:kozake:20160912082106p:plain

FilterChainProxyクラスは複数のSecurityFilterChainインタフェースを保持してます。
SecurityFilterChainはmatches()メソッドとgetFilters()メソッドを定義したインタフェースです。

FilterChainProxyがクライアントからリクエストを受けると、順番にSecurityFilterChainのmatches()メソッドを呼び出します。
matches()メソッドからtrueが返却されたSecurityFilterChainに対して、getFilters()メソッドを呼び出し、返却されたFilter群に処理を委譲することでセキュリティ機能を実現しています。

下に示すのが、そのコードの一部です。

private void doFilterInternal(
    ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
            :

    List<Filter> filters = getFilters(fwRequest);
            :

    VirtualFilterChain vfc = new VirtualFilterChain(
        fwRequest, chain, filters);
    vfc.doFilter(fwRequest, fwResponse);
}

private List<Filter> getFilters(HttpServletRequest request) {
    for (SecurityFilterChain chain : filterChains) {
        if (chain.matches(request)) {
            return chain.getFilters();
        }
    }

    return null;
}


この内容からわかるとおり、複数のSecurityFilterChainを用いることで、リクエスト毎に異なるセキュリティ機能を適用することが可能となります。
例えば「public/**」に一致するURLに送信されたリクエストにはSecurity機能は適用しないけど、「private/**」に一致するURLに送信されたリクエストにはセキュリティ機能を適用するなどです。

なるほど、かっこいいですね!

コードからわかるように、最初にmatchしたSecurityFilterChainに処理を委譲する為、順番が重要になります。ここら辺の話はWebSecurityConfigurerAdapterのところで出てきます。
なお、上のクラス図の「AnySecurityFilter」は実際の存在するクラスではなく、認証・認可など、各種セキュリティ機能を提供するFilter実装クラスの総称です。

HttpFirewall

少し話はそれますが、FilterChainProxyクラスはHttpFirewallを保持しています。このインタフェースの機能を用いることで、ディレクトリトラバーサル攻撃やHTTPレスポンス分割攻撃に対するセキュリティを実現しています。このインタフェースのデフォルト実装はDefaultHttpFirewallクラスです。これらの機能はサーブレットリクエストやサーブレットレスポンスのラッパーを用いることで実現しているようです*2

DelegatingFilterProxy

FilterChainProxyはspringSecurityFilterChainというフィルタ名で定義されたDelegatingFilterProxyクラスから呼ばれます。

f:id:kozake:20160911214358p:plain

ちょっとここら辺は混乱しました。通常、Bean定義されたサーブレットフィルタは自動的にサーブレットコンテナに登録されるみたいですが、どうも同じフィルタ名で定義されたフィルタがすでに存在している場合、自動登録の対象にはならないようです。
DelegatingFilterProxyクラスは自身のフィルタ名でBean定義されたサーブレットフィルタをDIコンテナから取り出して、そのサーブレットフィルタに処理を委譲するみたいです。
ややこしいですね。
おそらく、Servlet 3.0以降からサーブレットコンテナの初期化処理をJavaのコードで行うことが出来るようになったので、それ以前はDelegatingFilterProxyのようなBean定義されたサーブレットフィルタを取り出して実行するような仕組みが必要だったのだと思います。

Filterまわりの全体図

今までの話の全体図が次のとおりです。

f:id:kozake:20160913205625p:plain

Configのお話

WebSecurityとHttpSecurity

FilterChainProxyはWebSecurityクラスでインスタンス生成されます。
SecurityFilterChainの実装はDefaultSecurityFilterChainクラスで、WebSecurityクラスやHttpSecurityクラスから作成されます。WebSecurityクラスもHttpSecurityクラスもクラス名からは分かりづらいですが、ビルダークラスです。

f:id:kozake:20160911220005p:plain

WebSecurityクラスやHttpSecurityクラスには、サーブレットを生成する上で便利なメソッドがたくさん用意されています。このクラスの操作を理解することで、自由自在にシステム要件にあったセキュリティ機能が構築できるのですよ!

そして、WebSecurityクラスやHttpSecurityクラスのメソッドを実際に呼び出して設定するのがConfigureクラスになります。

WebSecurityConfigurerAdapter

WebSecurityConfigurerAdapterクラスは1つのHttpSecurityクラスのインスタンスを生成します。このクラスは継承して使われることを想定されていますが、このクラスの継承クラスの数だけ、SecurityFilterChainが出来上がると思っていいでしょう。なお、SecurityFilterChainは順番が重要だという話をしました。WebSecurityConfigurerAdapterはOrderアノーテーションなどを用いることで、順番を定義します。その順番に従い、SecurityFilterChainのmatches()メソッドが呼ばれる順番が決まります。なお、デフォルトの順序は100になっています。

f:id:kozake:20160913211941p:plain

Configurationのお話

最後にセキュリティ環境の話。
WebSecurityConfigurationクラスがspringSecurityFilterChainという名前でBean定義しており、FilterChainProxyのインスタンスをwebSecurityのbuild()メソッドで生成しています。また、このクラスがWebSecurityConfigurerAdapterの継承クラスと連携して、webSecurityの設定処理を呼び出します。

f:id:kozake:20160913220113p:plain

下に示すのが、そのコードの一部です。AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAMEは、"springSecurityFilterChain"という文字列のコンスタント値です。

@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
public Filter springSecurityFilterChain() throws Exception {
            :

     return webSecurity.build();
}

このクラスがConfiguration定義されることで、セキュリティ機能が有効になるんですね!そして、EnableWebSecurityアノーテーションがこのConfiguration定義をimportしています。つまり、EnableWebSecurityアノーテーションを定義すると、セキュリティ機能全般が有効になるということなのです!

まるで魔法のようだ!

さらにさらに、SpringBootWebSecurityConfigurationがこのEnableWebSecurityアノーテーションを自動定義する機能を備えています。SpringBootで自動的にセキュリティ機能が有効にできるのは、SpringBootWebSecurityConfigurationのおかげなのです!

まとめ

今回作成した全体のクラス図です。

f:id:kozake:20160913213406p:plain

今回はSpring Securityのアーキテクチャ部分に特化した記事です。Spring Securityを抑えるなら、UserDetailsServiceやAuthenticationProviderまわりの話も抑えておいたほうがいいようです。
俺たちの戦いは始まったばかりなので、気が向いたら次はSpring Security OAuth2まわりの話を書きます。

それでは、バイナリー!

*1:たんに僕の精進不足なだけです

*2:ここら辺はSpring Securityを使う時にほとんど意識する必要がありません

Mac OS XでIntelliJ IDEAのPATH環境変数を解決する方法

やあ、僕です。

最近はjHipsterを使った開発にチャレンジしてまして、色々と勉強しています。偉いぞ、僕。 jHipsterについては、こないだ纏めた資料があるので、気になる方はこちらをどうぞ!

speakerdeck.com

ということで、意識高く梅田のおしゃーんなカフェでこないだ勉強していたのですが、jHipsterをIntelliJ IDEAで動かそうとしたら、次のようなエラーが出て泣いてました。

なんで動かないんだよ〜(´;ω;`)ブワッ

:bower FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':bower'.
> A problem occurred starting process 'command 'bower''

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':bower'.
         :
         :
error=2, No such file or directory

僕の環境は次の通りです。

調べたら、以下の記事に当たりました。

fix PATH environment variable for IntelliJ IDEA on Mac OS X

Mac OSではGUIアプリケーションには .bashrc などで設定したPATH環境変数は引き継がれないみたいですね。 PATH環境変数を出力してみたら、「/usr/bin:/bin:/usr/sbin:/sbin」となってました。 その為、bowerコマンドの起動に失敗していたみたいです。

解決方法としては、次の3つあるみたいですね。

ターミナルからコマンドでIntelliJ IDEAを起動する。

ターミナルから次のコマンドで起動すると、IDEAでもPATH環境変数が認識できました!

open -a "IntelliJ IDEA http://CE.app "

手軽ですけど、毎回ターミナルから起動するのは面倒ですよね〜。

launchctlコマンドでPATH環境変数を定義する。

ターミナルから次のコマンドを叩いて、PATH環境変数を設定します。コマンドを叩いた後にOS再起動が必要です。

sudo launchctl config user path $PATH

こちらでもIDEAでPATH環境変数が認識できました!やったね!! launchctl config コマンドは永続的にPATH環境変数を保存してくれるので、こちらのほうが便利ですね。

IntelliJ IDEAにPATH環境変数を指定して起動するシェルを追加する

このの方法は試してません。 IDEAがバージョンアップするたびに見直すのも面倒なので。

まとめ

ということで、自分用メモでした。 ちなみに、今回の騒動でlaunchdやlauncctlコマンドというのが便利そうだと知ったのですが、日本語でいい情報ないかな〜。

JJUG CCC 2016 Springに行ってきたよん!(*'▽'*) #jjug_ccc

JJUG CCC 2016 Spring に行ってきましたよ!
JJUG CCC 2016 Spring | 日本Javaユーザーグループ

朝から気合い十分、睡眠もばっちりとれて体調万全で望みました!戦いは始まる前から始まっているのです。

CCCのタイムテーブルはこちら

僕は

  • F-2 Thymeleaf 3 を使ってみよう!
  • F-3 Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA
  • CD-4 ネクストStruts/Seasar2としてのJava EEアクションベースMVC入門 – MVC 1.0、Jersey MVC、RESTEasy HTML –
  • GH-5 Spring Framework/Bootの最新情報とPivotalが進めるクラウドネイティブなアプローチ
  • E-6 大規模映像配信サービスのJava8による全面リニューアルの裏側
  • CD-7 マイクロフレームワーク enkan(とkotowari)ではじめるREPL駆動開発

のセッションを受講しました。

なお、セッション一覧はこちらで纏めてくださっています。

JJUG CCC 2016 Spring ( #jjug_ccc ) - セッション資料の一覧 - 地平線に行く

F-2 Thymeleaf 3 を使ってみよう!by 椎葉 光行

関西勢、@bufferings さんのThymeleafの発表です。すてきなTシャツを着て発表されていました。娘さんチョイスだそうです!
Thymeleafはプログラマとデザイナさんの共同作業を円滑に進めるモチベーションで作成されたテンプレートエンジンらしいです。Natural Templatesの機能は便利ですね。デザイナさんのみならず、外部設計時のお客さんとの打合せでもそのまま使えそうです。注意点としては、Natural Templatesの表示が正しく動作するかどうかをこまめにチェックしないと、すぐにプログラマが表示を壊してしまうとのこと(ありそう)。全体的によく纏まっており、これからThymeleafを始める方は目を通したほうがいいと思います。

お昼

お昼休憩です!今半で美味しいお肉食べてきました!
久しぶりにいい肉を食べた気がしますww

F-3 Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 by 倉元 貴一(株式会社エヌ・ティ・ティ・データ)

NTTデータさんが提供する「TERASOLUNA Server Framework for Java 5(以下、TERA5)」の紹介です。こちらのサイトで内容をみれますが、PDFにして2000ページ以上のボリュームです。日本語資料としては最大のSpringドキュメントでしょう。僕はその存在を以前に槙さんから教わって知っていましたが、改めて凄いです。この資料の内容は様々な環境で動作確認されており、そこで発見した不具合はOSSにフィードバックされているとのこと。全てに目を通すのは時間がかかりますが、気になった部分だけでも参考にできる良資料です。今後、多いに活用させて頂きたいと思います。

CD-4 ネクストStruts/Seasar2としてのJava EEアクションベースMVC入門 – MVC 1.0、Jersey MVC、RESTEasy HTML –

JavaEEにはコンポーネントベースMVCJSF、RESTを実現するJAX-RSがありますが、MVC1.0はJAX-RSを拡張したアクションベースのMVC仕様です。Viewからのリクエストをコントローラーが処理して、Viewを返す。従来のStrutsやSeaser2でのWeb開発に慣れた方にはおなじみのパターンですね。全体的によく纏まった資料でした。JAX-RSに慣れた方がアクションベースのMVCをやりたい場合はこちらで実現するのがオススメです。ここでもThymeleafをテンプレートエンジンに用いていました。いいですね、Thymeleaf!

GH-5 Spring Framework/Bootの最新情報とPivotalが進めるクラウドネイティブなアプローチ by 槙 俊明 (Pivotalジャパン株式会社)

今回のCCCでは、業務理由からSpring関連の話を収集しにきました。もちろん、このセッションを受講。流石の槙さんの発表、面白かったです。Spring Bootは様々なSpring素材をもとに仕上げた出来合のケーキとのこと。分かりやすい説明ですね。その後に続く謎のBunner押しwww。でも、Bunnerいいですね。僕も仕事でBoot使う時は真っ先に作ろう、仕事はテンションが大事です。
印象に残ったのは、コンストラクタインジェクションでAutowiredの指定が省略できるようになったとのこと。これにより、フィールドインジェクション vs コンストラクタインジェクションの戦いは槙さんの中ではコンストラクタの勝利となった模様です。Kotlin Bootする際も、フィールドインジェクションだとvarで宣言したりopenやlateinitつけたりと面倒だったので、僕もコンストラクタインジェクション派になりそうです。他にも、RequestMappingアノーテーションにGetやPostなどの専用のアノーテーションが出来たり、スコープのアノーテーションが分かりやすい記述になったりと、なにげに便利な機能が追加されたみたいです。

E-6 大規模映像配信サービスのJava8による全面リニューアルの裏側 by 秋穂 賢(株式会社U-NEXT)

大規模とJava8というキーワードにつられてこのセッションへ。内容としては、DBFluteの話がほとんどでした。DBFluteを選択した理由は、メインコミッタのjfluteさんのサポートが厚かったとのこと。使用技術に詳しい人が近くにいるのは確かに心強いですね。jfluteさん、24時間戦えるそうです。すごい!!
気になった点としは、ERMasterを使ってER図を管理していたこと。ERMaster、使いやすくて僕も好きなのですが、テーブル数が多くなると性能劣化が激しくて使い物にならなかった記憶があります*1。そこらへんどうしているのかな?と思っていたら、jfluteさんにメンション頂けました。

いいな、これ。僕も使おうかな?
GitHub - naoki-iwami/ermaster-b: ERMaster にダイアグラムの概念を追加して、大量のテーブルをグルーピングして扱えるようにしたものです。

ERD駆動で自動生成を駆使するところは、僕の仕事のやり方とも似ていて共感できました。

CD-7 マイクロフレームワーク enkan(とkotowari)ではじめるREPL駆動開発 by 川島 義隆

尊敬するアーキテクトの川島さんの発表です!REPL駆動開発がどんなものなのか聞きにきました。川島さん、当日は熱があったみたいでかなり辛そうでした。。
enkanのコンセプトとしては、

  • Expilicitness 明示的であること
  • Ease of development 開発がしやすいこと
  • Ease of operation 保守運用が簡単であること

であるとのこと。確かに最近のシステムは色んな技術が混じり合っていたり、宣言より規約により規約が分からないとソースコードとのつながりが分からなかったりと大変さを感じることがあります。

セッション中にこちらからデモを動かして、実際のenkanを少し体験できました。楽しかったです!
https://enkan.github.io/

懇親会

懇親会ではたくさんの人とコミュニケーション出来て楽しかったです。
なぜか利き酒 をすることになったり。普段はビールばっかり飲んでいるのにww

懇親会では槙さんとSpringSecurityのお話が出来たのがラッキーでした。JWTの疑問点やSpringSecurityの苦労話を聞いてもらえて嬉しかったです!
サンプルコードも紹介して貰えたので、参考にさせて頂きます!
GitHub - making/oauth2-sso-demo: Simple OAuth2 SSO Demo with Spring Boot + Spring Security OAuth2

その後に二次会にもいきました。もう最高


最後に

*1:なので、今はA5ERを使っています

Kotlinの勉強してきたよ(*'▽'*) in 京都 #kotlin_kansai

京都でKotlinの勉強してきました!

kanjava.connpass.com

霞は食べられない

京都に行く途中に知りました。霞って食べ物じゃなかったんですね。

以下、セッションの感想です。

SIerアーキテクト視点でみたKotlinの紹介

www.slideshare.net

僕の発表です。KotlinについてはNull安全な言語サポートに惚れて、いま一番注目している言語です。 ビジネスモデルやチーム状況により技術選定のやり方は変わってきます。 資料でも触れているとおり、新技術導入については慎重にならない状況にいるのですが、その点でもKotlinはSIerにとって、以下の点で導入しやすい言語ではないかと考えています。

  • 後方互換のサポート
  • コード / 既存資産 / 技術知識の再利用のしやすさ
  • Java技術者であれば、習得が比較的容易
  • Javaとの相互運用が容易
  • Java6バイトコードをサポート

そもそも、Javaを使い続ければいいじゃない?という意見もあるかと思いますが、Kotlinが提供するnull安全やdataクラスのような機能を導入するだけでも大きく生産性が変わってきます。

なにより、技術は使わなければ身につけられません。

いつまでも古い技術にこだわると、チームの技術力そのものが負債と化してしまいます。 Kotlinのような習得が容易でモダンな言語機能を備えた技術を導入することで、チームの技術力自体が活性化することを期待しています。

Kotlinはじめてみました

きの子さん(@aa7th)の発表です。つい一週間前にKotlinを始めたそうですが、早々にKotlinでBotアプリを作成されてました。覚えた言語ですぐなにかを作るのは本当に勉強になるし、身に付きやすいですよね。見習いたいと思います。また、普段Scalaをやっている方なので、Scalaと比較した感想なども興味深かったです。 なぜかエルビス演算子がすごい気に入っていたみたいで、爆笑していました。

Java EE アプリケーションと Kotlin

nobuoka(@nobuoka) さんの発表です。KotlinでJAX-RS、MVC1.0、JPACDIを用いてサーバーサイドに取り組んだ話をして頂きました。

  • CDIやるには「lateinit修飾子」が重要
  • Kotlinはデフォルトfinalなので、openアノーテーションを忘れずに
  • MyClass::classはKClassクラスのオブジェクト、MyClass::class.javaJavaのClass

あたりが参考になりました。

発表の後でJPAまわりについての話をチラッとさせて頂いたのですが、JPAは楽だけど、色々つらい部分出てきたとおっしゃっていました。僕はSQLを駆使できるORMが好きなので、MyBatis or Doma2 でやりたいな〜と考えています。

Spring Boot + Kotlin 劇的ビフォーアフター

orekyuu(@orekyuu)さんの発表。なんと学生さん! この若さで凄いですね。強くてニューゲームしているのだと思います。 KotlinでSpring Bootを動かした話です。Bootいいですね!僕も使ってみたいです。

発表内容は以下のイメージに集約されていましたww f:id:kozake:20160405080653p:plain

orekyuu(@orekyuu)さんは就活中らしいので、優秀な学生さんを欲している企業さん、今がチャンスですよ!

KotlinとモダンなライブラリーでAndroidアプリを作る

たくじさん(@ takuji31)の発表です。Kotlin使ってAndroid開発の話です。 Android開発と言えばKotlinという選択肢が当たり前になってきていますね。 「Dagger2」や「Data Binding Library」の話をして頂きました。どちらも知らないライブラリだったのですが、「Data Binding Library」いいな〜

Kotlinというよりは、Android成分多めの話でした。 実際の開発経験を通しての、『Android開発でKotlinの選択は現実的になってきた』という言葉は重いですね。

Kotlinこんなん出ましたけど

やんくさん(@yy_yank)の発表。

Kotlinについては、逆引きKotlinっていうサイトに書いてあるらしいです。

逆引きKotlin - 逆引きKotlin

すごいな〜誰が運営しているんだろうな〜(棒) 発表で一番気になった点は、やはりKotlinのJavaScriptサポート状況です。まだ実験段階なのですが、個人的には実用的になってくれたら嬉しいと思います。フロントエンドも型安全に開発したいですからね、僕みたいなゆるふわ人間は。

Dataクラスから始めるKotlin / JetBrains行ってきたよ!

ゆうすけさん(@yusuke)の発表です。 なんと「Dataクラスから始めるKotlin」と「JetBrains行ってきたよ!」の並行発表www Twitterのタイムラインがカオスになっていましたw

Kotlinを使い始めたキッカケに、Lombokプラグインが時々壊れるとありましたが、Lombokの代わりとなり得るDataクラスは本当に便利だと思います。Lombokは便利なんですが、僕もどうも黒魔術感が好きになれなくてプロダクト採用を見送っていました。やっぱりDataクラスのように言語標準のサポートがあると安心ですね!

f:id:kozake:20160405082616p:plain

本当、これだと思います。

なお、最後に流れた動画、僕は好きです。

攻める!ラムダ式禁止おじさん

最後はたろうさん(@ngsw_taro)の発表です。 ネタ枠最高でしたww 関数参照やメソッド参照、関数に拡張関数を生やすことが出来るなど、とても勉強になりました。

T.(A) -> Rは、(T, A) -> Rでもある

って話は、「へー!」となりました。

結論 ラムダ式を使いましょう

最後に

楽しかったです!またKotlin勉強会やりたいな

・゜゚・:.。..。.:・'(゚▽゚)'・:.。. .。.:・゜゚・