👓

VSCodeでReactのソースコードを読むための準備

2023/03/26に公開

何が大変か?

VSCodeはMSが作っているだけあってTypeScript統合がほぼ整っており、特に設定を頑張らなくてもそのままIDE機能が効くことが多いです。現代の多くのJavaScriptプロジェクトはこれで事足ります。

しかし、これには例外があります。Reactの実装は現時点ではFlowで書かれています。FlowはTypeScriptと同様のコンセプトを持つAltJS言語です。FlowはReactと同じくMeta(Facebook)製であるため、これまでReactでFlowが使われてきたのは一定の合理性があると言えるでしょう。

Flowの拡張子が *.js であることから、TypeScriptのIDE機能はFlowのソースコードに対しても反応します。文法が似ていることもあり、Go To Definitionなどの機能もある程度までは動作しますが、完全ではありません。また、エラー表示がうるさくてノイズになるという問題もあります。

こうした背景から、Reactのソースコードを読むときはTypeScriptではなくFlowの環境を整備したほうが良いことになります。

Flowのインストール

Flowの処理系はReactのソースコード内で yarn install をすると入るため、特別なインストール作業は不要です。

Flow Language Supportのインストール

Flow側のガイドにもあるように、Flow Language Supportを入れましょう。Flow Language SupportはFlowの設定ファイルの有無に応じて自動的に自身を有効化するため、とりあえず入れておいて損はあまりありません。

その設定ファイルは次の項目で生成します。

Flowの設定を生成する

Flowの設定は ./.flowconfig に配置しますが、Reactの場合は .flowconfig を自動生成するスクリプトがあるため、それを使う必要があります。

.flowconfig の自動生成はFlowによる型チェックを呼び出すラッパースクリプト内に仕込まれているため、以下のコマンドでFlowを呼び出すことで設定を生成できます。

yarn flow dom-node

ReactではプライマリレンダラごとにFlowの設定が異なるため、どれかひとつを選択して適用することになります。上記の例では dom-node の設定を適用しています。

TypeScriptを無効化する

Flowのプログラムは拡張子 *.js を使うため、TypeScript拡張が反応してしまいます。FlowとTypeScriptの文法は似ているため部分的には動作しますが、TypeScriptでは *.js でTypeScriptの独自文法が使われたときはエラー扱いになるため、基本的にはコードリーディングの邪魔になってしまいます。

Ctrl+P (Cmd+P) → > でコマンド検索ペインを起動し、 "Preferences: Open Workspace Settings (JSON)" を探します。 .vscode/settings.json が開くので、以下の内容を入力します。

{
  "javascript.validate.enable": false
}

これでTypeScriptが無効化できました。

おわり

Happy code reading!

Discussion