Java EE 事始め!

主にJava EEについて、つらつらとマイペースに書いていきます。「Java EEを勉強するときに、一番最初に読んでもらえるブログ」を目指して頑張ります!

2018年振り返り。

コミュニティ登壇

  • 2月
    • WEBエンジニア勉強会で12Factorネタ
    • JSUG SpringOne報告会
  • 4月
    • GlassFish勉強会でBean Validation 2.0ネタ
  • 5月
    • JJUG CCCでSpring 5.0ネタ
  • 6月
    • Springハンズオン(自社、JSUGJava女子部)
  • 7月
    • DevRelConで初の英語登壇(スポンサーLT)
    • Springハンズオン(岡JUG)
  • 8月
    • Springハンズオン(関ジャバ)
  • 10月
    • JSUG Spring FestでSpring Security 5.1 + OAuth 2.0ネタ(&運営)
  • 11月
    • 中央線MeetupでSpring Securityネタ
  • 12月
    • Springハンズオン(JJUG CCC)

12月で、CCCでの登壇が10回連続10回目となりました。

その他、GlassFishユーザー会やSpringユーザー会で何回か勉強会の運営側をやっていました。

特に9月にGlassFishユーザー会で開催したJDKリリースモデル(Azulさん、IBMさん)の回は印象深いです。

Jakarta EEが落ち着いた頃に、またGlassFish勉強会やりたいですね。

仕事

  • これまでの色々な活動が実り、Pivotal認定のSpring研修がヒットしました。特にCore Springは弊社のトップ5に入るくらいの人気コースになりました。
  • 出張でJava EE系の研修もたくさん実施しました。
  • 今年一番うれしかったのは、かずひらさんといろふさんがSpring Security研修を受けに来てくれたことです。とても楽しい1日でした。お二人の質問レベルがハンパないので、大変でもありましたが。
  • 昨年に引き続き、SpringOneに行く機会をいただきました。昨年仲良くなった方が退職されて会えず少し残念・・・。

英語

去年12月にSpringOneに行って以来、目標を失っていて正直サボってました・・・。それでも10月のTOEICで825点を取れて意外にキープできてるなと思いました。

その後は、主に文法の再勉強をしています。そして来年、またTOEICを受けてみようかなと。

その他

  • 開発環境の中でDBなどのミドルウェアの類は、すべてDockerで動かすようにしました。
  • 前のMacBook Airがメモリ8GBしかなかったので、11月にメモリ16GBのMacBook Proに買い替えました。
  • 中小企業診断士を休止&退会しました。残りポイントなどのことを考えると、実質的に診断士ではなくなりました。コスパがあんまり・・・と思ったので。

来年に向けて

  • 仕事でGitが必要になったので、冬休みの宿題として勉強中です。
  • もろもろ日程が合えば、JOnsenに行ってみたいです。
  • コミュニティ活動は、変わらず続けていきます。
  • 英語は強みにしたいけどまだまだなので、勉強を続けていきます。現役のエンジニアではない自分には、技術以外の強みも必要だと思っています。
  • 技術としては、AWSKubernetesといったクラウド技術全般を触っていきたいなと思っています。

感想ブログ:いちばんやさしいGit&GitHubの教本

よこなさんとしょぼちむさんが書かれたGit・GitHubの本、献本でいただきました!

一通り読ませていただいたので感想を書きます。一言で言うと、とても良かったです!

f:id:MasatoshiTada:20181226163313j:plain

自分のGit前提知識

GitHubにコードを公開してはいたので、cloneaddcommitpushなどは使ったことがありました。

でも、他のコマンドはほぼ知らないし、上記のコマンドもきちんとは理解していないし、ブランチはすべてmasterのみ、といった感じです。

会社ではずっとSubversionだったのですが、ちょっと前にGitに移行し、理解していないが故に事故多発・・・という有様です😱

なので、きちんと勉強せねばと思っていたところでした。

この本の対象読者

基本的にはGit初心者ですね。HTMLを題材としているので、プログラマーに限らずWebデザイナーの方でもOKだと思います。

