OSS の IntelliJ IDEA Community 版をビルドしてみよう

投稿日 投稿者 Masaru Horioka

こんにちは。JetBrains堀岡です。

突然ですが、皆さんはある程度の大きさのソフトウェアをビルドすることは好きですか?

IJC_build_banner

私は、現在のポジションは技術職ではないので、普段はあまり関わり無いのですが
・新卒後ソフトウェアエンジニアとして配属された職場で、初めての仕事がビルドエンジニアだった(恐らくC言語がほとんど分からなかったため)
・以前、静的解析ツールの仕事で様々なコードをビルドして解析することがあった
ということもあり、時間があるとたまに(年に数回)好奇心からビルドしてみたくなります。

皆さんご存知のとおり、JetBrainsのIDEのベースである IntelliJ IDEA や PyCharm の Community版 Apache 2.0 license のOSSとして公開されています。IDEとしてのベースとなる機能やJava関連の機能は、日々コードが更新されています。

一方で、SNS等でIntelliJをビルドしてる人はあまり見かけないような気がします。ビルド出来たら(やる気と技術力があれば)困った時に、自分でデバッグもできるかも?と思いビルドしてみることにしました。

ということで本記事では、Github上の情報を参照しながら、IntelliJ IDEA Community 版ビルドの手順を日本語で紹介したいと思います。なおこの情報は2020年6月13日現在のものです。実際にご自身でビルドを試す場合、最新についてはGithub上の情報もご確認ください

必要なもの

ソースコード

Githubにあります。ビルドに必要な情報がReadmeに書かれています。
https://github.com/JetBrains/intellij-community

開発環境

IDE

(2020年6月13日現在)IntelliJ IDEA Community Edition をビルドするためには、

Version 2020.1 or newer of IntelliJ IDEA Community Edition or IntelliJ IDEA Ultimate Edition is required to build and develop for the IntelliJ Platform.

ということで、IntelliJ IDEA Community Edition または IntelliJ IDEA Ultimate のバージョン 2020.1かそれより新しいものが必要です。

JDK: 1.8(8)と11

後述の通り、IntelliJ IDEA経由でインストールすることが可能です。

  • JDK 1.8 の詳細
    • バージョン 1.8.0_162 以上
    • 内部的にJavaFX( jfxrt.jar)を参照しているようなので、Oracle JDKか Amazon Corretto が使えると書かれています。確かに、何も読まずに(JavaFXが含まれない)AdoptOpenJDKでビルドを試してしまったところ、コンパイルエラーになりました。
    • JavaFXが最初から入っている他のJDKの選択肢としては、私が試してみた限りでは、Liberica JDK でも(コンパイル)OKでした。
  • JDK 11 の詳細
    • Amazon Corretto JDKを使うと良いとReadmeに書かれています。

(できれば、ビルド用の良い)PC

Readmeでは推奨HW環境は言及されていませんが、イベント等で来日したJetBrainsの開発チームのエンジニアは15/16インチのMacbook Proの人が多かった気がするので、そういうことだと思います。恐らく、2コア、8GBメモリ以下とかだと、パフォーマンス的(ビルドが遅い等)に厳しいかもしれません。

また、ソースをダウンロードしたり、ビルドを走らせると、PCのリソースが30分から数時間占有されることもあるので、(占有されると困る場合は)暇な時に試すか、別のビルド用PCがあると良いでしょう。

ビルドのためのステップ

今回はmacOS環境で紹介しますが、Windows環境でも必要な作業は同じです。

IDE(IntelliJ IDEA)およびJDKのインストールと動作確認

JetBrains Toolbox App から IntelliJ IDEA Community 版 2020.1.2 をインストールします。

installIJC

次に、IntelliJ IDEA Communityを起動し、Create New Project を選択します。CreateNewProject

ここでJDK環境のセットアップ、Hello Worldで環境の動作確認を行っていきます。

初めはJDKのセットアップです。

「Project SDK」 のフィールドをクリックして 「Download JDK…」を選択します。

DownloadJDK

(2020年6月13日時点では)Amazon Corretto のJDK 11は 11.0.7 が利用可能でしたので、こちらをDownloadします。

corretto11

同様にJDK 1.8は Amazon Corretto 1.8.0_252 が利用可能ですので、Downloadします。

