IPアドレスとドメインとDNSの関係

ウェブサービスアプリが動く仕組みについて話していこうと思います。早速ですけど皆さんに質問ですYouTubeを見ているといつも面白い動画が並んでいます。どのような仕組みで動いているか説明できますか?

ウェブサービスの中で各技術がそれぞれどのような役割を持っているのか全体感を理解しましょう。

ITやテクノロジーに断片的になんとなく知っていても、全体がどんなふうに関わり合って動いているかと言うことを知る機会があまりないと思います。今回はそれを理解してもらいます。

リクエストとレスポンスについて

インターネットサービスはサーバーと通信をしています。サーバーについて後で話します。まず皆さんが持っているパソコンやスマホからサービスを見ようと思ったら、リクエストと言うものが送られます。サイトを見たい場合はサイトを見せてと言うリクエストをするわけです。そしてリクエストに応えて情報を返すことをレスポンスといいます。情報を要求する側をクライアントサイド、情報を返す側をサーバーサイドと呼びます。ウェブサービスやアプリは必ず何かリクエストを送り、それにレスポンスを返すことを連続で行われているわけです。リクエストを送るという話をしましたが、どこに送っているんでしょうか?地球上のどこかにそのサイトとかサイト情報を保管しているところがあって、そこに送って入るはずですけども、その場所って知らないですよね?知らないのに皆さんは普段リクエストを遅れているわけです。ここにはちゃんと仕組みがあります。手紙と同じように何か送るにはその住所が必要です。どこに送るかという住所がこのインターネットサービスの世界にもあるのです。それがIPアドレスと言うものです。リクエスト送る際のサーバーの住所みたいなものです。

住所だったら何町に行く、何番何号みたいな感じですけども、IPアドレスは数字の羅列です。でもあなたが知っているIPアドレスってありますか?例えばFacebookのIPアドレスは「31.13.82.1」なんですけどもこんな数字を打ち込んだことないですよね。実際に証拠としてこのIPアドレスを打ち込んでエンターをと押してみるとサイト見れるんです。でもこんなことほとんどの人がやったことなくて、あなたがよく知っているのは英字で構成されたhttps.comこっちだと思います。これをドメインと呼びます。数字の列であるIPアドレスに人間がわかりやすいようにつけた別名です。このIPアドレスと数字の羅列を変換することを名前解決といいます。この名前解決は重要で、英語羅列のドメインだけでは住所ではないのです。あくまでも別名なのです。意識する事はないと思うんですけども、名前解決を必ずやっているんですよ。どうやって名前解決をしているのかというと、ドメインネームシステム(DNS)というものがあります。

これは言ってしまえばインターネット上の電話帳みたいなものです。「Facebookの住所ってどこにあるの?」って聞いたら「ここにあるよ。」と教えてくれるシステムがあるんです。サーバーにリクエスト送る前にはこの名前解決を行っています。Facebookの情報を見たいと思ったらまずDNSがここにあるよと住所を教えてくれます。これがIPアドレスであす。ところで皆さんドメインって買ったことありますか?ドメインを買うと必ずすることがあります。それは買ったドメイン名とIPアドレスを紐付ける作業です。サーバーを自分で借りたりするとIPアドレスを教えてもらえます。教えてもらったIPアドレスをドメインと紐付けて設定するんです。これをやるとインターネット上の電話帳DNSに登録されて、あなたのサーバーにいろんな人がリクエストを送ることができるようになります。

まとめ

ウェブサービスはリクエストとレスポンスの連続で成り立つ。情報を要求する側はクライアントサイド、情報を返す側をサーバーサイドと呼ぶ。IPアドレスはサーバーの住所を示す数字の羅列。ドメインは人間がわかりやすくしたIPアドレスの別名。

次にサーバーとは何か説明してください。できますか?意外と何なのかわかってない人って多いんです。答えはリクエストに対していつでもレスポンスを返すように設定されたコンピューターのことです。ものすごく簡単に言うと電源つけっぱなしでネットにつながった画面のないパソコンです。皆さんのPCも設定すればサーバーにできます。すごく特別なものだと思ってる人もいるんですけども、単なるパソコンです。

もちろん画面をバキっと取って置くだけでサーバーになるかというと、そんなことありません。サーバーとして動くために必要な設定は2つです。

1、IPアドレスを固定する

2、リクエストに対してレスポンスを出すようにOSとアプリケーションを設定する

あなたの持っているスマホは誰かからアクセスされることってありますか?通信が送られて情報返してみたいなことはないんですよ。個人の持っているスマホとかパソコンでアクセスされる事はありません。これはセキュリティーの観点からもそうなっています。その前に固定された住所がないんです。だからまずパソコンをサーバーにするんだったら、そのパソコンの住所を固定しないといけないんです。そして住所を固定した後は、電話帳DMSにその住所を設定します。これをやってサーバーとして誰かがリクエストを送った時にたどり着けるようになるんです。しかし、リクエストをたどり、着いただけだと動かないんですよ。これってイメージすると、家の住所まで来たんですけども、ポストもないし人もいないし、もうどうしていいかわからない、って感じです。誰か何かが送ってきたらそれに対して適切な処理をするように設定しないといけないんです。リクエストに対してレスポンスを返すようにOSとアプリケーションを設定するのです。

