はじめに
💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。
Flix を始めるのは簡単です。必要なのは Java バージョン 21 以上だけです。
Java がインストールされているかどうか、またそのバージョンを確認するには、以下のコマンドを入力します:
$ java -version
以下のような出力が表示されるはずです:
openjdk version "21" 2023-09-19 LTS
OpenJDK Runtime Environment Temurin-21+35 (build 21+35-LTS)
OpenJDK 64-Bit Server VM Temurin-21+35 (build 21+35-LTS, mixed mode, sharing)
Java がインストールされていない場合や、バージョンが古い場合は、Adoptium から新しいバージョンをダウンロードできます。
Java 21 以上をインストールしたら、以下の2つの方法で進めることができます:
- Flix VSCode 拡張機能を使用する(強く推奨)、または
- コマンドラインから Flix コンパイラを実行する。
VSCode で Flix を使う
Flix にはフル機能の VSCode プラグインが付属しています。以下の手順で始めましょう:
- 新しい空のフォルダを作成します(例:
my-flix-project)。- VSCode を開き、
File -> Open Folderを選択します。- フォルダ内に
Main.flixという名前の新しいファイルを作成します。- VSCode がマーケットプレイスで拡張機能を検索するかどうか尋ねてきます。「Yes」と答えてください。
- Flix 拡張機能 がダウンロードされ、インストールされます。完了すると、Flix コンパイラ をダウンロードするかどうか尋ねてきます。再び「Yes」と答えてください。
- 「Starting Flix」に続いて「Flix Ready!」と表示されたら、準備完了です。
Flix Visual Studio Code 拡張機能の動作中のスクリーンショット:
Neovim で Flix を使う
Flix は Neovim からも使用できます。以下の手順で始めましょう:
- 公式プラグインは Neovim 0.11 でリリースされた機能に依存しています
- インストールされている Neovim のバージョンを確認してください
nvim --version
Neovim プラグイン
ネイティブ Neovim LSP 用の LSP 設定と、Flix CLI と対話するためのいくつかの関数を提供する Lua プラグインがあります。リポジトリには詳細なインストールと設定手順があります。 お好みのプラグインマネージャーでインストールするか、Neovim のランタイムパスにローカルでクローンできます。
プラグインはキーマッピングを提供しませんが、Flix LSP サーバーをセットアップし、デフォルトの LSP マッピングで動作するようにします。nvim 0.11 での LSP キーマッピングの設定例を以下に示します。LspAttach autocmd を設定すると、キーマッピングはすべての設定された LSP サーバーに適用されます。
-- LSP サーバーがバッファにアタッチしたときにトリガーされる autocmd を作成
vim.api.nvim_create_autocmd('LspAttach', {
-- autocmd の競合を防ぐために名前を付ける
group = vim.api.nvim_create_augroup('my.lsp', {}),
-- サーバーがアタッチしたときに実行する関数
callback = function(args)
-- オプションの説明文字列を持つキーバインディングオプションを設定するヘルパー関数
-- !!! 重要 !!!
-- `buffer` はこれらのマッピングを autocmd をトリガーするバッファのみに設定する
local function get_opts(desc)
return { desc = desc, buffer = args.buf, noremap = true, silent = true }
end
-- キーバインディングを設定する前に LSP クライアントが機能をサポートしているか確認
local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
if client:supports_method('textDocument/format') then
vim.keymap.set('n', '<leader>=', vim.lsp.buf.format, get_opts('format buffer'))
end
if client:supports_method('textDocument/rename') then
vim.keymap.set('n', '<leader>rn', vim.lsp.buf.rename, get_opts('rename'))
end
vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, get_opts("lsp code action"))
vim.keymap.set("n", "<leader>cl", vim.lsp.codelens.run, get_opts("lsp codelens run"))
vim.keymap.set("n", "gr", vim.lsp.buf.references, get_opts("lsp references"))
vim.keymap.set("n", "gd", vim.lsp.buf.definition, get_opts("lsp definition"))
vim.keymap.set("n", "<leader>h", vim.lsp.buf.document_highlight, get_opts("lsp document highlight"))
vim.keymap.set("n", "K", vim.lsp.buf.hover, get_opts("lsp hover"))
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, get_opts("lsp buf implementation"))
vim.keymap.set('i', '<C-a>', '<C-x><C-o>', get_opts("manual expand completion"))
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, get_opts(""))
vim.keymap.set("n", "<leader>d", vim.diagnostic.open_float, get_opts("diagnostic open float"))
vim.keymap.set("n", "<leader>ws", vim.lsp.buf.workspace_symbol, get_opts("lsp workspace symbol"))
vim.keymap.set("n", "<leader>ds", vim.lsp.buf.document_symbol, get_opts("lsp doc symbol"))
end
})
上記のスニペットは以下のキーバインディングを提供します。
| キーバインド | アクション |
|---|---|
gd | 定義へ移動 |
gi | 実装へ移動 |
gr | 参照を検索 |
ctrl+a | 自動補完をトリガー |
shift+k | ホバー |
<leader>rn | シンボルの名前変更 |
<leader>ca | コードアクション |
<leader>cl | コードレンズを実行 |
<leader>ws | ワークスペースシンボルを表示 |
<leader>ds | ドキュメントシンボルを表示 |
<leader>d | 診断を表示 |
<leader>h | ドキュメントハイライトを表示 |
以前は lspconfig が Neovim に LSP 機能と設定を提供していました。しかし、バージョン 0.11 以降、Neovim には LSP が組み込まれており、lspconfig は一般的な LSP サーバーの設定のみを提供します。これにより、インストールの必要性は減りましたが、まだ推奨されています。
インストール
お好みのプラグインマネージャーで flix/nvim リポジトリを使ってインストールしてください。
Neovim 0.12 には組み込みのプラグインマネージャーが搭載されているため、サードパーティのツールは不要です。
-- Neovim 0.12+ (vim.pack)
vim.pack.add({ "https://github.com/flix/nvim" })
require("flix").setup()
vim.lsp.enable("flix")
lazy.nvim を使う場合:
{
"flix/nvim",
ft = "flix",
config = function()
require("flix").setup()
vim.lsp.enable("flix")
end,
}
設定
require("flix").setup() を呼び出して設定を登録し、その後サーバーを有効化します。
-- Flix LSP の設定を作成
require("flix").setup()
-- サーバーを有効化
vim.lsp.enable("flix")
autocommand を使うか、自分の設定に ftplugin/flix.lua を作成して、Flix 用のローカルキーバインディングを設定してください。以下の例では、Flix プロジェクトの run/test をキーにマッピングしています。
-- `flix_cmd` 関数をインポート
local flix_cmd = require("flix.commands").flix_cmd
-- `buffer` を設定することでマッピングが Flix バッファのみに限定される
local bufnr = vim.api.nvim_get_current_buf()
vim.keymap.set("n", "<Space>br", function() flix_cmd("run") end,
{ noremap = true, silent = true, buffer = bufnr, desc = "run flix project" })
vim.keymap.set("n", "<Space>bt", function() flix_cmd("test") end,
{ noremap = true, silent = true, buffer = bufnr, desc = "test flix project" })
flix_cmd は root_markers からプロジェクトのルートを見つけるため、LSP がアタッチされていない場合でも動作し、flix.toml が見つからない場合はエラーを報告します。
このコードを
$HOME/.config/nvim/init.luaまたは Neovim でプラグインを設定している場所に配置してください。
Emacs で Flix を使う
Flix は Emacs からも使用できます。プレーンな Emacs でも、Spacemacs でも利用可能です。どちらも Flix コンパイラの LSP サーバーを使って、フルの言語サポートを提供します。
プレーンな Emacs
flix-mode パッケージ(メジャーモード)をインストールし、LSP クライアント(eglot または lsp-mode)で設定してください。README に、両方に対応した最小限のすぐに使える設定が記載されています。
Spacemacs
flix レイヤーを追加してください。これにより、flix-mode が lsp-mode と Spacemacs のキーバインドシステムに接続されます。README にインストールと設定の手順が記載されています。
コマンドラインで Flix を使う
Flix はコマンドラインからも使用できます。以下の手順に従ってください:
- 新しい空のフォルダを作成します(例:
my-flix-project)。- 最新の
flix.jarを https://github.com/flix/flix/releases/latest からダウンロードし、フォルダに配置します。- 作成したディレクトリに移動し(例:
cd my-flix-project)、java -jar flix.jar initを実行して空の Flix プロジェクトを作成します。java -jar flix.jar runを実行してプロジェクトをコンパイルし、実行します。
Nix で Flix をインストールする
Flix は nix パッケージマネージャを使用してインストールすることもできます。 現在実行中のシェルにインストールするには、以下を実行します:
$ nix-shell -p flix
または、グローバルにインストールするには:
$ nix-env -i flix
その後、プロジェクトディレクトリで flix run を実行します。
トラブルシューティング
Flix が動作しない最も一般的な原因は、(a) java コマンドが PATH に含まれていない、(b) JAVA_HOME 環境変数が設定されていないか、間違って設定されている、(c) 間違ったバージョンの Java がインストールされている、のいずれかです。これらの問題をデバッグするには、以下を確認してください:
- コマンド
java -versionが正しい Java バージョンを表示すること。 JAVA_HOME環境変数が正しく設定されていること。- Windows では、
echo %JAVA_HOME%と入力して変数を表示できます。 - Mac および Linux では、
echo $JAVA_HOMEと入力して変数を表示できます。
- Windows では、
まだ問題が解決しない場合は、Zulip でヘルプを求めることができます。