Expo(TypeScript)セットアップ

はじめに

Expo を TypeScript で使うことは何度かやっているんですが、手順として整理できていなかったので、整理してみました。Expo プロジェクトを作成し、ESLint を導入します。

セットアップ手順

事前準備

nodenv を使って最新の Node.js を使って、expo-cliyarn をインストールします。yarn は必須ではないんですが、今回は利用する手順にしています。

nodenv shell 14.8.0
npm install --global expo-cli
npm install --global yarn
nodenv rehash

expo のバージョンを確認し、正しくインストールされたことを確認します。

$ expo --version
3.24.2

Expo プロジェクト作成

expo init コマンドで Expo プロジェクトを生成するんですが、 それと同時に Git リポジトリ化されてしまいます。 その動作で問題ないことも多いのでしょうが、ある種の制約にはなってしまうので、 今回の手順ではリポジトリ化を解除してしまいます。

expo init my-project --template expo-template-blank-typescript
# Git リポジトリ解除
rm -rf my-project/.git/
cd my-project
# ローカルの Node.js バージョンを固定
nodenv local 14.8.0
yarn start

ESLint 導入

直接的には関係ないですが、開発着手前に欲しい ESLint もここで導入します。

yarn add --dev eslint
yarn run eslint --init

ここから eslint --init コマンドによる質問が開始します。

How would you like to use ESLint?

To check syntax, find problems, and enforce code style を選択します。

What type of modules does your project use?

JavaScript modules (import/export) を選択します。

Which framework does your project use?

React を選択します。

Does your project use TypeScript?

Yes を選択します。

Where does your code run?

Node のみ選択します。

How would you like to define a style for your project?

Use a popular style guide を選択します。

Which style guide do you want to follow?

個人的な好みで Airbnb: https://github.com/airbnb/javascript を選択します。

What format do you want your config file to be in?

個人的な好みで YAML を選択します。

ここで、下記メッセージが出て、必要なパッケージが分かります。

Checking peerDependencies of eslint-config-airbnb@latest
The config that you've selected requires the following dependencies:

eslint-plugin-react@^7.20.0 @typescript-eslint/eslint-plugin@latest eslint-config-airbnb@latest eslint@^5.16.0 || ^6.8.0 || ^7.2.0 eslint-plugin-import@^2.21.2 eslint-plugin-jsx-a11y@^6.3.0 eslint-plugin-react-hooks@^4 || ^3 || ^2.3.0 || ^1.7.0 @typescript-eslint/parser@latest

Would you like to install them now with npm?

No を選択します。Yarn 使っているので、後で手動で対応することにします。

以上で、質問は終わりなので、先程表示された必要なパッケージを追加します。

yarn add --dev eslint-plugin-react@^7.20.0 @typescript-eslint/eslint-plugin@latest eslint-config-airbnb@latest eslint@^7.2.0 eslint-plugin-import@^2.21.2 eslint-plugin-jsx-a11y@^6.3.0 eslint-plugin-react-hooks@^4 @typescript-eslint/parser@latest

これで ESLint が機能するようになりましたが、 生成された設定ファイルには不足分があったので、下記差分を入れました。

@@ -13,4 +13,24 @@ parserOptions:
 plugins:
   - react
   - '@typescript-eslint'
-rules: {}
+settings:
+  import/resolver:
+    node:
+      extensions:
+        - .js
+        - .jsx
+        - .ts
+        - .tsx
+rules:
+  import/extensions:
+    - 2
+    - extensions:
+        - .js
+        - .jsx
+        - .ts
+        - .tsx
+  react/jsx-filename-extension:
+    - 2
+    - extensions:
+      - .jsx
+      - .tsx

以上で ESLint 対応も完了です。