Windowsで開発してきたプログラマのLinux開発環境

# はじめに
長年，WindowsでVisual Studioを使って開発してきましたが，1年ほど前からLinuxでコードを書く環境に置かれることになりました．今ではさほどストレスなくLinuxでもコードが書けているので，そんな私のLinux開発環境についてまとめます．同じような環境に置かれた方の参考になればうれしいです．
ちなみによく使う言語はC++，Pythonあたりです．WindowsではC#も使っています．

# Linuxディストリビューション
はじめはUbuntuくらいしか知らなかったのですが，私のまわりにはUbuntuの他にDebianやFedoraを使っている人がいました．これといった理由があるわけでもないですが，まわりのおすすめでDebianを選びました．デスクトップ環境はGNOME 3を使っています．
[Debian -- ユニバーサルオペレーティングシステム](https://www.debian.org/index.ja.html)

ちなみにWindows PCにVMWareでDebianをインストールしています．仮想マシンの環境だと再インストールも気軽に行えるのでいいですね．OSのインストールだけでもこの1年で何度も行いました．他の方々に倣ってdotfilesをGitHubで管理しておくと簡単に環境が作れて便利ですね．

# ターミナルまわり
Linuxな人たちがキーボードだけで目まぐるしく画面を切り替えて操作をしているのに憧れていました．そんな環境を用意するのが目標です．ちなみにWindowsでは[cmder](http://cmder.net)を使っています．

## ターミナル
こちらもこれといった理由はないですが，Terminatorを使っています．やっているのはウィンドウを透過するくらいです．あとアイコンが赤くてかっこいい．Debianを立ち上げたあとはまずTerminatorを最大化で起動しています．

## シェル
まわりのおすすめでzshを使っています．補完がしっかり効いてくれて使いやすいです．ひとまずoh-my-zshで使っています．テーマもたくさんそろっていて，はじめてzsh使う人には便利かなと思います．自分はcandyを使っています．
[https://github.com/robbyrussell/oh-my-zsh/wiki/themes](https://github.com/robbyrussell/oh-my-zsh/wiki/themes)
<img width="446" alt="01.png" src="https://qiita-image-store.s3.amazonaws.com/0/45310/f1461b5b-d60f-e2bf-b231-ef667adb0a1c.png">

## tmux
ターミナル環境ではtmuxを使っています．画面分割やタブ化のキーボード操作を手になじませると作業が一気に効率化されると思います．憧れていた操作はこれによるものですね．
また，不意にターミナルを閉じてしまってもセッションが保持されるので，アタッチして作業を再開できるのも便利です．

# エディタ
はじめはWindowsでも少し使ったことのあったAtomを使っていましたが，C++をメインで使うにはちょっと自分としては物足りなかったです．他にはEmacsも試していましたが，ずっとVisual Studioでコードを書いてきた自分にとってはスクリーンエディタはとっつきにくく，どうしたものかなと悩んでいました．そんな中，昔に一度触って機能不足で見送っていたVisual Studio Codeを試してみたら，自分にはぴったりのエディタとなっていました．
ワークスペース（仮想デスクトップ）を使って，ターミナルとエディタを切り替えながらプログラミングを行っています．

## Visual Studio Code
[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com)
Microsoft製のOSSなテキストエディタです．Electronで作られているのでWindows，Mac，Linuxで使えます．

以下のような内容が特徴として挙げられると思います．

* 標準機能がしっかりとしています．とりあえずインストールしただけでそれなりに使っていけると思います．人におすすめするときにも助かります．
* 拡張機能も簡単に導入できます．エディタ上で拡張を検索できたり，今のワークスペースに対してのおすすめ拡張が紹介されたりとUX的にもいい感じです．
* 設定はJSON形式で行いますが，その編集画面が使いやすくなっています．デフォルトの設定内容も同じくJSON形式で確認でき，変更したい項目を別途上書きする形式です．各項目の説明コメントがついている（日本語対応まで！）ところがありがたいです．
* キーボードでもマウスでも操作しやすいです．特にコマンドパレットまわりをうまく使ってキーボード操作に慣れると，作業が効率化されるのではと思います．
* 標準でエディタ上でターミナルが扱えます．ターミナルに出力されたファイルパスへのリンクが動いてくれるので，ビルドしたときのエラー個所に飛べるのがうれしいです．

自分が使っている拡張についても，いくつか紹介しておきます．

* C/C++（ms-vscode.cpptools）  
Microsoft製のC/C++対応です．補完やシンボル検索，定義へのジャンプなどが使えます．とりあえずこれを入れておけばC++でのコーディングがやっていけると思います．
* C/C++ Snippets（hars.cppsnippets）  
上記と合わせてスニペットも入れておくと扱いやすくなると思います．
* Python（donjayamanne.python）  
Python対応です．これらのように使いたい言語への対応拡張を入れることになります．各言語，ひとつ拡張を入れるとひとまずコードを書いていけるのではと思います．
* EditorConfig for VS Code（EditorConfig.editorconfig）  
EditorConfigへの対応もばっちりです．
* Code Runner（formulahendry.code-runner）  
エディタ上で簡単なコードを即実行する拡張です．書き捨てコードを書いているときには便利です．
* Git History（donjayamanne.githistory）  
git logを見やすく表示してくれます．入れておいて損はないかと思います．
* PlantUML（jebbs.plantuml）  
PlantUMLにも対応しています．エディタ上でPreviewできるのと画像ファイルへのエクスポートができます．

# Gitクライアント
WindowsではGit Extensionsを使っています．簡単な操作ならVisual Studio Codeで行えますが，専用のGitクライアントがあると助かります．いろいろ試してみてtigが便利でしたが，その後GitKrakenに出会って乗り換えました．

## GitKraken
[GitKraken: Git GUI for Windows, Mac & Linux](https://www.gitkraken.com/)
Visual Studio Codeと同じくElectron製のアプリです．UIも直感的でなんとなくで使っていけるかと思います．

* コミットのツリーから各コミットの変更ファイル，そしてそれぞれのファイルの変更内容がスムーズに確認できます．
* ワークスペースの更新内容も同様に確認できます．
* コミット操作やリモートへの操作も簡単に行えます．リベースやリセットなどといった操作にも対応しています．
* ファイルごとのコミット履歴やgit blameも確認できます．
* Free版で使うには制限があるので注意です．

# おわりに
以上で，ひとまずLinuxでプログラミングを行うことができるのではないかなと思います．Windowsでしか開発を行ったことがなかった自分でも楽しくコードが書けています．ひとつの選択肢として誰かの参考になるとうれしいです．