【イベントレポート】Javaエンジニア勉強会 ~Java最新トピックスと活用ユーザーLT~

f:id:pcads_media:20211220145153j:plain

こんにちは!TECH Street編集部です!

今回は2021月11月4日(木)に開催した、 「Javaエンジニア勉強会~Java最新トピックスと活用ユーザーLT~」のイベントレポートお届けいたします。

前回も大好評だったJavaエンジニア勉強会の第2弾!ITエンジニアの保有スキルランキング第1位(※)のプログラミング言語「Java」についてJavaチャンピオンとJava活用ユーザーが集まり、最新トレンド共有や活用事例を語る勉強会イベントを開催いたしました!

登壇者はこちらのお二人!(登壇順に記載)

Hayateさん/パーソルキャリア株式会社
パーソルキャリアでコンサルを経験して昨年エンジニアの道へ!
前職は電機メーカーでオフラインソフトウェア設計開発に従事。

寺田 佳央さん/マイクロソフト・コーポレーション
2016 年 7月、日本人で 2人目となる Java Champion に就任。2018年7月より、マイクロソフト・コーポレーションで日本人初のクラウド・アドボケイトとして活動を開始。

それでは早速ご紹介してまいります!


エンジニア勉強会-Webアプリ、Spring Framework-

Hayateさんは、Javaを学び始めて1年!今回は社内で行われている内製エンジニアによる勉強会の事例をご共有いただきました。

社内勉強会の始まり

f:id:pcads_media:20211220145411j:plain

パーソルキャリア社内での勉強会は「Webアプリ勉強会」としてスタート。Webアプリの基本やフレームワーク、Webセキュリティのような一般的な内容はもちろんのこと、dodaを開発する上で配慮すべきポイントも抑えたコンテンツが含まれていて、エンジニアだけでなく、ディレクターなど、誰でも参加できるスタイルの勉強会から始まったそうです。

Spring Frameworkの導入

Spring Framework導入のきっかけは、dodaで使用されるフレームワークがSpring Frameworkに刷新されたことでした。

開発のベースとなるフレームワークが変わることで、当然実装のお作法も変わってくることから、正しいお作法を押さえ、開発効率をあげられるようにすることを目的にエンジニア向けの勉強会をスタートしました。

この勉強会は、初期の勉強会とは異なり、下記のテーマ別に各担当者が「調べ」「発表し」「教えあう」構成としました。

・Spring概要、Springbootについて
・MVC(Annotated Controller、Request Mapping、Handler Methods)
・Validation
・MVC Exceptions、MVC Config
・AOP
・Junit5、Mockito

このように、ほとんどのテーマで実演パートがあり、テーマによってはdodaにおける使われ方の事例も紹介し、相互理解を深められるように工夫したのだとか。

AOPについて

勉強会内容の一例として、Hayateさんが取り組んだAOPパートの詳細をご共有いただきました。

AOPとは、Aspect Oriented Programming(アスペクト指向プログラミング)の略称。コンピュータプログラムの特定の振る舞いを「アスペクト」と呼ばれる昨日単位として分離して記述し、プログラム中の様々な対象に適用できるようにする手法です。

この、AOPを使うと、オブジェクト指向ではできないオブジェクト内に散財した機能をひとまとめにすることができます。

例えば、ログ出力について。
横断的な書き方をすると、品質欲求自体は満たすことができてもプログラム全体の見通しが悪く、開発効率や保守性が低下する恐れがあります。

f:id:pcads_media:20211220145515p:plain

このような場合、アスペクトを使うと、アスペクトが横断的なコードをまとめてくれているので、モジュールごとに見に行かずともログ出力ができるようになります。

勉強会ではSpring AOPを用いてコンソール上で任意のメソッド実行前後にメッセージを出力するという実演も行いました。方法は以下の通り。

①pom.xmlにAPOライブラリーを追加
<dependency>タグを追加することでAOP関連のライブラリが使用可能となります。

②AOPを利用するBeanクラスを作成(AopBean.java)

f:id:pcads_media:20211220145558p:plain

③AOPを挿入するクラスを作成(Method Advice.java)

f:id:pcads_media:20211220145653j:plain

f:id:pcads_media:20211220145842j:plain

④AOP用のbean.xmlを作成(beanAop.xml)

f:id:pcads_media:20211220145930j:plain

⑤Mainクラスを作成(Main.java)

f:id:pcads_media:20211220150002p:plain

この①〜⑤までを実行すると、下記のような結果で出力されます。

f:id:pcads_media:20211220150238j:plain