PCやコマンドの操作が丁寧に書かれているので、1年目の方にもおすすめできます。

初心者に易しくが基本コンセプトな本ですが、表面的になりすぎず結構重要なことも分かりやすく解説してくれているので、僕のようにある程度経験はあるけどGitをちゃんと勉強したことがない人にも読み応えがある本です。

ローカルでの操作のみならず、GitHubを利用したリモートとのやりとりや、コンフリクトの解決まで説明されているので、とりあえずこの1冊を読了すればOKと思います。

各章の構成

各章では、最初の2ページほどで図を豊富に使ったイメージの説明があった後、すぐに実際にコマンドを実行しながらの操作の説明に入ります。

なので、実際にPCを操作して体験しながら学習することが出来ます。これだと分かりやすい上に、飽きが来ません。

その他いろいろ

  • コミットログエディタをviからVSCodeに変えているのがいいですね。初心者の方にviは難しいと思います。
  • 最後の章「GitHubをさらに使いこなそう」で、OSSへの貢献が書かれているのがお二人らしいなと思いました。

追加したほうがいいなと思ったところ

  • P.174 masterとorigin/masterの違いも説明したほうがいいなと思いました。(これは他の本を読んで理解しました)
  • P.175 ワンポイントの「チェックアウトはワークツリーの内容を上書きしない」って表現は違和感ありました。現在のブランチにModified状態のファイルがあった場合、ってことでしょうか?
  • P.204 まずmasterに戻ってpullしてから、という指示がないと事故が発生するかも。。。

誤植(出版社さんに報告済み)

  • P.211一番下 コンフリト→コンフリクト

まとめ

構成も良いし誤植も少ないので非常に読みやすかったです。

初心者向けはもちろん、それ以外でGitをきちんと勉強したい方におすすめしたい本です。

個人的にも非常に勉強になりました!ありがとうございます!

研修の価値とかコミュニティのこととか思ったこと色々

いろふさんがブログを書いてくれたので触発されて書きます。

irof.hateblo.jp

今日、自社で担当した研修を、いろふさん(@irof)とかずひらさん(@kazuhira_r)がご受講くださいました。

自分より技術レベルが圧倒的に上な方々に対して何かをレクチャーするという非常に緊張するシチュエーションだったのですが、結果的にはご満足いただけたようで何よりです。

いろふさんのブログで印象的だったのは下記の部分。

内容は期待通り、断片的な知識がリンクされ、抜け漏れや曖昧なものが補強されていくのが実感できました。 これまでやってきたのも、そう間違ったものではなかったのはちょっと安心(これを確認するのはちょっと怖かった)。

いろふさんレベルの方でも不安があるんだ・・・というのが初めて読んだときの感想。

ただ、僕が研修を作るためにやっているのは、リファレンスを読むこと、ソースコードを読むこと、実際にアプリを作って実験してみることくらいです。

いろふさんや多くのエンジニアの方々と変わらないと思いますし、たぶんもっと高いレベルでそれをやっていらっしゃるはずです。

僕自身も、知識が偏ってるんじゃないか、エンジニアの方々と比べて知らないことが多いんじゃないか、と不安になることは多いです。

そこで思ったのは(ちょっと思考が飛びますが)、技術にしても何にしても絶対的な「正解」というものは無くて、誰かと「答え合わせ」しながらやってくしかないんじゃないか、ということ。

その答え合わせの場が研修であり、コミュニティではないのかなと。

答え合わせの相手として、いろふさんやかずひらさんが僕を選んでくれたのは本当に嬉しいし、今まで努力してきた甲斐があったなと思います。

あと最近思うのは、やらなきゃいけない技術の範囲が本当に広くなっていて、優れたエンジニアの方でも1人ですべてカバーするのはかなりキツイんじゃないかと。

そういった意味でも、世の中のエンジニアの皆様にもっとカジュアルに研修を使ってほしいな、と思いました。

あ、そういえば。僕も今日答え合わせできました。

お客様に増田さんの本をおすすめしたのは間違いじゃなかった。

まとまってないけど、以上!

追記

かずひらさんもブログ書いてくれていました!ありがとうございまーす!

