ReScript の基本

ReScript を初めて使う方向けに、プロジェクトのセットアップと基本的な使い方を説明します。

Tip

ReScript の包括的なドキュメントについては、公式の ReScript docs を参照してください。

新規プロジェクトのセットアップ

方法 1: プロジェクトウィザードを使用する

  1. FileNewProject を選択します

  2. ジェネレーター一覧から ReScript を選択します

  3. プロジェクト名と保存場所を入力します

  4. Create をクリックします

ウィザードにより、rescript.json とソースファイルを含む基本的なプロジェクト構造が生成されます。

方法 2: 手動セットアップ

  1. プロジェクト用の新しいディレクトリを作成します

  2. npm で初期化します:

mkdir my-rescript-project
cd my-rescript-project
npm init -y
  1. ReScript をインストールします:

npm install rescript @rescript/core
  1. Language Server をインストールします:

npm install @rescript/language-server
  1. rescript.json を作成します:

{
  "name": "my-rescript-project",
  "sources": [
    { "dir": "src", "subdirs": true }
  ],
  "package-specs": [
    { "module": "esmodule", "in-source": true }
  ],
  "bs-dependencies": ["@rescript/core"]
}
  1. src/ ディレクトリと最初の .res ファイルを作成します:

mkdir src
// src/Main.res
let greeting = "Hello from ReScript!"
Console.log(greeting)
  1. ビルドします:

npx rescript build

プロジェクト構成

一般的な ReScript プロジェクトの構成は以下のとおりです:

my-project/
├── rescript.json          # ReScript configuration
├── package.json           # npm dependencies
├── node_modules/
│   ├── rescript/          # ReScript compiler
│   └── @rescript/
│       ├── core/          # Standard library
│       └── language-server/  # LSP server
├── src/
│   ├── Main.res           # Source files
│   └── Utils.res
└── lib/                   # Compiled output (auto-generated)

主要なファイル

rescript.json

ReScript プロジェクトのメイン設定ファイルです。プラグインはこのファイルに対して JSON Schema のバリデーションと自動補完を提供します。

主要なフィールド:

  • name --- パッケージ名

  • sources --- コンパイル対象のソースディレクトリ

  • bs-dependencies --- ReScript パッケージの依存関係

  • package-specs --- 出力形式(commonjs または esmodule)

.res ファイル

ReScript のソースファイルです。各 .res ファイルは、ファイル名と同じ名前のモジュールを定義します。

.resi ファイル

ReScript のインターフェースファイルです。対応する .res モジュールの公開 API を定義します。Alt+O.res ファイルと .resi ファイルを切り替えられます。

基本構文クイックリファレンス

// Variables
let name = "ReScript"
let age = 25
let isReady = true

// Functions
let add = (a, b) => a + b
let greet = (name) => `Hello, ${name}!`

// Types
type color = Red | Green | Blue
type user = {name: string, age: int}

// Pattern matching
let describe = (color) =>
  switch color {
  | Red => "red"
  | Green => "green"
  | Blue => "blue"
  }

// Modules
module Math = {
  let pi = 3.14159
  let square = (x) => x *. x
}

// Pipe operator
let result = [1, 2, 3]->Array.map(x => x * 2)->Array.filter(x => x > 2)