corretto18
ここまででJDKのインストールができました。

そのまま1.8でHello Worldが動くことを確認しましょう。

NewProject

コマンドラインアプリのテンプレートを選択

CommandLineAppTemplate

適当にプロジェクト名を入れて、次へ

SpecifyProjecdtName

スケルトンコードが生成されます。

SkeltonCodeGenerated

mainメソッドのなかに「sout<タブ>」でプリント文を入れ、▶︎でコンパイル&実行できる(画面下部のRun結果にHelloが表示される)ことまで確認でできればIDEとJDKの基本的な動作確認はOKです。

Hello

IntelliJをビルドするために必要なJDK設定

続いて、Readmeの「IntelliJ Build Configuration」に記載されているJDKの追加設定を行います。この設定はIntelliJ IDEAのビルドのために必要なものです。

File | Project Structure

Platform Settings | SDKs でインストールされているJDK一覧を確認します。

ListSDKs

Using IntelliJ IDEA, configure a JDK named “1.8”, pointing to <JDK_18_HOME>…..

の要件に合うよう、corretto-1.8 に対して以下を実行します。

  • Name:「corretto-1.8」を「1.8」 に変更
  • libs/tool.jar がclasspathに含まれることを確認(ない場合は追加する必要あり)
  • 「OK」をクリック

rename_to_18

Configure a JDK named “corretto-11

の箇所に対しては、corretto-11についてはIntelliJでインストールした場合、すでに指定された名前でインストールされているので、ここでは追加作業不要とします

Also configure a JDK named “IDEA jdk” (case sensitive), pointing to installation of JDK 1.6. If you don’t want to install JDK 1.6 then you may configure IDEA jdk to point to <JDK_18_HOME>.

に対しては、ビルドするだけ&JDK 1.6 は(今更)いれたくなさそうなので、「IDEA jdk」というJDKエントリを追加し、corretto-1.8 と同じ場所をポイントするように指定します。

Add JDK… を選択

AddJDK

<UserHome>/Library/Java/JavaVirtualMachines 以下のJDKインストールディレクトリを指定(macOSで<Home>/Libraryは隠しファイルになっていて表示されていない場合「 Shift+command+. 」で表示させる必要があります)。

SpecifyCorret18

追加されたら182Nameを「IDEA jdk」 に変更します。

IDEAjdk

ここまででJDKのセットアップは終わりました。

次に、ビルドのパフォーマンスを改善するための設定を行います。

Speed Tip: If you have enough RAM on your computer, configure the compiler settings to enable the “Compile independent modules in parallel” option. Also, set the “User-local build process VM options” to -Xmx2G. These changes will greatly reduce the compile time.

の記述から以下を設定します。
Preferences | Build, Execution, … | Compiler の画面で

  • Compile independent modules in parallel をチェック
  • Build process heap size に 2048 に変更

faster_build_settings

IDE 自体のJVMメモリ設定の変更

IDEが使用するメモリサイズについても追加設定を行います。

デフォルトの750MBのままの場合、大きなプロジェクトを扱う際にメモリが足りない警告がでてきますので、事前に大きな値(今回は2048を指定)を指定します。

Help – Change Memory Settings

ChangeMemorySetting

memory_settings

指定した値は再起動後有効になりますので、ここでIDEを閉じます

ソースコードの取得

IntelliJ IDEAのコード規模はそれなりに大きいので普通にコマンドラインでgit clone したりIntelliJの新規プロジェクトの”Get from Version control”でソースを取得しようとすると、それなりに時間がかかります。

また、IntelliJ上でgit cloneするとその後、自動的に色んな処理が走ってしまうのですが、大規模コードで、これから色々設定しようと思っている場合、このような自動処理はあまり嬉しくありません。

今回はビルドするだけなので、Readmeの以下のお勧めに従い、
「Speed Tip: If the complete repository history isn’t needed then using a shallow clone (git clone –depth 1) will save significant time.」

ターミナルから以下を実行します。

git clone --depth 1 https://github.com/JetBrains/intellij-community.git

完了後、

IntelliJ IDEA Community Edition requires additional Android modules from separate Git repositories. To clone these repositories, run one of the getPlugins scripts located in the <IDEA_HOME> directory. 