kazuhira-r.hatenablog.com

Thymeleaf 3のドキュメント和訳をお手伝いしてコントリビューターになりました!

@bufferingsさんとThymeleaf 3のドキュメントを和訳し、それが今日、公式サイトで公開されました!

Tutorial: Using Thymeleaf (ja)

もともとThymeleaf 2.xのころに@bufferingsさんが翻訳されていたものが既にあったので、僕がやったのはその差分のごく一部、ですが😅

コードで貢献した訳ではありませんが、正式にThymeleafのコントリビューターとなりました。

これまでもThymeleafやPayaraなど、OSSのバグをIssueとして報告したりはしていましたが、コントリビューターとなったのは初めてです。

Thymeleafをお使いの方のお役に立てれば嬉しいです。

JJUG CCC 2018 Springで登壇してきた

登壇してきた

今回も登壇の機会をいただきました。タイトルは「Pivotal認定講師が解説!ReactiveだけじゃないSpring 5 & Spring Boot 2新機能解説」です。スポンサーとしてのセッションでした。

その名の通り、Spring 5 & Boot 2のリアクティブ以外の新機能をまとめて解説しました。Core/Web/Data/Security/Test/Bootの6つに分けています。資料はSlideshareにアップしました。

アンケート結果は下記。ご満足いただけたようで良かったです。今回(というか今日?)から平均値とかが出るようになったんですね。

f:id:MasatoshiTada:20180529100439p:plain

f:id:MasatoshiTada:20180529100453p:plain

この発表の基になっているのは、公式のリファレンスやGitHub、去年参加したSpringOne Platformの各セッションなどです。けっこう取捨選択していますので、興味のある方はぜひ原典をあたってみてください。上記スライドの最後の方に、各資料へのリンクを貼ってあります。

これでCCC登壇は9回連続9回目になります。初めて出たのがもう4年前か・・・。早いなあ。もちろん、次回も頑張りたいです。

参加したセッション

Spring Boot Actuator 2.0 & Micrometer (槙さん)

僕の師匠である槙さんのセッション。内容としてはMicrometerが中心でした。理解があってるかどうかビミョーですが、メトリクス取得機能+各監視ツール(DataDogやPrometheusなど)に合わせてデータを整形する機能を持っているようです。

ちなみにこの朝イチの時間帯、個人的に聞きたいセッションが重なっていて選ぶのに困りました。できれば全部聞きたかった・・・。

Swagger(OpenAPI Specification)入門 (正野さん)

Swagger自体は知っていましたが、使ったことがなかったので聞いてみました。各Swagger Xxxの関係性が分かりやすくて良かったです。

ある程度前提知識があったので個人的には前半の内容が少し冗長に思えましたが、その分まったく初めてという方にもわかりやすいセッションだったと思います。

How to Properly Blame Things for Causing Latency: An Introduction to Distributed Tracing and Zipkin (Adrian Coleさん)

マイクロサービスで必要不可欠な分散トレーシング(ログを1箇所にあつめてほげほげするやつ)。そのデファクトであるZipkinのセッションです。発表者のAdrianさんはその作者です。元Twitterで今はPivotalに所属されているとか。

通訳ナシのセッションだったのですが、とても優しい口調でゆっくり喋っていただけたため何とか理解できたと思います。懇親会で質問したかったんだけど、自分のLTとかその他もろもろでできなかった・・・😭。次こそは。

Spring Cloud, Docker & Kubernetes - Lessons Learned in the context of an OSS Project (Daisuke Yoshimotoさん, Mauricio Salatinoさん)

連続で英語セッションでした。吉本さんは最初だけで、発表はほとんどMauricioさんでした。Adrianさんとは対象的にメチャ早口・・・😅。正直、あんまり理解できませんでした。内容としては、Kubernetesというよりマイクロサービス一般の内容が中心だったと理解しています(違うかもしれない)。

Spring Boot on Kubernetes : Yahoo!ズバトク事例 (玉利さん)

Yahooさんのシステムリプレイス?事例。Spring Boot + Kubernetesという構成。話の内容としてはKubernetesの基礎や、Kubernetes上でSpring Bootアプリを動かすためにやったことや注意点などで、とてもわかりやすかったです。

