積極的に投資し、優秀な人材も集めて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が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を使用したデモを披露した。ソースコードを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の拡張機能として利用できる。

ここで寺田氏は、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名(※先着順)
- イベント参加申し込みはこちら