OSとは一体何か?今はもうスマホの時代なのであなたもわかってると思うんですけども、便利なアプリなどを入れる土台みたいなものです。WindowsだったりiOSだったりこういったものがOSです。土台があるからこそいろんな便利なものが使えますよね。サーバーにもOSを入れないといけないのです。サーバーによく使われているOSはLinuxです。サーバーに使われているOSとしては世界的に大きな視野を持っています。皆さんが使うことはないので身近じゃないと思うんですけども実は裏側ですごく使われています。CentOS やubuntuなどLinuxをベースとした様々なバージョンが存在し、無料で利用することができます。こういったものがサーバーで使うパソコンには入っていて動いています。サーバー用のOSにはLinuxがよく使われていると理解できればオッケーです

また質問です。サーバーは手元にあることはあまりないのです。離れている場所に置いてあって、それを設定していかないといけないんです。パソコンだったらここでカタカタしていればいいんですけども、離れたところにあるサーバーをどうやって設定していくのか気になりませんか?

答えは自分のパソコンで遠隔でそのサーバーを操作していくんです。その時にCUIのコマンド操作をよく使います。いわゆるハッカーが出てくる映画で見るような、黒い画面に文字がぱっと出てくるやつです。黒い画面に文字が出てきて、そこに何か入力してエンターを押すとまた何か文字が出てきてそれをひたすら繰り返す。これが昔はパソコンだったのです。でも今はそんなことをやらなくなりました。それはGUIと呼ばれるものを書くからです。いらないファイルをゴミ箱にドラッグするだけで消えますよね。スマホだったら指でピンチするだけで拡大して見られます。こんな感じでCUIを使いこなせない人でも直感的に使えるようにしたのがGUIなのです。知って欲しいことがあります。エンジニアと言うのはCUIで作業することが多いです。だからエンジニアって黒い画面でカタカタやっているイメージなのです。エンジニアが使うようなライブラリと呼ばれる便利なツールは、いちいちグラフィカルなものをつける必要は無いのです。もちろんそんな便利な製品も今はたくさんあります

ある程度知識がある人だったらわざわざドラッグアンドドロップしなくても、パソコンカタカタってするほうが早いんですよ。文字だけで操作する便利なツールたくさんあって、それを使うからエンジニアはこういうCUIを使った作業をするのです。

まとめ

サーバーとは特定のリクエストに対してレスポンスを返す電源ネットつけっぱなしのコンピューターサーバーOSはLinuxが使われていることが多い

直感的に操作ができるGUIに対し開発はコマンド操作のみのCUIが中心である

ウェブサイトの仕組み

サイトは文字の羅列で作られています。必要なのはHTMLいう言語です。これは知っている方も多いと思います。文章の構造を明確にしたり、画像や動画を配置したりすることができます。このHTMLはデザインとは関係ないんですよ。HTMLはあくまでサイトの文章の構造を決めるためのものなんです。構造とは何かというと、大見出し、小見出し、そしてそれぞれの文字・画像が一体そのサイトの中でどんな意味合いをもっているのかを整理していることです。それが青色なのか赤色なのか、文字の大きさとかそういうものはHTMLには一切書かれていません。見た目やデザインに関するものはCSSというものを使います。CSSはウェブページのスタイル見た目を指定するためのものです。これを使うことで文章の構造とデザインを切り離すことができるんです。構造とデザインを分けておくことにはすごく意味があります。ウェブサイトって1HTMLファイルあたり1ページで作っていくんです。100ページのサイトがあって見出しのデザインを変えようと思ったら、その100個のファイル全部デザインを修正していかなきゃいけないですよね。でも何ページあろうがデザインはまとめて1つのCSSファイルに設定されていたらその、CSSファイルを編集するだけで全部のページが変わります。もし分けていなかったら、全部開いて全部修正しないといけないといけないですから。そしてHTMLとCSSファイルはサーバーにあげておくことで、人はウェブサイトとして見ることができるんです。これはブラウザの場合のみです。スマホとかは少し違いますGoogle ChromeとかSafariはHTMLファイルCSSを読み込んでサイトの情報を出していると覚えておいてください。

またあなたに質問です。スマホアプリでは、レスポンスで返るファイルは、ウェブサービスと異なり文章構造や画像だけが返り、デザインの情報はありません。それはなぜだと思いますか

答えは見た目やデザインの情報はアプリ内に用意されているため、文章の画像の情報を一緒に手元にダウンロードされているからです。アプリから何か送信するときは情報だけは返ってくればいいわけですよ。

まとめ

ウェブサイトの仕組み

HTMLはウェブページを制作するための言語で文章の構造を決めることができる

CSSはウェブページのスタイル見た目を指定することができる

レスポンスでHTMLとCSSを返すことでウェブページを表示することができる

サーバーサイドスクリプトとデータベース