個人的には、Spring Data JPAJPA実装をEclipseLinkにし、その独自機能でDBシャーディングをしていた部分。Spring Data JPAでEclipseLinkを使った事例は初めて聞いたので、とても参考になりました。

DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話 (福嶋さん)

Java 100本ノックのジャストシステム福嶋さんのセッション。こないだの技術書典で初めてお話しできたので、セッションも聞いてみたいと思い参加しました。

DDDやクリーンアーキテクチャーについてはあんまりしらないのですが、マイクロサービスの流れでよく聞くキーワードです。ただ、今回の福嶋さんのセッションだと、DDDやクリーンアーキテクチャーが先にあって、その結果マイクロサービスになったという理解です。

この最後の時間帯も、聞きたいセッションがいくつも重なっていました。選ぶのが大変・・・!

懇親会

LT

個人で懇親会LTのCfPを出したら通りました。去年、海外カンファレンスに初参加したときに体調を崩して病院にいった話をしました。そこそこウケてよかったです。資料は技術系じゃないのでアップしてません。

風船

発表者は風船をつけて分かりやすいようにするという新たな試みがされていました。ただし諸事情で上に浮かばなかったので、腕にくくりつけるだけでしたが😅。。。しかし、やはりそれでも風船が目印になったのか、懇親会で「セッション聞いてました!」とお声がけいただける機会が以前よりも格段に増えたように感じました!次回はぜひ上に浮かぶようお願いします!ww

LINEさんのお寿司

以前もあって話題になったLINEさんのお寿司、再び登場!前のときはネタがマグロだけだったような気がするんですが、今回は赤貝・いくら・うに・エビなど盛りだくさん!いやー、これは本当にすごい・・・。LINEさん、ありがとうございます!

気になった点

運営が非常にスムーズで問題点らしい問題点は見つからなかったのですが、あえて言うならアンケートの回収率かなと・・・。運営の方が全セッションの冒頭や終了時に「アンケートにご協力お願いします!」とアナウンスしてくださっていますが、このブログ執筆時点で僕のセッションへの回答数は40ほどです。セッションに参加いただいた方の1割ちょっとくらいだと思います。

確かに、僕自身も含めて参加者としてはイチ早く次のセッションの座席を確保するために移動したいし、そうするとどうしても前のセッションのアンケートは忘れがちになりそうです(結局、僕は30分休みのときにまとめて書きました)。

具体的なアイデアは今のところ思いついていないのですが、どうにかなれば、と思います。

最後に

今回もめいっぱい楽しむことができました。JJUG幹事の皆さん・ボランティアスタッフの皆さんには頭が下がります。いつも本当にありがとうございます。

僕もスピーカーとしての貢献を続けていきます。

Java EEにMVCはなぜ必要なのか

この記事は?

Java EE Advent Calendar 2017の22日目です。

6日目の@khasunumaさんの記事「MVC のこれまでとこれから」で、MVCがこれまで辿ってきた経緯が解説されていました。

僕は個人的にMVCを待ち望んでいました。早い段階からブログを書いたり、JJUG CCCで発表したりもしていました。今でも、「MVC 1.0」でググると多くは僕の記事がヒットします。

蓮沼さんは上記の記事では、「MVCはあるに越したことはないが必須ではない」というご意見でしたが、僕はこの記事のタイトル通り「MVCは必要」という意見です。

世の中には色んな意見があっていいと思いますので、ここで論じてみたいと思います。少しでも参考になれば幸いです。

意見1: Java開発者の多くはアクションベースフレームワークに慣れている

JavaでWebアプリケーションを作る場合のフレームワークといえば、昔のものになりますが、やはりStruts 1.xやSeasar2(正確にはS2StrutsSAStruts)が多勢を占めるでしょう。これらはすべて、HTTPのリクエスト・レスポンスのやり取りを記述する「アクションベースフレームワーク」に分類されます。他のフレームワークも、ほとんどがアクションベースでしょう。

