前回の続きでシステムの基本用語について説明していきます。SE をこれから目指す方向けの用語説明記事は今回で最終回となります。
システム構成図のサンプルを以下に再掲します。
今回はこれまで説明していなかったIDE、構成管理、クラウドについて説明します。
IDE
読みはそのまま「アイディーイー」でよいです。IDE(Integrated Development Environment)は統合開発環境と呼ばれ、「環境」とついてますが、プログラミングを補助する機能を備えたソフトウェアのことです。
言語を IDE に設定しておくことで、コード補完(変数名やメソッド名の候補を表示する、括弧を入力すると閉じ括弧が自動で入力される、など)を行ったり、ビルドを実行することも可能です。後述する構成管理ツールを操作したり、データベースに接続してレコードを参照する、なども可能で、「統合開発環境」の文字通り、これひとつで開発がひと通りできる、というスグレモノです。
代表的なものに、VSCode、Xcode、Eclipse、その他には JetBrain 社が提供する言語ごとに特化した IDE 各種(InteliJ、PhpStorm、Pycharm など)があります。言語によりますが、サーバサイド言語を開発するのであれば、VSCode ひとつあれば充分です。
蛇足ですが、業務上口頭で「IDE は何を使っていますか?」と言うと、大抵は「はいっ!?」となります。これは「アイディーイー」といきなり言われてもピンとこない(発音のせいでしょうか)ことが多く、IDE を知らない SE が多いということではありません。そのため、ちょっと面倒でも「開発ツール」という言葉に置き換えましょう。文字でのやり取りであれば、IDE で問題ありません。
構成管理
構成管理という言葉自体はひとつの概念であり、プログラムを任意の状態で記録することで、問題が発生した場合即時に元に戻すなど、特定の状態を再現可能とします。それを実現するツールが構成管理ツールであり、代表的なものに、Subversion と Git がありますが、実態としては Git 一択と理解して問題ありません。逆に Subversion(SVN)を使っているプロジェクトや企業は避けましょう。Subversion が何かを知る必要も特にありません。どうしても必要になった場合、Git と何が違うのかを確認する程度で問題ありません。
また、Git にはチームで共有する場所(リモートリポジトリと言います)が必要ですが、多くの場合クラウドのサービスを利用します。サービスの代表格としてはなんと言っても GitHub です。ほかにも GitLab、Bitbucket がありますが、これらは Git による構成管理の技術をベースにしながら、チーム開発に便利な機能を提供するサービスという点では共通です。GitHub = Git ではないのでご注意ください。
Git の技術は開発においては特定のプログラミング言語より寧ろ使用頻度が高く、システム開発におけるデファクトスタンダード(事実上の標準)と理解してください。本ブログではプログラム習得の前提として Git を学習し、プログラムの学習に Git を使いながらプログラム管理することを推奨しています。
クラウド
クラウドとは
クラウドについては詳細に説明すると本一冊になるほどのボリュームがありますので、ここでは極力概念的なところにとどめます。クラウドをとても簡単にいうと IT 機器やシステムを提供するサービスです。この場合の提供とは仮想的なレンタルのことで、クラウドを契約することにより、巨大なマシン郡の一部を間借りしてオンラインでアクセスすることが可能となります。ブログを作成するためにレンタルサーバを契約することがありますが、それの拡張版と理解して OK です。
かつて企業では、例えばホームページやシステムを構築する際、サーバ用の PC を購入して自社の敷地内に設置してメンテナンスをしていました。この状態をオンプレミスと呼びます。
この状態でインターネット公開する場合、ユーザは最終的にこの企業内のサーバにアクセスすることになります。現在でもこの形態で運用している企業も多く、特にセキュリティ要件の厳しい業種では当面この状態が続くと予想されています。
これに対しクラウドはクラウド提供事業者が用意するサーバに契約者が利用する領域が任意で割り当てられます。
この場合ユーザはもちろん、契約している企業ですら、自分たちのサーバがどこにあるのかわかりません。裏を返せば、それを意識することなく利用することが可能となります。
クラウドの種類
クラウドには提供するサービスに幾つか種類があります。種類が多いので、大枠だけ説明します。但し、クラウドの種類は概念的なものであり定義が曖昧であることをご了承ください。
IaaS
IaaS(アイアース、或いはイアース)は Infrastructure as a Service の略で、OS とハードウェアを提供することです。そのうえに何を構築するかは契約者の自由で、単純なストレージサービス(ファイルを保管するためのサービス)も IaaS に該当します。
PaaS
PaaS(パース)は Platform as a Service の略で、IaaS に加えて、システム開発するためのプラットフォームを提供することです。具体的にはクラウド 3強の AWS(Amazon Web Service)、GCP(Google Cloud Platform)、Microsoft Azure(アジュール)が提供しているメインサービスです。
ハードウェアと OS に加えて、一通りのプログラムの動作環境やデータベースなど、システムに必要なものを丸ごと提供します。
SaaS
SaaS(サース)は System as a Service の略で、完成されたソフトウェアやシステムをクラウド上で提供することです。具体的には Microsoft 365 の各製品、上記の GitHub などが該当します。すでに完成されているので、利用者は提供された機能をそのまま使うことが可能です。
システムのクラウド化はここ数年で一気に加速しました。なぜここまで普及したのでしょうか。クラウドの具体的なメリットは以下の通りです。
- 物理マシンを購入する必要がなく、初期導入コストを抑えられる。また場所を取らない。
- 物理マシンは事業者がメンテナンスするため、ハードウェアの老朽化に対応する必要がない
- OS やシステム開発に必要なソフトウェアのインストールが不要で即利用可能
- サーバが分散されているため、緊急で停止する可能性が低い(逆にクラウド事業者の都合で停止する可能性がある)
- 通信量に伴い料金が発生する(従量課金制である)ため、通信量を工夫することで月々の料金を抑える工夫ができる
デメリットは上記にもあるように事業者の都合で(或いは事業者がやっちゃった場合)思いもよらない損害を受けかねないという点です。また、クラウドはモダンな環境が整備されているため、レガシーなシステムだとそのまま移行できない、或いは稼働済みのシステムでもプログラミング言語などのバージョンアップを強制されることがある、ということもあげられるでしょう。また、物理マシンを共有するため、セキュリティの問題が指摘されますが、具体的に大きな問題となった事例は現在確認できていません(あったらごめんなさい)。ただ、それを持っても充分補って余りあるメリットがクラウドにはあります。ハードウェアのメンテナンスというのは非常に手間がかかるうえ、電化製品同様、本当に必要な場面で大破することが往々にしてあるためです。
蛇足ですが(最近蛇足ばっか)、現代は多くの人がミニマルになった時代だと思います。直接の原因は専門でないのでわかりませんが、膨大な種類のサブスクリプションやシェアサービスがあり、勢いは止まりません。システムも共有の時代に入ったということなのでしょう。必要なものを必要なだけ利用する、なんとも現代的ですね。
現在のモダンなシステムでは冒頭の図のように、クラウド上にシステムを構築することがほとんどです。クラウドの操作性はコマンドベースかブラウザベースのため、大きな違いはありません。これからクラウドを学習するという方で特に理由がなければ AWS か GCP の無料枠を使うのがよいと思います。
ここまででシステムに必要な技術は概ねおさえられたのではないでしょうか。実際の開発にはファイル転送ツールやコンペアツールなどもあるのですが、枝葉の話になってしまうので、まずは大枠を理解し、詳細に向けて学習を進めたほうが理解が早いでしょう。