スマホやパソコンからリクエストを送ってサーバーにたどり着いて、サーバー内でレスポンスを返すまでの間にこの中で一体何が起きているのか?という話です。この処理は時間にしたら、1秒もありません。でもこの間にたくさんの技術が使われていて、それらがわたしたちの生活を便利にしてくれているのです。サーバーにはLinux型のOSが入っていることが多いです。今回はLinuxでいろんなバージョンがある中でも、CentOsというのが入っているとします.

このサーバーの中にHTML/CSSファイルを置くだけでもウェブサイトができます。ただし問題があります。何かわかりますか?何回見ても同じページが表示されます。これでは投稿したり検索したり、おすすめを表示したりサービスを作ることはできません。ウェブサービスではないんです。サービスにするため必要なものは2つです。

1、データを保存する仕組み

2、サービスの使用を反映したロジック

データの保存はサーバーサイドスクリプトが担当します。あなたはこの流れを覚えてください。アプリとかウェブサービス、例えばメルカリとかクックパッドとかそういったものって、膨大な情報があります。それらを保存しておく場所がある必要です。データベースといいます。データを保存するシステムです。通常はExcelのような形式で保存されます。この1つの表をテーブルといいます。1つのテーブルはシートみたいなものです。これにデータが保存されているわけです。このデータベースを操作するための言語があります。それがSQLです。保存されたテーブルから呼び出したり、更新したり、削除したりすることができます。データベース、SQLって聞くと難しく感じますよね。でも実際全然難しくありません。SQLなんて1時間位レクチャーされれば誰でも使えるようになります。

次にサーバーサイドスクリプトについてです。データベースはあくまでデータの保存ができる場所でしかないのです。データーを保存する場所と場所内で操作する方法としてSQLがあるというだけですなのです。サービスの使用に基づいたロジックや実際に返すHTMLの情報をプログラムしておく必要があります。サービスの使用に基づいたロジックというと難しく感じるかもしれませんが簡単です。例えばメルカリのトップページで情報が出てると思うんですけども、そこで「一体どんな情報を表示するか?」を決めることです。料理レシピでどんな料理を最初に見せるか?そういったものを決めることをロジックといいます。ここで使われるのがサーバーサイドスクリプトのRubyやJava PHPを始めとするサーバー内での処理を担うプログラム言語です。こういった言語を使ってサービスの使用をプログラムしていくのです。このサーバーサイドスクリプトがやってくれることをざっくり2つ覚えてください。

1つ目

サーバーサイドスクリプトは必要に応じてSQLを用いて、データベースから情報を引き出してくれます。例えばアプリとかで自分のプロフィールを見たいときは、サーバーサイドスクリプトで自分のプロフィールページを見ているときには自分のプロフィールの情報を返すとプログラムをしておくのです。

2つ目

データベースから取得したデーターを使ってHTML/CSSを生成してくれます。生成すると言うと大げさですけども、当てはめるといった意味です。これはブラウザの場合で先程言ったようにアプリの場合はちょっと違うんですけども、大枠やっている事はほとんど同じです。プロフィールページを見たいんだったら、データーをもってきて、それを見やすいようにして返すとこれだけです。ちなみにRuby、PHP、 Javaなど複数のサーバサイドクリプトの言語がありますが、書き方が違うだけで基本的な役割は同じです。例えばPythonであれば機械学習型のツールが使いやすいです。そういった特徴があるんですけども基本的にやっている事は同じです。よくある質問として初めにどんな言語を間勉強したらいいんですか?って聞かれるんですけども、1つの言語に接すれば他の言語も覚えられるようになります。なのでどの言語を覚えるかはこだわりすぎなくてもいいです。

最後はレスポンスとして情報返して終わりです。リクエストに対してサーバーサイドスクリプトが「こういう情報が必要だ」とデータベースからデータを持ってくる。それを見やすいように整形してあげてそれを返す、そういった流れが起きています。

まとめ

サーバーサイドスクリプトとデータベース

データベースはデータの保存するシステムでテーブルと呼ばれる表形式で保存されるSQLはデータベースを操作するための言語サーバーサイドスクリプトルビーJava PHP道はウェブサービスのロジックを担当するサーバーサイド側とはデーターベースから必要なデータを取得する

終わりにテクノロジーから逃げないでください世の中はテクノロジーでどんどん変化していきますでもテクノロジーといっても全く理解できないような本当に難しいものなんてありませんてぐらいせずにざっくりとそれが一体どんな役割を果たしているのかどんなものなのかと言うのは勉強を続けるようにしてください今の時代にテクノロジーから逃げていくと世界の変化からどんどん置き去りになりますそうすると言われた仕事をこなすだけの人になってしまいますもうアナログ男って許されないんですよテクノロジーの細かいところまで理解する必要はありませんからざっくりと何をやっているかだけを理解するようにしましょう。

アプリケーションの概要 

アプリケーションとは何?

コンピューター上で動く何らかのプログラム、これをアプリケーションと呼んでいますよね。よくアプリケーションを略してアプリと言いますが、「スマホのアプリを言ってるのかなあ」って思いがちです。

しかしプラットフォーム(環境となる土台)はどこでも良くてモバイル上でもいいです。ウェブブラウザでもいいしデスクトップアプリでもいいですけど、そういったプラットフォーム関係なしにコンピューター上で動いて使えるプログラム。これをアプリケションと呼びます。アプリケーションの仕組みを理解していきましょう。ソフトウェアとハードウェア。まずはこの言葉について解説したいと思います。

