おはようございます! Advent Calendar言い出しっぺの響音カゲです。

今回はCLIについて、どんな便利なことができるのか? そんなに怖がらなくてもいいよ! みたいなことを書きます。

黒い画面、プログラマーでも苦手意識ある人もいると思います。特にゲーム系目指してる学生で、Windowsしか触ってきませんでした! って人とかは、


  • エディタはVisual Studio

  • ビルドはUnityがやってくれる

  • Git操作はSourceTreeしか使ったことない

って人が少なからずいて、中にはコンソール見るだけで手を上げて退散って人もいるかと思います。

黒い画面が怖い理由は「何をやったらいいか分からない」に尽きると思います。

しかし、想像に反してhelpコマンドとエラーメッセージを読むかググればどうにかなることがほとんどです。ちょっとずつCLIに慣れていきましょう。


CLIってそもそも何?

CLI(Command Line Interface)はその名の通り、コマンドでデータの入出力を行うインターフェースのことを指します。それに対して、非プログラマーが使うほとんど全ての画面はGUI(Graphical User Interface)です。

では、なぜプログラマーはわざわざGUIがあるにも関わらず、CLIを使うのでしょうか?


CLIを使う理由1: コマンドを組み合わせられる

GUIのソフトを組み合わせるのはとても難しいです。例えば、メモ帳とPowerPointを組み合わせることは基本的にできません。

それに対して、CLIのソフトはコマンドの入出力を簡単につなぎ合わせて、組み合わせることができます。

例えば、ファイルの中身を表示するcatコマンドと、後ろ10行を切り出すコマンドtail -n 10を組み合わせる場合は|(パイプ)を使います。

> cat Makefile | tail -n 10

composer:
ifndef COMOPSER
cd src; ./install_composer.sh
endif

.PHONY: gvm
gvm:
ifndef GVM
cd src; ./install_gvm.sh
endif

この結果をさらにgrep cで、cを含む部分だけを抽出することもできます。

> cat Makefile | tail -n 10 | grep c

composer:
cd src; ./install_composer.sh
cd src; ./install_gvm.sh

このように、コマンドを知っていれば知っているほどたくさんの組み合わせが使えるようになります。

GUIはそのソフトのできる範囲内のことしかできませんが、CLIの場合は「組み合わせ爆発」により、色々な用途に合わせて組み合わせることができます。これは「検索」や「自動化」にとても役立ちます。


CLIを使う理由2: 自動化できる

例えば、ファイルを開いて中に日付を追記し保存するということをしましょう。

GUIの場合、


  1. メモ帳を開く

  2. ファイルを開く

  3. 日付を追記する

  4. ファイルを保存する

とします。

それに対して、CLIでは


date >> file.txt

と書けます。

GUIの場合、マクロなどで自動化できるかもしれませんが時間を指定して動かすことは難しいでしょう。

それに対して、CLIの場合は時間を指定して動かすためのDaemonという仕組みととても相性が良いです。というのも、Daemonはコマンドを時間などのきっかけで実行する、ということをするだけだからです。

コマンド化するまでが大変ですが、逆に一度コマンド化してしまえば二度と同じ作業をせずに済みます。ほとんどの場合、1ヶ月もあれば元が取れます。


CLIを使う理由3: プログラマー向けのソフトはそもそもCLIが多い

世界で最も有名なバージョン管理ソフトgitや、C言語のコンパイラgccclangは全てCLIのソフトです。

Webフロントエンドでは、パッケージ管理ソフトnpmyarn🐈もCLIのソフトですし、create-react-appvue(vue-cli)やng(Angular v4)もCLIです。jestgcloudもCLIのソフトですね。

これらにはGUIのインターフェースがある場合もありますが、元々CLIで使うことを想定されているので不具合があったり遅かったりします。

例えば、GitにはSourceTreeやGitKraken🦑といったGUIのクライアントがありますが、これらは結局内部でGitのコマンドを叩いているだけなので少し遅く、不安定なときもあります。

もちろん、GUIの方がログが見やすいなどの利点もあります。しかし、CLIのソフトはCLIのまま使ったほうが本来の力を発揮できることが多いですので、両方使えるようになっておくことに越したことはありません。

また、トラブルが発生したときはCLI操作を余儀なくされる場合も多いです。


まとめ

CLIの利点は


  • コマンドを組み合わせられる

  • 自動化できる

  • プログラマー向けのソフトと相性が良い

という点が挙げられます。ぜひちょっとずつでも慣れていきましょう🙋

次回: 初心者のためのターミナル環境構築(Win・Mac・Linux対応)

次々回: 使う順! 初心者向けコマンド一覧