Category Archives: IntelliJ IDEA

IntelliJ Platform 2020年ロードマップ

こんにちは。JetBrains堀岡です。明けましておめでとうございます。 昨年(2019年)末にDmitry Jemerov(@intelliyole)より「IntelliJ Platform Roadmap for 2020(英語ブログ)」が発表されました。開発手法や開発環境のトレンドおよび変化に対応すべく、JetBrains製品を進化させるための様々な取り組みが紹介されています。 本稿は前記英文ブログポストを翻訳・補足したものとなります。 はじめに IntelliJ IDEAおよびIntelliJプラットフォームベースのIDEを改善するための現在の取り組みの一部を公開したいと思います。これらの取り組みは、パフォーマンスと最新の開発ワークフローのサポートという2つの主要なテーマに集中しており、2020年中にリリースされる予定であり、一部は春の2020.1リリースに含まれる予定です。 パフォーマンスのさらなる改善 Indexing処理の効率化と改善 JetBrains IDEにおけるパフォーマンス関連の代表的な課題は、起動時のパフォーマンス(起動に時間がかかるツールは、全体的に動作重いと認識される傾向にある)とインデックス作成速度の2点です。2019年はIDEの起動をスピードアップするために多くのことを行ました。2020年はインデックス作成のパフォーマンス向上に注力します。私たちはこの問題に対して、以下に示す多面的なアプローチにより取り組んでいます。 最初の取り組みは、作成済みのインデックスチャンクを使用できるようにし、世の中のすべてのIntelliJインスタンスが(例えば)java.lang.Stringクラスのインデックス作成と同じ作業を行う必要がなくなるようにすることです。 まずJDKへの対応から始めて、次にMaven Centralに含まれるライブラリ、それ以降、IntelliJ以外のIDEで使用されるインタープリターとパッケージをカバーできるように、年間を通じて徐々にサポートを展開する予定です。加えて、チームまたは企業内でプロジェクトソースコードのインデックスチャンクの共有をサポートする方法を検討していますが、現時点では具体的な計画はありません。 第2の取り組みは、インデックス作成中により多くのIDEアクションを実行できるようにすることで、インデックス作成による待ちを少なくすることです。 第3の取り組みは、インデックス付けに時間がかかりすぎるファイル、頻繁に再インデックス付けされるファイル、例外によるインデックスの再構築など、インデックス付けの異常を検出して通知することです。この取り組みの目的は、問題を把握し、解決のための明確な手順を提供できるようにすることです。これによりプロジェクトごとに最適なIDEのパフォーマンスを向上させる手段を提供することを目指しています。 そしてもちろん、インデックスシステムが不要な作業を行わず、オーバーヘッドがないように、従来から継続的に取り組んでいるパフォーマンスの最適化にも取り組む予定です。 Read/Writeロック・スレッドモデルの再デザイン JetBrainsユーザーにとってのもう1つの共通する課題は、UIのフリーズです。2019年では、このようなフリーズを報告するためのインフラストラクチャを構築しました(UIフリーズ時のログ自動生成)。報告された問題を手がかりに様々なアーキテクチャの変更を行い、多くのフリーズ問題を修正しました(例えば、ファイルシステムイベントの非同期リスナー)。2020年以降、さらに大きなステップとして、書き込みロックを必要とするアクションをUIスレッドから移動する予定です。 IntelliJ IDEAは、ごく初期の頃、IDEの内部データ構造を変更するほとんどの操作がUIスレッド上で実行されることを必要とするアーキテクチャを採用しました。これらの操作には、基本的なアクション(ドキュメントへの文字の挿入)と大規模な操作(1000箇所で使用されているメソッドの名前変更)の両方が含まれています。この初期のアーキテクチャの利点は、プログラミングモデルが単純になることです。一方で、明らかな欠点は、多くのシナリオでUIの応答性が低下することです。 過去数年にわたり、このアーキテクチャの制限を回避する方法として、大規模な操作を、バックグラウンドで実行される部分と、UIスレッドで実行される部分に分割する方法をとってきました。一方で、より根本的な解決策は、UIスレッドの要件を完全になくすことです。しかしながら、ごく最近までは、独自のコードとサードパーティのプラグインを大幅に書き直さずにこれを行う方法は存在しないと思われていました。この課題に対して、現在、私達は、段階的な移行を可能にするアーキテクチャ・ソリューションを考案し、それを実装する作業を開始しています。 2020年、IntelliJ Platformの重要なUIコンポーネントとAPIをリファクタリングして、新しいスレッドモデルを採用する予定です。新しいモデルが安定し、改善が認められるようであれば、すべてのIDEで新しいモデルに切り替えて、UIをスムーズでラグのないものにしたいと考えています。 再起動不要なプラグインのロードおよびアンロード この機能については、IntelliJ IDEA 2019.3で部分的なプレビューを既に提供しており、再起動せずにテーマとキーマッププラグインをインストールできます。 2020.1では、このサポートを全てのタイプのプラグインに拡張する予定です。バンドルされているプラ​​グインの大部分については、再起動なしでロードとアンロードをサポートします。サードパーティのプラグイン開発者向けに対しては、必要となるサポート手順を提供(日本語/英語)しています。この段階で最も重要なユーザーの利点は、IDEの再起動を必要としないシームレスなプラグインのアップグレードです。 一方で、この作業の(2020.1以降のバージョンにおける)最終目標は、開いているプロジェクトに対して適切なIDE機能のみを有効化することです。 例えば、Springプラグインは、Springを使用するプロジェクトに対してのみロードされ、Angularプラグインは、Angularプロジェクトに対してのみロードされるようになります。よって、プロジェクト内において特定のテクノロジーを使用しない場合、それに関連するUI要素は表示されず、そのテクノロジーをサポートするプラグインによるパフォーマンスやメモリ使用量への影響が無くなります。 新しいワークフローへの対応 Collaborative Editing(共同編集) 共同編集は、課題トラッカーで最も投票数の多いリクエストであり、2020年またはそれ以降に実現のために作業中であることをお知らせいたします。現在私達が実現しようとしているアプローチでは、ソースコードが配置されているマシン上でプライマリIDEが動作し、他のユーザーのIDEが「シンクライアント」としてプライマリIDEに接続します。(プライマリに)接続しているすべてのユーザーは、独自の状態(開いているファイル一覧、キャレットの位置、補完バリアントリストなど)を持ち、必要に応じて別のユーザーを「フォロー」するオプションがあります。 「シンクライアント」ユーザーは、ナビゲーション、補完、デバッグなどのコアIDE機能にアクセスできますが、全てのIDE機能にアクセスできるわけではありません。 … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