また、アノテーションを使用してさらに簡略化することもできます。まずは、pom.xmlにaspectjライブラリーを追加し、Aspectクラスを作成。

f:id:pcads_media:20211220150341p:plain

次に、PointCutを設定します。

f:id:pcads_media:20211220150429j:plain

以上を踏まえてAdviceを作成し、PointCutを記載してみると上記のようになります。これで、全てのメソッドで発生した例外に対する例外処理を定義することができます。

このような内容でAOPに関する勉強会を開催したそうです。勉強会では人に説明できるくらい自分が詳しくなる必要があるため、理解を深めることができたのだとか。

まとめ

開発チームには勉強会文化が根付いており、勉強会は頻繁に行われていますが、特に実際に手を動かし触りながら学ぶことや、教えあうことの重要性を感じたそうです。

上記のAOPの内容も、自分が調べて理解し、他のメンバーに教えた内容とのことですが、このようにメンバー一人一人が発表者になることで、受け身の勉強会から脱却することができます。

また、「dodaではこうやって使われている」など実業務との関連性を意識して勉強会を行うのもポイント。

皆さまも社内勉強会を実施される際は、「メンバー同士で教えあう」「実業務と関連づける」といったポイントをぜひ意識してみてください◎

 

最新の Java 動向とクラウド環境における Java の利用について

今回は、Java SE 9 から先日リリースされた Java 17 の新機能の概要及び、クラウド環境で Java を活用する際の便利なツール群を、リアルホワイトボードを使ったご説明や、デモを交えながら紹介いただきました!

f:id:pcads_media:20211220150534j:plain

まずはJavaのマスコットキャラクターDukeのご紹介!絶対覚えて帰ってほしいとのことでした◎

Java17の新機能概要

Java9以降、Javaのバージョンアップが頻繁に行われるようになりました。特に言語に関するアップデートについてはこちらを参照してほしいとのこと。以前よりもより使いやすく、楽にかけるようになっています。

また、Java17までのアップデートの詳細が知りたい場合は寺田さんのGitHub上のこちら。細かなアップデート情報がまとめられています。アップデートの中からVariable Handlesをピックアップしてご紹介いたします。

Variable Handlesについて

