SODA Engineering Blog
⌨️

dotfiles自慢大会を開催しました

2023/03/20に公開

こんにちは!開発部の冨永です。
SODAでは毎週月曜日にエンジニアの勉強会を行っており、今回先日行った dotfiles自慢大会の開催レポートをお届けします。

SODAのエンジニア勉強会についての紹介はこちら
https://zenn.dev/team_soda/articles/741ae0c891c521

会社やエンジニア組織に関する情報は以下リンクはこちら
https://recruit.soda-inc.jp/
https://recruit.soda-inc.jp/engineer

タイムテーブル

var unixToInternal int64 = (1969*365 + 1969/4 - 1969/100 + 1969/400) * 24 * 60 * 60 // https://pkg.go.dev/time#Unix
Name time.Duration
1. 進め方の説明 1 * time.Minute
2. アンケート結果 3 * time.Minute
3. LT by @rinchsan 5 * time.Minute 〜 time.Unix(math.MaxInt64-1-unixToInternal, 999_999_999)
4. LT by @sh0e1 5 * time.Minute 〜 time.Unix(math.MaxInt64-1-unixToInternal, 999_999_999)
5. LT by @koyashiro 5 * time.Minute 〜 time.Unix(math.MaxInt64-1-unixToInternal, 999_999_999)
6. パネルディスカッション 20 * time.Minute
7. 終わりの会 1 * time.Minute

アンケート結果

勉強会の前に、エンジニア全体に開発環境周りのアンケートをした結果の発表がありました

shell / dotfiles / terminal

zsh / bash / fish dotfiles管理 Y/N iTerm / Warp / Alacritty カスタマイズ Y/N
15 / 1 / 3 9 / 7 13 / 3 / 3 14 / 4

shell は zsh、terminal は iTerm が人気という結果になり、半数以上のメンバーが dotfies管理をしていました。

keyboards

Qwerty / Dvorak / Colemak Macbook本体 / HHKB / Realforce Moonlander / PLANCK EZ
16 / 1 / 0 5 / 8 / 1 2 / 1
自作 Corne Cherry / Corne Chocolate / cocot46plus / Atreus qmk_firmware管理 Y/N/なにそれ
3 / 1 / 1 / 1 5 / 2 / 12

人気のキーボードは以下のような結果になりました。

  1. HHKB
  2. Macbook本体
  3. Corne Cherry

自作キーボードを使っている人も多く、キーボード配列に Dvorak を使っている猛者が1名いました!

ここからは各LTの内容をご紹介させていただきます!

LT by @rinchsan

https://github.com/rinchsan/dotfiles

新しいPCを起動したら

