Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

ギーク野郎のTerminal生活

ギーク野郎

ギーク野郎とは開発用Terminalを常に立ち上げてプログラミング言語をいじっている人の事をここでは意味します。ギーク野郎はモニターを複数台所有し、それぞれがTerminal用、ネットサーフィン用、ニコニコ動画専用というような使い分けをしています。しかしそれぞれのモニターへの視線とマウス移動はフラストレーションを溜める1要因になります。それを回避するために本当のギーク野郎は1台モニタのTerminalだけで作業します。すみません、左の発言は適当です笑。この記事ではTerminalだけで作業を完結したい人を対象とし、GUIを使わずにCUIだけでの作業環境構築を目指し、それに役立ちそうなアイテムについて紹介します。

tmux

tmux はてなブックマーク - tmux
プロセス管理の初歩テクニック - Yuta.Kikuchiの日記 はてなブックマーク - プロセス管理の初歩テクニック - Yuta.Kikuchiの日記
tmuxを使ってWorking Spaceを効率的に使う事を強く薦めます。個人的にはtmuxが好きですが、screenでも良いと思います。tmuxはwindowを複数立てたりpaneと呼ばれる単位の子windowへの分割もできます。分割した領域間の移動は設定したキーバインドで可能です。tmuxは一つのプロセス内で作業領域を管理するので、アタッチ/デタッチという機能を使うと作業の中断/再開が簡単にできます。プロセスを消さない限りターミナルを落としても問題ありません。作業領域に関してはターミナルに備わっているタブ機能の方が便利と思われる方も多いと思いますが、個人的にはターミナルのタブ機能は使わずに1つのwindowをtmuxで細かく分割して作業内容を全て1画面で見れるような使い方の方がしっくり来ます。また複数のWorking Spaceの移動をtmuxでやるとキーバインドが統一されて、使用しているTerminalに依存しません。以下はtmuxの設定ファイルの.tmux.confとtmuxの使用画面例になります。

$ sudo yum install tmux -y
$ vi ~/.tmux.conf

#新しいウィンドウのベース番号
set-option -g base-index 1
#全てのベルを無視
set-option -g bell-action none
#各セッションで保持するバッファ数
set-option -g buffer-limit 20
#256色端末を使用
set-option -g default-terminal "xterm"
set-option -g default-command /usr/local/bin/zsh
set-option -g default-shell /usr/local/bin/zsh

#ウィンドウ履歴で保持される最大行数
set-option -g history-limit 5000
#Escapeキー入力時の待ち時間(0.5秒)をキャンセル
set-option -s escape-time 0
#ウィンドウを実行コマンド名で自動リネーム
set-window-option -g automatic-rename on
#スクロールモード、コピーモード、選択モードで vi のキーバインドを使う
set-window-option -g mode-keys vi
#ウィンドウで動作があるとステータスラインでハイライト
set-window-option -g monitor-activity on
#UTF-8 シーケンスが現れることに備える
set-window-option -g utf8 on
 
#set-option -g mouse-resize-pane on
#set-option -g mouse-select-pane on
 
# prefix + r で設定ファイルを再読み込み
set-option -g prefix C-g
unbind r
bind r source-file ~/.tmux.conf
 
# キーバインド
# 各種ペインの移動
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 各種ペインのリサイズ
bind H resize-pane -L 5
bind J resize-pane -D 5
bind K resize-pane -U 5
bind L resize-pane -R 5

#マウススクロールバック
set-window-option -g mode-mouse on

#status line
set -g status-interval 5
set -g status-fg cyan
set -g status-bg black
set -g status-left-length 40 
set -g status-left '#[fg=white,bg=blue]#H#[fg=white,bg=black]:#[fg=white,bg=black][#S#[fg=white,bg=black]][#[fg=white,bg=black]'
set -g status-right '#[fg=white,bg=cyan][CPU=#(cpu.sh) MEM=#(mem.sh)]#[fg=black,bg=green][%Y/%m/%d(%a)%H:%M]#[default]'

