Help us understand the problem. What is going on with this article?

【私的最強alias32選】忘れやすいコマンドは、『辞書化&ショートカット化』しちゃえばいい

(追記)
今はzshとfzfで魔改造してるんですけど、明らかに初心者向けではないのでそれは書きません。ここの記事に書いてるのはあくまで素のbashでできるやつだけ。昔の自分用。


コマンドとか忘れても、また調べればいいか・・・
⇓⇓⇓1ヶ月後⇓⇓⇓
うわー、全然再現できない。あの時メモしてれば・・・

こんな後悔をした事がある方。
コマンドを全て辞書化して、ショートカットで実行できたら最高ではないですか?

alias』を使えば、それが可能になります。
もう、コマンドを忘れる度にネットで検索するという手間から解放されるのです。

  • git系の「merge」「squash」「revert」とかの大量のオプション整理
  • ssh系の「ホスト名」「パスワード名」を自動入力
  • 毎回必要になるgitやnpmのファイル一式を一括ダウンロード
  • その他、忘れやすいコマンドをコメント付きで辞書化

今回は上記の内容を習得する事ができます。
特に使用頻度の高い32選をソースコードで紹介していますので、早速見ていきましょう。

準備

今回紹介する方法は、bashにおけるaliasとfunctionを使用していきます。
必要なファイルが、皆さんのパソコンに存在している事をまずは確認しましょう。

~/.bashrc

今回紹介するソースコードは、全てこのファイルに記載していきます。
まず~/.bashrcが存在しているかどうかを確認しましょう。

terminal
touch ~/.bashrc

これで確認終了です。
既に~/.bashrcがあった場合でも、なかった場合でもこれで準備が整える魔法です。

~/.bash_profile

.bash_profileとは、ターミナルが起動した時に最初に読み込まれる設定ファイルです。
先程の.bashrcをいつでも開けるように、.bash_profile内で読み込み処理を記述しましょう。

terminal
vi ~/.bash_profile
~/.bash_profile
# 以下の文章を文頭にペースト
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
# viが開いている状態で下記のコマンドを押下。
:wq

これで準備は完了です。
早速実例を見ていきましょう!

[例1] Git系

Gitは中堅クラスの方でも「rebase」と「merge」の違いを説明できないくらい奥が深いです。
というか、コマンドとオプションが多すぎるのです。
ですので私は、よく使うコマンドを大量にまとめています。

新規リポジトリ作成 & 最初のコミット

githubに新しいリポジトリを作成する時、通常は下記の流れを行います。

  1. ブラウザを起動
  2. githubにアクセス
  3. 「Repository -> New」から必要項目を記述
  4. pushコマンドラインをコピペ、ターミナルに貼り付ける

私はこうです。

  1. ターミナルで「gcre」と書いて押す(1秒)

ソースコードは下記の通りで、これを.bashrcの適当な場所にコピーペーストしてください。
macOS : ~/.bashrc
windows : bash on windowsなら~/.bashrc。ストアに無料配布されてます。

~/.bashrc
function gcre() {
    yourid   = "" # <= ここにログインIDを書いてください
    yourpass = "" # <= ここにログインPASSを書いてください
    git init && git add -A && git status;
    read -p "type repo name        : " name;
    read -p "type repo description : " description;
    # github
    curl -u ${yourid} https://api.github.com/user/repos -d '{"name":"'"${name}"'","description":"'"${description}"'","private":true}';
    git commit -m "first commit";
    git remote add origin https://github.com/${yourid}/${name}.git;
    git remote set-url origin git@github.com:${yourid}/${name}.git;
    git push --set-upstream origin master;
    # bitbucketならこうする。
    ## curl -X POST --user ${yourid}:${yourpass} https://api.bitbucket.org/2.0/repositories/${yourid}/${name} --data '{"is_private":true}'
}

これはターミナル上でそのまま書くことも可能です。
ソースの中を見ると、普通のコマンドだけではなくGithubのAPIを叩いている事がわかると思います。
「ブラウザを開く必要がない」というのは以下のケースでとても重要です。

  • クライアントのVPNにアクセスしている時
  • colaboratoryなどクラウドターミナルを使用している時

今回はGithubでしたが、「例えばGoogleドキュメントで毎日同じことを繰り返している操作を自動化したい」となったらGoogle APIを用いて自動化する、という方法が取れますね。

コミット

(※SourceTreeで確実にdiffを見てからコミットしている方には適さないかもしれません。)
コミットするには、

  1. 変化のあったファイルを探し、
  2. ステージングし、
  3. 一覧確認した後に、
  4. コメントを付けて、
  5. コミット

というフローが必要になります。
これらを1コマンドで実行するのが、下記のソースコードです。

~/.bashrc
function gcom() {
    read -p "type commit massage >> " ms;
    git add -A && git status && git commit -m "$ms";
}

もしもgit add -Aではなくファイルを選別したいという場合、

~/.bashrc
function gcom() {
    read -p "type commit massage >> " ms;
    git add -i && git status && git commit -m "$ms";
}

