「Javaエンジニア勉強会~Java最新トピックスと活用ユーザーLT~」のイベントレポートお届けいたします。前回も大好評だったJavaエンジニア勉強会の第2弾!ITエンジニアの保有スキルランキング第1位(※)のプログラミング言語「Java」についてJavaチャンピオンとJava活用ユーザーが集まり、最新トレンド共有や活用事例を語る勉強会イベントを開催いたしました!登壇者はこちらのお二人!(登壇順に記載)Hayateさん/パーソルキャリア株式会社パーソルキャリアでコンサルを経験して昨年エンジニアの道へ!前職は電機メーカーでオフラインソフトウェア設計開発に従事。2018年7月より、マイクロソフト・コーポレーションで日本人初のクラウド・アドボケイトとして活動を開始。Framework-Hayateさんは、Javaを学び始めて1年!今回は社内で行われている内製エンジニアによる勉強会の事例をご共有いただきました。社内勉強会の始まりパーソルキャリア社内での勉強会は「Webアプリ勉強会」としてスタート。Webアプリの基本やフレームワーク、Webセキュリティのような一般的な内容はもちろんのこと、dodaを開発する上で配慮すべきポイントも抑えたコンテンツが含まれていて、エンジニアだけでなく、ディレクターなど、誰でも参加できるスタイルの勉強会から始まったそうです。Frameworkに刷新されたことでした。開発のベースとなるフレームワークが変わることで、当然実装のお作法も変わってくることから、正しいお作法を押さえ、開発効率をあげられるようにすることを目的にエンジニア向けの勉強会をスタートしました。この勉強会は、初期の勉強会とは異なり、下記のテーマ別に各担当者が「調べ」「発表し」「教えあう」構成としました。Config・AOP・Junit5、Mockitoこのように、ほとんどのテーマで実演パートがあり、テーマによってはdodaにおける使われ方の事例も紹介し、相互理解を深められるように工夫したのだとか。AOPについて勉強会内容の一例として、Hayateさんが取り組んだAOPパートの詳細をご共有いただきました。Programming(アスペクト指向プログラミング)の略称。コンピュータプログラムの特定の振る舞いを「アスペクト」と呼ばれる昨日単位として分離して記述し、プログラム中の様々な対象に適用できるようにする手法です。この、AOPを使うと、オブジェクト指向ではできないオブジェクト内に散財した機能をひとまとめにすることができます。横断的な書き方をすると、品質欲求自体は満たすことができてもプログラム全体の見通しが悪く、開発効率や保守性が低下する恐れがあります。このような場合、アスペクトを使うと、アスペクトが横断的なコードをまとめてくれているので、モジュールごとに見に行かずともログ出力ができるようになります。AOPを用いてコンソール上で任意のメソッド実行前後にメッセージを出力するという実演も行いました。1pom.xmlにAPOライブラリーを追加<dependency>タグを追加することでAOP関連のライブラリが使用可能となります。Advice.java)4AOP用のbean.xmlを作成(beanAop.xml)5Mainクラスを作成(Main.java)この1〜5までを実行すると、下記のような結果で出力されます。アノテーションを使用してさらに簡略化することもできます。pom.xmlにaspectjライブラリーを追加し、Aspectクラスを作成。次に、PointCutを設定します。以上を踏まえてAdviceを作成し、PointCutを記載してみると上記のようになります。これで、全てのメソッドで発生した例外に対する例外処理を定義することができます。このような内容でAOPに関する勉強会を開催したそうです。勉強会では人に説明できるくらい自分が詳しくなる必要があるため、理解を深めることができたのだとか。まとめ開発チームには勉強会文化が根付いており、勉強会は頻繁に行われていますが、特に実際に手を動かし触りながら学ぶことや、教えあうことの重要性を感じたそうです。上記のAOPの内容も、自分が調べて理解し、他のメンバーに教えた内容とのことですが、このようにメンバー一人一人が発表者になることで、受け身の勉強会から脱却することができます。「dodaではこうやって使われている」など実業務との関連性を意識して勉強会を行うのもポイント。活用する際の便利なツール群を、リアルホワイトボードを使ったご説明や、デモを交えながら紹介いただきました!まずはJavaのマスコットキャラクターDukeのご紹介!絶対覚えて帰ってほしいとのことでした◎Java17の新機能概要Java9以降、Javaのバージョンアップが頻繁に行われるようになりました。言語に関するアップデートについてはこちらを参照してほしいとのこと。以前よりもより使いやすく、楽にかけるようになっています。Java17までのアップデートの詳細が知りたい場合は寺田さんのGitHub上のこちら。細かなアップデート情報がまとめられています。Handlesをピックアップしてご紹介いたします。フィールドの変数や配列に対して強い型付けを持って参照ができます。操作やリフレクションなどの操作に利用可能です。Handlesは、全ての方にとって必要なものではないですが、ハイパフォーマンスを求められるようなプロダクトを作っている場合には活用できるもの。ライブラリーやフレームを作っている方がいれば、この知識をきちんと持っておいた方が良いとのこと。sun.misc.Unsafeが使えなくなり、これに置き換えるためのクラスという位置づけとなることに注意が必要です。Enterpriseここからは、Cloud環境においてJavaをどのように使っていくのかをデモを通してご紹介していきます。ここでまず重要になるのはフレームワークの選択。下記のような様々なフレームワークが用意されています。(非常に多く使われている)・Microprofile系(旧JavaEEの陣営)・Quarkus・OpenLiberty・Payara・Helidonまた、統合開発環境も下記のように様々。Codespaces(Microsoft)今回はVSCodeを用いてデモを行います。このほかにもCI/CD環境や実行環境においても様々な選択肢があります。実行環境についてはリアルホワイトボードを使用してご説明いただきました!・IaaS物理サーバーの上に仮想環境があり、その上にOS、JDKやTomcatのようなランタイムがありその上にアプリケーションを作ってデプロイする構成となります。今までオンプレミスで作っていたものをクラウドに持っていきたいというシチュエーションではIaaSを使うことができます。・PaaS構成はIaaSと似た物理サーバーの上に仮想環境があり、その上にOS、JDKやTomcatのようなランタイムがありその上にアプリケーションを作ってデプロイします。これらすべてをプロバイダがカバーするもののこと。Serviceなどがあります。CloudはSpringの開発者専用のソフトとしてマイクロソフトがリリースしました。Serviceに関連しています。Initializrこのサイトでは、JavaのSpringプロジェクトを簡単に作ることができます。必要事項を記載してGENERATEを押下するとコードが作成されます。上記はJavaの基本的なコード。コマンドでソースコードをビルドし、テストコードをテストして成果物ができます。コマンドを実行すると今作った成果物が動かせるようになります。repositoryにソースコードをアップデートすることもできます。ここからは、GitHubのCodespacesを使った便利なTipsをご紹介。Codespacesを使うと、ブラウザ上でそのままコードを書けるようになります。これを使えば、たとえば急に出先で何かの作業をしなければいけない!となってしまった時に便利。こちらは、ただブラウザで開発できるようになっただけではありません。ローカルで編集したコード内容がブラウザにも自動リアルタイムで反映されます。この機能を使うとリアルタイムでコードを共有しながら開発ができるようになります。続いて、これをPaaS環境に持っていきます。叩くと、Azure上にデプロイをするためのいくつかの項目が聞かれるようになります。デプロイするための設定項目が追加されます。どこに、どういう名前でインストールするかなどをカスタマイズし、実行。コマンドを入力すると自動的にAzureの環境上にデプロイされます。Actionsを活用できます。選択、ここにアクセスするための機密情報を記載し、GitHubのworkflowを作成、yamlファイルを作成して実行したいもののイメージを作ります。Appsの中にデプロイされています。Appsにおいては、CI/CDの設定を行うことや、Revision管理の項目では古いバージョン、新しいバージョンを選んで管理することもできます。Actionsを使うことで、GitHubにソースコードをプッシュするとビルドし、デプロイするというところまでをすべて自動化させることができるようになります。寺田さんは、自分たちにとって何が重要でどのツールを使うことが最適なのかを考えながら、ツールを選んでいってほしいと締めくくりました。“(Q)こんな質問、お門違いならごめんなさい。エンジニアになりたてでまだ実はJavaできません。何から手を付けるべきか、学んでいく上でのポイントなどもご教授いただけますと幸いです。”Hayateさん:実際に私が壁にぶち当たったのは、その質問でした。本を読んでも実業務に即活かせるっていうわけではなかった。オンラインで受講できるテックキャンプ等に参加して実際に手を動かして誰かにレビューもらえた経験がよかったと思いました。“(Q)勉強会の仕組みは外部講師ですか?内製ですか?”Hayateさん:内製です。みんなで持ち寄って勉強しました。“(Q)開発しているのは社内システムですか?”Hayateさん:toC向けのシステムで、dodaというサービスになります。勉強会が頻繁に開催される文化すごいです。うちはなかなか長続きしない・・・”Hayateさん:規模的には10人程度です。全員参加という感じです。いい規模感だと感じています。前職でも勉強会主導していた方がリードしてくれました。“(Q)寺田さんはどこで情報収集していますか?”寺田さん:ネット上が基本で、特に私は海外からの情報が主です。チャンピオンからの情報なども見ています。“(Q)おすすめのJDKディストリビューションを教えて欲しいです。各ディストリビューションの違い等も。”寺田さん:会社的にいうと、Microsoftです(笑)実際には、どこで動かすかによって変わってきます。開発で使うのであれば、無料で使えるものを使ってもいいと思う。本番環境で使うときは「サポート」という視点からしっかり吟味すべき。“(Q)せっかくならAzureの話も聞きたい。Igniteが熱いし。笑”寺田さん:今日Azureの話もしました。時間があれば最近リリースした機能を使ってデモで披露したかったのですが、時間が足りませんでした...。機会に!“(Q)ウチ5年位全然更新していないのですよね。まずいでしょうか?”寺田さん:もしそれが社内システムで外部からのアクセスがそんなにないのであればそのまま放っておいてもいいかもしれません。一方で、外部に公開しているサービスである場合は絶対に変えた方がいいです。セキュリティの脆弱性に関わることになるので、大きなトラブルのもとになる可能性は高いです。“(Q)エンジニア2年目です。いった勉強会はじめてです。CI/CD、Jenkinsしか知らないのですが(社内でそれつかっていた)、他オススメありますか?>寺田様。最近は色々なものがありますので、会社で使いやすいものを使ってみてください。Hayateさん:私もJenkinsが主流です。“(Q)すごく個人的な質問なのですが、寺田さん開発機ってどんなPCなのか気になる。