新年度となり、新規プロジェクトがはじまったり、所属チームが変わったりと、変化の多い季節ですが、そろそろ皆さん慣れてきたでしょうか。4月から、新入社員として働き始めた方もいらっしゃるかもしれませんね。せっかくの新年度。新人エンジニアや、何か新しいことを始めたい方にオススメなのが、Linuxの学習です。
Linuxは、オープンソースのOS(オペレーティングシステム)であり、そのシェアの大きさから、多くのエンジニアにとって「一番身近な存在となるOS」の一つです。
クライアントパソコンとしては、WindowsやMacを使っている人が多くても、サーバーとしてはLinuxにお世話になっている人がほとんどでしょう。
今回は、そんなLinuxと、どんな距離感で付き合っていけばよいのか?というお話です。そんなに小難しいことを言うつもりはないので、「 Linuxナンモワカラン」皆さんも気楽に読んでくださいね。
クラウド&Dockerの時代でもLinuxって必要なの?
ここ数年、サーバー構築を専門とするエンジニアでなくとも、AWSをはじめとするパブリッククラウドやDockerなどのコンテナ技術を学ぶ人が多くなりました。それ自体は大変嬉しいことなのですが、SNSなどで、皆さんの様子を見ていると、すこし難しいと感じてしまう人も多いようです。
これは、多くの場合で、AWSや、Dockerが難しいからではなく、サーバーやLinux、ネットワークに関する知識不足が原因です。
そもそも、「 AWSやDockerとは何か」と言えば、AWSは、「 サーバーなど一式を貸してくれるレンタルのクラウドプラットフォーム」 、Dockerは「隔離されたプログラムの実行環境を用意するソフトウェア」です。
そしてどちらも、「 サーバーを用意するのに便利だからよく使われるもの」なのです。
サーバーとは、「 server」の名のとおり、何かサービス(service)を提供するものを指します。メールサーバーならメール機能を提供するサーバー、WebサーバーならWebサービスを提供するサーバーです。提供するサービスによって「●●サーバー」と呼ばれます。
つまり、「 サーバーを立てる」ということは、「 何かサービスを提供する仕組みを作りたい」と同じ意味なのです。具体的に言うと「このシステムを構築したいから、そのためには、Webサーバーを立てなければならない」「 社内でメールを運用したいからメールサーバーをたてなければならない」といったように、まず、「 ○○をしたい」という目的があり、そしてそのためにたてられるものです。
なんだ、そんなの当たり前じゃないか、と思われるかもしれませんが、これこそが、あまりサーバーやネットワークに詳しくない人が、AWSやDockerの学習で躓いてしまうポイントなのです。「 ○○をしたいから●●サーバーを立てたい」「 ○○できるような環境を作りたい」といった目的もなく、とりあえず操作方法だけを学ぼうとしても、なんのためにこの設定をするのか、どうしてこの操作をするのかを理解するのは難しいでしょう。
ですから、少なくとも、「 サーバーとはどういったもので、どのような特徴があって、構築のために何をしなければならないか」という知識は必要です。
また、プロジェクトで必要とされる条件は、一つ一つ違います。
例えば、皆さんの持っているスマートフォンにインストールされたアプリは様々です。人気のゲームを入れている人も居れば、そうでない人も居ます。年齢や性別、会社が同じであっても、お互いに見比べてみると違うことも多いでしょう。同じ人でも、機種変更するたびに、アプリが減ったり増えたりしていきます。
それと同じように、似たようなプロジェクトであっても、「 これを採用することが多い」という傾向はありますが、プロジェクトによって望まれるサーバー構成は違います。台数も違えば、選択するOSやソフトウェアも違います。また、ソフトウェアをデフォルトのままで使うこともあれば、カスタマイズすることもあります。そして、こうした調整をするためには、Linuxの知識が必須です。
ですから、AWSやDockerを使っていても、自分たちのプロジェクトのためにサーバーを用意するには、必ずLinuxやサーバー用ソフトウェアの知識が必要になるのです。
時々、Linuxでのサーバー管理・運用を古い技術だと極論を述べる人も居ますが、それはあくまで「サーバーやLinuxについて基礎知識がある前提」での話です。技術の進化により、重用される技術に移り変わりはありますが、「 基礎・基本」はいつの時代も変わらないのです。
ただ、学ぶ順番はどちらでも良いと思います。実際に動くものから入った方が向いている人も居れば、座学から入った方が理解できる人もいるでしょう。AWSやDockerをまずはさわってみて、その後にLinuxを深掘りしても良いですし、Linuxでサーバー構築の基礎を学んでから、クラウドに移行するのも良いです。
最終的に同じ知識が身につけば良いのです。
そもそもサーバーって何なの?いつものパソコンとは違うの?
サーバーとは、どんなもの?パソコンとどう違うの?と問われた時に、意外にきちんと答えられる人は少ないかもしれません。仕事でよく使っていても、「 なんとなく仕事を始めたらそこにあって、なんとなく操作方法を知って、なんとなく使っているもの」というくらいの認識でサーバーと付き合っているエンジニアも多いでしょう。
それでも良いのですが、ちゃんと知っておくと、新技術が出てきた時にも理解しやすくなるので、整理しておきましょう。
まず、「 サーバー」は、「 何かサービスを提供するもの」と先に書いたとおり、サービスを提供する役割のパソコンです。他のパソコンがアクセスして来たら、応答するのが仕事 です。Webサーバーなら、ウェブページのファイルを置いておき、他のパソコンが「それを見たい!」とアクセスしてきたら、ファイルを渡してあげる仕事をしています。メールサーバーなら、メールを送ったり、渡したりしています。平たく言うと、皆でネットワークごしに共同で使うパソコンがサーバー です。
そして、サーバーは、普段、皆さんがクライアントパソコンとして使っているWindowsや、Macのパソコンと大きな違いはありません。
そういうと、「 そんなはずはない!サーバーは特殊ななにかすごいものだ!」と思われるかもしれませんが、それは幻想です。「 サーバー」は、あくまで「何を提供する」という役割の意味しかないので、特別なものではありません。どんなパソコンであっても、「 何かを提供する=他のパソコンがアクセスしてくる」という役割であれば、それはサーバーと呼ばれます。マシンや、ソフトウェアは、皆さんがいつも使っているクライアント(デスクトップ、サーバーから提供される側)と大差ないのです。
例えば、「 サーバー用マシン」というと、無骨な見かけの大きなマシンを想像する人も居ますが、それはあくまで、「 サーバーとして使うのに向いているマシン」というだけであって、それを普段使うパソコンにしても良いのです。ちょっと音がうるさくて、机の下で邪魔になりますが、個人の好みです! 逆に、普段使っているパソコンを、サーバーにすることもできます。ソフトウェアに「●●サーバー用ソフトウェア」が存在するので、それを入れたらサーバーになります。
Linuxはサーバー用なの?黒い画面は必須なの?
このような定義なので、サーバーによく使われているLinuxも、「 サーバー専用OS」というわけではありません。
あくまで、「 サーバーとして使う時に、使いやすいサーバー用が存在する」というだけです。デスクトップ版と呼ばれるクライアント用に調整されたOSもありますし、そもそもサーバー用OSであっても、クライアントとして使っても構わないのです。
ただ、「 サーバー用」と謳われている場合は、サーバーとして使われることを前提としているので、クライアントとしては使い勝手が良くないです。
特に、皆さんが心配なのは、いわゆる「黒い画面」でしょう。
映画やドラマなどで、ハッカーが何かしているシーンでは、必ずといって良いほど、黒い画面が表示され、ハッカーも何かをパチャパチャと打ち込んでは唸っています。職場でも、サーバーをいじっている先輩の画面をのぞき込むと、似たような黒い画面になっているかもしれませんね。
この黒い画面は、「 CLI(Command Line InterFace) 」と呼ばれるもので、皆さんに馴染みのある、マウスやタッチでの画面操作が登場する前は、皆このような画面で操作していました。
普段、皆さんがソフトウェアを起動する時には、アイコンをクリックやタップして起動しますが、CLIでは、ソフトウェアを起動する命令を文章で打ち込んで起動します。他の操作も同じで、フォルダを開くときにも、サーバーの電源を落とす時にも、すべて文章で命令をします。これをコマンドと言います。
コマンドでの操作は、マウスでの操作に比べると、あまり直感的ではないと感じる人が多いため、取っつきにくいのは事実です。ただ、実際は「cd
」「 cp
」などの短いコマンドに続いて、対象のディレクトリ名(フォルダ名のこと)を打ち込むだけなので、知ってしまえばそんなに難しくありません。
例えば、ディレクトリ(フォルダ)を新規作成するコマンドは、「 mkdir
」です。make directoryの略なのですが、「 nyanko」というディレクトリを新規作成するなら「mkdir nyanko
」と打つだけです。意外と簡単でしょう?
面倒ではあるのですが、面倒なだけだとも言えます。
また、サーバーの特性上、( Linuxでは一般に)CLIが望まれますが、最近ではマウスでグラフィカルに操作できるGUI(Graphical User Interface)を導入している現場もあります。その場合は、ある程度の操作をGUIで行えます。
ですから、そんなに不安がることはないのです。CLIでポチポチコマンドを入力して学んでも良いですし、まずはGUIで慣れてから、コマンドを覚えていくのも手です。
「覚えて」と書きましたが、暗記する必要だってありません。実際の本番サーバーで、すべてを暗記で操作するのは危険ですから、大概は手順のメモを見ながら操作します。求められるのは、暗記力ではなく、「 適切な操作方法を書き出せること」と、「 正確に操作できること」なのですから、しっかりと理解することが肝要です。
ディストリビューションと学習環境
そろそろ「よし、じゃあ、Linuxをちょっと勉強してみよう!」という気分になってきた頃ではないでしょうか。
最後に、学習方法についてまとめておきましょう。
まず、学習をしたい時に問題になるのは、以下の2点でしょう。
ディストリビューションは何を選ぶのか
学習環境をどう用意するか
ディストリビューション(distribution)とは、簡単に言うと、Linuxの種類です。
ここまで簡単に「Linux」とだけ説明してきましたが、実はLinuxには種類が色々あります。
皆さんに馴染みがあるのは、Red Hat社(レッドハット社)が有償販売しているRed Hat Enterprise Linux(RHEL)と、Debian(デビアン)をもとにCanonical社(カノニカル社)が開発を主導するUbuntu(ウブントゥ)でしょう。どちらも開発の現場でよく使われています。
RHELとUbuntuは、どちらもLinuxではあるものの、思想が大きく違います。ただ、コマンドは、おおよそ同じなので、片方を理解できれば、もう一方も理解は早いです。
ディストリビューションは、どれが優れているという性質のものではなく、それぞれの得意不得意やプロジェクトの性質に応じて、選ぶべきものなので、最初の一歩にどのディストリビューションを選択するかは、「 自社で使っているもの」や「プロジェクトで使っているもの」を選ぶと良いでしょう。これからエンジニアになる駆け出しさんなどは、「 周りに使っている人が居るもの」や「情報を入手しやすいもの」を選ぶのも良策です。
Ubuntuは無償ですが、RHELは有償です。RHELを学びたい時は、互換OSのAlmaLinux(アルマリナックス)やRocky Linux(ロッキーリナックス)を選択すると良いでしょう[1] 。
学習環境は、何か古いWindowsパソコンを入手して、上書きとしてLinuxをインストールしてしまうのが速いですが、それはちょっと面倒だと思われる方もいらっしゃるでしょう。
その場合は、VirtualBox(バーチャルボックス)やVMware(ブイエムウェア)などの仮想化ソフトウェアを使用したり、WSL2(Windows用のLinux OS実行環境)を使うのも良いでしょう。また、Dockerなどのコンテナや、AWSなどのパブリッククラウド、VPSのレンタルサーバーを利用する方法もあります。
ただ、仮想化ソフトウェアやVPSのレンタルサーバー以外の方法は、実際のLinuxとは異なる部分も多いので、しっかり学習したいのであれば、中古パソコンか、仮想化ソフト、VPSのレンタルサーバーがおすすめです。
特に、Webサーバーの公開など、実際に通信もしてみたいのであれば、中古パソコンか仮想化ソフトで慣れてから、VPSを借りると、より実践的に学習できるでしょう。
気楽にLinuxをはじめよう
勉強というと、嫌になってしまったり、なかなか重い腰があがらないということになりがちです。特に、「 仕事のために」と考えるとやる気もでないかもしれません。
しかし、実際にやってみると、そんなにツマラナイものではありません。特に、Linuxの学習は、単純なコマンドを入力するだけで、すぐにファイルが作れたり、フォルダ(ディレクトリ)が作れたりと、成果が目に見えるので、なかなか面白いのではないかと思います。
最初のうちは、よくわからないかもしれませんが、それでもいいじゃありませんか。
本番で使うとなると、セキュリティなど色々考えねばなりませんが、学習というのは、極めてパーソナルなものです。失敗しても、誰にも迷惑をかけるわけでもないですし、飽きたらちょっとお休みしたっていいのです。気楽にはじめて、ちょっと触ってみて、「 なんとなくこんなものか」と感じるのも、立派な勉強です。
Linuxに興味がある人だけでなく、AWSやDockerの学習で躓いている人も、ちょっとはじめてみてください。きっと楽しいはずです。