それに対して、JSFは「コンポーネントベースフレームワーク」です。画面のパーツやイベント(ボタン押下など)に着目して実装します。JSF以外にもコンポーネントベースフレームワークは存在しますが、Javaでは少数派です。また、Swing・JavaFXAndroidなどによるGUIプログラミングを経験したことがある人は、Webアプリをアクションベースで作った経験がある人に比べれば少数でしょう。

つまり、多くの人はアクションベースに慣れており、コンポーネントベースに慣れている人はあまり多くありません。(あくまで僕の実感ベースですが)このような状況下で、特に大人数の開発者が必要なプロジェクトでは、「よし、コンポーネントベースのJSFを採用しよう」とはならないのではないでしょうか。

もちろん、サーバーベンダーのサポートを受けたいからJava EE標準で作りたいという場合は、選択肢がJSFしかありませんので、JSFが採用されるでしょう。しかし、もしJava EE標準のアクションベースMVCも選択肢として存在するなら、JSFではなくMVCの方が採用されるのではないでしょうか。

意見2: すべてのWebアプリがフルJavaScriptで画面を作られる訳ではない

確かに、いまJavaScriptでUIを構築することが増えています。Angular・React・Vueなど、JavaScriptフレームワークの進化はとても速いです。もちろん、画面をすべてJavaScriptとピュアなHTMLで書くことも多いでしょう。

しかし、すべてのWebアプリがそうではないと思います。従来のように、サーバーサイドでHTMLを出力し、JavaScriptを補助的に使うようなアプリもまだまだ存在するでしょう。

JSFは、この用途には向いていません。画面上にJavaScriptで処理を記述すると、JSFが内部的に使っているJavaScriptコードと競合したり、画面上で処理した結果がサーバー側で保持しているコンポーネントツリーと矛盾したりして、うまく動かないことがあるからです。

なので、シンプルに「サーバーサイドでHTMLを出力するだけ」のフレームワークが求められます。それがMVCなのです。

これからMVCはどうなる?

蓮沼さんのブログにもある通り、今もMVCは仕様策定プロセスが進んでいます。現スペックリードの1人であるIvar GrmstadさんはEE4Jでも中心人物であり、今後はEE4Jの傘下で積極的な活動が続くでしょう。実際に、つい先日(12月18日)、Public Reviewという重要なバージョンがリリースされました!

www.mvc-spec.org

前のバージョンであるEarly Draft Review 2は2015年11月であり、2年以上ぶりのリリースになります。とても感慨深いです。

正式リリースがいつになるかは現時点では不明です。完全に僕の予想ですが、早くて2018年、遅くとも2019年前半には正式リリースになるのではないでしょうか。

MVCに限らず、Java EEはこれからどのように仕様策定プロセスをすすめるのかなど、EE4Jで検討中の事項が多いです。まだしばらく待つ必要がありますが、期待して待ちましょう。

Cloud Foundryを学習する方法

この記事について

この記事は、Cloud Foundry Advent Calendar 2017の15日目です。

Cloud Foundry(以下CF)は、日本国内でも広がりを見せていますね。ただ気になるのは、Cloud Foundryの学習手段がまだ少ないことです。

そこで今回は、これからCFを始めたい人向けに、どのように勉強すればいいかを僕なりに整理してご紹介していきます。

自己紹介

CF関連のブログを書くのは初めてなので、軽く自己紹介します。

多田真敏(ただまさとし)と言います。カサレアルという会社で、研修トレーナーをやっています。

もともとJava EESpring FrameworkなどサーバーサイドJavaを中心に担当していました(もちろん今もやってます)。

SpringについてはPivotal認定講師ということもあり、Pivotal Cloud Foundryの開発系トレーニングも、今年から始めています。

ということで、内容がどうしてもPivotal Cloud Foundry (以下PCF)寄りになってしまうのですが、OSSのCFでも共通する内容になるよう気をつけて書いていきます。

ハンズオン

まずはとにかく、触ってみることから始めましょう。Pivotalジャパンさんが、GitHubにハンズオン資料を公開されています。

github.com

元々はPivotalジャパンさんが無料セミナーで使っている資料なのですが、ご自分で学習する時に利用することは全く問題ありません。

