Open9

Windowsで開発環境構築

renoinnrenoinn

WSL2とgoのインストール

まずはWSL2をインストールする。

コマンドプロンプトもしくはPowerSellを管理者権限で起動して、下記コマンドを実行。

$ wsl --install

これでインストールできる。今は基本WSLのバージョンがデフォルトで2になってるはずだけど、念のため確認しておく。

$ wsl -l -v

普通にインストールするとUbuntuがインストールされる。

golangをインストールしたいので、aptでインストールする。そのままapt installしようとすると古いバージョンが出てきてしまうので、リポジトリを追加してapt updateする。

$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt update
$ apt info golang (最新版が出てくることを確認する)
$ sudo apt install golang
$ go version
go version go1.19.1 linux/amd64
renoinnrenoinn

ターミナルとDocker Desktopをインストール

WSL2で入れたUbuntuのデフォルトのコンソールだと見にくいし使いずらいので、ターミナルアプリを入れる。Windows Terminalがスタンダードかつモダンっぽい。

https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701?hl=ja-jp&gl=jp

テーマはこの辺で探す。
https://windowsterminalthemes.dev/

VSCodeと同じノリで設定をJSONでいじれる。テーマサイトでJSON形式のカラースキーマをコピーできるので、設定からSetting.jsonを開いて直接編集する。

https://www.docker.com/
Docker Desktop for Windowsをダウンロードしてインストール。
Docker DesktopのSettingsを開いて、Resources -> WSL Integrationから、UbuntuのチェックをONにする。

$ docker --version
Docker version 20.10.17, build 100c701

ついでに、このページを参考にシェルをzshにした。
https://zenn.dev/moroya/articles/0ab24a733e4b7a#zshとpreztoの導入

renoinnrenoinn

NeoVimのインストールとgo向けの設定

まずはNeoVimのインストール。

$ sudo apt-add-repository ppa:neovim-ppa/stable
$ sudo apt update
$ apt show neovim
$ sudo apt install neovim

NeoVimのプラグインマネージャはpacker.vimにした。NeoVimだとLuaで設定を書くことが多いので設定を全部Luaで書けるpacker.vimが親和性高くて良さそう。

git clone --depth 1 https://github.com/wbthomason/packer.nvim\\n ~/.local/share/nvim/site/pack/packer/start/packer.nvim

設定ファイルは~/.config/nvim/にinit.luaかinit.vimを作る。両方あるとコンフリクトするらしい。

init.vimの場合
lua <<EOF
require 'plugins'
EOF
init.luaの場合
require 'plugins'

こうすることで、~/.config/nvim/lua/plugins.luaを読み込むようになるので、plugins.luaを作ってそこにプラグイン関連の設定を書いていく。

plugins.lua
vim.cmd[[packadd packer.nvim]]

require'packer'.startup(function()
  use{'wbthomason/packer.nvim', opt = true}

  -- optをつけると遅延読み込み
  use{'fatih/vim-go', opt = true, ft = {'go'}}

  use{'neovim/nvim-lspconfig'}
  use{'williamboman/mason.nvim'}
  use{'williamboman/mason-lspconfig.nvim'}

  use "hrsh7th/nvim-cmp"
  use "hrsh7th/cmp-nvim-lsp"
  use "hrsh7th/cmp-buffer"
  use "hrsh7th/cmp-path"
  use "hrsh7th/cmp-cmdline"

end)

-- mason settings
require("mason").setup()
require("mason-lspconfig").setup()
require("mason-lspconfig").setup_handlers {
  function (server_name) -- default handler (optional)
    require("lspconfig")[server_name].setup {
      capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()),
      on_attach = on_attach
    }
  end,
}

LSP関連の設定

上記のプラグインでNeoVimでLSPを使えるようにする。
:LspInstall [server name]するとLSPをインストールできる。[server name]の部分はnvim-lspconfigのdocで確認する。https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
今回はgoplsを使いたいので、:LspInstall goplsする。

補完の設定

補完はnvim-cmpで行う。
packerでプラグインのインストールと設定追記をする。

plugins.lua
require'packer'.startup(function()
  ~~~
  use "hrsh7th/nvim-cmp"
  use "hrsh7th/cmp-nvim-lsp"
  use "hrsh7th/cmp-buffer"
  use "hrsh7th/cmp-path"
  use "hrsh7th/cmp-cmdline"
end)

~~~
    require("lspconfig")[server_name].setup {
      capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()), -- この行を追加
      on_attach = on_attach
    }

cmp用の設定ファイルを作成してinit.vimに追加。

init.vim
 lua <<EOF
 require 'plugins'
 require 'cmp_settings'
EOF

~/.config/nvim/lua/cmp_settings.luaに設定を書いていく。

cmp_settings.lua
-- cmp settings
vim.opt.completeopt = "menu,menuone,noselect"

local cmp = require"cmp"
cmp.setup({
  snippet = {
    expand = function(args)
      vim.fn["vsnip#anonymous"](args.body)
    end,
  },
  mapping = cmp.mapping.preset.insert({
    ["<C-d>"] = cmp.mapping.scroll_docs(-4),
    ["<C-f>"] = cmp.mapping.scroll_docs(4),
    ["<C-Space>"] = cmp.mapping.complete(),
    ["<C-e>"] = cmp.mapping.close(),
    ["<CR>"] = cmp.mapping.confirm({ select = true }),
  }),
  sources = cmp.config.sources({
    { name = "nvim_lsp" },
    { name = "buffer" },
    { name = "path" },
    { name = "cmdline" },
  })
})