IntelliJ IDEA 2019.3:パフォーマンスと品質の向上

JetBrainsの主力IDEの今年最後となるメジャーリリース、IntelliJ IDEA 2019.3をリリースしました! このIntelliJ IDEAの新バージョンでは、IDEのパフォーマンスと全体的な品質に注力しました。 弊社はIntelliJ IDEAチームとその他複数のJetBrains開発者チームを結集し、長期間にわたって品質改善に取り組みました。その間は特にIDEに磨きをかけることに注力し、パフォーマンス改善、UIの応答性の修正、ユーザービリティの強化、既存機能の改善などを行いました。 このリリースサイクルの優先度をより明確に定義するため、皆様からのフィードバックがこれまで以上に重要になっています。このリリースサイクルでは、合計3900票以上を獲得した1600件以上の課題を解決しました。 また、新しいマイクロサービスフレームワーク(Micronaut、Quarkus、Helidonなど)への対応や長く待ち望まれていたMongoDBへの対応など、進行中の複数のプロジェクトについても作業を進めました。 これらの取り組みにより、IntelliJ IDEAによる開発をより楽しんでいただけることを願っています。 詳細については以下をご覧ください。 パフォーマンス向上 弊社はIntelliJ IDEAのパフォーマンス改善に注力し、次のような結果を達成することができました。 IDEの起動を高速化 全体的なUIの応答性を向上し、UIやエディタのフリーズを削減 Gradleプロジェクトのインポート処理を中心にメモリ消費量を削減 今年の最優先目標の一つは、起動時間の短縮でした。 この目標を達成するため、IntelliJプラットフォームに多数の重要な変更を加えました。逐次実行していた一部のプロセスを並列化したり、最初のクラスが高速に読み込まれるようにクラスを整理したり、macOSでのフォントの読み込みを最適化したりしました。 弊社はUIの応答性改善にも多くの注意を払ってきました。 弊社はIntelliJ IDEAのさまざまな部分で発生していたUIのフリーズに解消に注力してきました。ユーザーインターフェースが無反応になるのを好む人はいないからです。 UIのフリーズの問題について、より簡単にご報告いただけるようになりました。また、このリリースサイクルではこの機能を用いてご報告いただいた問題の解消に取り組みました(ありがとうございました!)。 1600件以上の報告で、UIのフリーズを引き起こしていた多数の問題を解決できました。 さらに、Find in pathで正規表現のパターンが非常に長い文字列にマッチする場合や、多数のエディタタブやデバッガタブで作業する場合でもIntelliJ IDEAがフリーズすることはなくなりました。 IDEのプロジェクトツリーの描画速度も向上しました。 また、多大な労力を費やしてJavaの型推論を最適化し、その他さまざまなエディタのフリーズも解消しました。 Javaのパフォーマンス改善に関して言えば、長いメソッド呼び出しチェーンのJava型推論が大幅に高速化されています。 多数の引数が渡される汎用的な可変長引数(Arrays.asList、Map.ofEntriesなど)を使用したメソッドを中心に、Javaファイルでコードのハイライト表示を高速化しました。 Join Linesアクションを一度に多数の行に対して呼び出した場合のパフォーマンスも改善しました。 Kotlinプラグインバージョン1.3.60をIntelliJ IDEAにバンドルすることで、エディタによるKotlinファイル内のハイライト表示も高速化されました。 イベントの処理や無視ファイルの取り扱いを最適化することで、バージョン管理サブシステムのパフォーマンスを最適化しました。 大規模プロジェクトでのフリーズが削減され、ステータスが高速に更新されるようになりました。 Buildサブシステムでは、大規模なGradleプロジェクトをインポートする際のピークメモリ消費量を削減しました。 … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

