T-CREATOR

Svelte を macOS + yarn + TypeScript で最短構築:ESLint/Prettier まで一気通貫

Svelte を macOS + yarn + TypeScript で最短構築:ESLint/Prettier まで一気通貫

Svelte は React や Vue に比べてシンプルで軽量、さらにコンパイル時に最適化されるため、初心者にも扱いやすい魅力的なフレームワークです。本記事では、macOS 環境で yarn と TypeScript を使い、Svelte プロジェクトを最短で立ち上げる手順をご紹介します。

ESLint や Prettier といったコード品質を保つツールまで、一気通貫でセットアップできるので、この記事を読み終えたらすぐに開発を始められますよ。

背景

Svelte の特徴と選ばれる理由

Svelte は従来の仮想 DOM を使わず、コンパイル時に最適化されたバニラ JavaScript を生成する革新的なフレームワークです。このアプローチにより、ランタイムのオーバーヘッドが削減され、高速なアプリケーションを構築できます。

また、リアクティブな変数宣言が簡潔で、学習コストが低い点も大きな魅力ですね。TypeScript との組み合わせにより、型安全性を保ちながら開発できるため、保守性の高いコードが書けます。

macOS + yarn を選ぶメリット

macOS は Node.js エコシステムとの親和性が高く、Homebrew などのパッケージマネージャーを使えば環境構築がスムーズです。yarn は npm に比べて依存関係の解決が高速で、ロックファイル(yarn.lock)により再現性の高い環境を構築できますね。

以下の図は、Svelte アプリケーション開発における主要な技術スタックの関係性を示しています。

mermaidflowchart TB
  dev["開発者"] -->|コード作成| svelte["Svelte<br/>プロジェクト"]
  svelte -->|型チェック| ts["TypeScript"]
  svelte -->|リント| eslint["ESLint"]
  svelte -->|整形| prettier["Prettier"]
  ts -->|コンパイル| js["JavaScript"]
  eslint -->|品質保証| output["成果物"]
  prettier -->|統一| output
  js -->|最適化| output

この図から分かるように、TypeScript による型安全性、ESLint によるコード品質、Prettier によるフォーマット統一が、最終的な成果物の品質を支えています。

課題

初期セットアップの複雑さ

Svelte プロジェクトを一から構築する際、公式テンプレートはあるものの、TypeScript や ESLint、Prettier を組み合わせる設定は手間がかかります。特に設定ファイルの記述や依存パッケージの選定で迷うことが多いでしょう。

また、各ツールのバージョン互換性や設定の書き方が更新されることもあり、最新情報を追いかけるのも大変ですね。

ツール連携の調整

ESLint と Prettier を併用する際、ルールの競合が発生しやすく、適切な設定をしないとエラーが出たり、自動整形が期待通りに動かなかったりします。TypeScript のパス解決や Svelte ファイル(.svelte)の解析も、プラグインの導入と設定が必要です。

以下の図は、ツール連携時によく起こる課題の流れを示しています。

mermaidflowchart LR
  start["セットアップ開始"] -->|依存追加| deps["パッケージ<br/>インストール"]
  deps -->|設定ファイル| config["各種設定"]
  config -->|競合発生?| conflict{"ルール<br/>競合"}
  conflict -->|Yes| fix["設定調整"]
  conflict -->|No| done["完了"]
  fix -->|再確認| config

この図のように、設定ファイルの作成後にルール競合が発生すると、再度調整が必要になり、手戻りが発生してしまいます。

解決策

公式テンプレートと yarn の活用

Svelte 公式が提供する create-svelte を使えば、TypeScript 対応のプロジェクトを簡単に生成できます。yarn を利用することで、依存関係の管理も高速かつ安定します。

さらに、ESLint と Prettier の設定を標準化し、競合を回避する構成を採用すれば、セットアップ後すぐに開発に集中できますよ。

設定ファイルの統一と自動化

ESLint の設定では eslint-config-prettier を使い、Prettier と競合するルールを無効化します。また、VS Code などのエディタ設定と連携させることで、保存時の自動整形が可能になりますね。

以下の図は、解決策として提案する開発フローを示しています。

mermaidflowchart TB
  init["yarn create svelte"] -->|選択肢| template["TypeScript<br/>テンプレート"]
  template -->|依存追加| install["yarn install"]
  install -->|設定| eslint_conf["ESLint 設定"]
  eslint_conf -->|設定| prettier_conf["Prettier 設定"]
  prettier_conf -->|統合| vscode["VS Code<br/>連携"]
  vscode -->|自動化| dev["開発開始"]

