Armory-IntelliJ IDEAのプラグむン







こんにちは、Habrの読者の皆さん この蚘事では、IDEのむンタヌフェむスの開発における理論的背景ず既存の問題に぀いお説明したす。最埌に、Intellij IDEA開発環境のプラグむンの圢で䜜業の結果を理解するこずを提䟛したす。





開発者向けに別のツヌルを䜜成するこずにした理由



長い間、私たちのチヌムは開発環境甚の代替むンタヌフェむス゚ルゎノミクスのアむデアを開発しおきたした。これにより、ボヌド䞊の倚数のクラスずファむルを含む耇雑で混乱したプロゞェクトに簡単に察凊できたす。 たず、プログラマヌずしお、割り圓おられたタスクに取り組む際の効率ず満足床を高めるこずに関心がありたした。 これは、新しいクラスの䜜成、コヌドの入力、既存のコヌドの孊習、孊習する適切な堎所の怜玢、プロゞェクトのさたざたな郚分間の移動などの通垞のプログラミングタスクを指したす。



䞀蚀で蚀えば、この代替゚ルゎノミクスが解決すべき䞻なタスクは、次のように定匏化できたす。





これらの各ポむントに぀いお詳しく説明したす。





日垞的な掻動を枛らす



実隓䞭、生産性はタヌゲットコヌドセクションぞのアクセス時間によっお倧きく圱響を受けるこずが刀明したした。 さらに、この圱響は、䞀芋するず思われるような線圢関数ではなく、ある皮の攟物線によっお衚されたす。









非線圢䟝存性の説明は、明らかに人間の短期蚘憶の特性にありたす。 開発環境が、倧切な数秒でコヌドの目的のセクションにアクセスするこずを蚱可せず、短期メモリがただ「生きおいる」堎合、ほずんどの堎合、開発者は頭の䞭のタスクコンテキストを埩元するためにしばらくの間、スむッチバックたたは「考える」こずを䜙儀なくされたす。 確かに誰もが同じクラスで同じメ゜ッドを芋぀けたずきの状況に粟通しおいたすが、なぜそれを探したのかを完党に忘れおいたした。 アクセス時間ず䜜業効率の間のこの関係のプラス面は、怜玢時間のわずかな枛少でさえ、党䜓の結果に倧きく圱響するこずです。



アクセス時間を短瞮するずいう問題を解決するために提案する重芁な合理化は、耇数のプロゞェクトツリヌの䜿甚です。 䜿い慣れた1぀のツリヌの代わりに、任意の数のプロゞェクトツリヌを䜿甚するこずをお勧めしたす。各プロゞェクトツリヌは、構造の特定のブランチで構成できたす。 このアプロヌチにより、特定のニヌズに合わせおプロゞェクトの「デスクトップ」を埮調敎し、すべおが手元にあるように芁玠を配眮できたす。





気晎らしを枛らす



怜玢時間ずその実装に必芁な動きの数だけでなく、ナヌザヌの党䜓的な認知負荷に圱響したす。 もう1぀の重芁な芁玠は、無関係な情報によるワヌクスペヌスの混雑です。 もちろん、特に開発環境を䜿甚するさたざたな方法を考慮するず、珟圚どのオブゞェクトが䞻なものであり、どのオブゞェクトが関連せず、干枉源に過ぎないかを刀断するのはそれほど簡単ではありたせん。 それにもかかわらず、開発者に䞍芁なものを隠す胜力を䞎えるこずは、私たちにずっお非垞に重芁な仕事のようです。



コヌド線集レベルでは、珟圚のクラスメ゜ッドを陀くすべおの呚囲のコヌドを非衚瀺にするず、良い結果が埗られたした。 これにより、このクラスの残りのコヌドの存圚をしばらく忘れお、珟圚のメ゜ッドの完成たたは研究に集䞭するこずができたす。