シンプルに言うとハードウェアは目に見えて物体として存在していて触れられる。これがハードウェアです。ソフトウェアはアプリケーションの目に見えない部分。これをつかさどっている分です。具体例を出すとハードウェアと言うのはコンピューターとサーバー、そしてネットワークです。コンピューターは僕らが触っているようなパーソナルのコンピューターです。WindowsとかMacBookでもいいですし業務用のコンピューター、スパコンや物理的なでかいサーバーです。ネットワーク環境、Wi-Fiも入ります。見えないし、触れませんが、ハードウェアとくくりになっています。

次はソフトウェアです。一番わかりやすい例で言うと「YouTubeのアプリ起動して動画見を見て楽しんでいる部分」です。ユーザーが触れたり体験したりできる部分をアプリケーションと言います。普段は使っているアプリケーションの部分しか見えませんが、実際にアプリケーションが動くにはアプリケーション以外のミドルウェアとOSが必要になってきます。それらはどこで動いているかというと、物理的にはハードウェアのコンピュータとかサーバーの中に置いてあるわけです。

ミドルウェアとOSは何?

OSは人間でいうところの脳みそだと言われています。要するにOSによってミドルウェアやアプリケーションが使えるか使えないか、動くか動かないかが変わってきます。例えば何らかのアプリケーションを使おうとしてMacでは動かない、みたいな場合あります。ゲーム機もNintendo Switchのソフトはプレステ4だと動きませんよね。なんで動かないのかって言う、とOSが違うからです。OSによって動かせるもの動かないもの違ってくる、できるものできないもの変わってきます。OS代表的なところで言うと、LinuxとかMacとかWindowsとかこの辺が代表的なところです。

次にミドルウェアです。アプリケーションとOSをつなぐ部分と言われています。つなぐ部分ってなんだろうって思うかもしれません。ミドルウェアはウェブ、サーバーAP、サーバーDBというものがあります。厳密に言うとちょっと違いますが、それぞれまとめてワンセットで覚えてください。この3つは何をしているかと言うと、開発の現場でデータをプログラミングし終わって、「このデータをサーバーに上げといて」言ったり「今サーバー上がりました。見てください。」と言ったりします。物理的なサーバーっていうのもあるんですけども、これは全ての会社に置いてあるわけではないです。必ずしも物理的なサーバーを指しているわけではないんです。サーバーは管理会社が持っています。しかし、大半の会社は物理的なサーバーを自社で持っているわけではなくて、サーバーを運営している会社の一部を部借りて遠方から操作して、その中にミドルウェアを突っ込んでいるわけです。アプリケーションは自分のパソコンの中で作ったとしても、そこで動くわけじゃなくて、サーバー上にのせることでようやくプログラムとして機能するわけです。ミドルウェアの中にさらにデータベースがあります。データを保存しておくものです。例えばYouTubeにユーザ登録してアカウントをつくると、その情報はデータベースに記録されるんです。これが記憶されているからこそ2回目、3回目とログインしたときにその時の情報が残っています。同じアカウントを使って動画を見たりアップロードしたりできるんです。データーベースは保管庫なわけです。これもミドルウェアの中に含まれていています。これもデータベースのサーバーに置いとかないと動かないわけなんですね。

アプリケーションは厳密に言うとさらに2つに分けられます。クライアントサイドとサーバーサイドです。何かと言うと、先ほどYouTubeを体験している部分、これがアプリケーションだと説明しました。アプリで見えている部分のロゴやテキストなどです。埋め込まれている動画をタップしたら再生されるし、タップしたら止りますよね。この見えたりタップできたりする部分。これがクライアントサイドと言われています。クライアントサイドだけではアプリは成り立たないわけですね。例えば動画を再生します。「いいね」ボタンをします。例えばAさんが動画に対して「いいね」をしたとします。すると、『ユーザーのアカウントでこの動画に「いいね」がありました』と言う処理が走ってデータベースに記録されます。

データベースに記録したり処理したりしているのがサーバーサイドです。見えている部分だけじゃなくてユーザーがタップしたりクリックしたり行動に対して何かしらのプログラムを実行する、これがサーバーサイドになります。「見るだけのウェブサイト」はサーバーサイドを持たないんですけども、見るだけじゃなくてタップ操作したりデータを記憶させたりとかメールフォームを送るとかアカウントフォームを送るとか、操作があるアプリケーションはサーバサイドを絶対に必要になります。