このフローに従えば、迷うことなく最短でセットアップが完了し、すぐにコーディングを始められます。

具体例

ここからは、実際にコマンドを実行しながら Svelte プロジェクトを構築していきます。各ステップごとにコードブロックを分けて説明しますので、順番に進めてください。

前提条件の確認

まず、Node.js と yarn がインストールされているか確認しましょう。

bash# Node.js バージョン確認
node -v
bash# yarn バージョン確認
yarn -v

Node.js は v16 以上、yarn は v1.22 以上が推奨です。インストールされていない場合は、Homebrew を使ってインストールできます。

bash# Homebrew で Node.js をインストール
brew install node
bash# npm 経由で yarn をインストール
npm install -g yarn

プロジェクトの作成

次に、Svelte プロジェクトを作成します。create-svelte を使うことで、対話形式でテンプレートを選択できます。

bash# プロジェクトを作成
yarn create svelte my-svelte-app

実行すると、以下のような選択肢が表示されます。

#質問選択内容
1Which Svelte app template?Skeleton project
2Add type checking with TypeScript?Yes, using TypeScript syntax
3Select additional optionsAdd ESLint for code linting, Add Prettier for code formatting

ここで TypeScriptESLintPrettier を選択することがポイントです。これにより、後から個別に設定する手間が省けますね。

プロジェクトディレクトリへ移動

作成したプロジェクトディレクトリに移動しましょう。

bash# プロジェクトディレクトリへ移動
cd my-svelte-app

依存パッケージのインストール

yarn を使って依存パッケージをインストールします。

bash# パッケージをインストール
yarn install

これで、プロジェクトに必要なすべてのパッケージがインストールされました。node_modules ディレクトリと yarn.lock ファイルが生成されます。

プロジェクト構造の確認

プロジェクトのディレクトリ構造を確認してみましょう。

bash# ディレクトリ構造を表示
tree -L 2 -I node_modules

主要なファイルとディレクトリは以下の通りです。

#ファイル/ディレクトリ説明
1src/アプリケーションのソースコード
2static/静的ファイル(画像、フォントなど)
3svelte.config.jsSvelte の設定ファイル
4vite.config.tsVite の設定ファイル
5tsconfig.jsonTypeScript の設定ファイル
6.eslintrc.cjsESLint の設定ファイル
7.prettierrcPrettier の設定ファイル

これらのファイルが自動生成されているので、基本的な設定はすでに完了しています。

ESLint 設定の確認と調整

生成された .eslintrc.cjs を確認してみましょう。

javascript// .eslintrc.cjs
module.exports = {
  root: true,
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:svelte/recommended',
    'prettier'
  ],
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint'],
  parserOptions: {
    sourceType: 'module',
    ecmaVersion: 2020,
    extraFileExtensions: ['.svelte']
  },

上記の設定では、TypeScript と Svelte のプラグインが有効化されており、prettier が extends の最後に配置されています。

javascript  env: {
    browser: true,
    es2017: true,
    node: true
  },
  overrides: [
    {
      files: ['*.svelte'],
      parser: 'svelte-eslint-parser',
      parserOptions: {
        parser: '@typescript-eslint/parser'
      }
    }
  ]
};

overrides セクションにより、.svelte ファイルに対して専用のパーサーが適用されます。これにより、Svelte ファイル内の TypeScript コードも正しくリントされますよ。

Prettier 設定の確認

.prettierrc ファイルも確認しましょう。

json{
  "useTabs": true,
  "singleQuote": true,
  "trailingComma": "none",
  "printWidth": 100,
  "plugins": ["prettier-plugin-svelte"],
  "overrides": [
    {
      "files": "*.svelte",
      "options": {
        "parser": "svelte"
      }
    }
  ]
}

この設定では、Svelte ファイル用のプラグイン(prettier-plugin-svelte)が有効化されており、自動整形が正しく動作します。好みに応じて singleQuoteprintWidth を調整できますね。

VS Code 設定の追加(任意)

VS Code を使っている場合、保存時に自動整形されるよう設定すると便利です。プロジェクトルートに .vscode​/​settings.json を作成しましょう。

json{
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": "explicit"
  },

