Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Visual Studio CodeでJavaを書いてみる

この記事は「Visual Studio Code Advent Calendar 2017」の7日目の記事です。

昨日は@74thさんの「Visual Studio Codeの各言語、環境のデバッグの仕方を集めたサイトを作ってる」でした。
明日は@Maxfield_Walkerさんです。

私からは「Visual Studio CodeでJavaを書いてみた話」をしたいと思います。

なんでVisual Studio CodeでJava書くの?

Javaのコードを書くとき、通常であればIntelliJ IDEAEclipseNetBeansなどのIDE(統合開発環境)を使います。コード補完やJavaDoc、ビルド、ユニットテストなど、様々な機能と周辺ツールを利用可能で、効率良く開発ができるためです。

私はJava EE開発をやっていたので、ずっとNetBeansをメインに使ってきたのですが、最近Visual Studio CodeでJavaを書く機会が増えてます。そのきっかけは11/24に参加した「Spring Fest 2017」でRed Hatの方がデモにVisual Studio Code使っていたのを見たためです。

そのときは「へー、Visual Studio CodeでJava書けるんだ」ぐらいの印象だったのですが、実際に使ってみたところ「軽い!」と動作のサクサク感に感動しました。

私が普段利用してるノートPCはVAIO Duo13という少し古い機種ではありますが、インテル Core i7-4650U (1.70 GHz)・メモリ8G・SSDでそこまで悪いSpecではありません。それでもNetBeansの起動は少し遅く感じます。

ちょっとしたお試しコードであればサクッとVisual Studio Codeで書いて動かす、というのは1つの選択肢になるのではないかなと思います。

Visual Studio Codeとは?

Visual Studio Code Advent Calendarなので、今さら書く必要がないと思いますが、Java方面だと名前は知ってるけど触ったことない、という方もいらっしゃる可能性があるため少しだけ触れておきます。

Visual Studio Codeは2015年にMicrosoftがリリースしたエディタです。Visual Studioという名前からWindowsでの動作をイメージを浮かべてしまいがちですが、Windows、Linux、macOSのプラットフォームで動くエディタであるのが特徴です。また、拡張機能(Extensions)は種類が豊富で開発も盛んです。
marketplace.visualstudio.com

f:id:kikutaro777:20171126023412p:plain

Visual Studio Code x Java

Visual Studio Codeを使ってJavaを書いてみようと思った方は一度公式サイトのドキュメントを参照ください。
code.visualstudio.com

以下、簡単に紹介します。

Java Extension Pack

Java Extension Packという拡張機能がMicrosoftから提供されています。基本的にはこちらをインストールするだけでOKです。
marketplace.visualstudio.com
f:id:kikutaro777:20171126023905p:plain

依存関係をみると以下の2つがあって、Red HatとMicrosoftが提供元となっています

Dukeかわいい。
f:id:kikutaro777:20171207005226p:plain

なんでテントウムシなんだろう…。J2SE 1.3.1のコードネームがLadybird=テントウムシらしいけど、それなのかな…。
f:id:kikutaro777:20171207005329p:plain

この2つはJava Extension Packをインストールすれば自動的にインストールされます。

Java Test Runner

12月1日にVisual Studio CodeがJUnitに対応したというアナウンスがありました。(ただしJUnit4)
blogs.msdn.microsoft.com

早速Publickeyで日本語記事になっていましたね。
www.publickey1.jp

こんな感じで今後もJavaに関連した拡張が増えていくと嬉しいなぁ。

実行結果

以下の簡単な例を試す手順をまとめます。(Mavenは入ってる前提)

  • Java Extension Pack x Spring Boot
  • Java Test Runner
Java Extension Pack x Spring Boot

Spring InitializrでWebのDependencyだけ入れたプロジェクトを落として解凍します。
f:id:kikutaro777:20171207011057p:plain

Visual Studio Codeの「ファイル」メニューから「フォルダーを開く」を選択し、解凍したフォルダを指定します。
f:id:kikutaro777:20171207011209p:plain

f:id:kikutaro777:20171207011438p:plain

開きました。
f:id:kikutaro777:20171207011548p:plain

「デバッグ」メニューから「デバッグの開始」を選びます。(F5キーを押してもよいです)
f:id:kikutaro777:20171207011754p:plain

すると環境の選択メニューが表示されるので「Java」を選びます。
f:id:kikutaro777:20171207012044p:plain

暫く待つと、launch.jsonが自動生成されるので必要なパラメータを指定します。今回はportの部分を空文字から8080に変更しました。
f:id:kikutaro777:20171207012242p:plain

再度「デバッグの開始」(またはF5)を実行すると、無事にSpring Bootのロゴが表示されてアプリケーションが実行されました。
f:id:kikutaro777:20171207012436p:plain

こんな感じで非常に簡単です。

Java Test Runner

こちらも簡単で、JUnitのテストコードを書くと下図のようにテストメソッドの上に「Run Test」「Debug Test」が表示されます。Debug Testはブレークポイントを置いてテストコードをデバッグできる実行方法です。
f:id:kikutaro777:20171207014436p:plain

右側のチェックマークやバツマークはテストの成功可否を表します。

その他機能

最低限の機能は揃ってます。

コード補完
f:id:kikutaro777:20171207014846p:plain

インポートの補助
f:id:kikutaro777:20171207012755p:plain

JavaDocのツールチップ表示&Help表示
f:id:kikutaro777:20171207013613p:plain

ウォッチ式
f:id:kikutaro777:20171207013929p:plain

定義への移動や
f:id:kikutaro777:20171207014935p:plain

参照の検索
f:id:kikutaro777:20171207015031p:plain

ステップイン・ステップアウト・ステップオーバー
f:id:kikutaro777:20171207015143p:plain

まだまだ機能的に足りない点はあると思いますが、ちょっとしたJavaコードを書く場合などには軽量でサクッと動くVisual Studio Codeを利用するのもありではないかなと思います。Visual Studio CodeはLinuxでもMacでも動くので、Java開発者の方は是非お試しください。

最後にVisual Studio Codeと全然関係ないのですが、来月以下のイベントを開催するので、興味がある方は是非ご参加ください!!
sendgrid.kke.co.jp

KANJAVA PARTY 2017に行ってきました! #KANJAVAPARTY

6月24日(土)に大阪で開催されたKANJAVA PARTY 2017に参加してきました!

kanjava.connpass.com

f:id:kikutaro777:20170626010940j:plain

「関西Javaエンジニアの会」こと通称「関ジャバ」、イベントへの参加は今回が初めてでした(^^)昔からTwitterをみては「関西方面、楽しそうだなー。参加してみたいなー」と思っていたのですが、ようやく実行できました。

先に感想を書くと、とにかく「楽しかった!」です。セッションの内容が勉強になったのはもちろん、場の雰囲気とか、スピーカーの方々や参加者が楽しんでるなーと(^^)

百聞は一見にしかず、東京から参加してよかったです。

ということで、自分が聴いたセッションの感想等を簡単に書きたいと思います。

「関ジャバとJava」

関ジャバ会長 坂田さん @jukucho

compass公開時は「じゅくちょーのすべらない話」というタイトルでしたが、いつの間にか真面目なタイトルに変わってましたw

前説とのことでしたが、関ジャバへの熱い想いが沸々と伝わってくる良いお話でした。どういうコミュニティでありたいのか?どう歩んできたのか?1つ1つ想いがこもった言葉という印象でした。「イベントで至らぬ点もあるかと思いますが」と話されてましたが、終わった今、参加した側の感想としては、不満に思うこととか一切なくて、満足感しかなかったです。(至らぬどころか至りすぎる!と気配りの細かさを感じた1つはトイレ行くためのドアで、一度メインフロアをでるとオートロックされてしまう形式だったのですが、ずっとスタッフさんがいらっしゃっててドアを開けてくださるという…気配りすごいなと。)