ちなみによくフロントエンドバックエンドって言葉を使ったりします。あれどの辺のことかと言うと、フロントエンドと言うのはクライアントサイドの事をフロントエンドといいます。バックエンドからOSを指します。OSに関してはできる人とできない人がいて、知見はあったほうがいいんですけども、OS作れるわけじゃなかったりします。バックエンドエンジニアって言うと、作れないけど知っているぐらいの人が多いです。インフラはOS、コンピューター、サーバー、ネットワーク、この辺のことを指します。フロントエンド、バックエンドでよく使われているプログラミング言語があります。フロントエンドに関しては、ウェブだったらHTML/CSSとJavaScriptこれで固定です。これ以外の選択肢はないです。モバイルのiOSだったらSwift、Objective-CアンドロイドだったらKotlinとかJavaというのが使われます。最近だと、まだ使いにくいと言われるんですけども、Flutter、Reactなどを使ってクライアントサイドを作れます。サーバサイドの言語は選択肢がたくさんあって、どれを選んでもかまいません。その会社や作りたいものに対して適した言語を使うというのが一般的な選択です。ウェブ系の企業でアプリを作るとなったら、アプリケーション領域を作ることがほとんどだと思います。ちょっとミドルウェアをまではみ出すこともあるんですけども、OS以降を作ることはないのでアプリケーションと緑を作るつもりで「うちのエンジニアだったらこの言語を使えるかな。」とか「この言語を使える人いないから探さないと」という判断になります。ミドルウェアはウェブ系の開発会社であれば一からガリガリ書く事はないと思います。使われている技術としてはSQL言語(データベースを操作するときに使う言語)なんですけどもこういうのが使われたりしています。1番気にしないといけないのは、「どの言語を書けるのか」です。1番選択肢が多いので場合によってはPHPをかけるけどRubyを書けないエンジニアはたくさんいるわけですね。

「うちにエンジニアがいるから何でもできる。」と思わずにどの言語が書けるのかを考えましょう。お客さんがどの領域まで求めているのか?これも大事です。モバイルアプリに関しては、ゲームアプリかそうじゃないかでクライアントサイドが変わってきます。KotlinやJavaを使ってのモバイルアプリはYouTubeとかFacebookで使われています。ゲーム系のアプリになってくると全然違うUnityを使って作るんですけども言語も技術も全然変わってきます。同じエンジニアでも言語が変わってくるので皆さんの就職したい会社に合わせましょう。

バックエンド編

APIについて

何かというと「アプリケーションに対して命令をしたときにアプリケーションができる範囲でデータを提供してくれる仕組み」のことです。例えばメールフォームの自動住所入力があります。住所入力ページに、郵便番号を入れてボタンを押すと自動で郵便番号以下の住所が出力される機能見たことありますよね。あれはAPIを使っています。1番大手なところで言うとGoogle マップのAPIかYahoo!マップのAPIかどっちかを使っていることが多いです。「Google マップやYahoo!マップがAPIを提供していて、限られた規定に従ってコードを書いて郵便番号をGoogle マップに送信すると郵便番号に基づいた住所のデータを返してくれる」ような仕組みです。これで住所が入力されるわけですAPIと言う仕組みを使ってプログラムも書くことも多いです。なのでアプリケーションを作るときにAPIから作る場合もあれば、すでに公開されているAPIを使うこともあります。

ドメイン

簡単にいえばアドレスです。YouTubeだったら、YouTube.comへアクセスしますよねこれがドメインなわけです。ウェブ上における住所みたいなもので、これがわからないとYouTubeの開きようがないですよね。ドメインはすべてのアプリケーションが持っています。

DNSサーバー

ドメインを正しく動作してつなげるためのサーバーです。どういうことかというと、ウェブで開いてYouTube.comで入力してエンターキーを押したら、YouTubeページ表示されますよね。すごくスムーズなので一瞬で動いているのかと思うんですけども、実はこの時に複数のサーバーがデータ通信しているんです。この中でもDNSサーバーは「ドメインが正しくサーバーと紐付けられて、アプリケーションのドメインとして有効ですよ。」とつなぐ役目をしてくれています。ちなみにネームサーバーという言葉もあるんですけども、ほぼ同じ意味と思ってもらって大丈夫です。

プロトコル

通信規格、ルールです。コンピューター上でデーターをやり取りするときに、「このルールでこのフォーマットでデータを送受信しようぜ」という取り組みなんですね。サッカーで選手がパスするときって足で蹴ってパスをしますよね。手で掴んだらだめですよね。データをやり取りする際にもこのプロトコルというルールに基づいてコンピューター同士でやりとりすると取り決められています。代表的なものが3つあって、FTP、 http 、httpsこの3つです。FTPはファイルをアップロードしたりダウンロードしたりするときの規格です。どこのサイトからソフトをダウンロードするときとかエンジニアがテストサーバーにアクセスしてデータをアップロードするときとか、こういうときのルールとして使ってるのがFTPなわけです。httpは、コンテンツを送受信するときのルールですね。画像やテキスト、動画の受信するときに、URLにhttp//とかあると思います。あなたが普段ウェブ上でYouTubeを見たりとかページ開いたりとかするときに、この「ウェブサイトを表示させるよ」とか「画像テキスト表示させるよ。」というのはこのhttpを介してやっているわけです。