上記の設定により、ファイル保存時に Prettier でフォーマットされ、ESLint のエラーも自動修正されます。

json  "[svelte]": {
    "editor.defaultFormatter": "svelte.svelte-vscode"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  }
}

ファイルタイプごとにフォーマッターを指定することで、Svelte ファイルと TypeScript ファイルが適切に整形されます。

サンプルコンポーネントの作成

実際に動作を確認するため、簡単なコンポーネントを作成してみましょう。src​/​lib​/​Counter.svelte を作成します。

svelte<script lang="ts">
  // カウンターの状態を管理する変数
  let count: number = 0;

  // カウントを増やす関数
  function increment(): void {
    count += 1;
  }
</script>

上記のコードでは、TypeScript の型注釈を使って変数と関数の型を明示しています。

svelte<button on:click={increment}>
  Count: {count}
</button>

ボタンをクリックすると、increment 関数が呼ばれてカウントが増えます。

svelte<style>
  button {
    padding: 0.5rem 1rem;
    font-size: 1rem;
    background-color: #ff3e00;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
  }

  button:hover {
    background-color: #ff5722;
  }
</style>

スタイルは Svelte のスコープ付き CSS として定義されるため、他のコンポーネントに影響しません。

ページでコンポーネントを使用

次に、作成した Counter コンポーネントをページで使用します。src​/​routes​/​+page.svelte を編集しましょう。

svelte<script lang="ts">
  // Counter コンポーネントをインポート
  import Counter from '$lib/Counter.svelte';
</script>

$lib は Svelte のエイリアスで、src​/​lib ディレクトリを指します。これにより、相対パスを使わずにインポートできますね。

svelte<h1>Welcome to Svelte</h1>
<p>TypeScript + ESLint + Prettier で快適な開発環境が整いました!</p>

<Counter />

ページにコンポーネントを配置することで、カウンターが表示されます。

開発サーバーの起動

開発サーバーを起動して、ブラウザで動作を確認しましょう。

bash# 開発サーバーを起動
yarn dev

実行すると、http:​/​​/​localhost:5173 でサーバーが起動します。ブラウザでアクセスすると、作成したページとカウンターが表示されますよ。

リントとフォーマットの実行

コードの品質を確認するため、ESLint と Prettier を実行してみましょう。

bash# ESLint でコードをチェック
yarn lint

エラーがあれば表示されます。自動修正可能なエラーは以下のコマンドで修正できます。

bash# ESLint で自動修正
yarn lint --fix

次に、Prettier でフォーマットを確認します。

bash# Prettier でフォーマットをチェック
yarn format

実際にフォーマットを適用する場合は、以下のコマンドを実行します。

bash# Prettier でフォーマットを適用
yarn format --write

これらのコマンドを定期的に実行することで、コードの品質と一貫性を保てます。

ビルドの実行

最後に、本番用のビルドを実行してみましょう。

bash# 本番用ビルド
yarn build

ビルドが成功すると、build ディレクトリに最適化されたファイルが生成されます。TypeScript のエラーがあればここで検出されるため、本番環境にデプロイする前に確認できますね。

以下の図は、開発から本番デプロイまでの一連の流れを示しています。

mermaidflowchart LR
  code["コード作成"] -->|保存| auto["自動整形<br/>Prettier"]
  auto -->|確認| lint["ESLint<br/>チェック"]
  lint -->|問題なし| test["動作確認<br/>yarn dev"]
  test -->|完成| build["ビルド<br/>yarn build"]
  build -->|成功| deploy["デプロイ"]
  lint -->|エラー| fix["修正"]
  fix -->|再編集| code

この図から分かるように、自動整形とリントを組み込むことで、品質の高いコードを継続的に保てます。

まとめ

本記事では、macOS 環境で yarn と TypeScript を使い、Svelte プロジェクトを最短でセットアップする方法をご紹介しました。公式の create-svelte を活用することで、TypeScript、ESLint、Prettier の設定が自動で行われ、すぐに開発を始められます。

ESLint と Prettier の組み合わせにより、コードの品質とフォーマットの統一が実現し、チーム開発でも安心ですね。VS Code との連携設定を加えれば、保存時の自動整形も可能になり、開発効率がさらに向上します。

Svelte のシンプルさと TypeScript の型安全性を組み合わせることで、保守性の高いアプリケーションを構築できるでしょう。ぜひこの記事を参考に、快適な Svelte 開発を始めてみてください。

関連リンク