開発環境めんどくさすぎる問題
開発環境を整えるのが超絶めんどくさい。特に僕みたいにどの言語も中途半端で便利屋的な立ち位置の人にとっては特に。
はじめはarchで「全部pacmanで入るし、パッケージも自作できるマン」してたんだけど、ローカルの環境と開発環境は分けたくなった。そうすると、言語ごとのパッケージマネージャーがこんにちはしてきた。サーバーはubuntu?支給されたPCはMac?お家はarchで、たまにwindowsも使う、みたいになった。こんなの覚えられないし、管理しきれないよ!ってなった。
僕は怠惰なエンジニアになりたいので、楽をしたい。もう全部覚えるのは諦めた。そうだdotfileを作ろう。インストールなんて人間のする仕事じゃないんだ。でも情報は全て自分で管理するのだ。
ついでにxmonadとswayも管理する。
タイル型ウインドウマネージャーはいいぞ。ドットファイルで完結できるぞ!
IDEなんてもってもほかだ!あいつらは無駄に学習コストが高くて時代によって変わりすぎる。よって却下。スマホアプリ作るときだけ涙をのめ!
OSインストール
ubuntuもmacも自動でインストールしてくれるが、archlinuxはしてくれないのでそのためにスクリプトを書いた。
https://gist.github.com/akihirof0005/63112922ad27b4b2322db06447b6557b
archの起動ディスクから
#todo:ユーザーを作成する部分もgistに加筆する
curl -O https://is.gd/qrbnNu
でダウンロードしたスクリプトを実行する。
dotfileインストール
これだ!
https://github.com/akihirof0005/dotfiles
cd ~
curl -L https://is.gd/TAG0yz | bash
自作スクリプト.bin
と.ssh
の環境はプライベートリポジトリのサブモジュール化してある。
### dotfile インストール手順
#https://is.gd/TAG0yzのなかみ
git clone https://github.com/akihirof0005/.ssh.git
sudo chmod 0600 ~/.ssh/*
git clone --recursive git@github.com:akihirof0005/dotfiles.git
cd dotfiles
rm -rf ~/.ssh
bash link.sh
sudo chmod 0600 ~/.ssh/*
bash install.sh
はじめ、sshをhttpsの認証で単体で取ってきてssh認証に切り替えます。
みんな大好きlink.shで、ドットファイルをシンボリックリンクする。
install.shの正体
#!/bin/zsh
$HOME/dotfiles/install/systems.sh
# update Systems
$HOME/dotfiles/update/systems.sh
# Install some Languages
$HOME/dotfiles/install/ruby.sh
$HOME/dotfiles/install/rust.sh
$HOME/dotfiles/install/jvmLan.sh
$HOME/dotfiles/install/nodejs.sh
$HOME/dotfiles/install/haskell.sh
## install dein for nvim
$HOME/dotfiles/install/dein.sh
## install zinit for zsh
$HOME/dotfiles/install/zinit.sh
## some plugins for nvim CocInstall
$HOME/dotfiles/install/cocplugin.sh
## init install for nvim enviroment
alacritty -e nvim &
##swich to zsh
chsh -s /bin/zsh
exec zsh
ゴリゴリ環境を個別の環境の詳細はそれぞれのファイルにありますし、各公式サイトにもあります。
基本的に"一度打ったコマンドはスクリプトにしてしまえ"という精神です。
ハードコードしていいのと思うかもしれませんが、脳の記憶は基本的にハードコードなので、問題ありません。動かなくなったら公式サイトに飛んで新しい手順に書き直すだけです。
個別はそのままにして、システムのinstallerを見てみます。
#!/bin/bash
if [ "$(uname)" == 'Darwin' ]; then
echo "update system packages"
softwareupdate --install --all
echo "install brew package manager"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install neovim zip unzip git
elif [ "$(expr substr $(uname -s) 1 5)" == 'Linux' ]; then
if [ -e /etc/arch-release ]; then
git clone https://aur.archlinux.org/yay.git /tmp/yay
cd /tmp/yay
makepkg -si
cd ~/dotfiles
yay -Syu
paccache -r
paccache -ruk0
sudo grub-mkconfig -o /boot/grub/grub.cfg
cat ~/dotfiles/pkgname/yay.list | yay -S -
cat ~/dotfiles/pkgname/pacman.list | yay -S -
elif [ -e /etc/lsb-release ]; then
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt install git neovim zsh zip unzip autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
elif [ -e /etc/debian_version ]; then
sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo apt install git neovim zsh zip unzip autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
elif [ "$(expr substr $(uname -m) 1 7)" == 'aarch64' ]; then
pkg update
pkg upgrade
pkg install neovim openssh zsh zip unzip git
termux-setup-storage
fi
fi
ここでもゴリゴリ書いていきます。カーネル情報から、mac、linux(arch ubuntu debian termux/android) へと処理分岐していきます。
インストールするパッケージにはムラがありますが、必要になったら書き足せばオッケーです。
updaterの正体
環境のインストールはもう終わりました。次はupdateします。これもinstaller同様抽象化します。
aliasでupdate
コマンドを定義します。
alias update='zsh $HOME/dotfiles/update.sh'
正体は以下です。
#!/usr/bin/zsh
echo "##################################"
echo "##########DOTFILE UPDATE##########"
echo "##################################"
cd $HOME/dotfiles/
git pull
cd
# update Systems
echo "##################################"
echo "##########SYSTEM UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/systems.sh
# Install some Languages
echo "##################################"
echo "#############RUBY UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/ruby.sh
echo "##################################"
echo "#############RUST UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/rust.sh
echo "##################################"
echo "##########SDKMAN UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/jvmLan.sh
echo "##################################"
echo "#############NVM UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/nodejs.sh
echo "##################################"
echo "##########HASKELL UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/haskell.sh
## update dein for nvim
echo "##################################"
echo "#############DEIN UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/dein.sh
$HOME/dotfiles/update/cocplugin.sh
## update zinit for zsh
echo "##################################"
echo "############ZINIT UPDATE##########"
echo "##################################"
$HOME/dotfiles/update/zinit.sh
これを実行すればすぐに最新の開発環境になりますし、macでもlinuxでもandroidでも環境の同期が取れます。
.zshrc
これはもう皆自分で育ててください。
最後に
他にも便利な自作スクリプトを作って業務の補助をしています。いつも忘れるコマンドを書いた表レンダリングしてをデスクトップの壁紙にするコマンドとか、
管理しているgitリポジトリを$HOME/src以下に階層ごとにすべてクローンし、pullするものなどです。
何も考えずに新しいパソコンからコマンド打つだけで仕事を始めれます。
忘れてたけど、.xmonadをhaskellのパッケージマネージャーで管理してます。つまり、xmonadはビルドしてます。どんな環境でも同じ挙動にできるから。。。
なんか色々不十分だけど、雰囲気で満足できたしこれでいいや。。
### 最後に
真似したい人はこのままだと僕以外は使えないので、フォークして、.binと.sshのサブモジュールを自分のリポジトリに切り替えて使ってください。
あとやりたいこと
dotfilesのフレームワークを書いて、jsonファイルの設定に必要なツールを階層化して書き込めば全部インストール、アップデートされるものを作りたい。ていうか、linuxも最近はカーネルさえ新しければ使い勝手がディストリごとで左程変わらないので、$HOME環境のフレームワークほしい。