もちろん、ここで利用しているCFはPCFなので PCF独自機能の紹介も含まれていますが、大半は元々のCFの内容なので、どのCFディストリビューションを使うにしても参考になる内容が多いです。

cfコマンドを使ったアプリケーションのデプロイやスケール、Blue/Greenデプロイを体験しましょう。

ハンズオンと並行して、資料にリンクが貼ってある下記のスライドも読みましょう。CFで何が出来るか、どんな仕組みかがざっくり理解できます。

www.slideshare.net

書籍

Amazonで「Cloud Foundry」で検索すると、洋書が実質3冊しかありません。日本語の本は皆無です。

https://www.amazon.co.jp/s/ref=nb_sb_noss_2?__mk_ja_JP=カタカナ&url=search-alias%3Daps&field-keywords=cloud+foundry

僕が購入したのは、Cloud Foundry: The Definitive Guide: Develop, Deploy, and Scaleという本です。

出版されたのが2017年5月と新しく、ほぼ現時点で最新の内容が紹介されています。内容はCloud Foundryの内部の仕組みやアーキテクチャが中心で、管理寄りですね。全体的に平易な英語でかかれており、とてもわかり易いです。

開発系の内容は、あまり多くありません。とりあえず、第3章Components、第6章Diego、第9章Buildpacks and Dockerだけでも読んでおくと良いでしょう。

コミュニティ

コミュニティの勉強会にも行ってみましょう!色んなエンジニアの方々のお話や、最新情報などを得られます。

www.meetup.com

paas.connpass.com

pivotal-japan.connpass.com

Eラーニング+資格

Cloud Foundry Foundation公式のEラーニングと資格があります。(ただし全部英語)

これらはもちろん有償です。Eラーニングが$299、資格試験が$300です。セットで購入すると割引で$499になるみたいです。

training.linuxfoundation.org

たまに激安セールしていることがあって、セットで半額みたいな値段で買えることがあります。

Twitterで@cloudfoundryをフォローしておくとセール情報が流れてくるので、ぜひフォローしておきましょう!

Eラーニングの内容については、CFだけでなくMicroservicesやCI/CD、Dockerなど様々な内容から構成されています。

資格試験については、まだ未受験なので何とも。。。😅

(実はこのアドベントカレンダーの日までに受験しようと思っていたのですが、諸般の事情で・・・)

試験時間が4時間という、かなりガッツリ系の資格です。もし受験された方がこの記事を読んでいたら、ぜひコメント欄で情報ください!

トレーニング+資格

PCFのトレーニングになりますが、僕がやっている「Pivotal Cloud Foundry Developer」という開発者向けトレーニングがあります。

Pivotal認定 Pivotal Cloud Foundry Developer | 株式会社カサレアル ラーニングサービス

Pivotal製のテキストですので全部英語ですが、講師である僕はすべて日本語でトレーニングを進めます。日本語で学べるのは大きいですね。

Auto Scalerなど一部の章はPCF独自機能ですが、ほとんどの内容はCF共通です。始めてCFを学習する方に最適なトレーニングです。

そして、このトレーニングに対応した資格試験があります。

https://pivotal.io/training/certification

対策としては、上記のサイトにあるExam Briefで各章のウェイトを確認し、Study Guideにまとまっているポイントを確認しながらトレーニングのテキストを復習するのが一番いいです。

トレーニングを受けていなくても資格だけ受験もできますので、PCFユーザーでなくても活用しやすい資格です。

問題はすべて4択で、出題はとてもストレートです。妙にひねった問題とかは出てきません。

Cloud Foundry Foundationはちょっと重たい、という場合はこちらを目標に学習されてもいいと思います。

公式ドキュメント

やはり、最後は公式ドキュメントを確認しましょう。ここに書いてある情報が一番正確なはずです。

Cloud Foundry Docs

最後に

Cloud Foundryに限らず、最近は日本語の技術情報が少なくなってきました。どうしても英語は読まざるを得ないですね。

また、ようやっとトレーニングも出来ましたので、ぜひ活用してください!