Wantedly Visit のサーバーサイドエンジニアの工藤です。普段は新機能開発や、サーバーサイドのマイクロサービス化に取り組んでいます。
以前社内でモブプロをする機会があり、その際に各々の開発環境を目にしたのですが、Wantedly では開発環境作りにこだわりを持っているエンジニアが多く、おお!と感嘆せざるを得ませんでした。と同時に、自分の開発環境の貧相さに危機感を覚え、「開発環境爆上げパーティー」たるものを企画し、各人の開発環境向上のハックを教えていただきました。
このパーティーの中で社内のエンジニアに紹介していただいたハックのうち、代表的なものを以下で紹介します。
dotfiles
複数の PC で同一の環境を構築する際の便利なハックとして、dotfiles を GitHub などで管理する方法があります。
dotfiles とは、ファイル名が.から始まるファイルの総称です。特にホームディレクトリ配下の ~/.bashrc
, ~/.bash_profile
群は、ユーザーがパソコンを起動したときに自動で読み込まれます。ここには環境変数の定義や実行してほしいコマンドを列挙していることでしょう。これらのファイルを GitHub で管理することにより、パソコンを買い替えた時や、普段使っていないPCで環境構築する際などに一瞬で環境構築をすることができます。
この方法の注意点として、GitHub の dotfiles レポジトリをパブリックにしている状態で、環境変数をベタがきした dotfiles をパブリックに push しないように心がける必要があります。事実、AWSのアクセスキーをパブリックにしてしまい、それを悪用されて莫大な請求が来たという実例もありますので、注意してください。このような事態を防ぐ方法として、git-secrets を使用するという方法があります。これによって、差分にパスワードやセンシティブな情報が含まれた場合に、コミットがリジェクトされるようになります。
tmux コマンド
次に、1つのターミナルで複数セッションの作業を可能にする tmux コマンドを紹介します。
tmux では、ターミナルで操作中のセッションをバックグラウンド実行に移したり、バックグランド実行中のセッションを再びターミナルで操作できるようにしたりできます。例えば、以下のコマンドを実行することで、mysession
という新しいセッションを開始し、現在のターミナルをそのセッションに割り当てることができます。
tmux new -s mysession
さらに tmux は、1つのターミナルで仮想的な複数のターミナル(ウィンドウ)を動作させることもできます。例えば、以下のコマンドを用いることで、mywindow という
ウィンドウを新しく作成し、さらにそこに操作を切り替えることができます。ウィンドウ間の切り替えは名前を指定して行うことも可能なので、数多くのウィンドウを開いている場合でも、迷わずにウィンドウ切り替えを行うことができるでしょう。
(Ctrl + b) c
(Ctrl + b) , mywindow2
さらにこのウィンドウを上下左右に分割して、仮想的な複数のターミナル(ペイン)を開くこともできます。例えば、以下のコマンドによって、上下2つにウィンドウを分割することができますし、
(Ctrl + b) "
以下のコマンドによって、左右2つにウィンドウを分割することができます。
(Ctrl + b) %
fzf コマンド
次に、曖昧検索をしたいときに便利なツールとして、fzf を紹介します。
このツールは文字列を完全一致で検索するのではなく、曖昧検索をして類似度に基づくスコアの高い順に表示します。このスコア計算のアルゴリズムに関しては、弊社エンジニアが fzfのスコア計算を読んでみる にて読み解いているのでぜひ一読ください。
fzf コマンドでできることはファイル検索やコマンド履歴検索に限らず、あるコマンドの実行結果の中から曖昧検索をすることも可能です。例えば git branch | fzf
を実行すると、そのレポジトリ内のブランチ一覧の中から曖昧検索でブランチを探すことができます。
以下を .bashrc ファイルに定義した上で
alias -g fzbranch='$(git branch | fzf)'
git レポジトリ内にて以下を実行することで、レポジトリに存在するブランチを曖昧検索し、選択してブランチに checkout することができます。
git checkout fzbranch
この例などは、頻繁にブランチ切り替えを行う方には非常に便利だと思います。
Clippy
次に、複数の文字列をクリップボードに保存する方法として、 Clippy を紹介します。
Mac の基本設定では、cmd + c
でコピーした文字列をクリップボードに保存し、最後にコピーした文字列を cmd + v
でペーストできますが、このツールを使うことでクリップボードの複数の文字列からペーストするものを選択することができます。
英かな
次に、かな入力と英字入力の切り替えのそれぞれをキーバインドすることができる、 ⌘英かな というツールを紹介します。
このツールの便利な使用例として、US 配列のキーボードでかな入力と英文字入力を直感的に切り替えるというものがあります。筆者は、左側の Cmd キーの2回入力を日本語入力への切り替えに、右側の Cmd キーの2回入力を英字入力への切り替えにバインドしています。これは、Mac の JIS キーボードのデフォルトの挙動と同じです。この設定の長所として、以下の2点が挙げられます。
- 現在の入力方式が何であるかにかかわらず、設定した操作によって希望している入力方式に切り替えられます。「かな入力をしたい時にはまず左側の Cmd キーを2回入力をすること」、「英字入力をしたい時にはまず右側の Cmd キーを2回入力をすること」を、習慣にしておくと良いです。
- かな入力をしたい時に、誤って途中まで英字入力してしまった場合、ここで Cmd キーを2回入力することで、入力途中の単語がかな文字に変換されます。逆も然りです。
git add -p コマンド
次に、git で対話的に差分を選択してステージングするためのオプションである -p
を紹介します。
git add -p
コマンドを使用することで、ターミナル上で hunk という単位ごとに差分をステージングするかを確認することができます。同一ファイル内に複数箇所の差分がある場合であっても、それらが離れた場所にある場合には、異なる hunkとして認識されます。
これによって、意図せぬ差分をステージングしないように hunk ごとに対話的に目視で確認することや、同一ファイル内の修正を hunk ごとに異なるコミットに分けることが可能になります。
git add -p
pbcopy コマンド
ターミナルの標準入力を引数にとり、これをクリップボードにコピーする Mac 標準搭載のコマンドである pbcopy を紹介します。
このコマンドの便利な使用例として、あるコマンドの実行結果を標準出力し、なおかつクリップボードにコピーするものが挙げられます。例えば、以下の例では、ls コマンドの実行結果を標準出力に表示し、なおかつその結果がクリップボードにコピーされます。
ls >&2 | pbcopy
この方法を使うことで、コマンドの実行結果を保存しておきたい際に、実行結果をいちいち選択してコピーする必要がなくなり、業務が効率化できるとか思います。
grep 以外の文字列検索を行うコマンド
ファイル内の文字列検索としては grep コマンドが有名ですが、これ以外の文字列検索のためのコマンドを2つ紹介します。
一つ目に紹介するのは、 git grep コマンドです。git grep は git 管理されているレポジトリ内のトラッキングされているファイル内で文字列検索を行うコマンドです。
git grep Dsl
二つ目に紹介するのは、 rg コマンドです。rg は文字列検索を行い、その結果をファイルごとにまとめて表示するコマンドです。
rg Dsl
powerlevel10k
最後に、あなたのターミナルをおしゃれに彩ってくれる Zsh のテーマ、powerlevel10k を紹介します。
このテーマは、ターミナルの文字がカラーになるだけでなく、現在のシェルの情報をターミナルに表示することもできます。現在のシェルの情報とは、例えば git の現在の branch 名、rbenv などによって設定されている処理系のバージョン、コマンド実行に要した時間などです。
以上、社内のエンジニアに紹介していただいたハックのうち、代表的なものを紹介しました。もし、この記事で紹介したツール等が皆さんの生産性を改善できれば幸いです。