Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。_原文(投稿日:2019/04/11)へのリンク企業は伝統的に、安全性が完全に証明されるまで、最新バージョンのJavaへのアップグレードには消極的です。9のリリース以降、6か月毎に新たなバージョンがリリースされるようになったことで、この傾向にはますます拍車がかかっています。この変化のペースには、確かに気後れするかも知れません。8からのアップグレードにもその傾向が見られます。12への移行には多くの作業が必要です。この記事では、次のことを見ていきます。関連スポンサーコンテンツアップグレード方法の詳細に入る前に、なぜアップグレードしたいのかを十分に検討する必要があります。開発者である私たちは、最新の言語機能や、言語への更新毎に追加されるAPIに関心があります。8以降、多くの新機能が追加されており、開発手法を変える可能性のある新しいツールもいくつかあります。最新バージョンのJavaを使用して開発することで、自分たちの作業が楽になると開発者が言う、重要な機能をいくつか拾ってみました。ローカル変数型推論(var)は、定型コードを減らすのに役立つシンタックスシュガーの好例です。可読性の問題がすべてこれで解決する訳ではありませんが、適切なタイミングで使用すれば、定型コード(どうやってやるか)ではなく、ビジネスロジック(何をやるか)に集中することができます。コレクション用の便利なファクトリメソッドを使用すれば、リストやマップ、セットなどのコレクションを簡単に生成できます。ファクトリメソッドはまた、変更不可能なコレクションを生成することで、より安全な使用を可能にします。変更不可能なコレクションへの収集は、Streams用の新しいCollectorオペレーションを使用して、結果を変更不可能なコレクションに格納することを可能にします。Predicate::notは、述語ラムダやメソッド参照を否定する簡易な方法を提供します。これもまた、定型コードの削減に有効です。新しいOptionalメソッドには、Optionalを使用する場合に、格好の悪いif文を使用せず、関数スタイルでコーディングするオプションが追加されています。JShellは、コードを1行ずつ、あるいはスクリプトとして、Javaで実行可能なREPLです。これは新しい機能を試すのに便利です。実運用中のアプリケーションのコードでJavaの新バージョンを採用しなくても、開発マシン上でローカルに使用することが可能になります。HttpClientはJDKに組み込まれています。ほとんどの人たちは、WebアプリケーションやRESTサービスなどを介して、何らかの形でHTTPを使用しています。1.1と2をサポートします。マルチリリースjarファイルは、最新バージョンのJavaを使用するユーザと、古いバージョンの使用を余儀なくされているユーザのニーズを、開発者が同時にサポートするために使用できるツールライブラリのひとつです。JLinkは、本当に必要なJDKのセクションのみをパッケージ化し、デプロイすることを可能にする、Javaモジュールシステムが実現した素晴らしいツールです。パフォーマンス一般論として新しいリリースは、以前のものよりもパフォーマンスが優れています。"優れている"形はさまざまですが、最近のリリースでは特に、起動時間の改善やメモリ使用量の削減、特定のCPU命令を使用することによる使用CPUサイクルの低減などが見られます。)などが実施されています。3つは多すぎると思われるかも知れませんが、それぞれのコレクタはさまざまなユースケースに最適化されているので、自身のアプリケーションに最も適したプロファイルを備えた、現代的なガベージコレクタの選択肢が手に入った、ということにもなります。最近のバージョンのJavaにおける改善は、コストの削減を可能にします。中でも、デプロイするアーティファクトのサイズを縮小するJLinkのようなツール、最近のメモリ使用量の改善は、例えば、クラウドコンピューティングのコスト低減を可能にしています。新たなことを学ぶ機会を得てスキルを向上させたい、と考える開発者はたくさんいます。最新バージョンを利用することにより、幅広い開発者を引きつけることができるという点も、無視できない潜在的メリットです。最新バージョンのJavaの導入は、開発者の定着と採用に影響し、結果的にはチームの運営コストにも影響するのです。8以降、言語機能の観点だけでなく、多くのことが変わりました。Oracleは、ライセンスが異なる2つの異なるビルド(本番環境で使用する場合は有償となる"コマーシャルビルド"と、オープンソースの"OpenJDKビルド")のリリースを開始し、それぞれのアップデートモデルとサポートモデルを変更しました。この変更はコミュニティの混乱を招きましたが、結果的には、私たちがそれまで使用してたJDKに加えて、より多くの選択肢が得られることになりました。選択肢は何か、JDKに何を求めるのか、といったことを考える必要があります。8からアップグレードするバージョンの選択肢はたくさあると思われるかも知れません。実際の選択は、これよりも少し単純です。現在は、6か月毎にリリースが行われています。新しいリリースがそれぞれ、その前のリリースを置き換えます。例外は、3年毎に長期サポート(LTS)リリースがあることです。これにより、6か月毎に最新のものにアップグレードするか、または3年毎に次のLTSリリースへ、従来型の大規模アップグレードを実行するか、都合のよいアップグレードパスを選択できるようになります。8はLTSでしたが、Oracleは今年1月、コマーシャルユース用の(無償の)アップデート提供を停止しました。12がリリースされた今、Oracleからは無償のコマーシャルアップデートは提供されていませんが、最低3年間のアップデートを提供する組織が構築した、多数のJDKビルドがあります。最新バージョンのJava(12)にアップグレードし、6ヶ月毎のアップグレードに備えるか、最新のLTS(11)にアップグレードして、最長3年間まで次のアップグレードの検討を先延ばしするか。補足すれば、大規模な組織はLTSのリリースから次のLTSリリースにジャンプするが、スタートアップ企業は6ヶ月単位でアップデートするものと予想されます。迅速かつ予測可能なリリースのよいところは。この両号のオプションをサポートしていることです。ビルド選択OracleがLTSリリースの無償アップデートを提供していないからといって、実運用環境でLTSを実行して、無償アップグレードを入手することが不可能である、という意味ではありません。OpenJDK(OracleのコマーシャルJDKさえも基盤とする、JDKの参照実装)のビルドを提供する組織やベンダは、Oracle以外にもたくさんあるのです。ここでそのすべてを列挙するよりも、無償OpenJDKビルドの提供者、無償の公開アップデートの提供予定日、有償サポートの詳細をカバーしたこのリストをぜひチェックしてください。この状況は、以前よりも複雑に思われるかも知れません。考慮すべきファクタがたくさんあるのは事実ですが、しかしこれは、より多くの選択肢を持ったことの副作用なのです。Champoionsでは、ライセンスやサポート、アップデート、選択可能なさまざまなオプションといったトピックについて、より詳細な議論の場を用意しました。2019のQ&Aセッションも含まれています。9で導入された大きな変更と、その変更がアプリケーションの動作を損なうかも知れないという不安です。内部APIのカプセル化です。これによって、以前のJDKでは使用可能だった一部のメソッドに、アクセスすることができなくなりました。とって問題になっているようです。9以降へのマイグレーションは、思うほど恐ろしいものではありません。コミュニティが直面していた問題の多くは、実際には、私たちが使っているビルドツールやライブラリですでに対処されているのです。アップグレードのヒントアップグレードのプロセスはすべて、マイグレーション対象のアプリケーションに固有のものですが、プロセスを容易にするのに役立つ、基本的なグッドプラクティスもいくつかあります。プラクティスは実行順序に沿って概説されています。最初の数ステップについては、アップデートしたJDKを使う必要さえないことが分かるでしょう。コンパイラの警告に対処する警告には理由があります。それらを読めば、将来的に廃止されるかも知れない機能について述べられていることが少なくありません。8で開発していて、廃止予定の機能や使用すべきでない機能について警告が表示される場合は、新しいJDKに移行する前に使用を止めて(図1参照)、警告を修正してください。最近のJavaの世界では、非推奨は以前よりもずっと深刻な意味があります。11でもAPIが削除されているのです。9で行われた変更のひとつは、内部API(おもにsun.misc.*で始まるパッケージ内のクラス)が使用できないようになったことです。jdepsというツールがあります。これはJDKの一部で、-jdkinternalsフラグを付けて実行することで、一連のクラスが使用すべきでないものかどうかをチェックできます。.次のように出力されます。(rt.jar)警告:JDKの内部APIはサポート対象外で、JDK実装に固有のもので、互換性のない方法で削除または変更される場合があるため、アプリケーションを棄損する可能性があります。JDK内部APIへの依存を排除するように、コードを修正してください。http://openjdk.java.net/jeps/260このツールは、内部APIを使用するクラスを特定するだけでなく、代わりに何を使用するべきかについての提案も行います。ビルドツールをアップグレードするMavenやGradleを使用している場合は、アップグレードが必要です。11のサポートが導入されています。少なくとも5.0を使うべきです。現在のバージョンは5.3.1で、先月リリースされました。Maven最低でも、バージョン3.5.0(現在のバージョンは3.6.0)を実行する必要があります。Mavenコンパイラプラグインについては、バージョン3.8以降であることを確認してください。9以降へのマイグレーションについて耳にする問題のいくつかは、ライブラリやフレームワークに関係する(従って、それらによって修正される可能性のある)問題です。フレームワークの多くは、内部的にリフレクションや内部APIを使用しています。アプリケーションが正常に機能し続ける可能性を最大限にするには、すべての依存関係が最新であることを確認する必要があります。9以降で動作するようにすでに更新されており、これをさらに確実にするためのコミュニティの取り組みが進められています。一部の依存関係については、リプレースが必要になる可能性があります。Buddyに移行しています。11へのマイグレーションについて調査する場合には、使用している依存関係や、それらが8以降のバージョンのJavaをサポートするように更新されているかどうかについて、十分に理解しておく必要があります。移動した機能への依存関係を追加するJDKのコアではないAPIは削除されました。EEとCorbaモジュール、JavaFXが含まれています。これらは通常、適切なライブラリを依存関係管理に追加することで、簡単に修正できます。JAXBへの依存関係をGradleあるいはMavenに追加する、といったようにです。JavaFXの場合はもう少し複雑ですが、OpenJFXサイトによい資料があります。新しいJDKでアプリケーションを実行する最新バージョンのJavaを使用するために、アプリケーションを再コンパイルする必要はありません。これは、言語開発者が後方互換性の維持に努力している理由のひとつです。継続的インテグレーション環境で、コードを変更することなく、(例えば)新しいJDKを使用してアプリケーションを実行可能な場合もあります。8でコンパイルすることが可能です。11または12でコンパイルすることを検討してください。新しい機能を使用する意思がなければ、以前の言語バージョンでもアプリケーションのコンパイルが可能なのですから、いつでも古いバージョンにロールバックできるようにしておきましょう。JavaVersion.VERSION_1_8新機能の使用を開始するすべてがうまくいき、すべてのテストが成功して、パフォーマンス的にも何ら問題なく、運用環境で一定期間安全に実行できた場合にのみ、新たな言語機能の使用を検討するべきです。Systemを導入するためのものでしたが、モジュールをサポートするバージョンに移行したとしても、アプリケーションがそれを使用する必要はまったくありません。モジュールシステムの採用に興味があるのであれば、InfoQにチュートリアルが用意されています。リリースは6か月毎になりました。ライセンス、アップデート、サポートが変更されています。JDKの入手先も変わっているかも知れません。9で実施された大きな変更を含む、新たな言語機能があります。11あるいは12に移行するよい機会です。この最初のアップグレードという"山を越えて"しまえば、例えばCIでは、6ヶ月毎にリリースされる最新バージョンのJavaで、少なくともテストを行っておく価値はあります。理想的な状況であれば、6ヶ月のリリーストレインに乗って、6か月毎に次期バージョンのJavaを使用し、新機能が利用可能になればすぐに使用する、ということも可能になります。Championです。金融、製造、ソフトウェア、非営利を含むざまざまな業界で、あらゆる規模の企業のためのJavaアプリケーションを開発してきました。氏はJavaのハイパフォーマンスシステムを専門とし、開発者の生産性を高めることに情熱を注いでおり、オープンソース開発にも精通しています。Advocateです。Javaテクノロジの最先端を生きる上で、これが完璧な口実となっています。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員として、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。