# #2023/03 ## 事象 [[telescope-frecency.nvim]]をインストールした状態で、[[telescope.nvim]]の`:Telescope frecency`コマンドを実行すると以下のエラーになる。 ```error Error executing Lua callback: ...a\Local\nvim-data\plugged\sqlite.lua/lua/sqlite/defs.lua:55: cannot load module 'libsqlite3': <8e>w<92>肳<82>ꂽ<83><82><83>W<83><85><81>[<83><8b><82><aa><8c><a9><82><82><a9><82><e8><82>܂<b9><82><f1><81>B ``` [[init.lua]]の設定は以下。 ```lua local Plug = vim.fn['plug#'] vim.call('plug#begin') -- 中略 -- -- telescope Plug 'nvim-lua/plenary.nvim' Plug('nvim-telescope/telescope.nvim', { tag = '0.1.1' }) Plug 'kkharji/sqlite.lua' Plug 'nvim-telescope/telescope-frecency.nvim' -- 中略 -- vim.call('plug#end') local actions = require("telescope.actions") require("telescope").setup { defaults = { mappings = { i = { ["<esc>"] = actions.close }, n = { ["q"] = actions.close }, }, layout_strategy = 'vertical' } } require('telescope').load_extension('frecency') local builtin = require('telescope.builtin') vim.keymap.set('n', '<C-j>f', builtin.find_files, {}) vim.keymap.set('n', '<C-j>e', builtin.oldfiles, {}) ``` ## 原因 [[SQLite]]がインストールされていないか、ライブラリ([[Windows]]なら`sqlite3.dll`)のパスを認識できていないから。 ## 解決方法 ### [[Windows]] https://www.sqlite.org/download.html から`sqlite-dll-win64-x64-xxxxxx.zip`をダウンロードし、解凍して[[DLL]]ファイルを任意の場所に配置する。(今回は `~/lib/sqlite3.dll` に配置) そして、以下の2行を設定として追加する。 ```lua local home = os.getenv("USERPROFILE") vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll" ``` ### [[Linux]] ```console sudo apt-get install -y sqlite3 libsqlite3-dev ``` 以下を記載する。 ```console vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so" ``` ## 参考 - [using in Windows system get error "cannot load module 'libsqlite3'" · Issue \#63 · nvim\-telescope/telescope\-frecency\.nvim](https://github.com/nvim-telescope/telescope-frecency.nvim/issues/63) # #2023/08 ## 事象 [[telescope-frecency.nvim]]をインストールした状態で、[[telescope.nvim]]の`:Telescope frecency`コマンドを実行すると以下のエラーになる。 ```error Failed to run `config` for telescope.nvim ...Data/Local/nvim-data/lazy/sqlite.lua/lua/sqlite/defs.lua:56: cannot load module 'libsqlite3': 指定されたモジュールが見つかりません。^M # stacktrace: - sqlite.lua\lua\sqlite\defs.lua:56 - sqlite.lua\lua\sqlite\utils.lua:252 _in_ **__index** - sqlite.lua\lua\sqlite\db.lua:667 - sqlite.lua\lua\sqlite\init.lua:66 _in_ **__index** - telescope-frecency.nvim\lua\frecency\database.lua:38 _in_ **new** - telescope-frecency.nvim\lua\frecency\frecency.lua:53 _in_ **new** - telescope-frecency.nvim\lua\frecency\init.lua:7 _in_ **setup** - telescope.nvim\lua\telescope\_extensions\init.lua:64 _in_ **load_extension** - ~\AppData\Local\nvim\init.lua:180 _in_ **config** ``` ## 原因 `vim.g.sqlite_clib.path`に値が設定される前に[[telescope-frecency.nvim]]をロードしていたから。 [[init.lua]]は以下のようになっていた。(一部カットしている) ```lua { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim', "nvim-telescope/telescope-frecency.nvim", "kkharji/sqlite.lua" }, config = function() local actions = require("telescope.actions") require("telescope").setup { defaults = { mappings = { i = { ["<esc>"] = actions.close, ["<F12>"] = actions.select_vertical, }, n = { ["q"] = actions.close }, }, layout_strategy = 'vertical' }, extensions = { frecency = { show_scores = true } } } require("telescope").load_extension("frecency") require("telescope").load_extension("file_browser") if is_windows then local home = os.getenv("USERPROFILE") vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll" else vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so" end end }, ``` `vim.g.sqlite_clib_path`の設定より前に`load_extension`が実行されている。 ## 対策 [[init.lua]]を以下のようにする。 ```lua { 'nvim-telescope/telescope.nvim', dependencies = { 'nvim-lua/plenary.nvim', "nvim-telescope/telescope-frecency.nvim", "kkharji/sqlite.lua" }, config = function() local actions = require("telescope.actions") require("telescope").setup { defaults = { mappings = { i = { ["<esc>"] = actions.close, ["<F12>"] = actions.select_vertical, }, n = { ["q"] = actions.close }, }, layout_strategy = 'vertical' }, extensions = { frecency = { show_scores = true } } } if is_windows then local home = os.getenv("USERPROFILE") vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll" else vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so" end require("telescope").load_extension("frecency") require("telescope").load_extension("file_browser") end }, ``` ## 備考 以前はなぜ問題なかったかは不明。[[telescope.nvim]]か[[telescope-frecency.nvim]]のアップデートで処理が変わった? ### 調査の過程 `C:\Users\syoum\AppData\Local\nvim-data\lazy\sqlite.lua\lua\sqlite\defs.lua` の処理をプリンとデバッグしてみた。 ```lua --- Load clib local clib = (function() local path, _ if vim then if vim.g.sql_clib_path then error [[ sqlite.lua: vim.g.sql_clib_path is deprecated. Use vim.g.sqlite_clib_path instead. ]] end path = vim.g.sqlite_clib_path vim.api.nvim_out_write(tostring(path) .. "\n") end ``` この出力結果が[[nil (Lua)|nil]]になっていた。[[Lua]]のプリントデバッグは[[📕Luaで書かれたNeovimプラグインをprintデバッグする方法]]にまとめた。