IntelliJ IDEA 2019.1がリリースされました! テーマのカスタマイズ、Java 12のSwitch式、Dockerコンテナ内でのデバッグなど

IntelliJ IDEAの今年初のメジャーアップデート、IntelliJ IDEA 2019.1がリリースされました! この大規模なアップデートには、たくさんの新機能と改善点が含まれています。新機能ページをぜひご確認ください!サムライズム様による翻訳はこちらにございます。 このブログ記事では、このアップデートの主な新機能の概要をご紹介いたします。 ユーザーインターフェース 新しいテーマが追加され、テーマのカスタマイズが公式にサポートされるようになりました! 詳細は、新機能ページのテーマセクションをご覧ください。 Java IntelliJ IDEAは、Java 12のプレビュー機能、Switch式JEP 325をサポートしています。 詳細はこちら Extract Variable リファクタリングは、以前よりもさらにセマンティクスを保持するようになりました。 三項式では、IDEはnullability(変数がnullを取り得るかの記述)違反が検出された条件のみをハイライトするようになりました。 数学演算の分析が大幅に改善されたため、IDEは剰余、乗算、および右シフト演算の値を追跡できるようになりました。 IDEはソースからコンストラクタの純粋性を自動的に推測できるようになりました。 自動生成されたtry/catchブロックに変数名を設定できます。 Javaスタックトレースから行内の適切な位置へのナビゲーション。 IDEは重複したスイッチブランチを検出できるようになり、そのようなブランチをマージするためのクイックフィックスを提供してくれます。 “Move Statement Up/Down”(文を上/下に移動)を使用して、switch文とcatchブロックを上下に移動できるようになりました。 クリップボードとの間で構造検索パターンをインポートおよびエクスポートできるようになりました。 詳細については、新機能ページのJavaセクションをご覧ください。 Gradle 新規プロジェクトでは、デフォルトでビルドおよび実行アクションがGradleに委任されます。 Gradleへのビルドおよび実行アクションの委任は、Gradleプロジェクトごとに個別に設定できます。 HotSwapはビルドアクションがGradleに委任されたときに機能します。 Gradleの組み込みバージョンはv4.10.3にアップグレードされました。 Gradleテストランナーを使って、JUnitパラメータ化テストを実行できます。 Gradleテストタスクを適切に選択して、エディタから実行できます。 Gradleツールウィンドウは、 ‘gradle projects’コマンドを実行した場合と同じように、マルチモジュールプロジェクトの構造を表示できます。 詳細は、新機能ページのGradleセクションをご覧ください。 … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