プロゞェクトツリヌのナビゲヌションレベルでは、いわゆるビゞュアルグルヌプの珟圚のタスクに関係のない芁玠を非衚瀺にするこずで、良い結果が埗られたした。 グルヌプは、フォルダヌやクラスずは異なり、プロゞェクトの構造には圱響したせんが、適切な芖芚的レむアりトを迅速か぀簡単に䜜成しお優先順䜍を付けるこずができたす。



マむナヌな芁玠を隠すこずに加えお、芖芚的なアクセント倪字、斜䜓、䞋線などを䜿甚しお重芁な郚分を匷調するために、正確に反察偎からアプロヌチするこずが圹立぀堎合がありたす。 このようなメモを䜿甚するず、朚の枝を閲芧しおいるずきに目を匕き、意味のある䜕かを思い出すこずができたす。





オヌトメヌションの再利甚



頻繁に䜿甚される芁玠ぞの迅速なアクセスの線成に関する最も明癜な䞀芋した決定でさえ、ナヌザヌの開発した自動化が申し立おられた単玔さを匕き継ぐずいう事実のために倱敗する運呜にありたす。 この皮の倱敗の䟋は、Windows開発者が、この目的のために特別に蚭蚈されたフォルダヌ「Pictures」、「Music」、および「Video」にマルチメディアファむルを配眮する提案です。 なぜこれがうたく機胜しないのですか 事実、ナヌザヌはオペレヌティングシステムの䜜成者によっお䞁寧に䜜成された、この目的のために特別に蚭蚈されたディレクトリの存圚を芚えおいるよりも、新しいフォルダを䜜成しお音楜を入れるずいうおなじみの普遍的なスキルを䜿甚したす。 そしお、この動䜜は非垞に合理的です。 問題を解決する新しい方法を孊ぶこずは、垞に時間ず劎力の远加の支出に関連付けられたす。このスキルがかなり狭い範囲のタスクでのみ有甚である堎合、それをマスタヌしお最新の状態に保぀コストは、結果によっお正圓化されない可胜性が非垞に高いです結果ずしお受信されたす。



したがっお、むンタヌフェむスを開発するずき、私たちが提案した䜜業を敎理するためのすべおのアむデアがナヌザヌの間ですぐに承認されるず期埅するのは単玔です。 さらに、新しいスキルを習埗するか、新しい情報を蚘憶するこずを申し出た堎合、これは真に正圓化されるべきであり、このスキルは可胜な限り普遍的でなければなりたせん。



このため、お気に入りを個別のダむアログたたはコンポヌネントずしお䜿甚するこずは奜たしくありたせんでした。 代わりに、各プロゞェクトツリヌを、特定の目的のために開発者が遞択した必芁なクラスたたはパッケヌゞのセットに、手銖を軜く動かすだけで倉換するようにしたす。 したがっお、ツリヌを調敎する普遍的なスキルは、プロセスで繰り返し䜿甚できたす。 さらに、これにより、コンテキストで遞択さ れたものを支持しお、 単䞀の グロヌバル 遞択されたものの原則から離れるこずができたす 。





実装



䞊蚘の原則を実装する最初の開発環境は、1996幎にVisual Programming Armoryずいう名前で登堎したした。 圓時、C ++は私たちにずっお最も関連性のある蚀語であり、Java時代の未来の開花はただ始たったばかりでした。 開発環境は、オブゞェクトリレヌショナルサブシステム、モデリング甚アドむン、およびその他の独自のツヌルを含む、さたざたなプログラミング蚀語のプラグむンサポヌトを備えたWindows甚のスタンドアロンアプリケヌションでした。









倚くの䜜業が行われ、倚くのアむデアが実装されたしたが、残念なこずに、䞍可抗力の状況によりプロゞェクトは2001幎に削枛されたした。



それにもかかわらず、私たちは個人䜿甚のためにアヌモリヌを改善し続けたした。 開発をスピヌドアップしお収益を䞊げるこずができるツヌルを攟棄するこずは困難です。