setw -g window-status-current-fg cyan
setw -g window-status-current-bg black
setw -g window-status-current-attr bold#,underscore

w3m

W3M Homepage はてなブックマーク - W3M Homepage
コードを書きながらgoogleで調べ物をして進める人が多いと思います。そんな時はChrome等のWebブラウザを起動するのでは無く、w3mを使います。w3mはテキストのViewerになるので画像を表示しません。JavaScriptもOFFになります。これによりバナー広告等一切表示されないので快適です。(w3m-imgをinstallすると画像を表示する事も可能です。) 動画を再生したい場合はemacs-w3mをinstallする事で出来るみたいですが、ここでは紹介しません。
ブラウザで重要な機能は履歴の一覧とブックマーク、Cookie等があります。w3mも当然これらを使う事ができます。履歴の一覧参照はw3m起動中にCTR + h、ブックマークへの追加はESC + a、ブックマークの参照はESC + b、Cookieを使用したい場合はw3mの軌道オプションで--cookieとします。

# install
$ sudo yum install w3m -y

#通常起動
$ w3m "http://google.com"

# cookieを使う
$ w3m --cookie "http://facebook.com"

# bookmarkを確認
$ w3m -B

mutt

The Mutt E-Mail Client はてなブックマーク - The Mutt E-Mail Client
Linux上で動作するCUIMailerは幾つかありますが、ここではmuttについて紹介します。muttを使ってコマンドラインからmailを送信したり、GmailIMAPを利用してメール一覧を取得することが出来ます。
設定ファイルとなる.muttrcの記述が完了したらコマンドラインからメールを送ってみます。添付ファイルとして.muttrcを送信します。以下のコマンドを実行すると送信メール本文入力のvimが立ち上がるので、適当に送信したいメッセージボディを入力します。ここでは"これはテスト用のメッセージボディです。"と入力してvimを保存終了しました。送信には確認が求められるので"y"と入力すればOKです。本文が不要だという人は/dev/nullを<で指定します。下の画像が実際に添付ファイルを受け取ったmuttの画面です。

$ sudo yum install mutt -y
$ mkdir -p ~/.mutt/cache/headers && mkdir ~/.mutt/cache/bodies && touch ~/.mutt/certificates && touch ~/.mutt/signature
$ vi ~/.muttrc

set send_charset="iso-2022-jp:utf-8"
set editor    = "vim"

set imap_user = "[email protected]"
set imap_pass = "foo-pass"
set smtp_url  = "smtp://[email protected]:587/"
set smtp_pass = "foo-pass"
set from      = "[email protected]"
set realname  = "Your Name"

set folder = "imaps://imap.gmail.com:993"
set spoolfile = "+INBOX"
set imap_check_subscribed
set hostname = gmail.com
set mail_check = 120
set timeout = 300
set imap_keepalive = 300
set postponed = "+[GMail]/Drafts"
set record = "+[GMail]/Sent Mail"
set header_cache=~/.mutt/cache/headers
set message_cachedir=~/.mutt/cache/bodies
set certificate_file=~/.mutt/certificates
set signature =~/.mutt/signature
set move = no
set include
set sort = 'threads'
set sort_aux = 'reverse-last-date-received'
set auto_tag = yes
ignore "Authentication-Results:"
ignore "DomainKey-Signature:"
ignore "DKIM-Signature:"
hdr_order Date From To Cc
alternative_order text/plain text/html *
auto_view text/html
bind editor <Tab> complete-query
bind editor ^T complete
bind editor <space> noop

color header green black "^Date:"
color header yellow black "^Subject:"
color header green black "^From:"
color header green black "^To:"
color header green black "^Cc:"

color body red black "(ftp|http)://[^ ]+"
color body red black "[-a-zA-Z0-9_.]+@[-a-zA-Z0-9_.]+"
# 送信 本文をvimで入力する
$ mutt -s "これはmuttrcファイルです" foo.gmail.com -a .muttrc

# 送信 本文が不要な場合
$ mutt -s "これはmuttrcファイルです" foo.gmail.com -a .muttrc < /dev/null

# 受信確認
$ mutt