httpsはhttpを暗号化したものです。例えば普段テキストとか画像とかがあるウェブサイトを閲覧しているだけだったらhttpでも問題ないです。例えばメールを入力して名前と住所とデータ送信ボタンを押したらhttpのプロトコルが走って皆さんが入力したメールが相手先に送られます。もしhttpだったら暗号化されていないのでむき出しの情報なわけなんです。ハッカーがネットワーキングにハッキングしてきたときに情報を見ることができてしまいます。情報がばれちゃいます。メールもやばいですけど、クレジットカード情報とかが入ってるとさらにやばいですよね。そうなっちゃまずいのでハッキングされても大丈夫なように暗号化しておきます。暗号化されたらたとえハッキングされていても暗号化されているので、読めないわけです。暗号化されているのはhttpsです。今だとhttp使わずhttpsは必須とGoogleが言っているので、ほとんどのウェブサイトはhttpsでやりとりしていると思います。暗号化技術をSSLといいます。

クラウドサービス

よく聞きますよね。クラウドを理解するときにもう一つ知っておいたほうがいいことがあって、オンプレミスです。オンプレミスとの対比でクラウドという言葉があります。仕組み自体すごくシンプルです。1番わかりやすい例で言うと、 AdobeのPhotoshopとかillustratorって、今はクラウドなんですけども昔はオンプレミスだったんです。どういうことかというと、昔だったらAdobeのソフトウェアをオンライン上でもいいし店頭に行って、AdobeのPhotoshopくださいって数万円出して買って、それをパソコンにインストールするやり方でした。こういう風に自分でデータを保存管理して、自分のPC内で完結するやり方、これがオンプレミスです。でも今のAdobeってそういうことしません。ネット上でアカウント登録してAdobeのサービス上でAdobeのPhotoshopをダウンロードしたりアップグレードしたりいらなくなったら削除したり、あるいはPhotoshopで作ったデータをAdobeのサーバー上に保存したり、と自分の中で完結するのではなく、会社が提供しているウェブのサービス内で管理利用している、これがクラウドです。アプリケーションをまるっと持ってきて、自分のパソコンや自分の環境内で完結するやり方がオンプレミスで、提供している会社側のサービスを使わせてもらってそこのサーバーやサービス上で利用させてもらうのが、クラウドとなります。

このクラウドサービスっていうのは主に3つの領域があります

SaaS 、PaaS、IaaSこの3つです。

IaaS(アイアース)はハードウェア、インフラの領域を提供しているサービスです。「アプリケーション作りたいなぁ。」と思ったときに、ハードウェアの自前は、コンピューター買ってきたりサーバー設置したり、きつい場合はこのIaaSを使えばいいわけです。それからハードウェアだけじゃなくてもOSとかミドルウェアも欲しい場合はPaaSを利用すればいいのです。アプリを作ること自体がめんどくさい、全部やってもらって後は自前でちょこちょこカスタマイズを少しできれば良いと言う場合は、SaaS使えばいいのです。例えばあなたが社内の勤怠管理システムとか経費申請システムを自前で作りたいと思ったとします。タイムカードなんて今時終わってるからデジタル化しよう、経費申請もいちいちレシート管理課に持っていって、経理の人に頼むのもめんどくさいからシステムを作りたいなと思った時に作りたいとします。ハードウェアだけどこかで利用したいなと思ったらIaaSを使って勤怠管理システムを作ればいいです。ミドルウェアとOSの知見もないから、そこも誰かにやって欲しいなと思ったらPaaSを使います。アプリケーション部分だけを自分で開発開発すればいいわけです。エンジニアいないしアプリケーション作るのもめんどくさいわという場合は、すでに動いているSaaSというサービスを利用すれば良いわけです。勤怠管理システムで言うとSmartHRとかkintoneとか有名かなと思います。けどもカスタマイズ性に制限はあるけど、ある程度は自分でいじったりできるのでそれぐらいのマイナーチェンジで良いのであればそういったサービスを作るのは使うのはありです。

最近よく聞くAmazonが提供しているAWSとかGoogleのGCP、MicrosoftのAzure、これらはクラウドコンピューターサービスなんですけども、IaaSとPaaSの領域を全部包括してできますよ、というものです。加えて他にもいろいろできることはたくさんあります。これらをつかって開発しようという人は多いです。ちなみにレンタルサーバーとは何かというと、レンタルサーバーもハードウェアからミドルウェアの部分をまるっと内包しているんです。なので、アプリケーションを作りたいときに、アプリケーションだけ、ささっと作って後レンタルサーバー上にアップしてつないでいじれば、動くという仕組みなのです。ただレンタルサーバーはアプリケーションを動かすには低スペック過ぎます。その代わりに安いです。ハードウェア、OS、ミドルウェア、全部決まっているので、自分の作りたいアプリケーションに応じて柔軟にカスタマイズできないんです。対して先のAWS、GC、Azureはスペックを自分で自由に決められます。例えばOSちょっと変えたいなとかミドルウェアにはこれを使いたいなとか、データベースにこれを使いたいなとか、容量的にはこれ欲しいな、っていうときに柔軟に自分でカスタマイズできます。普通のウェブサイトぐらいならレンタルサーバーでいいですけども会員をたくさん集めたり、データ通信をたくさんするような大きなアプリケーションを作る場合にはクラウドサービスを使うのが一般的です。ますAWSやGCは結構知見が必要です。全て作ることから比べたらはるかに楽なんですけども、扱いが難しいのでここに精通しているエンジニアじゃないと扱えません。開発の案件があったときにクラウドサービスに何を使うのかは大切です。