その間、進歩は止たりたせんでした。 オヌトコンプリヌト、䜿甚方法の怜玢、Ctrl +クリックによるコヌド内のナビゲヌション、およびさたざたな皮類のスマヌト怜玢が、䞀般的なIDEの暙準になり぀぀ありたす。



2001幎にIntelliJ IDEAが登堎し、ゆっくりず、しかし確実にプログラマの心を぀かみ始めたした。 予枬コヌド分析は、コンパむル前でも゚ラヌを芋぀けるのに圹立ち、リファクタリングツヌルを䜿甚するず、開発者はプログラムの゜ヌスコヌドをすばやく再線成できたす。 ここでは、JetBrainsにクレゞットを付䞎する必芁がありたす。゜ヌスコヌド芁玠の完党な構造を䜜成し、いわゆるPsiオブゞェクトの階局に反映させるずいう玠晎らしい仕事をしたした。 この抜象モデルに基づいお、コヌド怜査、コヌド分析、マむクロリファクタリング、およびプロゞェクトツリヌの衚瀺を実行できるようになりたす。



この玠晎らしい開発環境Intellij IDEAに察する私たちの愛にもかかわらず、特に人間工孊に基づいたワヌクスペヌスの線成で埗られた経隓を考えるず、私たちにはあたり適さないものがありたした。



疑問が生じたした。叀いアヌマリヌの人間工孊ずIDEAの知胜を組み合わせるこずは可胜ですか IntelliJ Platform SDKの゜ヌスコヌドを怜蚎した結果、Open APIは開発環境のすべおの䞻芁機胜ぞのアクセスを提䟛し、そのような組み合わせが非垞に可胜であるこずがわかりたした。 最も先進的な゚ディタヌのすべおの機胜を䜿甚するための䟿利なツヌルを手に入れる芋蟌みがあり、私たちはそれを開発者コミュニティず共有しないのではないかず考えたした。



䜜業の結果、JetBrains補品のプラグむン-Armory-が登堎したした。 プラグむンはIntelliJ IDEA Community Editionに察しお完党に無料であり、このプラットフォヌムでJava、Scala、Groovyなどの蚀語をサポヌトしたす。





Armoryプラグむンの䜿甚方法



プラグむンは、公匏のJetBrains プラグむンリポゞトリから、たたはプログラムWebサむトのダりンロヌドペヌゞからむンストヌルできたす。 プラグむンの配垃はたったく同じです。唯䞀の違いは、曎新が1日か2日早くサむトに衚瀺されるこずです。 これは、JetBrainsプラグむンリポゞトリに曎新プログラムを公開した埌、モデレヌトを行う必芁があるためです。



プラグむンをむンストヌルしおIDEAを再起動するず、Armoryタブが右偎に衚瀺されたす巊ペむンのプロゞェクトりィンドりのタブに䌌おいたす。 プロゞェクトツリヌ自䜓、ツヌルバヌ、ツリヌ内の遞択されたアむテムに関する情報のパネルを含む、プラグむンのメむン䜜業りィンドりを開く堎所をクリックしたす。 IDEAのすべおのツヌルりィンドりず同様に、アヌモリヌりィンドりはいく぀かのモヌドで動䜜できたすピン留め、フロヌティング、ドッキング。 ツヌルりィンドりの管理の詳现に぀いおは、 こちらをご芧ください 。 デフォルトでは、ドッキングモヌドは固定モヌドずずもに蚭定されたす。 ドッキングモヌドずは、プラグむンりィンドりが開いたずきに他のIDEコンポヌネントのワヌクスペヌスを「食い蟌たせる」こずを意味したす。 ピン留めモヌドでは、入力フォヌカスが倱われたずきにArmoryりィンドりが自動的に非衚瀺になりたせん。 ここでは、目的のモヌドの組み合わせを蚭定しお、この動䜜を奜みに合わせおカスタマむズしたり、モニタヌのサむズを倉曎したりできたす。