Java 9 で Variable Handles と呼ばれる新しい API が追加されました。これは Java 7 の MethodHandle を拡張し、クラス java.lang.invoke.VarHandle でフィールドの変数や配列に対して強い型付けを持って参照ができます。ただし変数の参照だけでなく、Atomic 操作やリフレクションなどの操作に利用可能です。(引用:JEP 193: Variable Handles について

このVariable Handlesは、全ての方にとって必要なものではないですが、ハイパフォーマンスを求められるようなプロダクトを作っている場合には活用できるもの。もし、ライブラリーやフレームを作っている方がいれば、この知識をきちんと持っておいた方が良いとのこと。特に、sun.misc.Unsafeが使えなくなり、これに置き換えるためのクラスという位置づけとなることに注意が必要です。

Enterprise

ここからは、Cloud環境においてJavaをどのように使っていくのかをデモを通してご紹介していきます。

ここでまず重要になるのはフレームワークの選択。下記のような様々なフレームワークが用意されています。

・Spring Boot (非常に多く使われている)
・Microprofile系(旧JavaEEの陣営)
・Quarkus
・OpenLiberty
・Payara
・Helidon

また、統合開発環境も下記のように様々。

・IntelliJ IDEA (JetBrains)
・Eclipse(Eclipse Foundation)
・NetBeans(Apache)
・VSCode(Microsoft)
・GidHub Codespaces(Microsoft)

今回はVSCodeを用いてデモを行います。このほかにもCI/CD環境や実行環境においても様々な選択肢があります。

f:id:pcads_media:20211220150822j:plain

実行環境についてはリアルホワイトボードを使用してご説明いただきました!

・IaaS
物理サーバーの上に仮想環境があり、その上にOS、JDKやTomcatのようなランタイムがありその上にアプリケーションを作ってデプロイする構成となります。今までオンプレミスで作っていたものをクラウドに持っていきたいというシチュエーションではIaaSを使うことができます。

・PaaS
構成はIaaSと似た物理サーバーの上に仮想環境があり、その上にOS、JDKやTomcatのようなランタイムがありその上にアプリケーションを作ってデプロイします。これらすべてをプロバイダがカバーするもののこと。

・Container
サーバーレスで使うことができるContainer Instanceと、Container Apps(*11月2日プレビュー版リリース)、PaaSで使うことができるApp Service Container、Kubernetes Serviceなどがあります。

・その他
Azure Spring CloudはSpringの開発者専用のソフトとしてマイクロソフトがリリースしました。

キーワードはKubernetes Service。これらすべてがKubernetes Serviceに関連しています。

デモ:Spring Initializr

f:id:pcads_media:20211220152413p:plain

このサイトでは、JavaのSpringプロジェクトを簡単に作ることができます。必要事項を記載してGENERATEを押下するとコードが作成されます。

f:id:pcads_media:20211220151640j:plain

上記はJavaの基本的なコード。これを書いた後に > mvn clean package コマンドでソースコードをビルドし、テストコードをテストして成果物ができます。次に > mvn spring-boot:run コマンドを実行すると今作った成果物が動かせるようになります。

f:id:pcads_media:20211220152535j:plain

GitHubのprivate repositoryにソースコードをアップデートすることもできます。ここからは、GitHubのCodespacesを使った便利なTipsをご紹介。

f:id:pcads_media:20211220152634j:plain

GidHub Codespacesを使うと、ブラウザ上でそのままコードを書けるようになります。これを使えば、たとえば急に出先で何かの作業をしなければいけない!となってしまった時に便利。

さらにこちらは、ただブラウザで開発できるようになっただけではありません。

f:id:pcads_media:20211220152725j:plain

ローカルで編集したコード内容がブラウザにも自動リアルタイムで反映されます。この機能を使うとリアルタイムでコードを共有しながら開発ができるようになります。

続いて、これをPaaS環境に持っていきます。

f:id:pcads_media:20211220152816j:plain

mvn com.microsoft.azure:azure-webapp-maven-plugin:2.2.0:config を叩くと、Azure上にデプロイをするためのいくつかの項目が聞かれるようになります。

f:id:pcads_media:20211220152906j:plain

このコマンドを叩くとpom.xmlにAzure にデプロイするための設定項目が追加されます。どこに、どういう名前でインストールするかなどをカスタマイズし、実行。そして、mvn clean package, mvn azure-webapp:deploy のコマンドを入力すると自動的にAzureの環境上にデプロイされます。

また、CI/CDの場合は、GitHub Actionsを活用できます。
GitHubの管理画面 Setting の中から Secret を選択、ここにアクセスするための機密情報を記載し、GitHubのworkflowを作成、yamlファイルを作成して実行したいもののイメージを作ります。

f:id:pcads_media:20211220152955j:plain

この中に記載されているaz containerapp updateは、先日リリース先日リリースされたばかりのAzure Container Appsの中にデプロイされています。

f:id:pcads_media:20211220153059j:plain

このContainer Appsにおいては、CI/CDの設定を行うことや、Revision管理の項目では古いバージョン、新しいバージョンを選んで管理することもできます。また、シークレット情報やIngressを使うことも◎

このようにGitHub Actionsを使うことで、GitHubにソースコードをプッシュするとビルドし、デプロイするというところまでをすべて自動化させることができるようになります。

寺田さんは、自分たちにとって何が重要でどのツールを使うことが最適なのかを考えながら、ツールを選んでいってほしいと締めくくりました。

 

まとめ

今回は、新人エンジニアによる勉強会事例のご共有やJavaの最新トレンドをご紹介いただきました!

次のページでは、当日のQ&Aを紹介します◎

>>次のページへ


 

参加者からHayateさんへのご質問

“(Q)こんな質問、お門違いならごめんなさい。エンジニアになりたてでまだ実はJavaできません。何から手を付けるべきか、学んでいく上でのポイントなどもご教授いただけますと幸いです。”
Hayateさん:実際に私が壁にぶち当たったのは、その質問でした。本を読んでも実業務に即活かせるっていうわけではなかった。オンラインで受講できるテックキャンプ等に参加して実際に手を動かして誰かにレビューもらえた経験がよかったと思いました。

“(Q)勉強会の仕組みは外部講師ですか?内製ですか?”
Hayateさん:内製です。みんなで持ち寄って勉強しました。

“(Q)開発しているのは社内システムですか?”
Hayateさん:toC向けのシステムで、dodaというサービスになります。

“(Q)どのくらいの人数規模感で勉強会開催されたのでしょうか? 勉強会が頻繁に開催される文化すごいです。うちはなかなか長続きしない・・・”
Hayateさん:規模的には10人程度です。ほぼ全員参加という感じです。ちょうどいい規模感だと感じています。前職でも勉強会主導していた方がリードしてくれました。

 

参加者から寺田さんへのご質問

“(Q)寺田さんはどこで情報収集していますか?”
寺田さん:ネット上が基本で、特に私は海外からの情報が主です。開発フレームワークやツール関連であれば、その Web サイトから直接情報を仕入れますし、また海外のJava チャンピオンからの情報なども見ています。Twitter なども見ています。

“(Q)おすすめのJDKディストリビューションを教えて欲しいです。 各ディストリビューションの違い等も。”
寺田さん:会社的にいうと、Microsoftです(笑)
実際には、どこで動かすかによって変わってきます。開発で使うのであれば、無料で使えるものを使ってもいいと思う。本番環境で使うときは「サポート」という視点からしっかり吟味すべき。

“(Q)せっかくならAzureの話も聞きたい。Igniteが熱いし。笑”
寺田さん:今日Azureの話もしました。時間があれば最近リリースした機能を使ってデモで披露したかったのですが、時間が足りませんでした…。またの機会に!

“(Q)ウチ5年位全然更新していないのですよね。まずいでしょうか?”
寺田さん:もしそれが社内システムで外部からのアクセスがそんなにないのであればそのまま放っておいてもいいかもしれません。一方で、外部に公開しているサービスである場合は絶対に変えた方がいいです。セキュリティの脆弱性に関わることになるので、大きなトラブルのもとになる可能性は高いです。

“(Q)エンジニア2年目です。こういった勉強会はじめてです。CI/CD、Jenkinsしか知らないのですが(社内でそれつかっていた)、他オススメありますか?>寺田様。そしてパーソルさんは何使っていますか?”
寺田さん:GitHub Actions もそうですし、CircleCI など最近は色々なものがありますので、会社で使いやすいものを使ってみてください。

Hayateさん:私もJenkinsが主流です。

“(Q)すごく個人的な質問なのですが、寺田さん開発機ってどんなPCなのか気になる。”
寺田さん:昔は Solaris とか Linux を使っていました。今現在は Mac Book Pro 16 inch を使っています。UNIX 系 OS が好きです。

“(Q)マイクロソフトでMac?!自前PC?”
寺田さん:会社で購入しています。目の前にMacが3台あります。Windowsのことほとんど知りません!(笑)

“(Q)MavenとGradleとAnt、寺田さん的評価?を聞いてみたいです。”
寺田さん:これは宗教戦争になります・・・(笑)これも本当に好みです!

“(Q)Webでペアプロ最高ですよね。やっています。さっきおっしゃっていましたが、寺田さんも今でも実際にやる事ありますか?”
寺田さん:今ピン芸人的な活動をしているので、人と一緒にコードを書く機会はあまりありません。お客様と PoC をするときはペアプロ・モブプロをすることがあります。

“(Q)Duke は何をモチーフに作られたのでしょうか?”
寺田さん:Java の生まれた歴史になりますが、Java は元々組み込み機器用、今でいう IoT デバイス用の開発言語として作られました。そして、最初のデモ用の組み込み機器 (Start7という名前) の画面のヘルプツールとしてできたのが Duke でした。後に Java のマスコットキャラクターになりました。

“(Q)Azure DevOpsとGitHub Actionsだったらどちらがおすすめでしょうか? ランナーはセルフホステッドにする予定です。”
寺田さん:場合にもよるので一概には申し上げにくいのですが、最近は GitHub Actions で実施される方が増えてきています。

“(Q)FWの使い方を学ぶには、最終的にはAPIDocを見るしかないのでしょうか。 なにかお勧めの学び方とかありましたらご教授下さい。”
寺田さん:そうですね、基本的には API Document を見て学ぶことが多いのですが、フレームワークの使い方を学ぶ場合は、フレームワーク側で用意されているドキュメントやサンプル・コードを見て、動きを確認します。

“(Q) Javaは今後、将来性があると思いますか?Microsoftに行かれたのは、何か思うことがあったのでしょうか?”
寺田さん:Javaは今でも大好きですし、将来性もあると思います。世界的な Java コミュニティもとても盛り上がっています。Javaを盛り上げていこうという想いを持っている方がいっぱいいるので、今後すぐに廃れるってことはないと思います。マイクロソフトに移ったのは、タイミングが大きく影響しています。Java の 20周年のイベントを無事終了したのと、そしてマイクロソフトが新しい道を切り開こうとしているタイミングが重なり、新しい道で何かできるのではないかと考えるようになりました。所属当時一緒に活動をしていた元同僚は皆素晴らしい方々ばかりでしたので離れるのは寂しい気持ちもありました。

イベントレポートは以上となります。次回のイベントもお楽しみに!