一挙大公開 – Kotlinから.NETまで JetBrains Night 2018

こんにちは、JetBrainsの堀岡です。 皆様、年末年始いかがお過ごしでしょうか? 既にTwitter等で紹介しましたが、残念ながらイベントに参加できなかった皆様や、動画をチェックしようと思っていたけれど年末までじっくり時間が取れなかった皆様、年末年始TV特番に飽きたエンジニアの皆様の箸休めとして、2018年11月に開催されたJetBrainsイベントのセッション動画を紹介したいと思います。 英語セッションは英語が苦手の方は字幕をオンにして見るのがオススメです。 JetBrains Night Tokyo 2018のセッション動画 1. オープニング(前半英語、後半日本語)- Alexey Reshtenko, Masaru Horioka JetBrainsの会社紹介および2018年から開始した日本市場における新たな取り組みを簡単に紹介します。 2. 開発者の生産性を上げるための組織作り―JetBrainsでの取り組み(英語)- Hadi Hariri JetBrainsは、2000年の創業以来、ビジネスの成長に伴い組織も拡大し、現在は世界8箇所にオフィスを有し、社員数も900名を超えさらに成長し続けています(参考:会社概要)。このセッションでは、スタートアップのスピード感を保ちながら会社をスケールさせていくためのJetBrains社内での組織のあり方や、コミュニケーション、タスク管理、会社のカルチャ等の取り組みについて議論します。 3. IntelliJ IDEA ヒントとトリック 、及びJava 11関連のアップデート (英語) – Mikhail Vink IntelliJ IDEAは機能が豊富なので、多くのユーザにとって知られていない便利機能が沢山あります。さらに、リリースごとに新たな便利な機能が増えていきます。このセッションでは、Toolboxや便利なプラグインの紹介に加え、IntelliJ IDEAをより活用するための便利機能や最近のリリースの新機能を紹介します。 4. GoLandでGoコーディングの生産性を向上(英語)- Florin Pățan このセッションでは、どのようにGoLandを利用して、デベロッパーが生産的にGoコードを書き、時間と労力を節約できるのかを見ていきます。コードナビゲーション、補完、テンプレート、VCS、テスト、デバッグ、および自動化などの、初心者と経験豊富なデベロッパーの両方に役立つコンテントがカバーされます。 5. Kotlin/Anywhere(英語) – … Continue reading

Posted in GoLand, IntelliJ IDEA, Kotlin, Rider, TeamCity, Upsource, YouTrack, イベント | Leave a comment

IntelliJ IDEA 2018.3:GitHubプルリクエスト、Java 12、複数行TODOコメント、Gitサブモジュールサポートなど

IntelliJ IDEA 2018.3がリリースされました! IntelliJ IDEAの今年3回目のメジャーアップデートには、注目すべき機能がたくさんございます! 詳細は、What’s newをご確認ください(サムライズム様による翻訳はこちらです)。ウェブサイトにアクセスし、IntelliJ IDEAの最新バージョンを今すぐダウンロードできます。 新機能のシンプルなサマリーはこのブログポストにございます。   Java IntelliJ IDEAは今後公開予定のJava 12をサポートしています。すでに、IDEで生文字列リテラル(Raw String Literals)(JEP 326)をプレビューできます。 もっと詳しく IDEはより複雑なケースで重複を見つけることができるようになりました。さらに、その速度も向上しています。 Java Stream APIの改善:minが後続する冗長なsorted呼び出しが検出されるようになりました。 新しいデータフローベースインスペクションでは、後続の条件により不要な条件が検出されるようになりました。 IDEは、抑制されたインスペクションが、関連するメソッド本体、クラス、またはステートメント内の警告を処理しない状況を識別するようになりました。 What’s new ページの Javaセクション で詳細を確認できます。 エディタ IDEは、エディタ内の最初とその後の全てのTODOコメント行をハイライトし、それらをTODOツールウィンドウで表示します。 新しいインデントステータスバーには、現在のファイルのインデントのサイズが表示されます。 スコープを作成して、特定のファイルやフォルダでコードフォーマットを無効にすることができます。 Preferences / Settings | Editor | Code … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