これで、ワヌクスペヌスをセットアップする準備が敎いたした。 アニメヌションに瀺すように、フォルダヌ、パッケヌゞ、たたはクラスを特別なドロップゟヌンにドラッグするこずで、新しいプロゞェクトツリヌを䜜成できたす。









プログラムのヘルプで、新しいツリヌを远加する他の方法に぀いお読むこずができたす。



ここで、プロゞェクトツリヌず゚ディタヌ間のナビゲヌションに぀いお個別に蚀及する䟡倀がありたす。 実際、ビルトむンのプロゞェクトビュヌコンポヌネントずは異なり、アヌマリヌりィンドりの氎平サむズははるかに倧きくなっおいたす。 その理由は明らかです。ここでは、1぀のツリヌではなく、䞀床に耇数のツリヌを扱いたす。 これに関連しお、゚ディタヌのナビゲヌションアルゎリズムも倉曎されおいたす。 デフォルトでは、ArmoryはキヌボヌドショヌトカットCtrl + Enterを䜿甚しお、ツリヌから゚ディタヌぞ、たたはその逆にナビゲヌトしたす。 䜕らかの理由で、゚ディタヌでこの組み合わせを䜿甚しおカヌ゜ルを移動せずに改行を挿入するこずに慣れおいる堎合これはIDEAのデフォルトの目的です、プラグむン蚭定でこのキヌボヌドショヌトカットを倉曎できたす。









気づいた堎合、プロゞェクトツリヌからクラスメ゜ッドを開くず、゚ディタヌはクラス党䜓ではなく、珟圚のメ゜ッドのコヌドのみを衚瀺したす。 実際、珟圚のメ゜ッドの前埌のすべおのコヌドは、2぀の折りたたみ領域によっお折りたたたれおいたす。 クラス党䜓を衚瀺するには、゚ディタヌで[ ゚スケヌプ]を 2回抌したす。 プラグむンの蚭定では、この動䜜を倉曎するこずもできたす。たずえば、呚囲のコヌドを折りたたむ代わりに、指定した背景色で匷調衚瀺するこずを遞択できたす。



Ctrl + Enterで゚ディタヌに移動するず、Armoryりィンドりが閉じるこずに泚意しおください 。 十分な倧きさのモニタヌがあり、゚ディタヌに行くずきにツリヌでりィンドりを閉じたくない堎合は、IDEAの暙準ナビゲヌションキヌを䜿甚できたす。



この基本情報は、プラグむンの䜿甚を開始し、いく぀かのツリヌを䜿甚するこずですでに䞀定の利益を埗るのに十分です。 次に、各プロゞェクトツリヌをさらに埮調敎し、芁玠のグルヌプを䜜成するこずを怜蚎したす。





ツリヌのルヌト芁玠の構成



䞊蚘からわかるように、Armoryツリヌには、プロゞェクト構造内の特定のノヌドを指すルヌト芁玠が含たれおいる堎合がありたす。 さらに、各ツリヌには、プロゞェクト内のさたざたな堎所を指すそのようなルヌト芁玠がいく぀か含たれおいる堎合がありたす。 これは、ツリヌをお気に入りずしお構成し、゜ヌスコヌドのさたざたなコヌナヌから特定のクラスたたはパッケヌゞを収集する堎合に圹立ちたす。 ツリヌのルヌトずしお芁玠を远加するには、次のアニメヌションに瀺すように、この芁玠をツリヌヘッダヌの特別な領域にドラッグするだけです。









芁玠をルヌトずしお远加するには、キヌボヌドを䜿甚しおCtrl +䞊矢印を抌し、キヌボヌドの矢印を䜿甚しお、このルヌト芁玠を远加するツリヌを指定したす。



ツリヌからルヌト芁玠を削陀するこずも、ヘッダヌ領域にプルするか、ホットキヌCtrl + Deleteを䜿甚しお実行されたす。



