Kanazawa.rb meetup#107 の 開発環境&shell芸晒す会 での LT です。 https://meetup.kzrb.org/107/
開発環境&shell芸晒す会~ muryoimpl software編 ~2021-07-17(Sat)Kanazawa.rb meetup#107 #kzrbmuryoimpl
View Slide
おしながき● 自己紹介 & 環境の概要● アプリ、ターミナル周りの設定管理● よく使っている自作 shell script● さいごに
自己紹介 & 環境の概要● 石川県金沢市在住のフルリモートワーカー● 普段は、Desktop Linux (Arch Linux) を使って作業をしています。● デスクトップは、i3wm (Tiling window manager) + Polybar (ツールバー) を使っています。○ Tiling window manager であること、マルチディスプレイに強い 、ディスプレイ毎に表示の出し分けが簡単なところが気に入って使っています↑縦に配置しているモニタには、ツールバーの要素全部を表示できないため● キーマップはキーボードのファームウェア側(QMK Firmware)で制御しているため、それ用のユーティリティは使っていません。
アプリ、ターミナル周りの設定管理● アプリの設定は https//github.com/muryoimpl/dotconfig に、dotfiles は https://github.com/muryoimpl/dotfiles に保存して、ホームディレクトリにシンボリックリンクを作成して利用しています。● dotconfig には、グローバルな gitignore である git/ignore や、i3wm、 Polybar、peco、tig、starship 等の設定ファイルがあります。● dotfiles には、zsh、tmux、gitconfig、vim 等の主にターミナルで使うものの設定ファイルがあります。● 設定ファイルの配置は、次のRuby 製のスクリプトを実行してシンボリックリンクを目的の場所に作成しています。
シンボリックリンク作成スクリプトrequire 'fileutils'IGNORE_FILES = %w(. .. .DS_Store .git .config install.d)current_dir = Dir.pwddotfiles = Dir.glob('.*').reject {|f| IGNORE_FILES.include?(f) }dotfiles.each do |dotfile|# 毎回強制上書きする。src/dest の変数に入れればよかったなFileUtils.ln_s("#{current_dir}/#{dotfile}", "#{ENV['HOME']}/#{dotfile}", force: true)puts "#{current_dir}/#{dotfile} -> #{ENV['HOME']}/#{dotfile}"end
実行結果dotconfig もだいたい同じような symlink.rb が用意されています。FileUtils.ln_s に force: true が設定されているので、毎回強制上書きされます。
dotfiles の管理について私はオールドタイプな感じで自力で管理していますが、https://wiki.archlinux.org/title/Dotfiles を見るといろいろと管理ツールがあるみたいなので、そちらを使うのが実はビッグウェーブなのかもしれませんね。今のところ、複雑なものを持ち込む気力がないので永遠のTBDになってます
よく使っている自作 shell script$HOME/local/bin に PATH を通して、そこに自作 shell script を配置して利用することが多いです。日々のメモ作成スクリプトとして、daily-memo.sh を使っています。仕様的には以下のようなものです。● 年ごとにディレクトリを分ける● ファイルがなければ、%Y/%Y%m%d.md 形式でファイルを作成する例) 実行日が 2021年7月17日 ならば、 2021/20210717.md を作成する● ファイルがあれば、そのファイルを vim で開く● ファイルは クラウドストレージアプリで監視し、変更検知でクラウドストレージに保存されるようにしている(MEGA https//mega.io を使用)
daily-memo.sh の中身#!/bin/bashtoday=$(date "+%Y%m%d")year=$(date "+%Y")basedir=~/local/MEGAsync/memo # MEGA( Cloud Storage app) の監視下に保存先を設定するmkdir -p $basedir/$yearif [[ ! -e $basedir/$year/$today.md ]]; thencat - << EOS > "$basedir/$year/$today.md"# $todayEOSfivim $basedir/$year/$today.md # vim は $EDITOR がいいかも
daily-memo.sh のいい点● 重複したファイルが作成されない、ファイル名考えなくてよい○ 引数不要にしているので、思考停止で実行できるのがよい● 複数台マシンでメモを共有できる、クラウドで共有しないも選択可能○ 業務的な内容のメモはクラウドで共有しないほうがいいよ● 手に馴染んだエディタでメモを書ける○ エディタによっては、途中で落ちてもエディタの機能でバックアップが取得される● 好みの検索コマンド(grep, ag, pt, rg 等) で高速に検索できる● 日付がファイル名に入っているので、検索時にいつ書いたものかがわかる
daily-memo.sh のよくない点● 自分で環境をわざわざ設定しなければならない○ (不満がなければ)チャットの分報、Obsidian 等のほうが手軽ですね● 専用アプリではないので、開いているエディタが他のバッファに埋もれがち● 検索時は、ディレクトリ移動もしくは指定が必要である○ 検索用の実行ファイル作れば解決しますけどね …● クラウド共有する/しないをディレクトリで判断しているので、共有する/しないメモを混在させる場合は、実行するshell自体を分ける必要がある○ スクリプトに判定入れて、 alias で引数渡すって手もアリ
さいごに● 私は環境構築は面倒だけど、仕組みが単純であることに振った管理の仕方をしています。● Tiling window manager いいよ!私は好きよ!● 各種設定は GitHub で管理し、公開しているので何使ってる?どんな設定してる?はそちらを見て!● daily-memo.sh 気に入って使ってます。カジュアルなものは分報、がっつり調べたり考えたりするときはdaily-memo.sh を使っています。更にまとめて残しておきたい/共有したいときは、esa.io のページにまとめています。