2016年8月現在の自分のLinuxデスクトップ上でのプログラミング環境を書いてみた。
dotfilesは以下に置いてある。
https://github.com/maueki/dotfiles2
はじめに
普段どんなプログラムを書いているのか
主にLinuxデスクトップで組み込みLinux上で動作するアプリケーションのプログラミングをおこなっている。メインで使用している言語はC++。ツールやちょっとしたプログラムはpython3(ボード上で動作する場合はpython2)で書いている。
デスクトップ環境はgnome3
特にこだわりがあるというわけではなく、Debianのデフォルトなので使用している。
ただしテーマは変更していて、Arc Themeがお気に入り
以下はArc Themeの公式スクリーンショット
ターミナルはterminator
ターミナルは、
- ウィンドウが透ける
- 曖昧文字幅に一応対策がある
という理由でterminatorを使用している。なおプログラミングする場合は常に最大化している。
terminatorは画面が分割できるのがウリのようだが、その機能に関しては後述のtmuxにまかせているので使用していない。
透過に関しては単純にカッコイイという理由以外にGUIアプリを起動して裏に置いた状態でログを見たりできるという実用的な面もある。
曖昧文字幅に関しては、環境変数VTE_CJK_WIDTH=1
を指定して起動することで(完全ではないが)主にEmacsで発生するレイアウト崩れを防止している。
以下のようなファイルを用意しておくと便利
[Desktop Entry]
Encoding=UTF-8
Name=terminator-cjk
Exec=env VTE_CJK_WIDTH=1 terminator
Icon=terminal
Type=Application
Categories=Development;
追記(2017/03/22): どうやらVTE_CJK_WIDTH
は廃止になったようだ。以下に回避策を記載した
http://qiita.com/maueki/items/d07760d5ee77ce72a9f4
ターミナルのフォントはInconsolata
ターミナルのフォントはInconsolataを使用している。特にこだわりはないが、プログラミングするにあたっては「0(ゼロ)/o(小文字オー)/O(大文字オー)」「1(数字)/l(小文字エル)」あたりは明確に区別できるフォントを使用したい。
debianならパッケージが用意されている
$ sudo aptitude install fonts-inconsolata
上記Inconsolataのサイトからinconsolata.otfを取得して$HOME/.fonts/
以下に配置して$ fc-cache -f
を実行してもOK
terminatorのフォント変更は 右クリック>設定>プロファイル>一般 から設定可能。
追記(2017/03/29): Inconsolata + Migu 1MのRictyに変更しました
シェルはZsh
強力な補完機能がウリのシェル。便利なプラグインが多いのも魅力だが自分はあまり使いこなせていない。
設定等はここを参考にしていたが、なにぶん7年前の記事なのですでに時代遅れの部分もあるかもしれない。
デフォルトのシェル(ログインシェル)の変更はchsh
コマンドから行うことができる
$ chsh -s /bin/zsh
zaw
Zshのプラグインで、cd
の履歴やコマンドヒストリをインクリメンタルサーチできて非常に便利。
behind-window-notify
tmuxの非アクティブウィンドウでのコマンド終了を通知してくれる。地味に便利。
tmux
tmuxはターミナルの画面分割やタブ化をしてくれるアプリ。リンク先の画面イメージがわかりやすいと思う。
単にタブ化するだけでなくセッションを保持してくれるため、何かの拍子に誤ってterminatorを終了してしまっても、再起動したterminator上で
$ tmux a
と入力すれば全てが復元するというありがたい機能がある。
なお、tmuxのデフォルトのコマンド用キー(prefix)はC-b
だが、Emacsのカーソル移動とかぶるためC-j
に変更している。(シェルやEmacs上でC-j
を入力したいときはC-j C-j
と入力する)
bind-key C-j send-prefix
自宅のデスクトップマシンでプログラミングをしている際、座るのに疲れてきたらノートPCを持ってこたつや布団に移動、sshでデスクトップマシンへログインして
$ tmux a -d
とすれば、すぐプログラミング再開というダラダラプログラミングの強い味方でもある。(-d
付ける理由はここ参照)
エディタはEmacs
エディタはtmux上でEmacsを起動($ emacs -nw
)して使用している。
EmacsはLinux界ではvi/Vimと勢力を2分するといわれている歴史の長いエディタ。自分はかれこれ20年以上お世話になっているがいまだに進歩し続けており驚愕する。
かつてはメール読み書きもwebブラウジングもシェルもEmacs上で実行し「EmacsはOSである」とまで言われたが、流石に最近はそのような使い方をする人は少なくなったと思われる。
なおVim派とEmacs派の争いはしばしば「宗教戦争」などと呼ばれたりもするが、組み込みLinuxを扱う場合はviの操作も最低限できるとなにかと重宝するので覚えておくと良いだろう。
あと、tmux上で起動している理由は
- シェルと素早く切り替えができる
- tmuxのコピペ機能を使ってシェルとEmacs相互のコピペが簡単に行える
- tmuxのところで説明したダラダラプログラミング
といったところ。ただし、ターミナル上でのEmacs使用にはデメリットもある
- キー組み合わせに制限がある(参考 <- terminatorでは不可)
- 画像を扱うことができない(Sixel Graphicsを使えばターミナル上たで画像を扱えるらしいがEmacsは対応しているのだろうか?)
以下にEmacsのオススメの機能、パッケージを記載する。
el-get
Emacsにインストールするパッケージを管理してくれる。以下に簡単な解説を書いた。
Emacsのパッケージ管理は
- package.el(標準)
- Cask
- el-get
あたりが人気という認識。
解説にも書いたが、el-getを選んだのはgitでの設定共有が(自分の環境では)一番うまくいったため。
helm
Emacsパッケージの人気投票を行ったら上位に来るであろうことは間違いないと思われるパッケージ。
Emacsのバッファ(≒現在開いているファイル)や、最近開いたファイル、git管理されているファイル(helm-ls-git-lsが必要)などなど何でもインクリメンタルサーチで素早くアクセスできるようにしてしまう。
これがあると無いとで自分の生産効率は大きく変わるといっても過言ではない。
magit
Emacsからgitを扱うためのパッケージ。最初ちょっと戸惑うが、慣れてしまえばこちらも生産性向上間違い無し。
チュートリアルを書いた
magitチュートリアル
tramp-mode
ssh越しにファイルを編集したりできる機能。これのおかげでviの使用頻度がだいぶ下がった。
以下に簡単な紹介を書いた。
tramp-modeが便利
Emacs上のC++開発環境
以下が詳しい
C++11時代のEmacs C++コーディング環境
pythonはJupyterで書くことも
pythonのコードはJupyter(旧名:IPython Notebook)で書くこともある。
Jupyterはwebブラウザ上でインタラクティブにプログラミングができるアプリケーションで、グラフなどもブラウザ上に表示してくれるため、データ処理などのコードを書く際には非常に重宝する。
webブラウザ上でプログラミングと聞くと「サーバ立てるの大変では?」と懸念するかもしれないが、基本的にワンコマンドでサーバが起動する(ついでにブラウザまで勝手に起動してくれる)ので特に難しく考える必要はない。
補完機能やヘルプドキュメントも完備しておりとてもwebブラウザ上とは思えない機能性を有しているためそれだけでも一見の価値あり。
番外編
椅子
プログラマはその性質上長時間椅子に座ることを余儀なくされるので、できるかぎり良いワークチェアに座るべきだと思う。
会社ではセイルチェア、自宅ではミラチェア(リンク先はミラ2チェア)を使用している。
ところで一時期スタンディングデスクが話題に上ったが、効果の程はどうなのだろうか。
キーボード
HHKB Pro2を使用。最近Ergodoxが気になっている
マウス
というかマウスは長時間使用していると手首が痛くなってしまうのでトラックボールを使用している→Expert Mouse Optical Trackball