プログラミング言語以外にも身に付けておいた方が良いスキル

プログラミング学習と言えば、Ruby、Python、Javaなどのいわゆるプログラミング言語を学ぶというイメージがありますが、エンジニアとして就職や副業フリーランスとして実務をこなす場合、実は必要な知識がもっとたくさんあります。でも全部学ぶのは現実的じゃないですよね。

実務に役立つプログラミングスキルトップ3を紹介します。ただここでプログラミング言語は必要ないんだと言う思考になってはいけません。プログラミング言語は、習得しておかなければならない大前提のスキルって言うことです。エンジニアという仕事に興味のある人今求められている知識を知りたい人、プログラミングを学習中で他にどんなことを学ぶか迷っている人は参考になると思います。

三位 ネットワークスキル

パソコンやスマートフォンなどネットワークを経由してインターネットに接続するスキルのことです。もう少しわかりやすく言うと、ネットワークの仕組みを理解してどこでも安全確実にインターネットに接続するスキルです。現在は多くのカフェや公共施設、ワーキングスペースなどで無線LANサービスが提供されており簡単にインターネットに接続することができます。またモバイルルーターを使うことで無線LANサービスがない場所でもインターネットに接続できます。自宅に光回線や無線LANの設備を導入されている方も多いでしょう。パソコンやスマートフォンでは、ネットワークを経由してインターネットに接続されています。例えばカフェの無線LANであればWi-Fiと言う無線LAN技術を使って、カフェのネットワークに接続し、そこからカフェに敷設されている光回線などを通じてインターネットに接続される仕組みになっています。このように便利なネットワークですが実はカフェで無線LANを使っている人はすべて同じネットワークに接続されています。なので無防備に無線LANを使っていると他の人から通信を傍聴されたりパソコンに侵入されたりといったリスクもあります。パソコンに侵入されてしまうようなエンジアにはには安心して仕事を任せられないですよね。このように安心してどこでも、安全確実にインターネットに接続するスキルはエンジアにはとても重要なのです。実はこのスキルほとんどすべての業務で使用します。現在ではパソコンやスマートフォンを単体で利用する事はほとんどありません。あらゆるサービスがインターネットを経由して提供されており、ビジネスの現場でもインターネットなしでは仕事が成り立たなくなるつつあります。多く使用されているVPNと無線LANについて具体的に説明しましょう。VPNはVirtual Private Networkの略です。インターネット上に仮想的な専用回線を用意するサービスです。無防備に無線LANを使っていると他の人から通信を傍聴されたりパソコンに侵入されたりするリスクがあります。仕事でパソコンを使う際にはVPNを使用してセキュリティーを高めましょうVPNはNTTなど各社からサービスが提供されています。もう一つの無線LANと言うサービスはWi-Fiを使っています。こちらはなじみがある人が多いですよね。実はWi-Fiには2ギガヘルツ帯と5ギガヘルツ帯などの種類があり、周波数や通信速度が大きく異なります。例えば屋内であれば5ギガヘルツ帯の規格を使うなど状況に応じて最適な種類の無線LANを選択できるようになりましょう。昨今の頃中でリモートワークが急増していることも需要が高まっていることの一因でしょう。日中でもネットワークの速度が遅いなどの経験がある方も多いと思います。そのような場合IPv6IPv4という技術を知っているとネットワークの速度を快適に保つことができます。ネットワークの知識はこれからの時代には必須のスキルといえるでしょう。プログラミング初心者がネットワークのスキルを習得するには情報処理系の資格試験の学習がお勧めです。IT業界が初めてであれば情報処理推進機構、略してIPAが実施しているITパスポート試験がお勧めです。ネットワークだけでなくITに関する基礎知識を幅広く学習することができます。また実際に自宅に光回線を敷設したりモバイルルーターを購入したりしてITパスポート試験の学習で覚えた内容が実際のネットワークにどのように使用されているのか実体験するとより学習が深まると思います

第二位

データベーススキル

データベースとはデータの保存や取り出しを行うためのソフトウェアです。データベースはウェブサーバーと連動して使用されます。ウェブサーバーはウェブページやアプリなどのコンテンツをインターネット上で提供します。アマゾンなどのECサイトを例に考えてみましょう。Webサイトでは多くの商品を扱っていて、それらの商品はデータベースに格納されています。利用者がアプリで商品一覧を表示すると、ウェブサーバーがデータベースから商品のデータを取得して商品一覧というコンテンツをアプリに提供します。データベースは普段直接目にすることが機会は少ないのですが、多くの場面で利用されておりエンジニアにとって知っておくべき知識の1つといえます。企業の会計システムからゲームまで多くの業務で利用されています。インターネット上でやりとりされるものは全てデータです。LINEの文章やインストグラムの写真といった身近なものから、求人サイトの求人情報、企業の会計データなど多くのデータがデータベースに格納されており、そのデータを使ってコミニケーションや企業活動が行われています。データがどのように扱われているかを知ることはエンジニアにとって重要なことです。具体的なデータベースの製品やサービス名をいくつか覚えておくと良いでしょう。

