Linuxのおすすめソフトを紹介

##はじめに

１ヶ月ほど前、メインのパソコンでLinuxを使い始めました。Macからの移行です。

それまでは、仮想化で使ったり、サブパソコンに入れてたりと、なんとなくLinuxを使ってたことがありましたが、はっきり言って、「Linuxを使ってる」と言えるレベルのものでは到底ありませんでした。

再設定が必要になる部分が多々ありましたので、メインで使ってみて、やっと、「ああ、Linuxを使い出したんだなあー」ということをぼんやりと思う程度にはなりました。

ということで、まずは、Linuxの使い心地というか、感想から述べていきたいと思います。

ちなみに、メインのパソコンは、`MacBook Air 11-inch (Mid 2013)`です。OSは、Arch Linux。

|構成|内容|
|---|---|
|OS|Arch Linux|
|メモリ|8GB|
|CPU|Core i7|

あと、スワップ設定はなし。ある程度のスペックを備えているパソコンにスワップの設定は必要ないし、あると逆に不安定になる印象があるので、設定していません。

##OSごとの比較

割と大雑把に言うと、こんな感じでした。ちなみに、回数を平均して出しているなどという面倒なことはしていません。1回で出た数字とか、割と適当な値ですので、あまり参考にならないかもですが。

###起動直後

|OS Type|Memory|CPU|
|---|---|---|
|Mac|2GB|20%|
|Windows|1.5GB|15%|
|Linux|200MB|5%|

###ブラウザ起動後

ブラウザは`Chrome`です。

|OS Type|Memory|CPU|
|---|---|---|
|Mac|2GB→4GB|20%→30%|
|Windows|1.5GB→3GB|15%→17%|
|Linux|200MB→300MB|5%→7%|

###使用感

数字の上では、消費スペックは、Linuxが圧勝していますが、実感の上では、Linuxは、割と不安定な印象があります。

例えば、一度に大量の負担をかけてしまうと、元に戻りにくかったりという印象です。他のOSは、時間がたてば、割と元に戻るって感じでした。

ただし、Linux(Arch Linux)は通常の使用で、メモリの消費量が200MBから300MBの間という値は、素晴らしいです。

私の場合、主に端末くらいしか使用しませんので、Linuxが合っているのかもしれません。

他のOSは、使わない処理をバックグラウンドでスケジュールされていたりと、色々と便利にはなっているとは思いますが、やはり、デフォルトの設定では、無駄が多いのも事実だと思います。

更に、設定変更できなかったり、ブラックボックスに包まれていたりで、何をやってるのか、よくわからないという場合すら存在すると思います。

その点で言えば、Linuxというのは、市販OSよりも分かりやすいと感じます。

そして何より、面白いです。

最初はなんか難しいなっていうのがあると思いますが、使ってるうちに慣れてくるし、応用が効くので、いいなって思います。

例えば、Linuxでスケジューリングしようとした場合、使用する機能によっては、Linux Kernelにアクセスしなければならないって時がありますが、こういうのを調べていても、時間の無駄感があまりないのがいいです。

他のOS、例えば、Ubutunなんかはどうなんだろう。実は、Ubuntuは、あまり使ったことがなくて、非常に良いOSだと聞いていますが、起動直後のスペックなんかはどんな感じなのだろう。コメントにて教えてもらえると嬉しいです。

私はこんな感じの初心者ですが、今回は、Linuxで使ってるアプリを紹介していけたらと思います。

