LoginSignup
123

More than 1 year has passed since last update.

この記事は身の回りの困りごとを楽しく解決! by Works Human Intelligence Advent Calendar 2022の13日目の記事です。
この記事では皆さまに「遊び心」と「楽しさ」をお届けできればと思います :laughing:

はじめに

黒い画面にタカタカッ!ターン! っと打つとすべての仕事が完了した雰囲気を出すスーパーエンジニア、あなたの会社にも一人は居るのではないでしょうか。この記事では「仕事が早い人」なら誰でもやっている作業効率爆上げコマンドを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など中身を軽く確認したいことってありますよね。ファイルを開かずチラ見したいときのコマンドがこちら。
あいまい検索でファイルをフィルタリングし、選択するとエディタで開きます。

lk.gif

コードを表示
# カレントディレクトリ以下をプレビューし選択して開く
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_2.gif

コードを表示
# 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です。

xcode_preference_locations.png

今日変更があったファイルのみを出力する「lt」コマンド

エラーログが1つのディレクトリにまとめて置かれ、エラーがあった際は複数のログファイルに書き込まれる。ああ、エラー出力されたログファイルだけ抜き出したい。そんな状況で活躍するのがこのコマンドです。
カレントディレクトリで「今日変更があったファイルのみ」をlsします。

lt.gif
(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をリスト化し、選択するとそのブランチに切り替えます。

prr.gif
(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で選択し実行できます。

yy.gif

コードを表示
# 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.gif

コードを表示
# 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動画を撮るときなどにも使えますね。

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でやり、その後の処理はターミナルでやりたいといった場面で使えます。

cdf.gif

コードを表示
# 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で開きます。

oo.gif

▼ コード

alias oo='open .'

ほんのちょっとのaliasですが、めちゃくちゃ楽になります。いやほんとに。

IPアドレスを一撃で取得する「myip」

「IP許可お願いします〜」。この言葉人生であと何回言うんでしょうね。もう100万回は言ってると思いますがこれからも言い続けるでしょう。少しでも負担を減らしたいです。

▼ コード

# グローバルIPを確認
alias myip='curl ifconfig.io -4'
$ myip
103.5.140.160

これからはmyip | pbcopyでコピペして送りましょう!

おまけ:今日の天気が気になるなら「tenki」コマンド

天気でその日の生産性は決まります。
私は晴れてると銭湯に行ってしまうので、雨の日のほうが生産性は高いです。

tenki.gif

# お天気情報を出力する
alias tenki='curl -4 http://wttr.in/kanagawa'

kanagawaの部分をtokyoaichiなどにすれば各県のお天気情報が表示されます。

終わりに

普段のちょっとした作業を効率化するワンライナーを紹介しました。(もはやワンライナーではなくシェルスクリプトでしたが)
面倒だなーと思う「退屈」な作業もコマンドで楽にできないかを考えると「楽しい」学びに変わります。こういった小さな楽しさを普段の業務中でも見つけられたら最高ですよね^^

ちなみにシェルスクリプトでさらなる作業効率化したい方、こちらの記事もどうぞ!

今日紹介したコマンドが明日の楽しさに繋がれば嬉しいです! それではまた! (タカタカッ!ターン!)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
123