新人ITエンジニアが開発現場で戸惑うことが多いコマンド操作。最前線で活躍している経験豊富なエンジニアの中にも、CLI(コマンドラインインターフェイス)の黒い画面に苦手意識を持っている人は少なくないのではないでしょうか。
そこで今回は注目書籍『コマンドラインの黒い画面が怖いんです。新人エンジニアのためのコマンドが使いこなせる本』の著者・kanataさんにインタビュー。エンジニアが知っておくべきCLIの基本知識や、普段の作業がラクになるコマンドプロンプトの便利な使い方について伺いました。
出版社 : 翔泳社 著者 : kanata
kanata(かなた)
青森県弘前市生まれ。シェル芸(コンピュータ上の処理において、各種コマンドをパイプ演算子で繋ぎ、あらゆる調査・計算・テキスト処理をCLI端末へのコマンド入力一撃で終わらせる芸のこと)とサイバーセキュリティと温泉が好き。シェル芸を難読化することが趣味。
なぜコマンドの“黒い画面”は嫌われるのか
kanataさんはエンジニアとしての経験も豊富ですが、どのような業務に携わってきましたか?
システム開発に長年携わってきて、組織の運営や企画、技術の標準化に取り組んできました。その中で、いわゆる“黒い画面”を使ってコマンドを入力するような場面も日々多くあります。また、情報セキュリティの分野にも携わっており、SECCONという大規模な情報セキュリティのイベントで行われるコンテストでコマンドに関わる問題を作ったこともありました。
コマンドに関してかなり多くの経験を積まれているんですね。
実務のみならず、趣味でもコマンドを駆使した"シェル芸"を活用しています。だいぶマニアックですが、シェル芸(※1)をさらに難読化することにも取り組んでいます。
コマンド入力に抵抗を感じる人が多いのはなぜなのでしょうか?
まず、グラフィカルな画面に慣れすぎていて、CLIの黒い画面にギャップや抵抗を感じるからだと思います。私のまわりでも、ビジュアル的に見やすいGUIの操作はできるけど真っ黒なCLIはあまりやりたくないというエンジニアは少なくないですね。
気持ちは分かりますね。 私たちはGUIに慣れきっているので…。
また、黒い画面への恐怖心を生み出しているのはCLIでフィードバックがすぐに返ってこないことも原因ではないかと。GUIの場合は特定のボタンを押すと結果がすぐに分かりますが、コマンドの場合は「実行」と「結果の確認」が別々になっていることがあります。CLIで実行ボタンを押しても何も起こらないので、「どうなったんだろう」と不安に駆られるのでしょう。
何も反応がないと、壊れたのかなと思ってしまいます。別のケースでは、エラーメッセージが出ることもありますよね。
そうですね。エラーメッセージは使い方が正しくない場合だけではなく、コマンドの使い方が正しいときにも表示されます。しかも真っ黒の画面に英語の表示が多いので、ネガティブに感じる方が多いのでしょうね。
「自分が否定された」ように感じる人もいるかもしれませんね。
エラーメッセージが出たとしても、自分を否定されたと思うのではなく「現在の状況を教えているだけ」と捉えて、表示内容を調べてみることが大切です。
エラーメッセージにも意味があるんですね。
はい、まずCLIを怖がらないでいただきたいなと。システムやソフトウェアの開発では、コマンドを使わなくてもできる仕事はたくさんありますが、CLIを避けていると仕事の幅が狭まっていく可能性も。CLIは最初の一歩目をクリアしてしまえばそんなに難しくないので、まずはやってみることが大切です。
CLIは開発のトラブル時にも活躍
CLIには具体的にどんな利点がありますか?
大きく次の3つがあげられます。1つ目は、少ないリソースで操作が行えること。古くてスペックの低いパソコンでも、軽快に待ち時間なく動かせるのがCLIの強みです。2つ目は、作業の手順を簡単に記録・共有できること。例えば、グラフィカルな画面で手順を説明しようとすると、画面のスクリーンショットをExcelなどに貼って、押す必要のあるボタンを赤枠で囲むなど、かなりの工数がかかります。そんなときにCLIを使えば、コマンドをコピーして送れば一瞬で完了します。
システム開発を進める上でのトラブルやエラーなど、いざというときの調査もスムーズに進められそうですね。
はい。そして3つ目のメリットは、昔作ったものでもそのまま動かせること。GUIの場合は時間が経つと作り直すことも必要になりますが、CLIはメンテナンスをあまり必要としないので30年前に作られたコマンドプロンプトでの操作が、今でもそのまま使われているケースが数多く存在します。自動化にも組み込みやすい技術です。
CLIには多くのメリットがあるんですね。ちなみにコマンドの使い方がわからないときはどうすればいいんですか?
コマンドの使い方を確認できるコマンドが用意されているので、実行すれば仕様や使い方がCLI上に表示されます。次のいずれかの方法で、ほぼ全てのコマンドの公式情報を参照できます。
わからないことがあったら公式の情報源でコマンドを調べて実行することを強くおすすめします。というのも操作に失敗した時に、誰かに説明する必要があるためです。その際、公式以外のサイトでコピペした情報では適切なコミュニケーションが取れません。公式のドキュメントであれば、それを元にチーム内で意見を出し合うこともできるので、ぜひ公式情報を参照するようにしてください。
公式のドキュメントを確認するのが大切なのは理解できましたが、内容が難しいこともあると思います。そういうときにインターネットで調べるコツも教えてください。
Googleなどの検索エンジンでは、シェル名(PowerShell やMS-DOS、bash)とOS名(WindowsやLinux)を合わせて検索するのがポイントです。また、Linux限定になりますが、シェル名やOS名の代わりに、「manpage」と入力することで目的の情報をさらに探し出しやすくなります。その際の注意点として、「-」からはじまるテキストを使わないようにしましょう。コマンドオプションの先頭が「-」で表現されることが多く、「-」からはじまるテキストで検索したくなるのですが、Googleなどの検索エンジンでは、「-」からはじまる言葉を検索から除外する条件が設定されています。
コマンドをつなぎ合わせれば何でもできる
コマンドはそれぞれのOSでなぜ統一されていないんでしょうか?
これにはOSの進化の歴史が関係しています。Windows、Linux、macOSなどのOSは、その時点で元々存在していた他のOSを参考にしたり流用したりして作られています。そして、さまざまなOSの祖先ともいえるのがUnixです。Unixとの互換性を意識してLinuxというオープンソースのOSも作られ、日常生活の多くの場面で使われています。コンピュータシステムや各種のサービス開発においても、Linuxを利用するのが主流です。
Linuxのシェル操作は、コマンドプロンプトやPowerShellと異なりますか?
Linuxでも他のOSと同じ操作ができます。ただ、たくさんのコマンドが用意されているので目的のコマンドを忘れてしまうことも。そんなときには、aproposコマンドが役立ちます。aproposに検索ワードを指定すれば、関連するコマンドを調べてくれます。例えば、ファイルをコピーするコマンドを調べる場合は次のように進めます。
ここまで教えてもらえれば、目的のコマンドを見つけられそうです!Linuxのシェル操作で特に便利な方法があれば、そちらも教えてください。
コマンド同士をつなぎ合わせて、一つのコマンドをもとに別のコマンドを処理する「パイプ」という手法がとても便利です。これは多くのエンジニアが日常的に使っている手法ですが、コマンドの処理結果が次のコマンドにパイプを通って渡されるようなイメージです。
パイプを使うことでファイルの行数を一瞬で数えたり、特定の言葉が含まれる行を抽出できたり、活用方法は無限大です。習熟すれば本当に何でもできる技術なので、普段コマンドを使わないエンジニアの皆さんにもぜひ試していただきたいですね。
たった一行のコマンドで業務効率アップ
Linuxのコマンドでどのように業務効率化できるのか、具体的な内容を教えてください。
まず便利なのは電卓を使わなくても四則演算ができることです。Windowsの電卓ソフトなどでは、途中でどこまで足したのかわからなくなり、最初からまたやり直しになることが起きがちです。コマンドを使うと、計算式を確認でき、かつ結果が一瞬でわかります。計算はシェルの種類の一つであるbashの機能で行い、計算結果を表示するためにechoを組み合わせます。書式は次の通りです。
記号で囲まれた箇所に、次のように数式を入力すれば計算結果が簡単に表示されます。
電卓の場合は、途中で打ち間違えたときに最初からやり直す必要がありますが、コマンドの場合は戻って修正するだけで完了します。
CLIの方がかなりラクですね。引き算やかけ算も利用できるんですか?
もちろんです。「−(減算)」「*(乗算)」「/(除算)」「%(剰余/割り算の余り)」などの記号が使えます。ただし、このときに注意が必要なのは小数点以下が切り捨てられること。小数点以下の計算が必要な場合は、テキスト処理に適した簡易なプログラミング言語「awk」を使うのがおすすめです。他のプログラミング言語と比較して文法が容易なのでコマンドのように使えます。
コマンドと「awk」を合わせて使うと便利ですね。他にも便利なテクニックはありますか?
CLIを活用してフォルダをZIPファイルにバックアップするのが便利です。失敗したときに備えてバックアップを取るのは、皆さんも普段から行っているのではないでしょうか。Windowsでは右クリックでコンテキストメニューを表示すれば「ZIPファイルに圧縮する」という機能を使えますが、CLIでもzipコマンドを使えば簡単に実行できます。書式は次の通りです。
この書式を元にbackup.zipを作成する例は以下になります。textdataディレクトリの中身も含めて全部圧縮した結果が表示されています。テキストファイルがいずれも元のサイズの半分程度に圧縮されたことがわかります。
別のツールを使う必要がないので便利ですね。
コマンドでやりたいことがあれば、ChatGPTに聞いてみるのも一つの方法です。コマンドはChatGPTとの相性が良く、ざっくりした内容を質問しただけで使えるコマンドを表示してくれることが多いです。ただしハルシネーションも起こるので、何も疑わずそのまま業務で使うのはリスクがあります。どういう処理を行っているか理解した上で使ってみて、その精度を確かめながら活用範囲を広げていくのが良いと思います。
忘れがちなルーティン業務を自動化
コマンドを使って日常の業務を自動化する方法もありますか?
数値の集計やメール送信、在庫チェックなどのルーティンワークは「シェルスクリプト」を使って自動化できます。シェルスクリプトは、実行したいコマンドを順番に書いたものです。書いた順番どおりに実行してくれます。他のプログラミング言語と比べても比較的簡単に習得でき、複雑な作業にも十分対応できます。
簡単に使えるのはうれしいです!実例を教えてください。
実務に役立つ実例として、チェック先のサーバーのサービスが稼働しているかどうかをチェックするシェルスクリプトをご紹介します。例えば、翔泳社のサイトのWebサービスが稼働しているかどうかは、翔泳社のドメインに対してhttps(ポート番号443)に接続できるかどうかで確認できます。応用的な内容ではありますが、一般的なプログラミング言語に比べて平易な文法なので、参考にしていただければと思います。
実行することで、各接続先の状態が表示されていますね。
はい、存在しないドメインの場合は「Name or service not known」というメッセージが表示されます。このように同じ操作を繰り返す作業は、シェルスクリプトを活用することで作業を大幅に効率化できます。他にも普段の実務で効率化できる作業として「起動中のDockerコンテナを全て停止」「AWSの課金額を毎日通知する」などが挙げられますが、それ以外にもあらゆる業務に活用できます。
それぞれの業務に合わせて柔軟に使えそうですね。忘れがちなルーティン業務を自動化できるのは助かります。
エンジニアの多くが経験するCLIの失敗例
CLIを使用する上で、注意するべき失敗例も教えてください。
CLIの失敗例をエンジニアにヒアリングすると山のように出てきて、それだけで一冊の本が書けるほどのエピソード量です。書籍に掲載しているのはその一部で、泣く泣くカットしました(笑)。
その中でも特によくあるのはどんな失敗ですか?
本当によくあるのは、rmコマンドで大事なファイルを誤って削除してしまうことです。rmコマンドは、ファイルを削除するコマンドで次のように使います。
rmコマンドで事故が起こるのは、次のようなケースです。
・作業で「data」というファイルを作ったものの、不要になったので削除したい。
・カレントディレクトリには「dat」と「data」というファイルがある。
・「dat」というファイルはなくなると困る重要なファイル。
CLIを使って「data」を削除するということですね。
はい、CLIで次のような操作をするときに注意が必要です。bashにおいて「Tab」キーはコマンドの入力を補完してくれる機能があります。
1 プロンプトに「rm d」まで入力。
2 [Tab]キーを入力して「data」を補完
3 「rm data」コマンドを[Enter]キーで実行。
事故が起こるのは②と③のタイミングです。入力した内容が「data」に補完されず「dat」に補完されることがあるんです。そのことに気づけば悲劇を防げますが、そのまま[Enter]キーを叩いてしまうと結果的に「dat」が削除されて「data」だけが残ってしまうことに。Linuxの仕組み上、消したファイルを元に戻すのはかなり困難です。
大事なファイルを消してしまうのはダメージが大きいですね…。何か対策はないのでしょうか?
いくつか予防策が考えられますが、まず「-iオプション」をつける方法があります。「-iオプション」をつけると削除前に確認が入ります。そこでyを入力して[Enter]を押すことで削除されます。
こまめなバックアップと合わせて使うと良さそうですね。
最初のうちは慣れないこともあるかもしれませんが、CLIやコマンドはITのトレンドに左右されることなく長年使える技術の一つです。インフラシステムからアプリの開発まで、あらゆる現場で幅広く使えるスキルなので、ぜひ怖がることなく積極的に利用していただければ嬉しいです。
ライター
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから