2017年初頭における作業環境

最近,近年で最もコンピュータ上での作業環境が変化したので,僕の作業環境を紹介してみる. 前提として,自分の仕事上,どのような作業が多いかを挙げておく.

上記のように,いくつかの異なるサーバーにて種々の異なる作業を行っている. そのため,どのサーバの,どのディレクトリで,どのような作業を行っているかを把握するのがかなり面倒になっていた.また,サーバに接続し直すたびにその作業ディレクトリに移動し直したりするのがかなりの時間のロスだったようだ(これは,それが当然と思っていたときには気づかないものだった). 最近,以下の2つ技術の導入したことで,(少なくとも気分的には)かなり楽になった.

tmux

ターミナル・マルチプレクサと呼ばれるもので,

  1. 一つの画面でいくつものターミナルを立ち上げて,それらを切り替えることができる
  2. tmux自体がデーモンのようにバッググラウンドで走っており,リモートホストでtmuxが起動している場合,接続が切れたとしても,接続し直すと以前の作業に復帰できる.

この 2 が本当に良い機能で,使ってみないと「そんなものかね」的に思うが,一度使ったら最後,これがないリモートサーバで作業する気などなくなってしまう.そのくらい良い機能.

インストールや設定の仕方,使い方などはすでにインターネット上にいろいろと出回っているので,ここには記載しないが,いくつかのキーバインドは自分が便利と思うものを載せておく. 以下のような内容で ~/.tmux.conf を保存しておくことで,自分の好きな設定ができている(ほとんどどこかのウェブサイトから取ってきたものだが,どこかを忘れてしまった).

# Prefix変更 C-b -> C-t
set-option -g prefix C-t
bind-key C-t send-prefix
unbind-key C-b

# 設定再読込キーバインド
unbind r
bind r source-file ~/.tmux.conf \; display "Reloaded ~/.tmux.conf"

# key bind (windowの移動)
# カーソルキーで移動
bind -n left previous-window
bind -n right next-window

# key bind (paneの移動)
# Shift + カーソルキーで移動
bind -n S-left select-pane -L
bind -n S-down select-pane -D
bind -n S-up select-pane -U
bind -n S-right select-pane -R

# 256色端末を使用する
set-option -g default-terminal "tmux-256color"
# viのキーバインドを使用する
# set-window-option -g mode-keys vi

# ステータスバー設定
set -g status-interval 10
set -g status-bg colour100
setw -g window-status-current-fg black
setw -g window-status-current-bg white

# split panes using | and -
bind h split-window -h
bind v split-window -v
unbind '"'
unbind %

Jupyter notebook

もう一つは,jupyter notebook. これは,ブラウザ上でプログラムを作成し,簡単に実行して結果を確認できるもの.自分の場合はたいてい python でなんらかの軽い処理をする際に重宝している. 良い点としては,

  1. すぐに結果が見れる
  2. カード毎に実行できるため,以前に書いた一箇所だけを実行とかできる
  3. Markdownでコメントを書き込める
  4. 数式も書ける
  5. グラフや画像なども挿入できる
  6. リモートサーバー上のnotebookをローカルのブラウザで実行できる

これらが可能なため,実際に何らかの解析作業などを行う場合,何をどうやるかやをMarkdownで書きながら実際にコードも書いて,実行した結果も一つのノートの上に表示されていく感じ.実験ノートを書きながら解析作業を行えているようなもので,後から見ても思考の過程をたどることができる.

そして, 6 ができるため,ちょっと重たい作業を行ってもローカルマシンがヒートアップしたり遅くなったりしないのが良い.

インストールは pyenv を入れた後に,anaconda をインストールすれば自動的についてくる(便利な世の中になったものだ).

この2つの技術は全く独立しているものだが,リモートサーバー上でjupyter notebookを使うに際して,tmuxが役に立つ. tmuxをリモートサーバーで一度起動しておけば,ログアウトしても,プロセスを起動し続けることができるから,jupyter notebookをリモートサーバー上で常時起動させておくことが可能になる.これはまたかなり便利(これも体験してみないとなかなか便利さが伝わらないと思うが).

おまけ

Marp

日本人が作成した,Markdownでスライドを作れるアプリ.機能としては,

これでかなり楽にスライドを作れるから便利.

Quiver

Programmer’s notebookという触れ込みだが,プログラム実行のできないjupyter notebookを束ねたEvernoteのようなもので,それだけ効くと何が良いのか分からない. 何が良いかというと,

実際に使ってみると,プログラミングに関連したほぼすべてのことをメモするのには事足りるので,Evernoteよりも便利と思う.