と、interactiveモードに変更してください。

その他

それ以外、あまり頻繁には使わないコマンドは、辞書のようにaliasに設定しています。
今回はその例を下にお見せします。

~/.bashrc
# 辞書に登録しているgit系コマンドを一覧
alias gitls='alias | grep git'
# 操作履歴を10個まで表示する
alias ghis='git reflog --date=local -n 10'
# ghisで確認したコミットハッシュ値を引数にして、指定コミットに戻る
function grst() {
    git reflog --date=local -n 10;
    read -p "type commit massage >> " cn;
    git reset --hard ${cn};
}
# ghisで確認したコミットハッシュ値を引数にして、指定コミットのメッセージを修正する
function grst() {
    git reflog --date=local -n 10;
    read -p "type log number >> " cn;
    git commit -amend ${cn};
}
# カレントディレクトリが所属しているリポジトリのルートのパスに移動する
alias gcd ='git rev-parse --show-toplevel | xargs cd'
# ステータス変更があったファイル名だけ表示
alias gdif='git diff --name-only'
# ステージング対象から除外 showで一覧 popで復帰
alias gsta='git stash'
# git履歴をツリー状に表示
alias gtree='git log --graph'
# 別ブランチのコミットをマージする。これはreflogで見れないのでコミットハッシュ値は確認必要。
alias gpick='git cherry-pick'
# 直前のコミットに一部ファイル修正/追加をする
alias gredo='git add -i & git commit --amend & git push'
# チェックアウトする
function gco() {
    git branch;
    read -p "type target branch >> " tb;
    git checkout ${tb};
}
# gitのカレントブランチ名を変更する
function grename() {
    read -p "type new branch name >> " nb;
    cb = git branch --contains=HEAD;
    git branch -m ${cb} ${nb};
}

これは自分の中で、一つの辞書として全て登録しています。
仮にgit pull一つとっても、辞書なわけですから基本形として記載しているわけです。(さすがに記事に載せると乱雑になり趣旨と変わってしまうので、基本形は割愛しています。)

[例2] ssh系

sshにアクセスする際、皆さんは~/.ssh/configを利用されているでしょうか?
もしもまだ利用されていない場合は、以下のように非常に面倒くさい手順を踏まないといけなくなるでしょう。

  1. ssh情報が記載されているファイルを開く
  2. ユーザー名をコピー
  3. ターミナルに戻る & ユーザー名をペースト
  4. ファイルに戻る & パスワードをコピー
  5. ターミナルに戻る & パスワードをペースト
  6. ファイルに戻る & ポート番号をコピー
  7. ターミナルに戻る & ポート番号をペースト
  8. 以下のコマンドを実行
terminal
ssh ユーザー名@ホスト名 -i ~/.ssh/鍵の名前 -p ポート番号

これをもしも、~/.ssh/configを利用した場合、こんなに簡単になるんです。

  1. 以下のように~/.ssh/configファイルを作成
~/.ssh/config
Host 任意のニックネーム
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile ~/.ssh/鍵の名前
  1. 以下のコマンドを実行
terminal
ssh 任意のニックネーム

これだけでssh接続が簡単にできるようになるんです。
しかし、セキュリティの問題から、パスワードは逐一書かないといけません。
それが面倒くさいので私は、ssh系のコマンドを作りました。

~/.ssh/config
Host 任意のニックネーム # パスワード
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile ~/.ssh/鍵の名前
~/.bashrc
function sshp() {
    grep $1 ~/.ssh/config;
    ssh $1;
}

と、設定をした上でコマンドを起動させると、以下の1コマンドだけでssh接続が簡単にできるようになる。

~/terminal
sshp 任意のニックネーム

#==========
#出力
# 1行目にパスワードが表示される。これをコピー。
# 2行目にpassword入力行が表示される。ここにペースト。

これでかなり乱雑になったssh管理ファイルも一元化&整理できますし、時間短縮/人的ミスの減少につながるわけです。
今回は簡単に一つだけを紹介しましたが、勿論公開鍵の設定なんかもエイリアスやファンクションでまとめると効率的ですよね。
エンジニアの方でも公開鍵系はインフラに精通していないと理解しづらく、とっつきにくい内容ですので共有してあげるととても重宝されるでしょう。

[例3] テンプレート系の一括ダウンロード

皆さんの現場では、
このフレームワークのプロジェクトでは必ず、このプラグインをまずは用意する
というルールがありませんか?
毎回毎回、環境構築時に指定されたプラグインやソフトをダウンロードしてくるのは面倒臭いですよね?

かといって、dockerやvagrantレベルの重いコンテナを使うまでもない、という方にオススメのコマンドです。

例えば私の場合、wordpressの環境を立ち上げる際には必ず以下のテーマとプラグインを用いています。
テーマ
- Luxeritas 親テーマ
- Luxeritas 子テーマ
プラグイン
- acf pro
- cpt ui
- classic editor
- ewww image optimizer
- pubsubsubsub
- wp-optimize
- updraft plus
- siteguard