余談ですが、じゅくちょーさんはJava DayのイベントやTwitterで拝見していて、今回勇気を出してご挨拶するぞ!と思っていたのですが、懇親会でLTした後にお声掛けしていただきました(>_<; LTで会社名出してたのですが、なんと昔、弊社のJava研修を昔されたことがあるとのこと!まさかそんなご縁があったなんてびっくり。ホントどこでつながってるかわらないものだなぁと。

そして早速イベントブログを書き上げられていました。懇親会(2次会)はわりと遅い時間までやってたのですが、そのあとに書かれているとは。。すごい(>_<;
jyukutyo.hatenablog.com

www.slideshare.net

「Spring Security にできること・できないこと」 @opengl_8080さん #KanJavaPartyB1

Java系の技術メモ三銃士の一人、@opengl_8080さんのセッションでした。

builder.japan.zdnet.com

発表資料や解説はQiitaに既にあがっています。必読。
qiita.com

Spring Securityはゼロ知識だったのですが、デモで実際のセキュリティ問題を見せながらの解説でめちゃくちゃ分かりやすく、為になりました。IPAの「安全なウェブサイトの作り方」をベースに紹介されていましたが、Web開発する際は必読の1つですよね。

www.ipa.go.jp

あとはもちろんこれ。

セッション中こんなツッコミいただいて


本を読んでた当時はWebばかりでメール関係ないなと読むのスルーしてたのですが、今はメールやってるので改めて読まないと(汗)(^^;

セッションはWeb系セキュリティを改めて復習しつつ、Spring Securityのカバー範囲がわかってよかったです。ちなみにデモはSpring Bootかと思いきや、なんとPayara!動かしてみよーっと。

github.com

「JUnit5の味見」山根英次さん(@e_yamane) #KanJavaPartyB2

JUnit5については、去年のJJUG CCC Fallで関ジャバ運営メンバーの@irofさんが発表されていました。セッションは聴けなかったのですが以下のスライドで勉強してましたので、少しだけ事前知識がありました。

あと今年4月のJJUG ナイト・セミナー 「テスティング特集」あたりでも。

jjug.doorkeeper.jp

Users Guideを読み進める感覚での発表で、2面あるスクリーンのうち1つをスライド、1つをデモ(Eclipse使って)されるという二刀流でした。

JUnit5で新しく追加されるメソッドが興味深い、というか使いたい!と思ったのでちょっとずつ試していきたいです。が、まだ変更はありそうなので現場で使うのは控えたほうがよさそうです。

「ストリーム処理ことはじめ ~ Akka Streams と RxJava」 にしかわささきさん @nishikawasasaki #KanJavaPartyB3

AkkaとかRxJavaって名前はよく聞くけど、さわったことなくてわかってないので参加しました。

序盤はStream APIの復習から始まり、Akkaの話という流れでした。ちなみに残念ながらRxJavaはないというw

Akkaでできることは何となくわかったのですが、自分の理解が足りてなくてJava 8のParallel Streamとどう違うのだろう、とか(この疑問自体が変なのかもですが(汗))感覚的に掴みきれないところがあって、触ってみないとなぁと思いました。

「Kafkaを使ってイベントを中心にしたアプリケーションを作ってみる。Spring Cloudにのせて。」 椎葉 光行(@bufferings)さん #KanJavaPartyA4

すごいワクワクしたセッションでした。というのもスライドがなんと1枚(>_<)!!!

こんなプレゼンもあるのかぁ、話術やデモ力がないと絶対できないなぁ。興味が繋がって広がっていく感じは自分が日々技術を調べて触ってる感覚に近くてワーワーって感じだった。

Event Sourcingって言葉をはじめて知りました。
docs.microsoft.com

あ、これに限らずCQRSとかAvroとかもですが。

あと自分が今まで開発してきたシステムでは、メッセージングを使うことが全然なくて、Java EE使っててもJMSは全く触らない世界でした。趣味でも触ったことなくてRabbitMQとかKafkaとかも名前だけ、みたいな感じ。今回のを機にイベントやメッセージング系を少し触ってみたいー。Kafkaについては、PayaraもCloud Connectorで使えるし試してみたい。

ブログも書かれていました!

bufferings.hatenablog.com

「 DevLOVE関西からギルドワークスへの越境(仮)」 中村 洋(@yohhatu)さん #KanJavaPartyA5

隣の女子部と迷ったのですが、コミュニティ系の話を聴きたいなーと思ってこちらを選びました。

最近GlassFish User Groupで運営に関わらせていただいたり、仕事でもSendGridでコミュニティ作リを意識してるので学びのために。

お話は全般とても共感できるものでしたが、所々耳が痛いっ(>_<;いうのもあって(「前提や制約を置かない」とか特に…)刺激になりました。少し前に自分自身を振り返る機会があったのですが、今後も定期的にかんがえねば。

それにしても、ギルドワークさんみたいな仕事、面白いなぁと聞きながら思ったのですが、現場によっては大変そうだよなぁ、、と。どうなんだろう。良い事例や悪い事例など、中の話を聞く機会があったら聞いてみたいと思いました。

『オフショア開発にも応用可能!? リモートチームの道具箱』 粕谷大輔(@daiksy)さん #KanJavaPartyA6

だいくしーさんを知ったきっかけは確かTwitterでトイレのドアノブが壊れて出れないという事件が流れてきた時だったと思います。最初笑ってたのですが(すみません)よく考えるとこれすごい大変で危ないよな。。と。あ、のっけから脱線してしまった。

セッション参加理由は「リモートワークって実際どんな感じなんだろうー」って気になってたためです。弊社は部門によって色々あると思いますが、あまり公にはリモートワークの実施を聞いたことがないです。自分が今いる部門はそういう取り組みに明るい部なので、事情によっては普通に認めてもらえる感じですが。

で、実際お話を聞くと、あー、やっぱり難しい部分はあるんだなーと。そんな中、色々工夫しながら、とてもバランス良い感じに実践されているんだなぁと。リモート側の立場を経験してみるとか、ちゃんと対面で話したいからきてもらう、というラインがしっかりしているからなんだろうなぁと。こういうのって、きっとチームをまとめる方(リモートワークを認めるか決めるかた)が、基本は人との対面コミュニケーションとか、皆が集まる場をとても大切にしていて、その中で、うまく認めていくからこそできるんだろうなーという感じがしました。もちろんプロジェクトの特性やチームによっては、いや、個々人がしっかり成果出すし、皆リモートで問題ないよ、みたいなのもあるのかもしれませんが。

毛づくろいのコミュニケーションとか面白いと思って、紹介されてた本を早速ポチリました。

異文化理解力――相手と自分の真意がわかる ビジネスパーソン必須の教養
エリン・メイヤー
英治出版 (2015-08-22)
売り上げランキング: 1,671

あとこれも読む。
developer.hatenastaff.com

感情増幅のBotとか取組み、というか発想がすごいなーと。楽しみながら仕事の効率化とかいいなーって思いました。

今回の関ジャバは会場がMSさんだったのですが、ちょうど前日にMackerelとAzureの連携がニュースになってたタイミングなので、何か色々すごい!
hatenacorp.jp


懇親会で自分がLTした後、だいくしーさんから話かけていただいて超びっくり(>_<;;LTで自分が今SendGridやっているという話を入れてたのですが、はてなさんがSendGrid使ってくださっていて声かけをしてくださるという温かさ。むしろこちらからご挨拶にいこうと思っていたので、はうあっ、って感じで心臓ドキドキでした。

ステッカーいただきました(^^)わーい!

f:id:kikutaro777:20170625234934j:plain

これで参加セッションは全て!横並びセッションも楽しそうなのばかりだったので、資料やツイートをみていきたいと思います。

ビアバッシュ / LT

懇親会でLTをさせていただきました(^^)大阪では笑いが大事、ということを忘れていたので前の方々が笑いをとってて結構焦りました。堀北さんの話とか入れておいて良かった…。

会場でJames運用されてる方も何名かいらっしゃって、おぉ、ってなりました。さすがJavaコミュニティ。

スライドの最後に小さく「to be continued … JJUG CCC Fall !」って入れてたのですが、@cero_tさんに「なんでCCCで発表できる前提ですかー!」ってツッコまれてびっくり(^^;見てる方は見てるのだな(汗)発表目指すぞー!という自分に気合いれるための表明でした。

会場

開催場所は福島駅にある日本マイクロソフトさんでした。ありがとうございました。
f:id:kikutaro777:20170626011143j:plain

余談系

案内の方が綺麗

初関ジャバで緊張しながら会場へ向かったのですが、駅降りて、地図見ながら建物近く来て、どこから入るのかなーと思ってたところ、関ジャバ案内を持った女性の方が立っていたんですが、え、なんか専属の方を雇ってるの??ぐらいに綺麗な方が。。普段なら自力で探すと思うんですが、(後多分冷静に考えると、持ってる看板だけでわかった気がするのですが)、「どこから入れば。。」と確認してしまうというキモ行動をしてしまいました orz

この時点で「関ジャバすごいな、やばいな、まじか」と一人でテンション上がるという。

子供めっちゃかわいい

@shinsukeodaさんがお子さん連れていらして、めっちゃ可愛かった(*‘ω‘ *)5歳の娘さんと3歳の息子さんで、2人ともちゃんと自分で年齢いってハイタッチしてくれました。超癒し。

懇親会で勇気出す

今回、せっかく遠征して関ジャバきたので、新しい方と話そう!!となんとなく心に決めてました。なので、LTが始まる前、お一人でいらっしゃった方へ勇気を出して話しかけて、いろいろお話しさせてもらいました。自分が人見知りなのでよく経験するのですが、最初のきっかけさえあれば話せるのに、そのきっかけを作り出せずぼっちになる、というのはやっぱりあるので今後もなるべく自分から頑張りたいなと思います。
 

ミニ四駆

懇親会参加のあと2次会も参加させてもらいました!で、なんと、あのミスターミニ四駆の@kiy0takaさんのお隣!!Java始めたころにJava Day Tokyo参加してLTがミニ四駆を語って終わりそうになる、というのみたときはホント衝撃というか、あの頃はまだコミュニティとかイベント全然知らなくて、これ大丈夫なのか!?とガチで心配した覚えがw

ブログあまりかけてないけど多分この年だったかと
kikutaro777.hatenablog.com

そんなこんなで、色々お話していたら見事に子供のころに好きだった「ダッシュ!四駆郎」へのワクワク感を取り戻してしまい、「ハイパーダッシュ!四駆郎」をポチってしまいました。この新しい四駆郎誕生の秘話をメッチャ熱く語ってくださって無性に読みたくなったというw ミニ四駆エバンジェリスト>

ハイパーダッシュ!四駆郎(1) (てんとう虫コミックススペシャル)

こざけさん最強

説明不要ですね。終始、圧巻でした!!

転職(社内)して半年ちょっと経った振り返りと今後

仕事の内容が変わってから半年+α経ちました。やっと新しい業務にも慣れてきたのと、最近社内で振り返り・今後について考える機会があったので書いてみます。

ポエムです。

受託開発からサービスサポートの世界へ

私は入社以来、約10年ほどエンプラ系の受託システム開発に従事してきました。そして去年、事業開発系の部門へ転職異動してSendGridチームにジョインしました。

SendGridはメール配信のクラウドサービスを提供している米国の企業で、弊社が国内の正規代理店となっています。現在はサポートを中心に、色々な作業をしていて、今までとは毛色の異なる仕事が多くて日々新鮮です。

井の中の蛙

振り返ると会社入ってから7,8年くらいは「会社がすべての世界」みたいに視野が狭い人間でした。(視野の広い人が多い会社なんですが…)

あるとき、初めてJavaのWeb案件に関わることになって、部内や社内に知見がなくて困っていた所、「日本Javaユーザグループ(Japan Java User Group, JJUG)」なるものがあることを知りました。はじめて勉強会に参加したとき「こんな世界があるのか!」と感動したのですが、今思えば、あまりにも井の中の蛙過ぎたんだよなぁと(´・ω・`)

ちなみに、このブログ読んで「へー、そんなのあるんだ」と思った方は是非5/20にあるJJUG CCC 2017 Springというイベントにご参加ください!

www.java-users.jp

Java楽しいワイワイ

JJUGの勉強会に参加して、そこで学んだことや日々の開発で知ったことをブログに書いてるうちに、徐々にTwitter等で新しいつながりができたりしました。アドベントカレンダーに誘っていただいたとき、とても緊張したことを今も覚えてます。

外で発表させていただく機会も徐々に増えました。一番緊張したのはやっぱりJJUG CCCだったかなぁ。久しぶりにスライドを持って来たら2014年!!そんなになるのか…。

発表の機会を通じて、段々と現実世界で人とお話する機会も増えました。元々すごいコミュ障人見知りであまり人と積極的に会話できないタイプだったので、人と話すことの大切さに改めて気付いたり(^^;

Java EEのプロジェクトを幾つかやって、その辺の話も取り上げていただいたり。

初めてのJava EE 6開発! 最初の壁をどう乗り越えた?──最新Java EE開発“虎の穴” 第1回 菊田洋一氏 - builder by ZDNet Japan

「顧客ニーズへの柔軟かつ速やかな対応」、「開発環境のカイゼン」──Java EE 6の採用で構造計画研究所が得たメリット - builder by ZDNet Japan

気が付けば本の執筆に声をかけていただいて、とても良い経験をさせていただきました。

Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)
きしだ なおき のざき ひろふみ 吉田 真也 菊田 洋一 渡辺 修司 伊賀 敏樹
技術評論社
売り上げランキング: 132,172

パーフェクト Java EE
パーフェクト Java EE
posted with amazlet at 17.04.27
井上 誠一郎 槙 俊明 上妻 宜人 菊田 洋一
技術評論社
売り上げランキング: 28,950

新しい環境での悩み

一方で泥臭い開発案件も多く、去年は厳しい案件にあたり心身ともに疲弊してしまいました。そんな中、社内で一番先鋭的な取組みをしてるSendGridチームに巡り合った形です。

メールといえばJavaMailって感じな自分でしたが、改めてみてみると、メール世界の奥深さにびっくりします。レピュテーションとかIPウォームアップとか色んな概念があって、海外ではメールに関連するあらゆるサービスがあります。

日々勉強(^^;

で、そんな中、先日とある面談したとき

「キクタローさんがジョインして、獲得したお客さんはどのくらいいるの?」

と聞かれたのですが、答えられれなかったんですよね。自分の話で興味持って登録してくれた人は具体的に特定しきれないので、数値を出すのも難しいですが、まぁ少ないだろうなと。

自分の考えではJavaでやってたように、コツコツと発信を続けて、何年かしたら、みたいに思っていたのですが、この歳になって求められるのは結果だよなぁと。

社外への転職と考えれば結果求められるのは当然だろうし…

……

かといって、自分としては今まで開発者だったイチエンジニアがいきなり「SendGridいいんですよ!」といっても響くわけがないと思ってて。

難しいなぁと。

なんかカリスマ的な人だったら、それだけで広まるんでしょうが。

自分のようなタイプはもっとサービスのことを色々話せるようになることを意識しながら、これまでやってきた技術とかと絡めて情報発信を積極的に続けるしかないと思っています。

ということで今後も色々発信していきたいと思います。もし

・ハンズオンでメール送信にSendGrid使うから説明プレゼンして欲しい
・アプリのバックエンドでメール送信したいサービスについて教えて

みたいなお話があればお声かけいただければと思います(^^)

今までだと以下のような関連で発信してるので、クラウドサービスのハンズオンで、とかXamarinみたいなモバイルアプリのバックエンドで、みたいな話とか。

・Java関連
sendgrid.kke.co.jp

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

kikutaro777.hatenablog.com

・Azure
qiita.com

・Xamarin
qiita.com

・Salesforce
kikutaro777.hatenablog.com

・Line Notify
sendgrid.kke.co.jp

・Google Cloud Platform
kikutaro777.hatenablog.com

・Cloud Foundry(Pivotal)

・Cognitive Services

今年は自分で何かサービスを作って、そのバックエンドのメールでPostfixとかApache JamesとかSendGridとか使って運用し、SMTPサーバとしての比較なんかもしていきたいです。

JShellで読み進める「Java本格入門」

4/18に発売された「Java本格入門」を買いました(^^)
f:id:kikutaro777:20170420185548j:plain:w300

発売にあたってのAcroquestさんブログエントリはこちら。
acro-engineer.hatenablog.com


編集の方の「『35歳からのJava再入門』が裏テーマです」が個人的にメッチャ刺さりましたw

ということで、もうすぐ37となる自分ですが…改めて初心に帰って再入門していこうと思います。

で、書籍はJava SE 8が前提なのですが、ふと以下の記事で書かれていた話(REPLツールを使うことにより、Java言語の勉強とかが手軽になる)を思い出して、JShell立ち上げながら読み始めることにしました。

builder.japan.zdnet.com

やり始めると意外と面白いです。自分だけかもしれませんが、歳を取ると、本を買っても(ある程度知っているプログラミング言語だと)ガチで手を動かしてコード書く機会って意外と少なかったりします。Javaの場合は特にIDE立ち上げて、実行して、書き換えて、の繰り返しなので、書籍の最初のほうとか意外と打たないのですよね(^^;

JShell使うと一番最初のHello Java Worldは

public class HelloWorld {
    public static void main(String... args) {
        System.out.println("Hello Java World!");
    }
}

次のように書けるし、コード補完も効くので手軽に試せます。

jshell> System.out.println("Hello Java World!")

JShellの勉強にもなるなーと思ったのが、次のコメントの部分とかで

jshell> //メッセージを表示します

jshell> /*
   ...> このような記号 で囲めば
   ...> 複数行のコメントを記載することもできます
   ...> */

あ、実行できるんだ!って当たり前か(^^;みたいに思ったり。

変数、型、リテラルの辺りも

int numberA; // int型のnumberAという変数を宣言する
numberA = 10; //numberAに10を代入する
System.out.println(numberA); //numberAの値を出力する

と本にはありますが、これをJShellで試していくと

jshell> int numberA
numberA ==> 0

jshell> numberA = 10
numberA ==> 10

jshell> System.out.println(numberA)
10

のようになって、intで宣言した変数で初期値かかないと0が入るのね、とか、ちゃんと代入されてるー、とか確認しながら本を読めて良い感じです。

そして、JShellの書き方がよくわからないときは以下を読めば解決!

最新Java情報局

Javaに再入門しながら、Java 9も触れられるという一石二鳥な感じ。やっぱりJShellいいなぁ。ということで、しばらく写経していこうと思います。

ちなみにJShellでライブラリなどの検証も簡単にできます。以下はSendGridのJavaライブラリを使った例ですが
sendgrid.kke.co.jp
書籍Chapter14辺りのApache Commonsとかでも使えると思います。

というわけで、「Java本格入門」の書籍で再入門しましょう!ちなみに私は紙の書籍で買いましたー。

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで
谷本 心 阪本 雄一郎 岡田 拓也 秋葉 誠 村田 賢一郎
技術評論社
売り上げランキング: 1,824

Java本格入門はKindle版も既に出てます。

ガッツリJava EEで作られたZEEF.COM

少し前にJava EE 8に関する情報が色々まとまっていて、ウォッチするのにいいなぁと思ったページがありました。

javaee8.zeef.com

それで「ZEEF」って単語を何となく覚えていたのですが昨日Twitterで

というのをみて「え!WildFlyで動いてるの!?」とびっくりしました。で、さらにびっくりしたのは、なんとこのサイト、フロントがJSFで作られているっていう。

トップ画面の上段にオートコンプリート付きのテキストボックスあるんですけど
f:id:kikutaro777:20150515225008j:plain

この辺はPrimeFaces使ってるっぽいです!
f:id:kikutaro777:20150515225038j:plain

昔、@aoetkさんが

aoe-tk.hatenablog.com

で色々紹介されていたように、オープンなサイトをJSFで、というのはあるにはあるのですが…(^^;

で、このzeef.comのアーキテクチャについてAdam Bienさんがブログでインタビュー回答みたいな形式で書かれていて非常に興味深いです。

A Java EE Startup: Filtering Information with zeef.com : Adam Bien's Weblog

Java SE 8、Java EE 7の組合せでアプリケーションサーバはWildFly 8.2。そしてアプリはWARじゃなくてEAR形式とのこと。そういえば自分、EARで固めたことないなぁ(^^;

先ほども書きましたが、フロントはJSFで、CDI管理BeanやBean Validationや一部JSFのバリデータを利用してるとのこと。

EJB(Stateless以外にEJBTimerなんかも使ってるようです)やJPA,JAX-RSも使って、ガチなJava EE構成っぽいです。セキュリティはJASPIC(Java Authentication Service Provider Interface for Containers)、ただしJASPIC自身はlow-levelなので、higher levelなのは作る手間もあったようで、それがモチベーションとなってJava EE 8 securityのExpert Groupに参加されてるそうです。って、書くとさらっとしてるけど、すごいなぁ(^^;;

で、JSF周辺ですが

OmniFacesやPrimeFaces、PrettyTimeなどを使っているそうです。

PrettyTimeって初めて知りました(^^;これPrettyFaces作ってるのと同じ所ですね。

www.ocpsoft.org

自分もOmniFaces使ってたり

kikutaro777.hatenablog.com

PrimeFacesもガッツリなので

kikutaro777.hatenablog.com

なんか日本では浮いてる感じなのかなぁ…(そもそもJSFとかね)みたいに結構ネガティブだったのですが、あながち間違った選択してないんじゃー、的な気持ちになって嬉しかったです(^^)

その他、Markdownの処理にはPegDown、HTMLのパーサにJSoup、RSS/AtomはROME、画像周辺はImage4JmgscalrBatik、他にもGoogle API client libraryやキャッシュやJPA以外のエンティティにInfinispanHibernate Searchも使っているようです。

Java技術てんこ盛り!使ったことないライブラリも多々あるので少しずつ触ってみたいなぁ。

パフォーマンスどうなの?って辺りには

Java EE is incredible fast. The website itself is now doing over 120k views a month and as mentioned above is running on a single server basically, which is not even that powerful.

とのことで

ですね。サーバのスペックまでは書かれてないですが、それほどパワフルではないとのこと。

で、JSFにも触れてます。

You occasionally hear that JSF is supposedly not suited for public web sites, since it would be slow and using a lot of memory. We found however that this is absolutely not the case.

これは自分がJSFやり始めた頃にもよく聞いて、「JSFは速度やメモリ的にオープンなサイトにはあんまり向かない」と教えられて育ったので結構衝撃的な一文でした(^^;

あわせてJSF関連のベンチマークも紹介されてたので、読みたいところです。

他にも色々細かい説明書かれているので、Java EEな方々には参考になるのではないでしょうか。英語で細かいニュアンスいまいちわからない所もありますが、めっちゃ面白かったです。

JJUG CCC 2014 Fallで感じたJavaの熱気

今日はベルサール西新宿で行われたJJUG CCC 2014 Fallに行ってきました。
(JJUG = Japan Java User Group , CCC = Cross Community Conference)

Javaを始めてちょうど2年くらい、JJUG CCCは過去ブログを追って数えてみたら今回で5回目の参加でした(^^;

それにしても…午前の段階から、今までに比べても参加人数が多い。

それもそのはず、登録者数をみたら650人超えw

実際の参加もかなりの人数に達したようです。

とりあえず参加セッションの感想など。

既にまとめられている方々も!皆さんはやい!


基調講演1 : これからのJavaエンジニアの生きる道

橋本 吉治さん(日本Javaユーザーグループ 副会長)

これから重要となる大事な3つの技術として、クラウド・人工知能・Javaを挙げられていました。私は学生時代に人工知能を専攻していたので、とても興味深く聞かせて頂きました。

IBMのWatsonがやってる処理の話とか、東ロボ君とか、この辺は知らないことが多かったです。日本では第五世代コンピュータプロジェクトで人工知能研究を牽引していた時代もあったし、是非実用レベルでの更なる盛り上がりを期待したいです。

講演後半はコミュニティに対する想い・熱い気持ちが聴衆に伝わってくる、とても良い基調講演でした。泣けました。

基調講演2 : Java 2014 将来に向かって

Simon Ritterさん

次の基調講演はUSのOracleでエバンジェリストをされているSimon Ritterさんでした。

内容的には、今年のJavaOne 2014で発表されていた内容ベースかなと。英語、とてもわかりやすく喋っておられてて、正直、頑張って聞き取りたかった(>_<)けど、通訳さんがすごいので、ついそちらに耳が集中してました(苦笑

ランチ

JJUG CCCでは毎回お昼は一人(いわゆるボッチ飯…?)だったのですが…今回は、大都会岡山からいらした@zephiransasさんからお誘いを頂きました(>_<)!!

@zephiransasさんにはずっとご挨拶したいなーと思っていたのですが、Java Day Tokyoとかではすれ違ってしまい、、、ついに念願叶いました!

そしてお昼ご飯、Oracleエースこと@yamadamnさんが私の分のお会計をサラッとされて、おごってもらってしまいました(>_<;;ひー、先日の火災の件でお気遣い頂いてしまった(汗)

「ここは私が」的に紳士な感じのお支払で、エースはホント色々エースなんだなーと(^^;惚れてまうやろー

Javaが見るニュータイプの夢 ~これからJavaはどう変わるか~

きしだ なおきさん

最近ガンダムをずっと観ていらっしゃるとのことで、タイトルがあれですが(^^;

ってか表紙の手書きクオリティ高いw

ニュータイプ=新しい型

ということで、ちゃんと関連していた(>_<)

主にProject ValhallaとProject Panamaの話をメインにされていました。

Value Typesは便利そう!だけど、予約語ホントどうなるんだろ(^^;
変数名valueは結構ある気がするw

スライドと合わせて次のエントリも必見ですね。



セッション後、きしださんによる「Javaエンジニア養成読本」サイン会が始まって、その場にいたので一緒にサインさせて頂くことに(>_<;;恐るべしきしださん効果

Spring Boot + Doma + AngularJSで作るERP(統合基幹業務システム)

松崎 学さん

裏枠のStream APIも聞きたかったのですが、自分の仕事にも近いので松崎さんのセッションへ参加しました。すごいコミコミで立ち見!

私の仕事でもERPはよく耳にして、自分達が構築する販売管理システムの後ろにいて、連携なども多々(^^;

ERPをマルチテナントなSaaSで提供という冒頭だけで「すごい!」という感じですが、なんといってもフレームワークの変遷が興味深いです。

Seasar2(Teeda + S2Dao)からJava EE 6(JSF + JPA)、そして今はSpring Boot + Doma + AngularJSとのこと。

Java EE 6からJava EE 7ではなく、Spring Bootを採用した経緯や理由が興味深々でした。

WebやるからにはJS避けられない時代を感じつつ、自分の場合はJSFに逃げてるなぁと(´・ω・`)その他、JPAとか含めて、色々と耳が痛い+共感するものが多かったです(^^;

息が長いシステムを前提としつつ、フロントエンド技術の移り変わりも想定・覚悟して、基幹系でこうした構成をとられていることに「すごい!」と(^^;

とりあえず@makingさんの「はじめてのSpring Boot」を読もう!(笑)

Java EE の新たな旅立ち : Java EE 8 へ向かって

寺田 佳央さん

ここも裏枠のトラブルシュート話と悩みつつ、やはりJava EE聞いておかねばと寺田さんのセッションへ。

Java EE 8の概要的なお話かな、と思っていたら、コード例など含めて詳しく話される形でした(お話にもありましたが、Java EE 8の仕様策定は現在始まった段階ですので、コード例などは今後大きく変わることもありえます)

スライド7枚目でJava EEのSpec Leadがズラっと並んでいる写真で「皆さん何人くらいご存知ですかー?」的に質問しつつ、意外と実際の名前を言えなかった寺田さんがお茶目な感じで面白かったです。

ちなみに私は左から2番目のLinda DeMichielさんと一番右のEd Burnsさん、あとEL式の方(調べたらChungさん?)しかわからなかったです…。おそらく@khasunumaさんがいらっしゃったらスラスラ名前をあげられるんだろうなぁ…と(^^;

もう少しこの辺も覚えていかねば(>_<)

Java EE 8はセキュリティとか認証まわりが楽しみ、というか、はよ欲しい…。

Java EE 6 Adoption in One of the World’s Largest Online Financial Systems (日本語)

岩崎 浩文さん

今年のJavaOne 2014でスピーカーもされた楽天の岩崎さんによるセッションで、JavaOne再演の日本語バージョンとのことでした。

GlassFishで開発を進めて途中からWebLogicへ移行する、などの話はかなり興味深かったです。

それを金融系のシステムで行う勇気がすごいなと(^^;

WebLogicやExadataなどOracle系が多かったですが、最後に「決してOracleのまわしものではないですよ」とのことで「Java EE 7対応の商用サーバがでるの遅い!」とビシッとおっしゃられていたのが印象的でした(^^;

Javaだからこそできる、ビズリーチの攻めのDB変更

久保 雅彦さん

株式会社ビズリーチ(BizReach)さんのスポンサー枠とのことでしたが、会社紹介はさらっとw
私はDBFluteの話を聞きにきたので良かったんですがw

「皆さんDB変更は好きですか?」から始まって、掴みはOKみたいな感じでした(^^;

話が上手くて面白いのですが、その根本にあるのは「現場話」だなーと。聞いてると「あるある」みたいな。

そういう意味では紹介されていた機能の多くが「うわー、それ便利」と思うものばかりで、タイプセーフやドキュメント自動生成、Alterのチェッカーや性能チェックなどなど、現場で役立つ機能が揃っている感じでした。

Modern Web Development with ninjaframework

吉田 貴文さん

Pure Javaで作られているWebフレームワーク「Ninja - full stack web framework for Java -」の紹介でした。

ゼロ知識からでも始められるチュートリアル的に1つ1つ丁寧に解説されていました。ちょっとしたWebを作る際には、やはりこういう軽量な感じのが便利だよなぁと改めて思ったり。

テンプレートエンジンにFreemarker、DBマイグレーションにFlywayなど、固定的に決まっているものがあるようですが、その辺りはフレームワークだしね、くらいで割り切って使うと学習コストも高くなさそうでいいなぁと。

プレゼン自体ははやめに終わってしまったのですが、続々と質問が出て、最後は時間通りでした。

あと全然関係ないのですが、スライドのフォントが好きでした(^^)たぬき油性マジックというものらしい!

フリーフォント『たぬき油性マジック』を公開しました。 | たぬきフォント

Java女子部設立から10ヶ月…私たち、こんなことしてきました!!

Java女子部メンバ

最後はJava女子部の活動報告を聞きにいきました(^^)

今年から色々活動されている話はJJUGを通じて知っていて、自分も会社の後輩や他部門の女性エンジニアに「Java女子部ができたらしいよ~面白そうだよ~」と情報流して、実際に参加とかもしてくれていました。

発表は女子部に所属されている方々から、それぞれの感想などを中心に話されていました。皆さん、それぞれ色々な想いを持って参加して、やはり女性ならではの観点なども(こうして聞いてみると、弊社は意外と女性エンジニアが多いんだなぁと)

やはり初めて社外の勉強会へ参加するにあたっての敷居とか(実際に敷居はないのですが、やっぱり初めて参加するときって色々不安、、)間口を広げるためにも女子部があるのは絶対良いなーと。

ということで、セッション聞いて、また社内の女性Javaエンジニアを探してコツコツ広めていこうと思いました。

そういえばDukeがリボンしてる女の子版みたいな絵がよく使われているなぁ、と思ったら、Duchess(ダッチェス)という公式キャラだったのにびっくりしました!


懇親会

朝10時から20時までセッションが続いて、懇親会へ。

今までTwitter上でしか面識なかった方々とも話せて楽しかったです(^^)

また、寺田さんから、私のブログを読んで参加されたという@yangping0211さんを紹介頂いてお話させて頂きました。びっくり!!

懇親会に初参加したときのドキドキは自分も未だ忘れられないし、人見知りなので中々周囲と話せなかったのもほろ苦い良い思い出(^^;@yangping0211さんは勇気出して超有名人な寺田さんにまず話かけられたそうで、すごい勇気いるけど、話をしたい方がわからないことも多々あるので、良い方法だなーと思いました。

懇親会では恒例のLT大会やJavaグッズのジャンケンなどもあり、大盛り上がりでした

懇親会の参加人数自体、今までの倍増って感じで100名近くの参加だったようです。すごい!

最後の締めは、さくらばさんに続いて日本人2人目のJavaチャンピオンに一番近いといわれる@bitter_foxさんによる一本締めでした。

まとめ

先日MSさんから立て続けにびっくりニュース(.NET Frameworkのサーバサイドクロスプラットフォーム対応とかコア部のOSS化とか…etc)があって、これはJava的には結構…とかも思ったりしながら今回のJJUG CCCに参加したのですが、JavaはJavaですごい盛り上がっているなぁと思いました。

技術的な盛り上がりもあると思いますが、コミュニティの熱気というか、そういう盛り上がりを強く感じました。

自分自身がそうだったのですが、仕事でJava利用を求められて、でも周囲に詳しい人がいない(じゃあなんでそんな選定してるんだよ、というのは置いておいて…政治的なこととかありますよね…大人って汚いゴニョゴニョ)、という立場にあると、こうしたコミュニティの存在は本当にありがたいです。

また、色々な方から先日のブログ(Javaエンジニア養成読本が出ます! - Challenge Java EE !)でも触れた火災巻き込まれのご心配、お気遣い頂き、ありがとうございました。「wishlistはよ」とたくさん温かいお言葉頂きました(´;ω;`)ブワッ 今はまだウィークリーマンションなのと色々バタバタしているので、新居が決まったら作らせて頂こうかなと思います(^^;

ちなみに@yy_yankさんから乃木坂46のクリアファイルをお見舞い品として頂きましたw
f:id:kikutaro777:20141116084742j:plain

人生初のサインも経験して、あらためて1000人規模でサインしていた堀北真希さんの大変さを僅かながら共感させて頂くこともできて感無量です!

Javaエンジニア養成読本が出ます!

11月11日に「Javaエンジニア養成読本」が出版されます。

この本は、Javaの最新動向を踏まえつつ、開発現場で役に立つような実践的内容を含むことを目標に企画されました。幅広い内容を6名の著者による共著で執筆したものです。

新人エンジニアの方や、最新のJavaを採用検討している方、開発現場へツールの導入検討される方など、様々な方々に読んで頂ければ幸いです。

私はJava EEのパートを担当させて頂きました。今年の7月くらいからブログが全く書けなかったのは、こちらに集中していたためでした(^^;



Javaエンジニア養成読本 [現場で役立つ最新知識、満載!] (Software Design plus)

執筆している当時、ちょうど仕事で新人さん(プログラミング経験はない方)のOJT担当をしていたのですが「この書籍を使えば幅広くまとまってて楽に教えられるのに…」と思っていました。そんな使い方もできる1冊ではないかな、と思います。

執筆メンバ&主な内容

本名は本に掲載されているので、ここではTwitterアカウントで(^^;

@kisさん

普通のJava書籍ではあまり触れられていないJavaの世界について書かれています。Javaの歴史やJavaを取り巻く様々な環境から、イベントやコミュニティなどについてまで触れられています。私も初めて知ったことも多く、かなり興味深い内容です(^^)

なお、本の主催、というか、声掛けは@kisさんからでした(^^)

@irofさん

Hello Worldから始まるJavaの入門記事を担当されました。「入門」となっていますが、かなり実践的な内容で、開発における勘所や注意点などが盛りだくさんです。新人さんだけでなく、経験者にとっても改めてJavaの基礎を再点検できる記事になっています(^^)

@bitter_foxさん

Java 8で入ったStream API、ラムダ式に関する記事です。執筆された@bitter_foxさんは、なんと学生さんです!
多分、日本で一番Java 8のStream APIやラムダ式に詳しい学生さんではないでしょうか…。なぜ?と思われた方は@bitter_foxさんの次のブログ記事を是非(^^)

@shuji_w6eさん

JUnit実践入門 ~体系的に学ぶユニットテストの技法」の書籍を書かれた@shuji_w6eさんのパートでは、GitやMaven、Jenkinsなど、現場のチーム開発に有用なツールについて書かれています。こうしたツール類は、まずは触ってみないと始まりませんので、記事を参考に触ってみて、現場導入のきっかけにして下さい。もちろんJUnitについても触れられていますが、本格的にJUnitを学ぶ際には「JUnit実践入門」を買いましょう(^^)

@ToshikiIgaさん

いがぴょんさんのパートでは受託開発の現場で行われる開発のフローや求められるスキルなどについて書かれています。これは、システム開発の経験がない学生さんや新人さんには是非一読してもらいたいです(^^)

自分(@kikutaro_)

私のJava EEパートについては後ほど簡単に触れます。

まわりのメンバが本当にすごい方々ばかりで、このような方々と名前を並べてもらって本当に恐縮です(^^;;

経緯

きしだなおきさん(@kis)から、今回の執筆に関してお声かけを頂きました。

Java EEに詳しい方は多々いらっしゃる中、なぜ私…と思いつつ、期待されていることは初心者向けの内容で書いてほしい、とのこと。

執筆など経験もなく、仕事もバタバタしそうだったので、当初は断ろう…と。

でも、きしださんからこんな機会を頂いて、もし断ったとして後悔しないのか??と考えると…これは絶対後悔する、と思い、挑戦する気持ちで執筆させて頂きました。

実際に書いてみると、Java EEを限りあるページで解説するのは難しくて…。

言葉遣いや文章構成の基礎的な部分から、読み手の気持ちになった観点、技術的な観点など色々な駄目出し・アドバイスを頂きました。とてもお手数をおかけしてしまったのですが、とても勉強になりました。

日本語のJava EE情報

Java EEのまとまった日本語情報が欲しい、という話は今でもよく耳にします。まず自分自身が昔そう思いましたし…(^^;そういう意味では、初学者向けのJava EE情報を執筆させて頂いて、これがJava EE学習のきっかけや何らかの機会になれば幸いです。

Java EEをある程度限られたページで解説するのは本当に大変で、今回はそういう点でもかなり苦労しました。最終的な構成は次の通りです。

  • JavaのWeb開発技術動向
  • Servlet
  • JSF
  • JAX-RS
  • JPA
  • CDI
  • EJB
  • Java EE開発環境構築
  • チュートリアル

ページバランスや内容に関しては、Java EEについてよくご存じの方にとっては色々と思う所があるかもしれません。読者の方からのフィードバックは、今後のためにもなるのでご指摘を頂けると幸いです。

なお、執筆の途中でGlassFish4.1が出てJava 8対応したり、あわせてNetBeans8.0.1が出てチュートリアルやりなおして、書き直しだったり(*´Д`)結構泣いてました。

感謝

本当に色々な方に御礼を申し上げたいです(^^)

Javaエバンジェリスト 寺田さん

元々、この「Challenge Java EE !」ブログを書き始めたのは、3年前くらいに行われた日本オラクルのJavaセミナー参加がきっかけでした。そのセミナーで、Javaエバンジェリストである寺田さんが

「海外と違って、Java EEの日本語情報がまだまだ少ないのは事実。皆さまが是非開発を通じて情報を発信して欲しい。そうしていくことで、日本における先駆者にもなれるかもしれない」

といった感じのことをおっしゃられていました。

当時は「へー」という感じでしたが、実際の開発を通じてブログをコツコツと書き続け、勉強会などにも参加していくうちに、今回のような機会を頂くことができました。

実際にはJava EEに詳しい方はたくさんいらっしゃるので、先駆者でもなんでもないのですが、いまだに日本語で最新のJava EEを記述した書籍や雑誌がないことを考えると、こんな機会を頂き、寺田さんの未来予想図はすごいなぁと(^^;本当に感謝です。

JJUGやコミュニティの方々

JJUG(日本Javaユーザグループ)とそれに関わる方々に大変感謝しています。

月1のナイトセミナーや年2回のJJUG CCC(クロスコミュニティカンファレンス)は企画や運営が本当に大変だと思うのですが、参加する側としては勉強になることだらけで、とてもありがたい存在です。

JJUGがなかったら、きっとモチベーションがこんなキープされることもなかったし、外の世界に出ることもなく社畜っぽい狭い世界での生活を送り続けていたのではないかなと(^^;

また、JJUGでは色々なコミュニティと共催イベントなどもあり、それらを通じてhtml5やJenkins、Gradleなどなど、色々なものを知ることができました。Jenkinsとか使ってなかったら、うちの現場はずっとビルドおじさん依存だったんじゃないかと…。

運営の方々以外にも、勉強会や懇親会に参加して色々とお話させて頂いている方々、Twitter上での会話でお世話になっている方々など…感謝してばかりです(^^;

ちなみに、今年の春にJJUG CCCで発表させて頂きましたが、本当に良い経験になりました。こうした機会を通じて色々な方と出会えたり、会社でセミナー発表を担当するようになったり、色々と変わりつつあります(^^;仕事が増えた

会社

今までやってきたJava EE開発は、もちろん一人でやっているものではなく、チームメンバと一緒にやってきました。ブログで発信してきた情報では、後輩が調べてくれたものなども多々あります。また、今回、原稿チェックも手伝ってもらったりもして、本当に感謝感謝です。

また、執筆に快諾頂いた会社や上司にも感謝です。基本シャドーワークとはいえ、早めに帰って家で作業する日もありましたので(^^;

余談

余談ですが…書籍発売についてブログなどに書いて下さいー、という状態になって「書くぞー」と思っていた矢先、信じられないことが起きました…。

住んでるアパートの隣の家が深夜に火事となり、パチパチパチと音がうるさく「え、雨すごい降ってるの…?」と窓を開けたら、隣家が火の海でした。私が開けた窓にも火が降りかかってくる勢いでした…(ちなみに隣家は空き家状態で人は住んでおらず)。

命の危険を生まれて初めて感じて、着の身着のまま、財布すら持たず逃げ出しました。

火が窓を割って中に入り、その結果、こんな感じに…。+゚(゚´Д`゚)゚+。

f:id:kikutaro777:20141103101153j:plain

何が悲しいって、今まで持っていた技術書が燃え、残ったものも消火による水浸しで捨てざるを得ない状態に…。

先日買ったばかりの「Java SE 8 実践プログラミング」も…灰と水びたし…ひどい(´;ω;`)ウッ

f:id:kikutaro777:20141103101621j:plain

やはり電子書籍にしておかないと…と思いましたが、もれなくKindleも水浸しで死亡でした orz

そんな悲しいことはありつつ、今は「Javaエンジニア養成読本」が書店に並ぶことを楽しみに、気持ちを切替中です。

とりあえず命があって良かったなぁと。

手持ちの技術書が一切なくなってしまった状態で、はじめて手元に届く技術書が「Javaエンジニア養成読本」となりそうです(^^;;

執筆が終わってひと段落と思いましたが、こちらの片付けが忙しくなり、またブログ更新が滞ってしまいますが…これからも宜しくお願いします(^^)

#JavaDayTokyo 2014に参加して熱気を感じてきました!

今日は仕事仲間に申し訳ないと思いつつも、品川プリンスホテルで行われたJava Day Tokyo 2014に参加してきました(^^)

f:id:kikutaro777:20140522153758j:plain

去年は秋葉原のUDXで開催されましたが、コミュニティからの意見・要望をフィードバックに(主に椅子の座り心地が悪かった…等らしいですが…笑)会場を品プリにされたそうです(^^)ということで、椅子の座り心地は確かに凄く良かったです!

熱気

去年生まれて初めて本場のJavaOneに参加して、サンフランシスコにとんでもない数のJavaエンジニアが世界中から集まる熱気を肌で感じたのですが、さすがにそれとは規模が全然違うものの、今日のJava Day Tokyo 2014もかなり熱気があったように感じました。

歩留りはわからないですが、事前申し込みで2000人超えてるとおっしゃられていたような。

基調講演の会場は横に広く、大きなスクリーンが5つくらい並んでて、本場JavaOneに似たような雰囲気があったように思います。

セッション

参加したのは以下でした。

事前の申し込みでは、わりとLambdaやJavaFXを中心としていたのですが、行ってみたら事前登録してなくても(最悪立ち見で良ければ)参加できる方式になっていたので、結局Java EEを中心に参加しました(^^;

基調講演自体はわりと去年のJavaOneに等しい内容だったかと思います。なので、以下で櫻庭さんがレポートされていた

を読んで頂くと内容が分かる気がします。

チェスは3Dデモの他、ロボットアーム付きのチェス台も披露されていて、本当にJavaOneのようでした。DukePadも実物でした(^^)

もちろん違う部分もあるのですが、JavaOneになかった中で一番インパクトがあったのは、LEGO MindstormsによるDuke、名付けてLego Duke Segwayでした(^^)

すごいかわいかった(>_<;そして、Segwayみたいな車輪がついていて、何もせず置くと倒れてしまうのですが、電源入れてジャイロでバランスとるようなプログラムによって動くという!

デモではsshでDukeにログインしてたり、いろんな意味で面白かった(^^;

後半は、中身の解説をするために、胴体と頭を分断されて無残な姿になってしまい…結構せつなかったです(^^;

基調講演ではその他、何社かの日本企業によるJava活用事例が紹介された他、JJUG(Japan Java User Group)会長の鈴木さんが登壇されました。去年も登壇されていたと思いますが、改めて、JavaコミュニティとOracleの関係が強いのだなぁという印象を受け、JJUGや他のJUGが日々色々と盛り上げてる結果がこうした大きなイベントに繋がって熱気を生んでいるんだろうなぁ、と思いました。

「皆様、是非JJUGにご参加を」

とのことで、会員はメーリングリストに登録するだけで、以下JJUGのサイト右上の「入会案内」を辿って登録できます。

http://www.java-users.jp/

f:id:kikutaro777:20140523060308j:plain

その他Twitterは@JJUG、Facebookはjapanjugで、勉強会やイベントの情報が得られます。

おっと、基調講演の冒頭にあって忘れてはいけないのが、Java SE 8のJavaDoc日本語化!!わーわー

http://docs.oracle.com/javase/jp/8/api/index.html
f:id:kikutaro777:20140523012437j:plain

かなり力が入ってますね(^^)さっそくPublicKeyでも記事に!

Java EEに関して

1つ1つ細かく書けないので、参加した話の中から幾つか印象に残ったものをまとめます。

Java EE 8のRoadmap

JSR Submissions 2014 Q2
Early Draft Review 2015 Q1
Public Review 2015 Q3
Proposed Final Draft 2015 Q4
Final Release 2016 Q3 あわせて Java EE 8 RI/SDK

JAX-RS action based MVC

Java EE 8のfeature候補の中にJAX-RS action based MVCという文字がありました。

さよならJSF…?

訂正
上記書いてましたが、以下コメントの通り、JSFがなくなるという話ではないので訂正しますm(_ _;m 私自身、日々JSFを利用しており、あまりに世間で叩かれるのでちょっとネガティブな書き方になってしまいました(^^;

Java SE 8 & Java EE 7

現時点でJava EE 7対応しているAPサーバはGlassFishとWildFlyのみで、かつJava SE 8もサポートしてるものはWildFly(これも完全サポートかわからないですが)のみ。従って、各種APサーバの対応を待つ必要があるとのこと。

寺田さんがされていたデモは非常に有用そうだったので、はやく対応版が出て、ああいうことに使いたいですね(^^;

なおGlassFishは

と、日本GlassFishユーザグループの副会長様より教えて頂きました。

GlassFish 4.0.1

現在GlassFishは4.0.1b5ですが、4.0.1は今年のJavaOneまでには…という感じで頑張っているようです。期待!

GlassFishは死んでないのでは?

今日最後にあったJava Day Tech Nightでは、Ask the Expertということで、オラクル本社から来日されたエキスパートの方々へ質問するセッションがあったのですが、そこでJava EEのエバンジェリストをされてるReza Rahmanさんが

  • GlassFishはかなり品質を大切にしている
  • 中途半端なものは出したくない
  • 近々、GlassFishのチームからロードマップなども公開する予定

といった発言をされていて、まだまだGlassFish、大丈夫そうじゃないか!思ったりしました。WildFlyをウォッチしつつも、やはり自分はGlassFishをしばらく中心に触っていきたいと思います。

Togetter

#javadaytokyoや各セッションごとのハッシュタグ含めて、Oracle ACEの@yamadamnさんがTogetterでまとめられていました(>_<;はやいっ

すごいボリューム!!読むだけでも何となく雰囲気が伝わったり、情報が得られるのではないかと思います。

戦利品

入場200名までらしいDukeのノベルティ(写真左)とアンケート回答でもらったノベルティ(写真右)
f:id:kikutaro777:20140522221831j:plain

ボトル買ってしまった…(^^;会社でどっかオフサイトとか行くとき持っていこうw
f:id:kikutaro777:20140522232731j:plain

あと入場の際に配られたパンフなんですが…あれ目が(つд⊂)ゴシゴシ

f:id:kikutaro777:20140522221929j:plain

なんじゃこりゃああああ(;゚ロ゚)

f:id:kikutaro777:20140522221759j:plain

ということで、以前インタビューして頂いた記事が、なぜか人気記事No.2という位置づけに入れて頂いてるようですm(_ _;)m汗汗汗

この記事はJava EE 7による開発ではなくJava EE 6での開発ですが、もし今日のJava Day Tokyo 2014を通じてJava EEに興味を持った方がいらっしゃったら、採用や開発の際、少しでも何かの参考になれば幸いです…m(_ _;)m

以下リンクから上記パンフのリンクは辿れます。

Java SE 8の存在が大きい気がしますが、なんだかんだでJava自体すごい盛り上がってる感じもある中、こうしたイベントで熱気を感じて、ホント楽しい一日を過ごせました(>_<)!

また、Java EEのセッションを通じて、かなり注目されてるんじゃないかな?と感じました。これもひとえにずっとJava EEを宣伝されてる寺田さんを中心としたOracleさんやコミュニティの方々の力によるものなんだろうなと改めて感じました。

まさに

みたいな(^^;

追記

書き忘れてしまったのですが、去年のJava Day Tokyo 2013でミニ四駆LTで聴衆をすごい笑いと緊張・不安(オィオィこのままJava一切触れずにミニ四駆だけで終わるんか、という)に包み込んだ方が、Java Day Tech NightのAsk the Expertの最初の質問者として選ばれ、ミニ四駆ネタを絡めたQAされてました(^^;;ムチャぶりすぎる気がしてちょっと気の毒な気もしましたが…(^^;

Expertが「この場の趣旨わかってる?それは机の端で2人で話せばいいんじゃ?」みたいなエキスパートな回答してて笑いましたが…でもその後真面目な回答もされてました(^^)こういう緩さも好きです。

ResourceBundleでクラスパス上にない外部ファイルを指定する

最近Java EEを離れ気味でJava SEのコードを書いているのですが、その中で多言語対応が必要となりました。

前に「Java技術最前線」で読んだ気が…と思って再度確認したら、ResourceBundleの記事ありました。他もいくつか調べつつ、やはりこれを使うのが良さそうだなぁと。

で、NetBeansでまずは簡単にサンプルを。って数分で終わりますが。
Mavenで作ったプロジェクトにresourcesフォルダを追加して以下のような2つのプロパティファイルを置きました。

dictionary.properties

hello = HELLO!

dictionary_ja_JP.properties

hello = こんにちは

f:id:kikutaro777:20140218222905j:plain

で、以下のコードを実行

package jp.co.hoge.resourcebundlesample;

import java.util.ResourceBundle;

public class App 
{
    public static void main( String[] args )
    {
        ResourceBundle resouce = ResourceBundle.getBundle("dictionary");
        System.out.println(resouce.getString("hello"));
    }
}

結果は

f:id:kikutaro777:20140218223227j:plain

あっさり。

これをベースに、やりたいことは最初に挙げた記事群でほとんど満たされているのですが、今回作ってるものはフォルダ構成がガッチリと決められてしまっていて、プロパティファイルの置く位置が微妙。

例えば乱暴な例ですが、WindowsのD:\tmp\settingみたいな絶対パスとか、resourcesではない別のフォルダとかにプロパティを置きたい場合にResourceBundleでのプロパティファイル指定ってどうするんだろ…と。

で、StackOverflowに同じ質問が。

How to load a resource bundle from a file resource in Java?

ResourceBundle.getBundle()でクラスローダを指定できるシグネチャのメソッドがあって、そこにFileから取得したURL配列のURLClassLoaderを指定する方法。ほぉ…

以下コードで試してみました。さきほど置いたプロパティファイルを移動させて、実行ファイルとは別ドライブにフォルダを作って、そこに配置。

f:id:kikutaro777:20140218224223j:plain

プロパティファイル内の定義も少し変えて

dictionary.properties

hello = HELLO! from my drive 'D'

dictionary_ja_JP.properties

hello = こんにちは Dフォルダにあるプロパティだよ

みたいな。で以下のコードを実行。

package jp.co.hoge.resourcebundlesample;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Paths;
import java.util.Locale;
import java.util.ResourceBundle;

public class App 
{
    public static void main( String[] args ) throws MalformedURLException
    {
        File dicDir = Paths.get("D:\\tmp\\setting").toFile();
        URLClassLoader urlLoader = new URLClassLoader(new URL[]{dicDir.toURI().toURL()});
        ResourceBundle myResource 
            = ResourceBundle.getBundle("dictionary", Locale.getDefault(), urlLoader);
        System.out.println(myResource.getString("hello"));
    }
}

実行すると

f:id:kikutaro777:20140218224451j:plain

おお、ちゃんと読んでる。

一応言語も切り替えてみる。

f:id:kikutaro777:20140218230704j:plain

で、実行すると

f:id:kikutaro777:20140218230726j:plain

ja_JPのプロパティにあたらなかったので、dictionary.propertiesがちゃんと読まれたようです。

クラスローダまわりってあまりちゃんと理解してないので、こういうシンプルなのを例に理解を深めたい所(^^;

追記
Oracleの@den2snさんから以下コメントもらいました!

上記のサンプルはMavenを利用したプロジェクトだったのですがクラスパスの通し方がイマイチよくわからない…のでMaven使わないプロジェクト作って試してみました。

コードは最初の

package jp.co.hoge.resourcebundlesample;

import java.util.ResourceBundle;

public class App 
{
    public static void main( String[] args )
    {
        ResourceBundle resouce = ResourceBundle.getBundle("dictionary");
        System.out.println(resouce.getString("hello"));
    }
}

を利用して、プロパティファイルは後半のサンプル同様にDドライブの適当なフォルダへ。

コマンドラインだと-classpathを利用すると思うのですが

とのことで、NetBeansでプロパティからフォルダパスを追加しました。

f:id:kikutaro777:20140219004015j:plain

実行すると

f:id:kikutaro777:20140219004255j:plain

あっさり。こうすれば、わざわざ自分でURLClassLoaderないので楽ですね(^^;

Mavenはどうすればいいんだ…。

ChefのCookbookでJavaとGlassFishをインストールしてみました

ここ最近、Windows Azureを利用してUbuntu Linuxの仮想マシンを作って、そこからknife-azureで別の仮想マシンを作って…ということをしました。

段々Windows Azure関係なくChef-Soloの話になってるので、いったんタイトル変更(^^;

今日はそこからさらに、knife-soloでサードパーティのCookbookを使ってJavaやGlassFishのインストールをしてみました。

文字で書くとわかりにくいので…絵にすると以下のような感じです。

今までが

f:id:kikutaro777:20140113041733p:plain

で、今日は

f:id:kikutaro777:20140113214650p:plain

です。

「入門Chef Solo」

今までずっとググりながら手探りでやってたのですが、やっぱり「入門Chef Solo - Infrastructure as Code」買いました(^^;

自分が買ったのは以下PDF版です。

入門Chef Solo - Infrastructure as Code
伊藤直也
達人出版会
発行日: 2013-03-22
対応フォーマット: EPUB, PDF

Amazon Kindle版は以下。

やっぱり買って良かった(^^!色々頭の中が整理されました。
もっと細かく読み込んでいかねば。

JavaとGlassFishのCookbook

OpsCodeで公開されていた以下サードパーティのCookbookでインストールを試してみました。

今回はあくまでもお試しレベルなので、最終的には環境に合わせて自分でCookbookやRecipeを準備するほうがいいのかもしれません。

  • Chef Cookbook: java

http://community.opscode.com/cookbooks/java

  • Chef Cookbook: glassfish

http://community.opscode.com/cookbooks/glassfish

実行した手順

わかりにくくなるので、いくつかの手順ごとに図をつけて青い吹き出しで実行した操作を書いておきます。

f:id:kikutaro777:20140113215935p:plain

リポジトリ作成

knife soloコマンドでchef-repoという名前のリポジトリを作成しました。

knife solo init chef-repo

f:id:kikutaro777:20140113220255j:plain

今回は「/home/ユーザ名」で実行してるので「/home/ユーザ名/chef-repo」ができました。

JavaのCookbook取得と配置

Cookbookはコマンドで取得してみました。まずはJavaから。

knife cookbook site download "java"

f:id:kikutaro777:20140113220853j:plain

解凍します。

tar zxvf java-1.17.6.tar.gz

解凍されたフォルダ「java」はmvコマンドでchef-repoのcookbooksに移動させました。

knife-soloでchef-soloインストール

次にJavaを入れたいリモートマシンにコマンドでchef-soloを入れます。
リモートのほうは、knife-azureで構築してから何も触っていない状態で、Rubyもインストールされていませんが、以下コマンドで普通にchef-soloがインストールされました。Rubyは組込みでインストールされたっぽいです。

f:id:kikutaro777:20140113222427p:plain

knife solo preapre ユーザ名@Javaを入れたいリモートのIP

f:id:kikutaro777:20140113222644j:plain

しばらく待って

f:id:kikutaro777:20140113222928j:plain

インストールされたっぽい!そして「Javaを入れたいリモートのIP.json」のファイルがnodesフォルダ配下にできました。
(これもカレントによってできる場所変わるので、最終的にはchef-repoのnodes配下に置きました)

一応リモートのほうにログインしてfindでchef探したらありました。

せっかくリモートにログインしたので、試しに「java」と打つと以下のような結果でした。

f:id:kikutaro777:20140113223242j:plain

仮想マシン作ってから何もしてないのでJavaも入ってません。

で、一旦Javaを入れるリモートは置いといて、手元の作業マシンに戻ります。

続けて以下作業をしました。

f:id:kikutaro777:20140113224726p:plain

jsonファイルを編集

さきほど生成された「Javaを入れたいリモートのIP.json」をviで以下編集しました。

{
  "java": {
    "install_flavor": "oracle",
    "jdk_version": 7,
    "oracle": {
      "accept_oracle_download_terms": true
    }
  },
  "run_list": [
    "recipe[java]"
  ]
}

最初はrun_listの部分だけ書いていたのですが、デフォルトだとOpenJDKの6がインストールされてしまいました(^^;

今回自分が入れたかったのはOracleのJDK7なので、上記のようにattributeの設定が必要なようです。

この辺の書き方が最初よくわからず、購入した「入門Chef Solo - Infrastructure as Code
」を読みつつ、OpscodeのCookbookページを見ながらやりました。

Chef Cookbook: java
http://community.opscode.com/cookbooks/java

慣れて使いこなせれば色々なインストールができそうなので強力そうだなぁ。

knife solo cookでJavaインストール

設定ができたので

knife solo cook ユーザ名@Javaを入れたいリモートのIP

を実行しました。何回もパスワード聞かれてあれですが(ここは何か設定がありそうだな…)

f:id:kikutaro777:20140113225537j:plain

失敗…。落としたJavaのCookbookにあるmetadata.rbの中身をみると

depends "windows"
depends "aws"

とあったので、これが足りてない様子。このCookbookの依存は自動で取得したりはしない…のかな?(^^;この辺がまだよくわかってないです。

自分で取得してCookbookに配置すればいけそうですが、今回手抜きでこの2行を削除して再度実行しました。

するとズラズラとメッセージが出て

f:id:kikutaro777:20140113230118j:plain

f:id:kikutaro777:20140113230124j:plain

いけたっぽい(^^;

確認のため、再度リモートのマシンにログインしてjavaコマンドを幾つか試してみると

f:id:kikutaro777:20140113230502j:plain

f:id:kikutaro777:20140113230508j:plain

できてる!すげー!

ということで、ちょっと手抜きしてますが、以下の所まで出来ました。

f:id:kikutaro777:20140113230834p:plain

残るはGlassFishですが、手順的にはこれもJavaと同じで、今回は以下手順でやりました。

GlassFishのCookbook取得

knife cookbook site download "glassfish"

解凍してchef-repoのCookbook配下に配置。

今回Javaを入れたマシンと同じマシンにGlassFishを入れるので、先ほどと同じjsonファイルにrecipeのglassfishを追加しました。

{
  "java": {
    "install_flavor": "oracle",
    "jdk_version": 7,
    "oracle": {
      "accept_oracle_download_terms": true
    }
  },
  "run_list": [
    "recipe[java]",
    "recipe[glassfish]"
  ]
}

で、knife solo cookを実行します。

knife solo cook ユーザ名@Javaを入れた(かつ今からGlassFishを入れる)リモートのIP

メッセージが色々と出てきて

f:id:kikutaro777:20140113231317j:plain

f:id:kikutaro777:20140113231325j:plain

なんかいけたっぽい(^^;

ログインして確認した所

f:id:kikutaro777:20140113231430j:plain

おお、GlassFishが入ってる!

ちなみに上記手順のデフォルトだとdomainまでは生成されず、インストールだけです。

f:id:kikutaro777:20140113232957p:plain

今回はこの後、いったん手でdomain作って実行してみた所、以下のように管理コンソールが確認できました!
(とりあえずテキストブラウザ確認っていう変な感じですが…まあおいておいて)

f:id:kikutaro777:20140113231539j:plain

domainを作成するrecipeもあるので、この辺を使っていけば自動化もできそうですね。
その辺も時間をみて触っていきたいと思います。

今回Linuxでやりましたが、仕事ではWindows Serverが多いので、Windowsベースにchef-solo使えるようにしないと(^^;

作業マシンがLinuxでノードがWindows Serverとかもできる…のかな?色々調べて行かないと。。。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村