Windowsで開発環境構築
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
ターミナルとDocker Desktopをインストール
WSL2で入れたUbuntuのデフォルトのコンソールだと見にくいし使いずらいので、ターミナルアプリを入れる。Windows Terminalがスタンダードかつモダンっぽい。
テーマはこの辺で探す。
VSCodeと同じノリで設定をJSONでいじれる。テーマサイトでJSON形式のカラースキーマをコピーできるので、設定からSetting.jsonを開いて直接編集する。
Docker DesktopのSettingsを開いて、Resources -> WSL Integrationから、UbuntuのチェックをONにする。
$ docker --version
Docker version 20.10.17, build 100c701
ついでに、このページを参考にシェルをzshにした。
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を作る。両方あるとコンフリクトするらしい。
lua <<EOF
require 'plugins'
EOF
require 'plugins'
こうすることで、~/.config/nvim/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でプラグインのインストールと設定追記をする。
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に追加。
lua <<EOF
require 'plugins'
require 'cmp_settings'
EOF
~/.config/nvim/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系のプラグインを入れる。
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',
}
}
-- 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フォントをインストールする必要がある。
いくつかプレビューを見てみて欲しいフォントを決めたらUbuntuとWindowsそれぞれでダウンロードしてインストールする。
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を解凍して右クリックからインストールできる。
この時、ターミナルアプリのフォントも同じフォントにしておく
最終的にこんな感じ。まだまだ使い始めなので、ここからカスタマイズしていきたい。
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
WSL2のNeoVimのyankとWindowsのクリップボードを連携させる
WSL2のUbuntu上で動かしてるNeoVimでテキストをコピーしようとしても、デフォルトの状態ではWindows側のクリップボードにはデータが来ない。
win32yankというツールを使うことで、コピペを連動させる。
GithubのReleaseからzipをダウンロードして、PATHの通ってるディレクトリに置く。
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
参考ページ
AWS CLI のインストール
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
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
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
参考サイト
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 prepare --activate yarn
corepack install -g yarn
asdf reshim nodejs
alacrittyをインストールする。
winget install Alacritty
設定ファイルは%APPDATA%\alacritty\alacritty.toml
に置く。PowerShellだと下記のコマンドで実際のパスを確認できる。
echo $env:appdata
設定例
Windowsで至高のターミナル生活を求めて(Alacritty編): https://www.asobou.co.jp/blog/web/alacritty
ネットで設定を探してると大体ymlなので、tomlに置き換える。
もしくは一回ymlで書いてからalacrittyが用意してくれているmigrateコマンドで変換できる。
alacritty migrate
細かい設定項目はここに書いてある。
参考URL