UI関連のプラグイン追加
そのままだといくつか不便なのでUI系のプラグインを入れる。

plugins.lua
   use {
     'nvim-lualine/lualine.nvim',
     requires = { 'kyazdani42/nvim-web-devicons', opt = true }
   }
   use {
     'nvim-treesitter/nvim-treesitter',
     run = function() require('nvim-treesitter.install').update({ with_sync = true }) end,
   }
   use {
   "nvim-neo-tree/neo-tree.nvim",
     branch = "v2.x",
     requires = {
       "nvim-lua/plenary.nvim",
       "kyazdani42/nvim-web-devicons", -- not strictly required, but recommended
       "MunifTanjim/nui.nvim",
     }
   }
   use {
     'nvim-telescope/telescope.nvim', tag = '0.1.0',
     requires = {
       'nvim-lua/plenary.nvim',
     }
   }
plugins.lua
-- neo-tree setup
require("neo-tree").setup({
  enable_git_status = true,
  enable_diagnostics = true,
  sort_case_insensitive = false,
  filesystem = {
    filtered_items = {
      hide_dotfiles = false,
    }
  }
})

-- telescope setup
local builtin = require('telescope.builtin')
vim.keymap.set('n', 'ff', builtin.find_files, {})
vim.keymap.set('n', 'fg', builtin.live_grep, {})
vim.keymap.set('n', 'fb', builtin.buffers, {})
vim.keymap.set('n', 'fh', builtin.help_tags, {})

nvim-web-deviconsでアイコン表示するにはUbuntuとWindowsの両方にNerdフォントをインストールする必要がある。
https://www.nerdfonts.com/

いくつかプレビューを見てみて欲しいフォントを決めたらUbuntuとWindowsそれぞれでダウンロードしてインストールする。

Ubuntu
curl -fLo Hack-v3.zip https://github.com/source-foundry/Hack/releases/download/v3.003/Hack-v3.003-ttf.zip
unzip Hack-v3.zip
sudo apt install fontconfig
sudo fc-cache -f -v
fc-list | grep "Hack"

Windowsの方はzipを解凍して右クリックからインストールできる。
この時、ターミナルアプリのフォントも同じフォントにしておく

最終的にこんな感じ。まだまだ使い始めなので、ここからカスタマイズしていきたい。
https://github.com/renoinn/nvim_setup

renoinnrenoinn

Node.js関連

sudo apt install python2.7-minimal

# curlのインストール
sudo apt install -y curl

# v18をインストールする場合(使用するバージョンに合わせること)
# https://github.com/nodesource/distributions/blob/master/README.md
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\
sudo apt-get install -y nodejs

# バージョンを確認
node -v
v18.14.2

# 自動的にnpmもインストールされる
npm -v
9.5.0

neovimでLSPをインストールする。

:LspInstall tsserver
renoinnrenoinn

WSL2のNeoVimのyankとWindowsのクリップボードを連携させる

WSL2のUbuntu上で動かしてるNeoVimでテキストをコピーしようとしても、デフォルトの状態ではWindows側のクリップボードにはデータが来ない。

win32yankというツールを使うことで、コピペを連動させる。
GithubのReleaseからzipをダウンロードして、PATHの通ってるディレクトリに置く。
https://github.com/equalsraf/win32yank

curl -LO https://github.com/equalsraf/win32yank/releases/download/v0.0.4/win32yank-x86.zip
unzip win32yank-x86.zip
sudo chmod +x win32yank.exe
sudo cp win32yank.exe /usr/local/bin

で、init.luaとかに設定を追加する。

-- clipboard
local in_wsl = os.getenv('WSL_DISTRO_NAME') ~= nil
if in_wsl then
    vim.g.clipboard = {
        name = "win32yank-wsl",
        copy = {
            ["+"] = "win32yank.exe -i --crlf",
            ["*"] = "win32yank.exe -i --crlf"
        },
        paste = {
            ["+"] = "win32yank.exe -o --crlf",
            ["*"] = "win32yank.exe -o --crlf"
        },
        cache_enable = 0,
    }
end

参考ページ

https://stackoverflow.com/questions/68435130/wsl-clipboard-win32yank-in-init-lua
https://mitchellt.com/2022/05/15/WSL-Neovim-Lua-and-the-Windows-Clipboard.html

renoinnrenoinn

AWS CLI のインストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
renoinnrenoinn

AWS ECRにイメージをプッシュする。

aws ecr get-login-password --region region | docker login --username AWS --password-stdin [aws_account_id].dkr.ecr.region.amazonaws.com
docker tag image_name:v1 [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/image_name:v1
docker push [aws_account_id].dkr.ecr.ap-northeast-1.amazonaws.com/image_name:v1
renoinnrenoinn

lazygitをインストール。

export LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[0-35.]+')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit ; sudo install lazygit /usr/local/bin

参考サイト
https://qiita.com/hkuno/items/b3c8396b1463d65f23b9

renoinnrenoinn

asdf でNodeJSのバージョンを管理する。

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0

.zshrcに追加

# asdf
. "$HOME/.asdf/asdf.sh"
# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit

必要な依存パッケージをインストールして、Nodeプラグインをインストール。

sudo apt-get install dirmngr gpg curl gawk
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git

aptでインストールしてたNodeJSを削除して、asdfでインストールする。

sudo apt-get remove nodejs
asdf install nodejs latest
asdf global nodejs latest

ついでにyarnをberry(v4)に切り替え。

corepack enable
corepack install -g yarn
asdf reshim nodejs