IntelliJ IDEA 2018.2:MacBook タッチバー、Java 11、ブレークポイントインテンション、Spring Boot、バージョン管理など

IntelliJ IDEAの新バージョンです。新機能がたっぷり詰まったIntelliJ IDEA 2018.2は今すぐダウンロードできます!主要なハイライトについて、この記事をお読みください。そしてぜひ、What’s New ページで詳細とスクリーンショットをご確認ください。 Java Java 11のサポート 詳細はこちら データフロー情報をエディタで表示できるようになりました 長いメソッドチェーン用のタイプヒントの表示 Quick Documentation を自動補完時にポップアップするように設定できるようになりました Extract Method の新しいプレビューパネルでは、実際の変更を行う前にリファクタリングの結果を確認できます @Contract アノテーションは戻り値に関して新しい情報: new、this、および paramX を指定 新しい、更新されたインスペクションとインテンションアクションには、よりスマートなJoin Lineアクションと改善されたStream APIサポートなどが含まれています。 詳細はこちら エディタ Tab を使用してブラケットやクオートの外に移動できるようになりました 再代入されたローカル変数とパラメータは、デフォルトで下アンダーラインされるようになりました For または while キーワードは、対応する break または continue キーワードにキャレットをあてるとハイライトされます ユーザーインターフェース MacBookのTouch … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

IntelliJ IDEA 2018.1: コード分析、デバッガ、Android Studio 3.0、部分Gitコミットなど

準備はよろしいですか? 当社の今年最初のメジャーアップデート、IntelliJ IDEA 2018.1 をお楽しみください! この新しいリリースでは、サポートされている言語、フレームワーク、バージョン管理ツール、デバッガ、コンパイラ、エディタを大幅に改善いたしました。今すぐダウンロードしてお試しください! 当社のウェブサイトでIntelliJ IDEA 2018.1の全新機能をご参照ください! このリリースにおける、ご待望の最も魅力的な機能は次の通りです: Java Stream APIチェーンのコード補完では、型キャストが認識され、既存の呼び出しフィルタ(String.class::isInstance)に従った補完項目と、自動的に型キャストされた補完項目がサジェストされます Postfix code completionでJava向けのカスタムテンプレートを定義可能 データフロー解析は、”greater than” (より大きい) および “less than” (より小さい) のような変数間の関係を追跡するようになりました。また IDE は、変数が比較される際に、可能性のある全コードパスで条件が常に true(またはfalse)である場合も検出します: もっと詳しく知る Java検査&クイックフィックス:無限のStream検出、無限ループのbreak条件をループ条件に変換など 選択されたスコープ内で問題を解決する方法がいくつかある場合、IntelliJ IDEAは、すべての提案されるクイックフィックスを、Inspection Results Tool Window の Fix partially でクイックフィックスタイプでグループ化します。 JUnit 5 @Tag アノテーションサポート テストクラスを生成する際、命名ルールを”Test*”とプレフィクスにカスタマイズする機能 JVMデバッガ デバッグ中に例外を発生させる機能 コンソールへのブレークポイントスタックトレースログ出力 … Continue reading

Posted in IntelliJ IDEA, お知らせ | Leave a comment

IntelliJ IDEA 2018.1 EAP リリース: Kotlin 1.2.30