無料で利用できるオープンソースのデーターベースとして有名なのがProstgreSQLとMySQLです実際の開発案件でも多く利用されています。企業ではウェブ上のデータベース製品も多く使用しています。中でもOracleとSQLサーバーは覚えておくと良いでしょう。また後で説明するクラウドサービスにもデータベースのサービスがあります。これらにデータを格納したり取り出したり編集をしたりといったことを行うのがデータベーススキルを使った実際の業務です。エンジニア業務に関わるあらゆることに使用すると言うことですビジネス的な目線で補足しておくとインターネットで扱われているデータは日々増大の一途をたどっています。現在はビジネスの主戦場がインターネットでありGoogleなどの検索サイトで自社のサイトを上位に表示させたり、取引先とのあいだでスムーズなデータ連携を行うことがビジネスの勝敗を分けます。もう一つは近年急速にビジネスで活用され始めたAI技術です。AI技術は過去のデータに基づいて未来を予測します過去のデータ生の傾向を学習するために、多くのデータを必要とします。データーベースのスキルを持っていくことでAI技術にも活躍の場が広がりエンジニアとしての価値を上げることができます。

データーベースのスキルはプログラミング言語の学習とともに身に付けると良いでしょう。ほとんどのプログラミング言語ではデーターベースと連動してデータの保存や読み込みなどを行うことができます。プログラミング言語の基本的な使い方を理解したら、データーベースと連携したアプリの作成などを行ってみましょう。情報処理系の資格試験の学習もお勧めです。データーベースはエンジニア向けのスキルなので、基本情報技術者試験を選ぶと良いでしょう。

第一クラウドサービススキル

クラウドサービスとはインターネット上で提供されているサービスです。利用者はどのようにサービスが構築されているか知らなくても、無料または使用時間に応じてサービスを利用することができます。身近なところでもGoogleマップもクラウドサービスの1種です。このほかウェブサーバーやデータベースなど多くのクラウドサービスが提供されています。クラウドサービスで最近よく耳にするのはAWSでしょう。アマゾンウェブサービスの略で、アマゾンが提供しているウェブサーバーやデータベースなど様々なクラウドサービスの総称です。AWSのサービスは現在200種類を超えています。例えばウェブサーバーのサービスではEC2、データベースのサービスではAuroraなどがあります。このほかにもネットワークやAI関連など多くのサービスがあります。クラウドサービスを上手に利用して低コストでビジネスを進めることができると、優秀なエンジニアとして高評価を得られます。

プログラムを入力するエディタもAWSの中のサービスの1つにあります。Cloud9です。エディタへのコードを入力、ターミナルへの記述、結果の確認が1つの画面で行えるから初心者も使いやすいです。他にも初心者が挫折しやすい環境構築が簡単にできるのも魅力です。クラウドサービスはどんな業務で使うのでしょうか。特にメリットがあるのが新たな自社サービスの立ち上げです。クラウドサービスを利用でしない場合、自社サービスの立ち上げにはウェブサーバーの購入や光回線の敷設など多くの初期投資が必要になります。クラウドサービスは基本的に利用時間に応じた利用料金を払うだけなので、初期投資などは必要ありません。利用するサービスの希望も自由に変更することができます。最初はコストを抑えて小規模に開始し、自社サービスが軌道に乗ったら規模を拡大するといった使い方が可能です。またクラウドサービスはAWSだけでなく、マイクロソフトAzure、GoogleのGCPなどがあります。名前だけでも覚えておくと良いでしょう。

クラウドサービススキルの需要が高まる理由

クラウドサービスは利用時間に応じた利用料金を払うだけなので、低コストでサービスを運営することができます。実際のビジネスの現場でもクラウドサービスへの移行が増えてきています。多くの案件がある割には、クラウドサービスを理解している技術者が少ないため、多くの企業でも高給料でもクラウドサービスを理解しているエンジニアを確保しようとしています。また利用している企業にとっては。サーバーなどの運営をクラウドサービスの事業者に任されることもメリットの1つと言えるでしょう。例えばAWSはアマゾンがサーバーなどの運営を行っています。結果利用している企業は自社サービスだけに集中すれば良くより費用対効果を高めることができます。そのためクラウドサービスを使用したい企業が増えてきており、そのスキルを持った人材を確保しようとしているのです。クラウドサービスの学習を行うには、クラウドサービス事業者が実施している資格試験の学習を行うと良いでしょう。中でも世界最大のクラウドサービス事業者であるAWS認定資格試験がお勧めです。多くの種類がありますが初心者にお勧め勧めしたいのがAWS認定クラウドプラクティショナーです。エンジニアだけでなく営業や経営者なども対象にしており、クラウドサービスに関する基礎知識を幅広く身に付けることができます。

エンジニアのスキルは掛け算です。単にプログラミング言語を知っているだけよりは、ネットワークやデータベース、クラウドサービスなどの知識を持っておくことで格段に活躍の場が広がります。またいずれもリモートワークと親和性が高い点もポイントです。高いスキルを持っているエンジニアに対してはリモートの案件も増えてきています。これからの時代スキルを掛け算して一目置かれるエンジニアを目指しましょう。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です