VSCodeでReactのソースコードを読むための準備
何が大変か?
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