SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers Summit 2023 セッションレポート(AD)

Java開発の生産性を上げるためにMicrosoftが取り組んでいること

【9-B-2】Microsoft のモダンなエンタープライズ Java アプリ開発手法のご紹介

  • X ポスト
  • このエントリーをはてなブックマークに追加

 2021年5月、Microsoftはプログラミング言語Java向けの開発キット「Microsoft Build of OpenJDK」の提供を始めた。オープンソースのJava開発キット「OpenJDK」を同社でビルドし、無償の長期サポートを付けたものだ。OpenJDKビルドの提供開始前から、MicrosoftはJava開発者に向けたツールやサービスを続々と提供している。パブリック・クラウド・サービス「Microsoft Azure」でも、Javaアプリケーションの実行環境を提供しており、相当数のJava開発者がAzureでJavaアプリケーションを稼働させている。米MicrosoftのSenior Cloud Advocateを務める寺田佳央氏が、MicrosoftがいかにJavaとJava開発者に貢献しているのかを解説してくれた。

  • X ポスト
  • このエントリーをはてなブックマークに追加

積極的に投資し、優秀な人材も集めてJavaに貢献していく

 寺田氏は、MicrosoftがJavaに積極的に貢献していることを示す近年の出来事として2つ挙げた。1つは、Javaの将来の仕様などについて話し合う場である「Java Community Process(JCP)」に参加したこと。2つ目は米Oracleが主催する年次開発者イベント「JavaOne」にスポンサーとして参加し、基調講演にMicrosoftの幹部が登壇したことだ。

 JCPには2021年に参加し、2022年11月には新しい仕様の認可などに責任を持つ「Executive Committee」メンバーとなっている。投票で選ばれるExecutive Committeeのメンバーになったことは、MicrosoftがJavaコミュニティで厚い信頼を集めていることをあらわしていると言えるだろう。

Microsoftは、JCPのExective Comitteeに投票で選ばれた
Microsoftは、JCPのExecutive Committeeに投票で選ばれた

 そして寺田氏は、MicrosoftがJavaに積極的に投資し、優秀な人材を世界中から集めていることをアピールし、MicrosoftがJavaをサポートする体制が万全なものであることを強調した。寺田氏によると現在、MicrosoftにはJavaに精通した技術者が数多く在籍しており、中にはJavaの仕様策定を担当していた人物もいるそうだ。

 ここで寺田氏は、MicrosoftがJava開発者向けに提供しているツールの例として、「Visual Studio Code」向けのJava関連拡張機能を挙げた。世界全体で利用者が200万人を突破するほどの人気を博している。寺田氏はVisual Studio CodeとJava関連拡張機能を組み合わせて利用することで、開発環境の整備が楽になり、開発効率を大きく高めることができると説明する。

 Javaは、どのようなOSを使ってプログラムを開発しても、完成したプログラムはJava実行環境さえ用意すればコンパイルし直すことなくさまざまなOSで動作する。その特徴を表した「Write once, run anywhere」という標語をご存じの方も多いだろう。

 しかし、現実にはそうはいかないことも多い。ある開発者が作ったプログラムが、他の開発者の環境では動かないことも発生する。また、開発したプログラムをテスト環境や本番環境に持っていくと問題が発生することも少なくない。

コンテナでVS Codeを起動して開発

 寺田氏はこのような開発環境の違いに起因する問題を解決するツールとして、Visual Studio Codeの拡張機能である「Dev Container」を挙げた。これは、コンテナ内に構築した開発環境を使うための機能拡張だ。コンテナ内に開発環境を整備して開発チームに配布すれば、開発環境の違いに起因するトラブルに悩む必要がなくなることだ。

Dev Containerを利用することで、開発環境だけでなくテスト環境や本番環境も統一できる
Dev Containerを利用することで、開発環境だけでなくテスト環境や本番環境も統一できる

 ここで寺田氏は、実際にDev Containerを使用したデモを披露した。ソースコードをGitHub上のレポジトリで管理しているという、チーム開発では一般的な例を想定したものだ。寺田氏は、デモに使用しているMacでVisual Studio Codeを起動し、「sw_vers」コマンドを実行してVisual Studio CodeがmacOS 13.2で動作していることを確認した。

 続いて寺田氏は、Visual Studio Codeで「Dev Containers: Reopen in Container」というコマンドを実行した。Visual Studio Codeが再起動するが、再起動後に実行環境を確認してみるとLinuxで動いていることが分かる。macOSではなく、開発用コンテナでVisual Studio Codeが起動していることだ。寺田氏は、開発用コンテナで起動したVisual Studio Codeを使ってJavaのコードを編集し、GitHubにコミットする様子を披露した。

 さらに寺田氏は、デモで使用しているGitHubレポジトリにはCI/CD(継続的インティグレーション/継続的デリバリー)の仕組みも組み込んであると明かした。GitHubが提供する自動化機能「GitHub Actions」を利用したものだ。

 GitHub Actionsを利用するには、「.github」ディレクトリの中にある「workflows」というディレクトリに設定を記述したYAMLファイルを置く必要がある。今回のデモでは、MicrosoftのOpenJDKビルドを使用して、Mavenを実行、その後にDockerイメージをビルドして、最終的にはAzureのサーバーレス・コンテナ・サービスである「Azure Container Apps」にデプロイするように設定していた。CI/CDの作業が終わり、アプリケーションのWebサイトにアクセスしてみると、寺田氏がソース・コードに加えた変更が反映されていた。