(IntelliJ Communityをビルドするために、Android モジュールのファイルも必要とのことなので)cloneしたファイル群に含まれる

getPlugins.sh(Windowsの場合.bat)

コマンドを実行します。

getPlugin_sh

このコマンドが完了すれば、コードは準備完了です。

ビルド

IntelliJ IDEAを起動メニュー、または
File | Open
でgit cloneしたintellij-community ディレクトリを開きます。
自動的にindexing 等が始まるので、終わるまで気長に☕️待ちます。

Indexing
Indexingが終わったら、画面右上のRun/Configに「IDEA」があることを確認し、選択します。その後メニューの

Build | Build Project

でビルドを開始します。再度、気長に🍵待ちます

buildproject
Build Completed Succesfully というメッセージが表示されれば、めでたくビルド完了です。

以下の例では、私のMacBook Pro 2018( 2.7GHz 4コア Core i7 16GBメモリ)上で約22分かかっています。ただし、私の環境では以前ビルドしたことがあるので、mavenその分時間が短くなっていると思われます。まっさらな状態ですと、通信環境にもよりますが、倍くらい時間がかかるかもしれません。

buildcomplete
同様の条件で、手持ちのもう少しスペックが良いWindows 10の確認環境(Intel NUC 10世代6コア Corei7 32GB)で試したところ、ビルド時間は約11分でした。

ビルドされたIntelliJの実行

画面上部 Run/Config 「 IDEA」の隣の▶︎をクリックして、ビルドされたIDEAを起動します。IntelliJ IDEAのスプラッシュ画面が表示された後、(プロジェクトの移行画面が出る場合もあります)以下のWelcome画面が表示されれば成功👏です。

StartIJC

IDEの起動に使用されるJREの変更

Run/Configのデフォルド設定では、ビルド(コンパイル)に使用したJDK(Corretto 1.8)が、ビルドされたIntelliJ Communityを実行するためのJREとして指定されています。
この状態だと、Japanese Language Pack Pluginをインストールして日本語化したら文字が化けてしまう等の問題があります。この問題は、IDEを実行するためのJava環境がJetBrains Runtime(JBR)でないため(ビルドに使用したCorrettoが使用されている)発生するようです。

JapaneseGarbled

解決策の1つとして、ビルドした(子)IDEの実行に使用するJREを、ビルドに使用したJDK(Corretto)ではなく、(親)IDEの(起動のため)同梱されているJBR(JetBrains Runtime)を指定します。

具体的には、

Run/Config のメニューで「 Edit Configurations… 」を選択 します

editconfig

「JRE:」のフィールド右端のフォルダアイコンをクリックし、親IDEのJBRのパスを指定します。

changeJRE
IDEに含まれるJBRの場所はちょっとわかりにくのですが、macOS上でJetBrains Toolbox Appを使用している場合、JBRの場所は次のように確認できます。

Toolbox App で使用しているIDEのSettingsを開きます。

IJCSettings
Configuration を開き、Install location を確認することで、 IDEがどこにインストールされているかを知ることができます。

ShowInstallLocation

以下のスクリーンショットで示す様に、「IDEのインストール場所」以下にある <IDE>.app/Contents/jbr/Home がJBRのディレクトリです。

SpecifyJBR

Run/ConfigのJREを、上記JBRにして、再度ビルドされたIDEAを起動すると、Japanese Language Pack による日本語表示も問題なくできました🇯🇵

IJC_Japanese

まとめ

OSSであるIntelliJ IDEA Community版をビルドしてみました。

Github上のReadmeを読んで理解できれば、私でもビルドできたので、(少し時間がかかりますが)IntelliJ IDEAをビルドすることは、(比較的)簡単ということが理解できたと思います。

ビルドができれば、IntelliJ IDEAについて(公開されている基本機能においては)ソースレベルで調査したり、デバッグしたりできるようになります。例えばこちらのローカライゼーション関連課題のように、気になったバグについても(興味があれば)調べて報告したり、修正を提案したりするのも面白いかもしれません。

IntelliJ IDEAのビルドやその他技術的詳細について、昔からのユーザやプラグイン開発してる皆さんはもっとご存知かと思いますので、より良いやり方等あれば、フィードバックいただけると幸いです。