bash -c "$(curl https://raw.githubusercontent.com/rinchsan/dotfiles/main/etc/scripts/install.sh)"
  • とりあえず最初から入ってる bashcurl で全部セットアップ!
  • [install.sh](http://install.sh) を用意しておいて基本的にはそれを実行するだけでいつもの環境に!

etc/scripts/[install.sh](http://install.sh)

  • Homebrew入れる!git入れる!dotfilesをcloneする!
  • make deploy!make init!
#!/bin/bash

set -eu

cd $HOME

if ! type brew >/dev/null 2>&1; then
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi

if ! type git >/dev/null 2>&1; then
    brew install git
fi

if [ ! -d dotfiles ]; then
    git clone https://github.com/rinchsan/dotfiles.git
fi

cd dotfiles

make deploy

make init

make deploy

  • dotfilesをホームディレクトリにシンボリックリンクで展開!
  • 作ったものを反映する意味でのデプロイ!
#!/bin/bash

set -eu

DOTFILES=$(dirname "$(cd "$(dirname $0)" && pwd)")

cd ${DOTFILES}

for FILE in .??*
do
    [ "${FILE}" = ".git" ] && continue

    SRC=$(cd "$(dirname ${FILE})" && pwd)/$(basename ${FILE})
    ln -snfv ${SRC} ${HOME}/${FILE}
done

make init

  • 一番最初に一度だけ設定するもの!イニシャライズ!
  • いろいろやってるから分割して説明!
#!/bin/bash

set -eu

brew bundle install --file=${HOME}/dotfiles/.Brewfile

gh release download --repo marcosnils/bin --pattern '*Darwin_x86*'
mv bin*Darwin_x86* bin
chmod +x bin
mv bin /usr/local/bin/bin
bin ensure

echo 'Changing default shell to fish'
echo "$(which fish)" | sudo tee -a /etc/shells
chsh -s "$(which fish)"

echo 'Changing MacOS settings'
defaults write -g InitialKeyRepeat -int 12 # normal minimum is 15 (225 ms)
defaults write -g KeyRepeat -int 1 # normal minimum is 2 (30 ms)
defaults write -g AppleShowScrollBars -string "Always"
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false
defaults write -g AppleShowAllExtensions -bool true

defaults write com.apple.PowerChime ChimeOnNoHardware -bool true
defaults write com.apple.finder ShowPathbar -bool true
defaults write com.apple.finder ShowStatusBar -bool true
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.TextEdit RichText -int 0
defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1
defaults write com.apple.finder AppleShowAllFiles -bool YES
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
defaults write com.apple.dock autohide -bool true
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 27 "<dict><key>enabled</key><false/></dict>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 28 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 29 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 30 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 31 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 181 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 182 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 184 "<dict><key>enabled</key><false/></dic>"

networksetup -SetDNSServers Wi-Fi 8.8.8.8 8.8.4.4
networksetup -SetV6Off Wi-Fi

echo 'Rebooting to reflect settings'
sudo shutdownn -r now

https://github.com/Homebrew/brew

  • .Brewfile でHomebrewでインストールするパッケージを管理!
  • brew bundle install で全部いっぺんに入れる!
brew bundle install --file=${HOME}/dotfiles/.Brewfile

https://github.com/marcosnils/bin

  • Homebrewで入れられないパッケージはbinで!
  • gh https://github.com/cli/cli でGitHub Releaseをダウンロードできるのです!
  • bin ensurebrew bundle install 的なことを実行!
gh release download --repo marcosnils/bin --pattern '*Darwin_x86*'
mv bin*Darwin_x86* bin
chmod +x bin
mv bin /usr/local/bin/bin
bin ensure
{
    "default_path": "/usr/local/bin",
    "bins": {
        "/usr/local/bin/hgrep": {
            "path": "/usr/local/bin/hgrep",
            "remote_name": "hgrep",
            "version": "v0.2.2",
            "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
            "url": "github.com/rhysd/hgrep",
            "provider": "github",
            "package_path": "hgrep-v0.2.2-x86_64-apple-darwin/hgrep"
        }
    }
}

https://github.com/fish-shell/fish-shell

  • デフォルトのシェルをfishへ!
  • fish stands for friendly interactive shell !
  • 特に色々頑張って設定しなくてもデフォでいい感じに使いやすいシェルらしい!
echo 'Changing default shell to fish'
echo "$(which fish)" | sudo tee -a /etc/shells
chsh -s "$(which fish)"

MacOSの設定をシェルから設定

  • defaultsコマンドを使うとMacの設定をシェルから変更できるのです!
  • キーリピート速度とかは特にシステム設定からは不可能なレベルに速くすることが出来ます!
  • 充電ケーブルさしたときの「フォン!」が嫌いなのでそれもオフにしています!
  • 他にもいろいろ!
  • 作り方:
    1. defaults read > temp1
    2. システム設定から色々変更する
    3. defaults read > temp2
    4. diff temp1 temp2
    5. 差分をいい感じに defaults write にしていく
echo 'Changing MacOS settings'
defaults write -g InitialKeyRepeat -int 12 # normal minimum is 15 (225 ms)
defaults write -g KeyRepeat -int 1 # normal minimum is 2 (30 ms)
defaults write -g AppleShowScrollBars -string "Always"
defaults write -g NSAutomaticSpellingCorrectionEnabled -bool false
defaults write -g AppleShowAllExtensions -bool true

defaults write com.apple.PowerChime ChimeOnNoHardware -bool true
defaults write com.apple.finder ShowPathbar -bool true
defaults write com.apple.finder ShowStatusBar -bool true
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.TextEdit RichText -int 0
defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1
defaults write com.apple.finder AppleShowAllFiles -bool YES
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
defaults write com.apple.dock autohide -bool true
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 27 "<dict><key>enabled</key><false/></dict>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 28 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 29 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 30 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 31 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 181 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 182 "<dict><key>enabled</key><false/></dic>"
defaults write com.apple.symbolichotkeys.plist AppleSymbolicHotKeys -dict-add 184 "<dict><key>enabled</key><false/></dic>"

DNS設定もして再起動

  • なんかネット早くなるとか何とかをウワサに聞いたからDNSサーバもなんかネット上の記事に言われるがまま設定!なんかGoogleの何からしい!
  • 再起動しないと反映されないものある気がするから、ここで一応再起動!再起動はすべてを解決する!
  • 1.1.1.1もいいらしい
networksetup -SetDNSServers Wi-Fi 8.8.8.8 8.8.4.4
networksetup -SetV6Off Wi-Fi

echo 'Rebooting to reflect settings'
sudo shutdownn -r now

おまけ

nano

  • vimむずかしい!
  • nanoはなんか知らんけどEmacsキーバインドがデフォで動く!
  • ほぼ使うエディタはGoLand!
  • .nanorc は気持ちばかりの設定のみ!
include "/usr/local/share/nano/*.nanorc"

set autoindent
set linenumbers

$HOME/.config/git/config$HOME/.config/git/ignore

  • gitconfigとgitignoreはデフォルトのパスが↑なので、ここに置いておけばパス指定せずとも読み込んでくれる!
  • ワイのオリジナルコマンド git sync 便利やで!
[user]
	email = mcdonalds.only@gmail.com
	name = Masaya Hayashi
	username = rinchsan
[color]
	ui = true
[alias]
	gr = log --graph --date=iso --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %C(yellow)%cn %Cred%d %Creset%s'
	diw = diff --color-words --word-diff-regex='\\w+|[^[:space:]]'
	push-f = push --force-with-lease --force-if-includes
	sync = !git switch $(git remote show origin | grep 'HEAD branch' | awk '{print $NF}') && git pull origin $(git remote show origin | grep 'HEAD branch' | awk '{print $NF}') && git fetch --prune && git branch -d $(git branch --merged | grep -v '*')
	tags = !git tag --sort=-creatordate | head -n 10
[core]
	editor = nano
	hooksPath = /dev/null
[push]
	default = nothing
[merge]
	ff = false
[pull]
	ff = only
[init]
	templatedir = ~/.git-template
	defaultBranch = main
[ghq]
	root = ~/go/src

自作キーボード

  • cocot46plus ええで!
  • 40%キーボード!
  • トラックボールでポインタ操作!
  • ロータリーエンコーダでスクロール!

cocot46plus 自作キーボードキット | DIY Mechanical Keyboard Kit

  • Corne Cherry もええで!
  • 40%の分割キーボード!
  • これはAmazonで実装済みが買えるから、はんだ付けハードル高い人もいける!(在庫はすぐに無くなりがち)

Corne Cherry V3

ビット・トレード・ワン CORNE CHERRY 半田付けのいらない42キー スプリット キーボードキットBitTradeOne ADSKBCC

Dvorak配列

  • 変態と呼ばれて気持ちいい人にオススメ!

https://zenn.dev/rinchsan/articles/a3796e73f8118e346726

https://github.com/rinchsan/qmk_firmware

  • 自作キーボードのファームウェアはC言語で書きます!()
    • なんかマイコンみたいなのが自作キーボードの中に入ってて、そいつにファームウェアを書き込む
  • GoもVer1.3あたりでセルフホストされるまではCでコンパイルされてたので、GoもCも同じようなもんですね!
  • ファームウェアのこだわりはレイヤはデフォともう1個だけに留めること!
#include QMK_KEYBOARD_H
#include <stdio.h>
#include "quantum.h"

enum layers {
    _BASE,
    _LOWER,
};

enum custom_keycodes {
    LOWER = SAFE_RANGE,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = LAYOUT(
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
       KC_TAB, KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,                                          KC_F,    KC_G,    KC_C,    KC_R,   KC_L,  KC_SLSH,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
      KC_LCTL,    KC_A,    KC_O,    KC_E,    KC_U,    KC_I,                                          KC_D,    KC_H,    KC_T,    KC_N,   KC_S,  KC_MINS,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
      KC_LSFT, KC_SCLN,    KC_Q,    KC_J,    KC_K,    KC_X,                                          KC_B,    KC_M,    KC_W,    KC_V,    KC_Z, KC_BSLS,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
                        XXXXXXX, KC_LOPT, KC_LCMD,  KC_SPC,   KC_MS_BTN1,             KC_MS_BTN2,  KC_ENT,   LOWER,  KC_ESC,  XXXXXXX,
                                                                 KC_WH_D, KC_MS_BTN3,    KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX
                                                            //`--------------'  `--------------'
    ),
  [_LOWER] = LAYOUT(
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
       KC_GRV, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                                       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,  KC_EQL,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
      KC_BRIU,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                                          KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_LBRC,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
      KC_BRID,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                                         KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10, KC_RBRC,
  //|-------------------------------------------------------|                                   |-------------------------------------------------------|
                        XXXXXXX, KC_MUTE, XXXXXXX,  KC_SPC,   KC_MS_BTN1,             KC_MS_BTN2, KC_VOLD, _______, KC_VOLU,  XXXXXXX,
                                                                 KC_WH_R, KC_MS_BTN3,    KC_WH_L, XXXXXXX, XXXXXXX, XXXXXXX
                                                            //`--------------'  `--------------'
    ),
};

登壇後のコメント

ちなみにですが、この大会をきっかけにNeovimデビューして、いま練習中です

LT by @sh0e1

https://github.com/sh0e1/dotfiles

  • 普段の開発
    • nvim + tmux + zsh + tig
  • 基本全部vimキーバインド
    • zsh
    • tig
    • tmux
    • chrome(Vimnium)

Vim

zsh

tmux

その他

  • .gitmessageファイルをおいておくと、git commitしたときに表示される

    [commit]
    	template = ~/.config/git/.gitmessage
    
    :emoji: subject: message
    
    issue=#no
    
    # ==== Emojis ====
    # 🐛 :bug: Bug: バグ修正
    # 🔧 :wrench: Fix: 機能修正
    # 👍 :+1: Update: 機能改善
    # ✨ :sparkles: Add: 機能追加
    # 🍀 :four_leaf_clover: Refactor: リファクタリング
    # 🗑 :wastebasket: Remove: 削除
    # 💚 :green_heart: Test: テスト
    # 🚀 :rocket: Performance: パフォーマンス改善
    # 🆙 :arrow_up: Update: 依存パッケージなどのアップデート
    # 🔒 :lock: Security: セキュリティ改善
    # 📖 :book: Doc: ドキュメント
    # 🤖 :robot: CI: CIツール
    # 🎉 :tada: Release: リリース
    
    # ==== The Seven Rules ====
    # 1. Separate subject from body with a blank line
    # 2. Limit the subject line to 50 characters
    # 3. Capitalize the subject line
    # 4. Do not end the subject line with a period
    # 5. Use the imperative mood in the subject line
    # 6. Wrap the body at 72 characters
    # 7. Use the body to explain what and why vs. how
    #
    # How to Write a Git Commit Message http://chris.beams.io/posts/git-commit/
    

Keyboard

LT by @koyashiro

https://github.com/koyashiro/dotfiles

環境

dotfiles で管理しているもの

インストール

install.sh

dotfiles/install.sh at 6a78cd7a362c85b803323cf129c6a6a168a09c29 · koyashiro/dotfiles

  • ln -fsn でシンボリックリンクを張っていくシェルスクリプトです。
  • macOS 、Windows(wsl) で分岐させてます。
  • --dry-run (DRY_RUN=1 ./install.sh)もあります。

基本的には git clone して install.sh を叩くだけです。

git clone git@github.com:koyashiro/dotfiles.git
cd dotfiles
./install.sh

curl を使ったワンライナーも用意しています。

curl https://dotfiles.koyashiro.sh | sh

Shell

tmux

Vim / Neovim

CLI コマンド

CI

最後に

いかがでしたでしょうか。
皆さん開発環境にこだわりを持ってカスタマイズをしている人が多く、LTを聞いていてとても楽しかったです!
またSODAでは一緒に働いていたけるエンジニアを募集しています。少しでも興味持ってくれた方はぜひ話しましょう!

https://herp.careers/v1/snkrdunk/requisition-groups/5f3985ac-9a45-450a-8f5f-425d52b27d2d

SODA Engineering Blog
SODA Engineering Blog

Discussion