AIに開発作業を助けてもらう

 ここで寺田氏は、昨今のAI(人工知能)の目覚ましい進化に話題を切り替え、「今後はAIの進化によって、アプリケーション開発の形が大きく変わっていく」と予想した。実は、開発現場でのAIの活用はすでに始まっている。しかし、現時点ではAIによる成果物がすべて正しいとは期待できない。寺田氏も、「ちゃんと知っている人が、AIの成果物を見て正しいかどうかを判断する必要がある」と注意した。

 それでも、「ちゃんと知っている人」が上手に活用すれば、現時点でもAIは、開発生産性を大きく上げてくれる。ここで寺田氏が紹介したのが、「GitHub Copilot」と「ChatGPT」だ。どちらもVisual Studio Codeの拡張機能として利用できる。

AIの技術を活用した「Github Copilot」と、「ChatGPT」によって、開発生産性を大きく上げられる
AIの技術を活用した「Github Copilot」と、「ChatGPT」によって、開発生産性を大きく上げられる

 ここで寺田氏は、Visual Studio CodeでJavaのソース・コードを開き、その途中に「PetオブジェクトからJSON文字列を生成」というコメントを入れた。

 するとその直後、コメントの直下にまとまった量のコードが灰色の文字で現れた。GitHub Copilotがコメントの意図を解釈して組み立てたコードだ。寺田氏はここで「Tab」キーを押した。するとGitHub Copilotが提案したコードの文字の色が灰色から、通常の色に変わり、開発中のコードに組み込まれた。

 寺田氏はその後も、コメントを入力し、AIがコードを生成する様子を何度か披露した。AIが古いスタイルのコードを生成したこともあったが、コメントに「Stream APIを利用して」と書き加えると、指示通りに新しいスタイルのコードを出力した。

 ここで寺田氏は、ChatGPTのデモに移った。先ほどのコードを表示したまま右クリックして、現れたメニューから「ChatGPT: Find bugs」という項目をクリックした。すると、エラー・ハンドリング・コードが実装されていないなど、開発中のコード全体を分析して、欠落している部分や誤っている部分を指摘し始めた。

 さらにChatGPTに、コードを最適化させてみると、開発中のコードとは違う書き方のコードを提示した。加えて、データベースのカラムとテーブルを伝えて、特定の条件のデータを引き出すSQL文を書くように指示したところ、指示通りのSQL文を出力した。そして、このSQL文をJava Persistence APIのJPQLで書き直させてみたり、さらにJPQLでも型安全な形で書き直させてみたりしたが、ChatGPTはことごとく指示通りのコードを出力した。

 寺田氏は話題を変え、アプリケーションがデータベースにアクセスする際の認証について話し始めた。現在は、データベースへのアクセスに必要なパスワードを環境変数に書き込んでいる例が多いが、その環境に外部から入り込んで「env」というコマンドを実行してしまえば、環境変数の一覧をすぐに確認できてしまう。環境変数に認証情報を書き込むのは、決して安全とは言えない行為だ。

 寺田氏は、Microsoftが現在「パスワードレス」を積極的に推奨していると言う。具体的には「Azure Active Directory」を利用して、アプリケーションがデータベースにアクセスするときに、Azure Active Directoryからアクセス・トークンを発行し、アプリケーションはそれを使ってデータベースにアクセスする仕組みだ。

 ここで寺田氏はJavaアプリケーションからデータベースにパスワードレスでアクセスする様子をデモで披露した。寺田氏は実際にアクセスする前に、各種設定ファイルを開いて、どこにもパスワードが書かれていないことを見せた。そして、Azure Container Appsの「Service Connector」という設定項目を開き、「spring.datasource.azure.passwordless-enabled=true」という設定を確認した。この設定によって、Azure Active Directoryを利用したパスワードレス・アクセスが可能になる。

 そして寺田氏は、実際にデータベースに接続して見せた。どこにもパスワード情報がないのに接続できている。寺田氏は「Azure Active Directoryを利用することで、非常にセキュアな環境を構築できる。ぜひとも試していただきたい」と語り、講演を締めくくった。

【4/26 開催】Java on Azure Day 2023 ~ OpenAIなど最新技術でここまでできる!Java開発/運用の今と未来 ~

 本イベントでは、「Java on Azure」 をテーマに、いま押さえておくべきさまざまなサービスや最新の開発手法についてデモンストレーションを交えながらご紹介します。また、ユーザー企業やパートナー企業の導入・活用事例を通して、Javaのクラウド活用方法を包括的に学ぶことができます。さらに、最近話題のGitHub CopilotやChatGPTを用いた開発生産性の向上を含めて、AIを活用したJava開発者のさまざまな可能性についてもご紹介します。

  • 開催日時:2023年4月26日 10時~18時
  • 会場:日本マイクロソフト株式会社 品川本社 31F セミナールーム
  • 定員:300名(※先着順)
  • イベント参加申し込みはこちら

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加

提供:日本マイクロソフト株式会社

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17491 2023/04/07 12:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング