🚀 VS Codeでで入手しましょう!

リッチなコードナビゲーション体験を初めて見てみましょう

2018年12月4日 Jonathan Carter, @lostintangent

プルリクエストは、何百万もの開発者にとって日々不可欠なコラボレーションツールであり、非同期のコードレビューとチームやオープンソースコミュニティ間での知識の共有を促進します。この広範な有用性と普及により、PRレビューワークフローのあらゆる進歩は、開発者の生産性、製品の品質、およびリリース速度に大きな影響を与える可能性があります。

9月には、GitHubと共に、GitHub Pull Requests拡張機能を発表しました。これにより、開発者はソースコードを記述する場所と同じ場所、つまり使い慣れた高度にカスタマイズされたエディター内でレビューできるようになりました。本日、**リッチでマルチリポジトリのコードナビゲーション**をサポートすることで、エディター内PRレビューをさらに強化する新しいエクスペリエンスのプレビューを共有できることを嬉しく思います。

表面的なレビューに別れを告げましょう

プルリクエストを十分にレビューするには、変更のコンテキストと、それらがより広範なコードベースにどのように影響するかを理解する必要があります。今日、多くの開発者はブラウザで「軽量レビュー」を行っています。これは非常に便利なワークフローを提供しますが、(たとえば、「この変更はAPIのコンシューマーを壊していませんか?」など)必要なコンテキストを見逃しやすくなります。GitHub Pull Requests拡張機能は、レビュー対象のソースコードをビルドおよびナビゲートするために開発環境の機能を活用できるようにすることで、そのエクスペリエンスを向上させましたが、それでもローカルでブランチをチェックアウトし、必要なプラットフォームSDKと言語拡張機能をインストールする必要があります。すべてのPRに対してこれを行うと、かなりの時間とコンテキストスイッチが必要になる可能性があり、リモートPRを迅速にレビューする便利さと、ローカルエディターでレビューするパワーのどちらかを選択することになります。**開発者は両方を持つべきだと私たちは考えています。**

私たちが構築しているリッチコードナビゲーションエクスペリエンスは、開発者が開発環境内から(Visual StudioおよびVisual Studio Code拡張機能経由で)関心のあるプルリクエストを追跡し、いつでも、ローカルでトピックブランチをチェックアウトする必要なく、リモートでホストされているPR全体の変更をシームレスにナビゲートできるようにします。具体的には、*GitHub Pull Requests*ビューから開いたファイルを、他のエディターエクスペリエンス(たとえば、ホバー情報、定義へ移動、すべての参照の検索)を駆動するのと同じコードナビゲーション機能で強化しますが、この場合、**完全にクラウドによって駆動されます**。私たちは、これがチームの生産性を向上させ、表面的なレビューを過去のものにできると信じています。

Navigating a csharp PR

C#拡張機能や.NETをインストールしていなくても、macOS上でC#ベースのPRをナビゲート。

Navigating a C++ PR

C++拡張機能をインストールしていなくても、macOS上でC++ベースのPRをナビゲート。

Navigating a Java PR

Java Language Support (redhat.java)拡張機能をインストールしていなくても、macOS上でJavaベースのPRをナビゲート。

すべてをナビゲート

このエクスペリエンスを使用すると、レビュー中のファイル内、PRの一部として変更された他のファイル内、および同じリポジトリ内の任意のファイル内で定義されたシンボル(クラス、関数、プロパティなど)に移動できます。このようにして、コードベース全体のコンテキスト内で変更を理解する能力は、PRまたはローカル環境の範囲によって制限されません。

さらに、レビュー中のPRが外部リポジトリの依存関係を使用している場合、または外部リポジトリのコードによって消費されるAPIを含んでいる場合、それらのソースにも直接ナビゲートできます!このようにして、アプリケーションが**バージョン管理でどのように整理されているかに関係なく**、変更の影響を完全に、そしてより重要なこととして、迅速に評価できます。特に、より多くのチームがマルチリポジトリアプリケーション/マイクロサービスを構築し、OSSに大きく依存しているため、これは非常に強力な機能であると私たちは信じています。

Navigating into a Mobx repo

MobXリポジトリへの直接ナビゲーション(GitHub上)、外部参照からそのobservable関数へ。

コミュニティ中心のデザイン

裏側では、このエクスペリエンスは、Language Server Protocol (LSP)への追加機能によって実現されています。LSPは、Visual StudioやVisual Studio Codeなど、多くのツール全体の言語サポートの基盤としてすでに使用されています。この提案は、Language Server Index Format(LSIF、「エルスイフ」と発音)と呼ばれ、言語サーバーがランタイムインテリジェンスを永続化するための手段を提供し、その後、大規模にLSPリクエスト(たとえば、ホバーと定義へ移動)に応答するために使用できます。さらに、LSIFが定義するデータモデルにより、リポジトリをソースコードのリッチグラフ、およびコードが外部リポジトリと持つ関係を通じて表現できます。

このサービスの構築の一環として、さまざまな言語(TypeScriptJava、C++、およびC#)のLSIFサポートの実装を開始しており、これまでの結果に非常に興奮しています。ただし、この取り組みを成功させるためには、標準と追加の言語実装の両方でコミュニティと協力することが不可欠です。LSIFの詳細を学び、今後の会話に貢献するには、LSIF仕様の草案をご覧ください。

フィードバックをお待ちしています!

リッチコードナビゲーションエクスペリエンスの最初の外観を共有できることを嬉しく思います!これが皆さんが試せるようになるまでにはまだ多くの作業が残っていますが、私たちが取り組んでいることについてコミュニティとのオープンな会話を開始したいと考えました。私たちのチームとチャットしたり、プレビューに参加したりすることに興味がある場合は、こちらからサインアップできます。近い将来、より多くのアップデートを共有できることを楽しみにしています!

レビューをお楽しみください!

Jonathan, @lostintangent