この記事は身の回りの困りごとを楽しく解決! by Works Human Intelligence Advent Calendar 2022の13日目の記事です。
この記事では皆さまに「遊び心」と「楽しさ」をお届けできればと思います
はじめに
黒い画面にタカタカッ!ターン! っと打つとすべての仕事が完了した雰囲気を出すスーパーエンジニア、あなたの会社にも一人は居るのではないでしょうか。この記事では「仕事が早い人」なら誰でもやっている作業効率爆上げコマンドを10選ご紹介します。
実用性が高い・遊び心満載のワンライナー、ぜひお楽しみください! (タカタカッ!ターン!)
目次
1. カレントディレクトリのファイルをチラ見する「look」コマンド
2. iOSシミュレータをサクッと起動する「ios」コマンド
3. 今日変更があったファイルのみを出力する「lt」コマンド
4. Github上のPRのブランチにcheckoutする「prr」コマンド
5. もうyarnコマンド覚える必要なし!定義されているscriptsを自動で抜き出して実行する「yy」コマンド
6. dockを一瞬で非表示にする「dock」コマンド
7. デスクトップアイコンを一瞬で非表示にする「dt」コマンド
8. Finderで開いているディレクトリにTerminal上で移動する「cdf」コマンド
9. Terminal上で今いるディレクトリをFinderで開く「oo」コマンド
10. IPアドレスを一撃で取得する「myip」
11. おまけ:今日の天気が気になるなら「tenki」コマンド
カレントディレクトリのファイルをチラ見する「look」コマンド
カレントディレクトリにあるREADME.md
とかpackage.json
など中身を軽く確認したいことってありますよね。ファイルを開かずチラ見したいときのコマンドがこちら。
あいまい検索でファイルをフィルタリングし、選択するとエディタで開きます。
コードを表示
# カレントディレクトリ以下をプレビューし選択して開く
alias lk='_look'
_look() {
if [ "$1" = "-a" ]; then
local find_result=$(find . -type f -o -type l)
else
local find_result=$(find . -maxdepth 1 -type f -o -type l)
fi
local target_files=($(echo "$find_result" \
| sed 's/\.\///g' \
| grep -v -e '.jpg' -e '.gif' -e '.png' -e '.jpeg' \
| sort -r \
| fzf-tmux -p80% --select-1 --prompt 'vim ' --preview 'bat --color always {}' --preview-window=right:70%
))
[ "$target_files" = "" ] && return
vim -p ${target_files[@]}
}
VimじゃなくてVSCodeで開きたい方は最後の行を下記のように変更してください。
...略
[ "$target_files" = "" ] && return
- vim -p ${target_files[@]}
+ /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code ${target_files[@]}
code
というaliasを作っておくとcode ~/Desktop/hoge
な感じでVSCodeで開けるようになるのでおすすめです。
# VSCodeでファイル・ディレクトリを開く
alias code="/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"
iOSシミュレータをサクッと起動する「ios」コマンド
フロントエンドの動作確認時、safariでの細かい挙動はChromeDevToolsで確認できないので、iOSシミュレータを使うことあると思います。
iPhoneとiPadで確認したいときなど、複数のシミュレータを一撃で起動できます。
コードを表示
# iOSシミュレータを起動
alias ios='_open_ios_simulator'
_open_ios_simulator() {
local identifier=$(xcrun simctl list runtimes -j | jq -r '.runtimes[] | select(.platform == "iOS") | .identifier')
local devices=$(xcrun simctl list devices -j | jq -r ".devices[\"${identifier}\"][] | select(.isAvailable == true) | .name" | fzf)
[ -z "$devices" ] && return
echo "$devices" | while read device; do
xcrun simctl boot "$device"
open -a Simulator
done
}
もし下記のようなエラーが出てしまったら、
xcrun: error: unable to find utility "simctl", not a developer tool or in PATH
Xcode > Preferences > Locations
で「Command Line Tools」をセットすればOKです。
今日変更があったファイルのみを出力する「lt」コマンド
エラーログが1つのディレクトリにまとめて置かれ、エラーがあった際は複数のログファイルに書き込まれる。ああ、エラー出力されたログファイルだけ抜き出したい。そんな状況で活躍するのがこのコマンドです。
カレントディレクトリで「今日変更があったファイルのみ」をls
します。
(GIFではtouch
コマンドで「今日変更があった」を再現しています。)
▼コード
# 本日変更があったファイルのみをls
alias lt='_ls_today'
function _ls_today() {
gls --full-time --time-style="+%Y-%m-%d %H:%M:%S" $1 | grep $(date "+%F")
}
gls
はGNU版のls
です。brew install coreutils
で使えるようになります。
Macの最初から入っているls
だと--full-time
、--time-style
オプションが存在しないのでGNU版のls
を使っています。
Github上のPRのブランチにcheckoutする「prr」コマンド
PRレビューで手元で動作確認する際に「ブランチをローカルに落としてきて、ブランチ名確認して、チェックアウトして...」という作業から開放されます。
Githubに上がっているPRをリスト化し、選択するとそのブランチに切り替えます。
(GIFでは説明のためにブラウザでGithubを開いていますが、実際は開く必要はありません)
コードを表示
# PRのブランチへチェックアウト
alias prr='_git_checkout_from_pr'
_git_checkout_from_pr() {
local pr=$(gh pr list --search "NOT bump in:title" | fzf | awk '{print $1}')
[ -z "$pr" ] && return
gh pr checkout $pr
}
ghはGithub公式のコマンドです。brew install gh
でインストールできます。
もうyarnコマンド覚える必要なし!定義されているscriptsを自動で抜き出して実行する「yy」コマンド
yarn dev
, yarn build
, yarn storyboard
, etc...一体いくつ定義されているんでしょう。しかも各リポジトリごとに微妙に違うのでいやーんなっちゃう...
yy
さえ覚えておけばもう大丈夫。
リポジトリ内のpackage.json
に定義されているscriptsコマンドを抽出してfzfで選択し実行できます。
コードを表示
# fzfでyarn。カレントディレクトリにpackege.jsonがある場合はそれを利用。なければgit管理化のrootにあるpackage.jsonを利用
alias yy='_fzf_yarn'
_fzf_yarn() {
local packageJson=$(find ./ -maxdepth 1 -name 'package.json')
if [ -z "$packageJson" ]; then
local gitRoot=$(git rev-parse --show-cdup)
packageJson=$(find ${gitRoot}. -maxdepth 2 -name 'package.json')
fi
[ -z "$packageJson" ] && return
local actions=($(cat ${packageJson} | jq -r '.scripts | keys | .[]' \
| fzf-tmux -p --preview "cat ${packageJson} | jq -r '.scripts[\"{}\"]'" --preview-window=up:1))
[ -z "$actions" ] && return
local cmd=''
for action in "${actions[@]}"; do
if [ -z "$cmd" ]; then
cmd="yarn $action"
else
cmd="$cmd && yarn $action"
fi
done
printf "\e[35m$cmd\n\e[m\n"
print -s "$cmd"
eval "$cmd"
}
こだわりポイントはprint -s "$cmd"
でzshのコマンド履歴に残しているところですね。これをすることで次同じyarnコマンドを実行する際はもう一度yy
を打って選択するのではなく、ctrl-p
で実行できます。毎回fzfで選択するのはバッドオシャンティです。
dockを一瞬で非表示にする「dock」コマンド
普段dockは常に表示しているけれど、もっと大画面でMacを感じたい。そう思ったことありませんか。
このコマンドは「dokku」と口に出しながら実行すると気持ちいいです。
コードを表示
# dockの表示/非表示を切り替える
alias dock='_toggle_dock'
_toggle_dock() {
osascript <<EOS
tell application "System Events"
tell dock preferences to set autohide to not autohide
end tell
EOS
}
次に紹介するdt
コマンドと合わせるとデスクトップにさらに大画面を感じることができます。
デスクトップアイコンを一瞬で非表示にする「dt」コマンド
あ、やばい! 同僚が急に画面を覗き込んできた!! っていうときに使えます。仕事ができる人の机はきれいです。GIF動画を撮るときなどにも使えますね。
コードを表示
# デスクトップ上アイコンの表示/非表示を切り替える
alias dt='_toggle_desktop_icon_display'
_toggle_desktop_icon_display() {
local isDisplay=$(defaults read com.apple.finder CreateDesktop)
if [ $isDisplay -eq 1 ]; then
defaults write com.apple.finder CreateDesktop -boolean false && killall Finder
else
defaults write com.apple.finder CreateDesktop -boolean true && killall Finder
fi
}
あくまで非表示にしているだけで削除はされないので安心して実行してください。
Finderで開いているディレクトリにTerminal上で移動する「cdf」コマンド
コマンドが大好きな私ですが、ときにはGUIでディレクトリ移動したほうが早いときもあります。このコマンドはディレクトリ移動はFinderでやり、その後の処理はターミナルでやりたいといった場面で使えます。
コードを表示
# Finderで開いているディレクトリにTerminalで移動する
alias cdf='_cd_opend_finder'
_cd_opend_finder() {
cd "$(osascript -e 'tell app "Finder" to POSIX path of (insertion location as alias)')";
}
Finderからターミナルへドラッグ・アンド・ドロップでよくね?と思ったあなた。それはコマンド好きには受け入れられない動作です。
カレントディレクトリをFinderで開く「oo」コマンド
これは先程のcdf
コマンドと逆の動きをするものです。Terminalで今いる場所を、Finderで開きます。
▼ コード
alias oo='open .'
ほんのちょっとのaliasですが、めちゃくちゃ楽になります。いやほんとに。
IPアドレスを一撃で取得する「myip」
「IP許可お願いします〜」。この言葉人生であと何回言うんでしょうね。もう100万回は言ってると思いますがこれからも言い続けるでしょう。少しでも負担を減らしたいです。
▼ コード
# グローバルIPを確認
alias myip='curl ifconfig.io -4'
$ myip
103.5.140.160
これからはmyip | pbcopy
でコピペして送りましょう!
おまけ:今日の天気が気になるなら「tenki」コマンド
天気でその日の生産性は決まります。
私は晴れてると銭湯に行ってしまうので、雨の日のほうが生産性は高いです。
# お天気情報を出力する
alias tenki='curl -4 http://wttr.in/kanagawa'
kanagawa
の部分をtokyo
やaichi
などにすれば各県のお天気情報が表示されます。
終わりに
普段のちょっとした作業を効率化するワンライナーを紹介しました。(もはやワンライナーではなくシェルスクリプトでしたが)
面倒だなーと思う「退屈」な作業もコマンドで楽にできないかを考えると「楽しい」学びに変わります。こういった小さな楽しさを普段の業務中でも見つけられたら最高ですよね^^
ちなみにシェルスクリプトでさらなる作業効率化したい方、こちらの記事もどうぞ!
今日紹介したコマンドが明日の楽しさに繋がれば嬉しいです! それではまた! (タカタカッ!ターン!)