新しいIntelliJ IDEA 2018.1 EAPをリリースしました! 多くの改善、バグフィクスに加えてKotlin pluginはversion 1.2.30へアップデートされています。 新しいプラグインはいくつかの新しいインテンションアクションを備えています。プロジェクトツールウインドウでコードの断片を直接貼り付けられるようになりました。IDEはクリップボードの内容で新しいKotlinファイルを作成します。 さらに、scoping functionの呼び出しのletとrunを相互にコンバートすることもできるようになりました。 またデータフローの解析がKotlinとJavaをミックスしたプロジェクトでも働くようになりました。 リネームリファクタリングで衝突が発生する可能性がある場合警告が出るようになりました。 その他詳しくはこちらのリリースノートをご覧ください。 ダウンロードしてお試し頂き、  フォーラムやTwitterへフィードバックを頂ければ幸いです。問題がございましたらYouTrackへレポートをお願いいたします。 Happy developing!

Posted in IntelliJ IDEA | Leave a comment

IntelliJ IDEA 2018.1 EAP: Gitの部分コミットなど

IntelliJ IDEA 2018.1 EAPの最新ビルドをリリースしました。サイトからダウンロードするか、Toolbox Appよりアップデートしてください。 IntelliJ IDEA 2018.1ではついにGitの部分コミット(git add -p)をサポートしました。選択した部分だけをコミットし、他をスキップすることができます。 コミットダイアログのdiffビューにてコミットしたい部分にチェックを入れてください。 さらに、変更箇所を 別のチェンジリストにひも付けて別のタイミングでまとめてコミットすることも可能です。別のチェンジリストに移動するにはdiffペインで右クリックしてください。 別の方法として、エディタのガターエリアをクリックすればチェンジリストを選択したり新しいチェンジリストを作ったりできます。 近々Gitの部分コミットについては別のブログポストを公開する予定ですのでお待ちくださいませ。 新しいIntelliJ IDEA 2018.1 EAPではローカルの変更をディレクトリ、モジュール、リポジトリ別にグループ化して表示することができます。Version ControlツールウィンドウのLocal ChangesタブのGroup byアイコンより選択できます。これまではディレクトリとモジュールで同時にグループ化することしか出来ませんでした。今回より全部、または一部のみ、必要な形でグループ化できます。もちろんリポジトリでグループ化するのはプロジェクトで2つ以上のルートが設定されている場合のみ可能です。 Postfix code completionの改善 IntelliJ IDEA 2018.1ではPostfix code completionに改善が施され、カスタムpostfix Java templatesをPreferences | Editor | General | Postfix Completionより定義出来るようになりました。 自分で作成したり、リネームしたり、デフォルトで定義されているものを編集したり出来ます。 … Continue reading

Posted in IntelliJ IDEA | Leave a comment

IntelliJ IDEA 2018.1 EAP: 外部アノテーションのインライン表示、Javaコンパイラ対応の強化など

新しいIntelliJ IDEA 2018.1 EAPビルドをリリースしました。こちらからダウンロードして頂くか、Toolboxアプリより更新してください。 ご存じの通りIntelliJ IDEAではコードをannotations.xmlファイルより、ソースコードの外部からアノテート出来ます。 これらの外部のアノテーションはライブラリのクラスなど、ソースコードをいじれない場合に便利です。IntelliJ IDEAは外部でアノテートされているコード脇のガターに@ iconを表示します。最新のIntelliJ IDEA 2018.1ではこの機能が強化され、外部アノテーションをコードにインライン表示してくれます。 IntelliJ IDEAは自動的に@NotNullまたは@Nullableアノテーションを推測し、ガターアイコンに推測によりアノテートされたもの(inferred annotation)であることを示します。最新のEAPではソースコード内に表示する機能もあります。 このオプションはデフォルトで無効化されています。この機能を使うにはPreferences | Editor | General | AppearanceのShow inferred annotations inline チェックボックスにチェックを入れてください。 アノテートすると良い候補が複数ある場合は、サブメニュー内にグループ表示してくれます。 新しいconstant conditions and exceptionsインスペクションはnullableな値をアノテートされていないフィールドに代入しようとしたとき警告します。 この機能を使うにはPreferences | Editor | Inspections | Probable bugs | Constant Conditions … Continue reading

Posted in IntelliJ IDEA | Leave a comment