これらを一々ダウンロードなんてしていたら、5分以上は時間を浪費することになります。
また、会社の人に引き継ぐ際にも一々説明しなければいけないし、漏れが出るリスクもあります。
ですので、これも1コマンドで全部実行してしまうコマンドを作成しました。

前準備として、テーマとプラグインは私用/会社用githubにまとめてある状態を仮定しています。

~/.bashrc
alias setwp='
cd ./themes/
git clone テーマをまとめてあるgitのURL
cd ../plugins/
git clone プラグインをまとめてあるgitのURL'

setwpという5文字を打つだけで全インストールができるのです。
もちろんダウンロード時間は発生しますが、ターミナルが起動していれば他画面で別作業が行えますので大幅な時間短縮を実現できるのです。
そして他の人にもこのコマンドを引き継ぐ事もできますし、かつ漏れもなくなるのです。

[例4] 何かのアプリ系

アプリの中には、大量のコマンドを慎重に操作しなければいけない場面があります。
忘れてしまうくらい大量にあるコマンドは辞書に登録しておき、忘れそうになったら後で見返すという方法を使うと、そういった難しい場面も一々ググらなくて済むようになります。

例えばkivyを仮定したとしましょう。
kivyはPythonを使ったGUIアプリで、最も人気の高いフレームワークです。
しかし、クロスプラットフォームであるが故に大量のインストールが必要になります。
そして日本語の情報がまだ少なく、どの記事でも「インストールで一番苦労した」と書いてある割に、その情報を共有してくれているサイトが少なくて苦労します。

なので、やっと1日かけてインストールが成功したプログラムを残すためにも、辞書化する癖をつけておいた方が絶対に後々後悔しないで済むのです。

~/.bashrc
alias setkivy='
brew install pkg-config sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer
pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew Cython==0.26.1 kivy
xcode-select --install & brew install autoconf automake libtool pkg-config & brew link libtool'
alias kivyex='git clone https://github.com/kivy/kivy & cd ../example'
alias kivyios='
git clone https://github.com/kivy/kivy-ios.git
cd kivy-ios
./toolchain.py build kivy'
function makekivy() {
    read -p "type app name >> " app;
    ./toolchain.py create ${app} ../${app};
}
# 開く時は${app}-ios/${app}.xcodeprojをダブクリかopenコマンド

正直今となってはkivy <<<<<<< Xamarinですが・・・一応残しています(笑)

[例5] その他

以上、簡単なユースケース別にbashrcを活用する実例をご紹介しました。
もちろん、lsやcdなど単純に簡単なコマンドでも自動化はさせた方がいいです。

例えば私は、簡単なコマンドでいうと下記のような辞書を作っています。

~/.bashrc
# viでも強制的にvimを開く
alias vi='vim'
# pyでpythonを起動
alias py='python'
# 文字コードバグを回避する為、sedでもgsedを使う
alias sed='gsed'
# lsよりコマンド打ちやすいllで、色付き隠しファイル込属性区別付きls
alias ll='ls -alFG'
# ファイル内文字コピー
alias pbcp='pbcopy <'
# 直下ディレクトリ全てのファイル名検索
alias figr='find . -type f | grep'
# 直下ディレクトリ全てのファイル内の文章検索
alias stgr='find . -type f | xargs grep'
# 自分の作業フォルダへ移動
alias cdwk='cd ~/work'
# メモリ監視
alias pls='ps aux'
# 容量監視
alias sls='du -sh ./*'
# brew系アップデート
alias brup='brew update && brew upgrade'

これらは基本的にどのOSでも最初に入っているコマンドだけの辞書を引用しました。
別途インストールしてきたアプリ(nkfとかnpmとか)も含めれば大量になってしまうため、ここでは割愛致します。

まとめ

今回の内容を見て、
自分も、○○の操作を自動化したい!
自分は、npmの大量のパッケージを辞書化しよう!
そんなアイデアが湧き出て頂いたら最高ですね。

bashrcは標準でどのパソコンにもついているものですので、今すぐ時間短縮を実現する事ができます。
レガシーなプログラマーを卒業する一歩として、早速活用して試してみましょう!

もし今回の記事の内容が分かりづらく、ご質問があるという方は、
ここのコメントか、私のTwitter / Facebookでメッセージを頂ければ返答/追記していきますのでお気軽にご連絡ください。

おまけ 次の記事を読む

【71個掲載】Pythonを学ぶなら見るべき参考本/サイト/情報の、学べる分野や金額など徹底網羅

https://qiita.com/ryuta69/items/fdb5e227fa5dcbcc4691

今回は『Python』の参考書とか勉強サイトとか多すぎてよくわからない!という方の為に

  • 参考書
  • 動画学習サイト
  • テキスト学習サイト
  • フォローすべきqiitaアカウント
  • その他、無料で転がってる有益資料

をそれぞれ徹底網羅しました!
Pythonに興味ある人は是非御覧ください!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away