##Linuxで特に使っているアプリ
例ではyaourtを使用していますが、**yaourtは開発が終了しています。**([Requesting official statement from developers · Issue #382 · archlinuxfr/yaourt](https://github.com/archlinuxfr/yaourt/issues/382))
下記から開発が継続しているパッケージマージャーを使用してください。
[AUR ヘルパー - ArchWiki](https://wiki.archlinux.jp/index.php/AUR_%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC)

```bash:
yaourt -S slim awesome lilyterm zsh tmux vim git go jq xclip clipit fcitx dropbox spacefm ffmpeg imagemagick feh w3m dwb firefox virtualbox openoffice
```

###[slim](https://wiki.archlinux.org/index.php/SLiM)

ログインマネージャー。設定することで、通常のOSと同じようなログインを実現できる。テーマもカスタマイズ可能。

###[awesome](https://wiki.archlinux.org/index.php/Awesome) 

[ウィンドウマネージャー](https://wiki.archlinux.org/index.php/Window_manager)です。これは、[Openbox](https://wiki.archlinux.org/index.php/Openbox)とか元からはいってるものを使う人が多いのではないでしょうか。

でもタイル型は便利ですよ。Awesomeの場合は、マルチディスプレイでも、キー操作でウィンドウを他ディスプレイ側に`C-o`で持ってったり、`C-S-j`でフォーカスを移したりできますし。そうでなくても全部キー操作でできるのと、自動でウィンドウの大きさを揃えてくれるのが嬉しい。これは好みによるところが大きいです。逆に、直感的な操作には全然向きません。マウスを使ってウィンドウを持ってくるなんてことも高度な設定しない限り(しても無理かもですが)無理だと思います。

###[lilyterm](https://github.com/Tetralet/LilyTerm)

有名なターミナルエミュレータは[こちら](https://wiki.archlinux.org/index.php/Category:Terminal_emulators)に列挙されています。個人的には、[terminator](https://wiki.archlinux.org/index.php/Terminator)なんかいいんじゃないかなあと思いますが、透過度の設定がlilytermは楽なので、これを使っています。

でも色々と癖がある端末です。

###zsh,tmux,vim

この辺は、好みが強そうなので、あまり言及はしません。シェルは、Bashを使っていたり、Ashを使っていたりと人それぞれ。デフォルトシェルは、Bashが多いですね。

あとは、tmuxの代わりに、screenを使っている人も多いです。

vimはエディタで、emacsを使ってたりといろいろです。Arch Linuxユーザーは、Emacsを使う人が多いのではないだろうか。これは、Arch Linuxでは、初期パッケージ(base)でvimがインストールされないからです。emacsはインストールされます。

###git

gitですが、これは、バージョン管理システム。

ここで少しだけgitの一般的な使い方を説明しておきます。これは、まず、木々の枝分かれをイメージしてもらえれば理解は一瞬です。しかし、それほど大規模なプロジェクトでもない限り、枝分かれのイメージは少しわかりにくいと思います。ということで、まずは、飛び石をイメージするのが良いかと思います。

通常、開発というのは、いくつものテスト、バージョンを抱えます。バージョンは、新しい機能の追加によるものが多いですね。テストは、それを細かくバラバラにしたイメージ。

ここで、gitによる開発というのは、通常、慎重に行われる傾向にあると感じます。これは、飛び石をイメージして、開発しているものが安定してきたらmasterにfirst push(最初のアップロードのこと)したり、merge(取り込むこと)したりします。masterはbranch(ブランチ)の一つで、ブランチというのは、枝分かれ。masterは、ここでは、一番太い主たる枝のことを言います。

ちなみに、慎重派は、最初のpushも、master以外のbranchで行うのではないだろうか...。ここで言う、first pushはこれをイメージしています。実は、私は初心者なので、知りませんが。

したがって、小さな開発でも、通常、2つのブランチで行い、安定してきたら、それをmasterに取り込む、開発する、安定してきたら、masterに取り込むということの繰り返しで行われると思います。もちろん、これはあくまで好みの問題です。masterにテストを兼ねて、雑にcommit(コミット)、pushを繰り返す人もいれば、色々です。ここでいうcommitとは、対象となるブランチ内の変更履歴の作成のことです。履歴を作成すると、後でそこに戻ることができます。これもgitというツールの一つの特徴です。

私の場合も、それほど注目されていませんので、2つのbranchで開発するような飛び石のイメージと異なり、一本槍という感じで、masterに雑なcommit & pushをしまくります。

ただし、大きいプロジェクトなどの場合は、これがひとつの機能につき、ブランチが2,3個あったりと、枝分かれが大きくなるのが通常です。

gitというのは、そんなイメージ。

でここまでは、開発というか、始動の話でしたが、バージョン管理ということもあって、枝を自由に移動できるのが、gitというツールの特徴です。


###[peco](https://github.com/peco/peco)

端末出力の選択的インターフェイスです。便利です。[percol](https://github.com/mooz/percol)派生のツールです。どちらもめちゃくちゃ使ってましたが、pecoはgolang製。percolはpython製です。好きな方を使えば良いと思います。

###[virtualbox](https://wiki.archlinux.org/index.php/VirtualBox)

virtualboxは必須。しかし、この点で言えば、WindowsやMacのVirtualBoxのほうが圧倒的に使いやすいし、安定している。

だけど、例えば、[Docker](http://www.docker.com/)を使うにしても、Macだと、[boot2docker](http://boot2docker.io/)というよくわからないことになるので、間違いなく、Linuxから使うことをおすすめします。Linuxからだと、virtualbox経由ではないので。


###[openoffice](https://wiki.archlinux.org/index.php/Apache_OpenOffice)

ワードとかエクセルとかです。[LibreOffice](https://wiki.archlinux.org/index.php/LibreOffice)を使っている人も多いです。

###xclip

[クリップボード](https://wiki.archlinux.org/ind)ですが、Linux X11のデフォルトのクリップボードと簡単に連携することもできます。xselとかも有名です。

```bash:
$ xclip -sel c
```

###clipit

クリップボード履歴を利用するためのアプリです。

###strings

バイナリファイルの中身を確認するためのコマンド。

###[jq](http://stedolan.github.io/jq/manual/)

jsonファイルの値を取り出すためのコマンド。

###ffmpeg

メディアファイルを変換するためのコマンド。

###imagemagick

画像ファイルを編集するためのコマンド。

###dropbox

WANのファイル共有サービスのクライアントアプリ。

###fcitx

IME

###spacefm

[ファイルマネージャー](https://wiki.archlinux.org/index.php/File_manager_functionality)です。機能は豊富ですが、扱いは難しいです。ただ、私の場合は、タイル型のデスクトップを利用していますので、統合型(ツリー系)のファイルマネージャーは合っています。

###w3m

インターネットブラウザです。テキストベースなので、端末上で起動します。

###[feh](https://wiki.archlinux.org/index.php/Feh)

画像ビューアです。軽量です。

###firefox

ブラウザは通常、`firefox`をおすすめします。私の場合、USBにもArch Linuxを入れて運用していますが、Chromium, Chrome系のブラウザは遅すぎて動きません。

ただ、Chromiumなどは、Webサイトを作る際に、便利な機能があり、その場合は、Chromiumなどをおすすめします。好みの問題ですが、私は、MacではSafariを使うことをおすすめし、LinuxではFirefoxをおすすめします。

###[dwb](https://wiki.archlinux.org/index.php/Dwb)

軽量のインターネットブラウザです。キーボードのみで操作したいのならこれを使うのをおすすめします。Firefox-Vimperator, Chromium-Vichromeなどの組み合わせよりも順当です。

###補助的に使っているソフト

```bash:
$ yaourt -S xbindkeys xdotool arandr pasystray blueman powertop gimp htop mplayer vlc inkscape gthumb maim handbrack sysstat ufw haroopad atool
```

###[xbindkeys](https://wiki.archlinux.org/index.php/Xbindkeys)

任意のキーバインドを変更できる。特定のキーにスクリプトを割り当てるなども可能。

###xdotool

こちらは、ウィンドウをキー操作するためのツール。特定のウィンドウに特定のキーを送りつけることができる。

###arandr

マルチディスプレイを常用している人に便利なアプリ。設定をスクリプト化してくれる。

###pasystray

[PulseAudio](https://wiki.archlinux.org/index.php/PulseAudio)マネージャー。この前までは、[Alsa](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture)を使っていたのだけど、Bluetoothを使う上では不便だったので乗り換え。しかし、個人的には、Alsaのほうが好きだなあ。

ちなみに、ボリューム調整は、`pamixer`を使うことにしました。

###[blueman](https://wiki.archlinux.org/index.php/Blueman)

これは、Bluetoothを使うときに便利なツールですが、ほとんどのOSには元からはいってる系統のツールかもしれません。

###[vlc](https://wiki.archlinux.org/index.php/VLC_media_player)

これは、動画プレイヤーです。私の場合は、`cvlc`で特定のインターフェイスを使用しています。ちなみに、`rate`は再生速度。

```bash:
cvlc: aliased to cvlc -I ncurses --rate=2.5
```

###[mplayer](https://wiki.archlinux.org/index.php/MPlayer)

音楽プレイヤーです。私は、PulseAudioを使うので、その場合、特別なオプションを設定する必要はあるかもです。

###[powertop](https://wiki.archlinux.org/index.php/Powertop)

バッテリーの消費がわかります。一応、残り時間も算出してくれます。

特に、Linuxの場合は、バッテリー消費量が変化してくることもある(激しく劣化の方向で)ので、見てみると良いかもしれません。

###htop

プロセス管理コマンドです。分かりやすいです。

###gthumb

画像ビューアです。特にディレクトリ指定するときに使用します。

###[gimp](http://en.wikipedia.org/wiki/GIMP)

高度な画像編集するときに使います。メディア系は、[こちら](https://wiki.archlinux.org/index.php/List_of_applications/Multimedia#Raster_editors)のページが参考になります。

###[inkscape](https://wiki.archlinux.org/index.php/Inkscape)

軽度な画像編集するときに使います。

###maim

スクリーンショットです。

###handbrack

GUIの動画変換ソフトです。`ghb`で起動します。動画関連は、[こちら](https://wiki.archlinux.org/index.php?title=List_of_applications&redirect=no#Video_editors)のページ。

###sysstat

プロセス監視ツールです。こんな感じで監視します。

```bash:
$ pidstat -tdwuh
```

###[ufw](https://wiki.archlinux.org/index.php/Uncomplicated_Firewall)

ファイアウォールです。しかし、まずは、[iptable](https://wiki.archlinux.org/index.php/Iptables)からやってみるのが良さそうではあります。あとは、Arch Wikiの[セキュリティツールリスト](https://wiki.archlinux.org/index.php/List_of_applications/Security)を確認してください。

###keepass

パスワード管理アプリです。

###haroopad 

Markdownエディタです。流行ってる...けど使ってなかった。

###atool

解凍、圧縮などを自動的に判別し実行してくれるスクリプト。私も解凍コマンドなどいちいち覚えてないです。

なんとなく思いつくのはこんな感じですが、何かあれば、追記するかもしれません。おすすめのアプリがあれば、教えてください。