VS Codeでstyled-componentsの補完が効かないときの対応方法

## はじめに
この記事はHRBrain Advent Calendar 2022カレンダー3の21日目の記事です。

https://qiita.com/advent-calendar/2022/hrbrain

フロントエンドエンジニアの富岡です。
[35歳のフロントエンドエンジニアがメガベンチャーから転職した理由](https://qiita.com/tomtomtommy18/items/88754bfa3e36e3069959)で書いた通り11月にHRBrainへ入社しました。

HRBrainでは複数のプロダクトで[styled-components](https://styled-components.com/)を用いて開発をしており、私が配属された労務プロダクトでも使用しています。そこで、開発がしやすいように[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)（以降VS Code）のプラグインのインストールをしたのですが、シンタックスハイライトは効いているのに、補完が効かないという状態になってしまいました。

この記事では、解決した方法とそれまでに行った手順を備忘録も兼ねて記載します。

## 開発環境
解決方法が異なることもあると思われるため、開発環境を抜粋して記載します。

- M1Mac（OS: Monterey）
- VS Code: 1.74.0
- React: 17.0.2
- styled-components: 5.3.3
- TypeScript: 4.4.4

## 解決した方法
結論としては、プラグインをインストールした後、**VS Codeで使用するTypeScriptのバージョンを明確に指定**することで解決しました:metal:

以降は解決までに道のりを記載します。

## 解決までの道のり

### Step.1 プラグインのインストール
まずは[vscode-styled-components](https://marketplace.visualstudio.com/items?itemName=styled-components.vscode-styled-components)をインストールしました。

|Before|After|
|---|---|
|![“screenshot” 2022-12-15 20.42.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191143/1fde3c90-9bd0-73f5-b1f4-8d724750745e.png)|![“screenshot” 2022-12-15 20.44.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191143/4badc705-731b-d639-1be3-7e20ef72cd4e.png)|

シンタックスハイライトが効くようになりました:raised_hands:

これだけで終わると思っていたのですが……

![“screenshot” 2022-12-15 20.48.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191143/92b4b380-ca08-3bad-ea20-77b500f557d1.png)

**補完が効かないじゃないかぁ！！！**

CSSのプロパティや値を手打ちするのは辛すぎますし、スペルをちゃんと覚えていないものもあります。
これは解決せねば……

### Step.2 ひたすらググって試す
「VS Code styled-components 補完」でググって出てきた方法を試していきました。

1. [styled-componentsで入力補完を効かせる方法(vscode)](https://qiita.com/dev_shun/items/b7f262906e9cf1c05e2e)
    - プラグインを入れると書いてある。
→もうやったぞ！
1. [vscode styled componentsの補完が効かない](https://zenn.dev/muzin00/articles/ace4d0d4b3da4d)
    - 古いプラグインを使っていないかい？と書いてある。
→ちゃんと新しいの使ってた！
1. [VSCodeをアップデートしたらstyled componentsの補完が効かなくなっていたので解消した【VSCode/拡張機能】 ](https://harionote.net/article/fix-vscode-styled-components)
    - [JavaScript and TypeScript Nightly](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-next)をアンインストールしたら解決したと書いてある。
→インストールしてない！
※現在はJavaScript and TypeScript Nightlyもインストールしていて問題なく併用できています。
1. [VSCode + styled-components + typescriptでうまく補完が効かないと思ったら](https://blog.terrier.dev/blog/2018/20180813000000-vscode-styled-components-typescript/)
    - [typescript-styled-plugin](https://github.com/Microsoft/typescript-styled-plugin)を入れて、tsconfig.jsonに設定を追記すると書いてある。
→試してみたけどダメたった……


### Step.3 解決！

冒頭の結論に記載した通り、**VS Codeで使用するTypeScriptのバージョンを明確に指定**することで解決しました:metal:

![“screenshot” 2022-12-15 21.11.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191143/53fb5f1e-b585-b083-99a6-98f9bc0f90ec.png)

上記の画面でワークスペースのバージョンを使用することで補完が効くようになりました。

![“screenshot” 2022-12-15 21.13.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/191143/bd03bab0-5623-ea40-6c96-d2a1c896e958.png)

VS Codeで使用するTypeScriptのバージョンを明確に指定する手順は下記の通りです。

1. `⌘+Shift+P`でコマンドパレットを開く（Windows／Linuxでは`Ctrl＋Shift＋P`）
1. `TypeScript: Select TypeScript Version...`を実行
1. 使用したいバージョンを選択

この方法に辿り着いたのは、[styled-components を試す - アカベコマイリ - akabeko.me](https://akabeko.me/blog/2020/11/styled-components/)を読んでいたときに、初めは他の記事と同じ情報しかないなと思っていたのですが、 **最後に VS Code の TypeScript バージョンを明示的に指定。** という記述を見つけることができたからです。

## 最後に
解決してみると「なんだこんなことか〜」となる内容でしたが、普段の業務でも近い体験をすることが多くあるなと感じました。
たとえば、バグの修正や思うような動作にならないとき、色々調査・検証をして結果修正したのは1行のみだったということは割とよくあると思います。
1行は言い過ぎかもしれませんが、エンジニアの方であれば似たようなご経験が思い当たるのではないでしょうか。

また、今回作成した記事は既存の情報から目的に沿ったものを抽出して、まとめ直したものであり目新しい情報はありません。
ただ、同じように補完が効かない状態の方には情報の網羅性、目的に沿った内容（styled-componentsの使い方には触れていないなど）になっている点で価値があるのではないかと思っています。
普段の業務でも機能が動いているだけでなく、ユーザーの目的に合わせた使いやすさや分かりやすさを提供できることでさらに価値を感じてもらえるものだと考えているので、記事を書きながら色々繋がっているなと感じました。

HRBrainではエンジニアをはじめ複数の職種で採用を行なっています。
ユーザーに寄り添ったプロダクト開発への挑戦をしたいという考えをお持ちの方はぜひ一緒に働きましょう！

https://www.hrbrain.co.jp/recruit