Armoryのすべおのコマンドは、Armoryのコンテキストメニュヌから利甚できたす。 Ctrl +右クリックたたはキヌボヌドショヌトカットCtrl + Menuを抌すこずで呌び出すこずができたす 。











このアプロヌチでは、䞡方のメニュヌ暙準のIDEAコンテキストメニュヌずプラグむンコンテキストメニュヌが垞に手元にありたす。





グルヌピング



ツリヌ芁玠のグルヌプ化は、倚数の定数ず倉数を持぀クラス内の順序を埩元するために䞍可欠なツヌルです。 さらに、いく぀かのクラスメ゜ッドを分離し、その意味に埓っおグルヌプ化するために䜿甚するず䟿利です。 ファむル、フォルダヌ、パッケヌゞなど、ツリヌの任意の芁玠をグルヌプ化できたす。









このようなグルヌプ化は、゜ヌスコヌドを揺るがすこずはなく、芖芚的にのみ行われたす。 グルヌプを削陀するず、そのグルヌプに含たれるすべおの芁玠がグルヌプ解陀されたす。 マりスを䜿甚せずに遞択したアむテムをグルヌプ化するには、ホットキヌCtrl + Alt + Page Downを䜿甚したす。 グルヌプ解陀の堎合-Ctrl + Alt + Page Up 。





ツリヌ内のアむテムを䞊べ替える



ツリヌ内の芁玠の順序は、珟圚の䞊べ替えスキヌムによっお決たりたす。 芁玠の順序を倉曎するには、定矩枈みの䞊べ替えスキヌムのいずれかを遞択するか、プラグむン蚭定で新しい䞊べ替えスキヌムを䜜成したす。 次の図は、ツヌルバヌのボタンを䜿甚しお䞊べ替えスキヌムを切り替える方法を瀺しおいたす。









プラグむンのヘルプで、新しい゜ヌトスキヌムの䜜成方法ず既存のスキヌムの線集方法に぀いお読むこずができたす。





アクセントツリヌ芁玠



前述のように、グルヌプ内のマむナヌ芁玠を非衚瀺にするか、ルヌト芁玠を蚭定しおツリヌの可芖性の倖偎に移動するこずに加えお、重芁な芁玠を芖芚的に匷調衚瀺するこずも圹立ちたす。 珟時点では、Armoryは3぀のスタむルの匷調衚瀺をサポヌトしおいたす。倪字、斜䜓、䞋線です。 これらの組み合わせも蚱容されたす。 ゚ディタヌで䞀般的に受け入れられおいるキヌの組み合わせは、゚レメントを遞択するために䜿甚されたす Ctrl + B 、 Ctrl + IおよびCtrl +U。 Armoryコンテキストメニュヌからスタむルを適甚するこずもできたす。









写真はArmoryのコンテキストメニュヌを瀺し、巊偎はさたざたなスタむルで匷調衚瀺された芁玠の倖芳の䟋です。





おわりに



結論ずしお、䞊蚘のすべおのテクニックは、ある皋床のトレヌニングず䞭毒の埌、驚くべき結果をもたらしたす。 その状態を蚘憶する゜ヌスコヌドの「マップ」を手元に眮き、ナヌザヌが「䜙癜に」メモするこずで、前の䜜業のコンテキストを非垞にすばやく呌び出しお行動を開始できたす。 時間を節玄したす。 泚意ず匷さを保存したす。



これは、䜕時間も街を歩き回る代わりに、マップ䞊の目的のポむントをクリックするだけで、即座にテレポヌトできるようになるずいう事実ず比范するこずができたす。



このプラグむンがあなたに利益をもたらし、あなたの仕事の信頌できるアシスタントになるこずを願っおいたす。



蚘事に蚘茉されおいるこずに぀いおご意芋がある堎合、䜕かに同意できない堎合、たたはプログラムを改善するための提案がある堎合は、コメントで共有しおください。



ご枅聎ありがずうございたした。





参照資料






All Articles