生主見聞録

リニューアルしました。好きなことを書きます。

PCやネットの知識をわかりやすく詳しく

2018.12.25 (Tue)

前書き: ITについての記事を書こうと思った理由


最近正直今までみたいにネットに深くいることが滅多に無くネットのことを全然把握出来ていなくてぶっちゃけ記事にすることに悩みます。
いつも通りちょっとお硬い学問に触れるのも良いんですけど、あまり需要を感じられないので今日から少しの間はIT系についての記事を多くしようと思います。
コンセプトとしましてはITに関する内容を出来るだけわかりやすく書けたらなと思います。
※当記事は小難しい考察も含まれております。その場合は文字がオレンジになっているので飛ばしてください。



1.PCとスマホの主なパーツ


主なパーツとしてCPU、メモリ、HDD(SSD)が有りますがこれらを料理に例えてみるとCPUが調理師、メモリがまな板、HDDが冷蔵庫となります。
CPUは主に演算を担当しています。先程の例え通りPCやスマホのメインを担当しています。
CPUは調理師と同じなのでスペックが良ければ良いほど作業が早くなります。

メモリは主に電源がついている間の記憶を担当しています。
先程の例えで言うとまな板と一緒なのでメモリが大きければ大きいほど同時進行で色んなアプリを起動できたりするようになります。
ちなみに正確にはCPUは1つのプログラムしか実行することは出来ません。まな板の上に人参や玉ねぎが同時に置いてありますが調理師は一人しかいませんので一人で玉ねぎを切る→人参を切る→玉ねぎを切る→人参を切ると高速に動いているだけです。
メモリは後述のHDDとは違い電源がついている時だけ記憶していますので、電源を切ったりするとまな板は洗われるのでまな板からHDDに保存する必要が出てきます。
ちなみによくPCやスマホを再起動した方が良いと呼ばれる理由はこのメモリ上にゴミが、つまり調理した玉ねぎの皮とかが残っているので定期的にまな板を洗う(再起動)必要があるのです。

HDDは補助記憶を担当しています。メモリ上で作業したものをHDDに入れることで保管することが出来ます。
またHDDにはOSと言う大事なシステムデータも入っています。OSについては後述します。
HDDとSSDの主な違いは衝撃の強さや速さ、壊れやすさにあります。HDDは旧規格なので時期に淘汰されるでしょう。
HDDとSSDの違いについてもそのうち説明します。


余談:インターネットはともかくIT系が今後も間違いなく発展していく根拠としては過去の積み重ねが大きいからだと考えます。ITは完全な論理構造を元に出来ており既存の構造を越える構造を今更新規に作ることは無理だと考えます。例えば今より優秀な言語が出てきたり、IPv4から見るように既存の規格が廃れることはあれど0と1から成り立つ根本を覆すことは恐らく不可能だし(難しい解説になるので当記事では割愛)既存の技術は先人たちの積み重ねから成り立っているのでITという基軸は廃れることは無いでしょう。



2.OSとは


OSという言葉を聞いたことがある人は多いと思うがあまり違いがわかっていなかったりしていると思いますので軽く触れたいと思います。
OSとはオペレーティングシステムの略で主にソフトウェアの根幹部分の役割をしています。
主なOSとしましてはWindows,mac,UNIX,LINUX,android,IOS等があります。
とまぁこういう書き方をほとんどのサイトではされてるとは思いますがこういう事を言うと賢い人に怒られてしまうのでもう少しわかりやすく書きます。

まず元々UNIXというOSが有りましてUNIXは凄い画期的なOSだったのですが金銭を払わないとまともに使えなかったり契約が鬱陶しくて面倒でした。
そこである時リーナスさんという中指を立てたがる暴言大好きな人がUNIXを参考にLINUXを作りあげLinuxを完全無料配布しました。
ちなみにmacやIOSはUNIXがベースとなっており、androidはLinuxがベースとなっています。(androidはLinux同様、UNIX認証を受けていません。)
UNIXはUNIXの商標認証というのが有りこれを受けているとUNIXであると言えます。
例えばmacはUNIXの商標認証を受けているのでmacはUNIXであると言えます。
一方前述どおりLinuxやLinuxをベースにしたandroidはUNIXをパクってはいるがUNIXの認証は通っていませんのでUNIXであるとは言えません。このようなOSのことをUNIXライク(UNIX系)と呼びます。

ここからが少しややこしいのですがUNIXやLinuxはOS自体を指すこともあればOSの総称となることもあります。
わかりやすく言うのなら「Windowsを買いたいです」とお店に言っても「7ですか?10ですか?(7はもう売ってないかもだけど)」となるのと一緒でUNIXやLINUXと言われても特定の一つのOSだとはわからないのです。
またWindowsであれば「7はもうすぐサポート終了するし10だな」と特定が出来ますがUNIXやLINUXは種類が豊富なので尚更一つだけの想定が難しいのです。



3.OSの違い


先程の記述通りOSには数種類あることがわかったと思います。
「OSの違いはわかったけどどれを買うべきだろう」とか「大学生はスタバでMACBOOK広げてドヤってるからMAC買えば良いのか?」とか違いがわからないと話にならないのでOSの違いを述べようと思います。
まずPCを購入しようと悩んでる一般の方には悪いことは言わないのでwindows一択だと思います。
時々馬鹿なサイトとか知りもしないくせに「macbookはコスパがいい!」とか言ってますけど大抵嘘です。
まずmacについてですがmacは現在apple社が独占しているので基本的にハードの選択肢が少なく高価なのが特徴です。
UNIXやLinuxは基本的に企業等が使うことが多く一般人の利用には向いていません(GUIが無いのもあるしね。)
その点windowsは最も多くの人に使われてるだけ有り優秀で使いやすくコスパもかなり良いのが特徴です。

そんなwindows贔屓をしておいてなんですが僕らエンジニアはwindowsが大嫌いです。全員がとは言いませんが少なくとも僕は嫌いです。ゲームやwindowsでしか起動出来ない何かが有る時以外はwindowsなんて触りたくもないくらいwindowsが嫌いです。
理由その①:セキュリティが弱い
windowsはとにかくセキュリティが弱いのです。理由としてはまず利用者が多いのでウイルス等の餌食になりやすいのが特徴です。僕はセキュリティ業界でもそこそこ仕事をしていますが「あそこの会社クラッキング(ハッキング)されたらしいよwindowsじゃなかったら良かったのにね」という会話も珍しくないくらいwindowsは弱いのです。(最近はセキュリティまともになってきたけど)
理由その②:バグが多い
windowsのシステムの中身(ソース)は見れないようになっています。これを用語でブラックボックスと言います。
PCに詳しい人達(ハッカー)はブラックボックスが大嫌いです。windowsはパクられたくないからこそ中身を隠してブラックボックスにしているのですが中で何をしているのかわからないような怖いOS使ってられるかよとなります。
その点Linux等は中身がいつでも見れるのでバグがあれば皆で共有し速攻で直せたり開発者が変なプログラムを仕組んでいてもバレるので安心です。
言うてmacもwindowsほどじゃないとは言えブラックボックスなんですけどね。
理由その③:windowsupdateがうざい
windowsはバグが多すぎてすぐにupdate来るんですよね。
これがうざすぎてイライラの元となります。
その点他のOSならコマンド一つで管理出来たり楽ちんです。
理由その④:音質や画質やフォントの問題
これは芸術系のお仕事をされてる人に多いと思いますがwindowsはmacに比べ音質、画質等が劣っています。
言うて最近はmacに劣らず綺麗な物もあるのでここらへんは好みの問題
理由その⑤:プログラマやエンジニアは主にmacやLinuxで開発するから
別にWindowsで開発出来ないことも無いのですが参考書籍等がmacやLinuxで構築されてる事が多いのでwindowsでやるのが面倒なんですよね。windowsのセキュリティに引っかかって面倒になることも多いです。
逆にC#と呼ばれる言語やWindowsのアプリケーションを作る時はWindowsで開発した方が楽ちんです。(PC2つも持ってない?仮想環境を使いなさい)
理由その⑥:bash実行環境が無い
bashという手軽に使える言語があるのですがそれがwindowsでは使えません。
嘘です。あまり知られてないけどwindows10は対応しています。
悪用されることが多いけどPowerShellもあるしwindowsも捨てたもんじゃないかもしれない



4.Linuxの解説(詳しく書くのでスルーでもok)


Linuxは通常Linuxディストリビューションという形式で配布されています。
LinuxディストリビューションとはLinuxの本体的なやつ(カーネル)とアプリケーション等を纏めた形式のことです。
何故このような形になっているかというと例えば「仕事のサーバーとして使いたい。」という時には余計なソフトをいれてはいけないのです。そのソフトに脆弱性(セキュリティ上の問題)があった場合にそこを攻撃されることがある為サーバーは余計なソフトを入れたくないのです。
中にはコマンドだけでしか操作出来ないディストリビューションもあります。
また、例えば僕のようにセキュリティ系の仕事をしてる人も多くのツールを利用する為に一々自分で入れるよりも初めから色々入ってパッケージ化されてるものを選ぶ方が都合が良いのです。
中には「ほとんど何も入ってないから自分で欲しいものだけ入れろよ」みたいなディストリビューションもあります。
また、Linuxは前述通り自分で好きな最低限のものが入っているパッケージを選ぶので滅茶苦茶軽いです。windowsみたいに意味の無い糞ソフトは入っていません。
これだけ聞くとLinuxは凄い優秀なように感じますが(実際優秀だけどね)使いこなすにはやたら面倒くさいコマンドを覚える必要があります。覚えなくても使えなくは無いのですがコマンドすら使えないのにLinuxを使う利点は無いので大人しくwindowsを使っていればいいと思います。(mac使いお前もな)
もしスタバとかでドヤ顔でmacを使ってる人がいれば「なんでwindowsじゃなくてmacなの?え?w芸術系の仕事でもコマンドを使えるわけでもないのにmacなの?w windowsでいいじゃんw」って煽ってあげましょう。



5.入力と出力の仕組み


コンピュータには入力装置と出力装置が有ります。
入力装置の主な例としてはキーボード、出力装置はモニター(ディスプレイ)がわかりやすいと思います。
詳しく書くと一つ記事が書けてしまうので超簡易的に書くのなら例えば1+2を計算したいとします。
キーボードで1+2を打ち込みそれを一時期手にメモリに保管します。その後メモリからCPUに渡され演算し3となってメモリに戻された後にモニターに3という数字を出力します。



6.ネットワークの仕組み


皆が普段使っているインターネットですがインターネットの仕組みまで把握できてる人はほとんどいないと思います。
まずそれぞれの家庭にはネットワークが有ります。これをローカルエリアネットワーク(LAN)と言います。
皆の持ってるPCやスマホもいきなり外の回線に繋がっているのではなく家庭や会社の中でネットワークを形成しています。
一般的な仕組みとしてはPCやスマホ等が一つのルーターと繋がっておりモデム(ONU)を通して世界中のネットワークと繋がれるようになっています。
世界中のネットワークも結局はLANの集合体となっており、皆が見てるWEBサイトも個人や企業のLANから発信されてるものとなっています。
世間一般でルーターと呼ばれる物の役割はここで語ると長くなってしまうのでそのうちネットワークについて語る時にでも語ります。



7.WEBサービスの仕組み


先程に続いてWEBサービスの解説をします。
皆がWEBページを見る時にブラウザと呼ばれるアプリケーションを使うと思います(Chrome,safari等)
仕組みとしましては基本的にまず皆はgoogle等の検索エンジン等を使いWEBページを開きますが、この検索エンジンというのはただのURLの寄せ集めに過ぎません(SEOがどうとかは割愛)
なので別にgoogleから飛ぶ必要はないのでURLさえ知っていればいつでも飛ぶことが出来ます。
このURLの正体はDNS(ドメイン)とやらに偽装されたIPです。
例えばURLの検索欄に「216.58.197.132」とIPを打ち込むと「https://www.google.com/」が開かれます。これはDNSという機能を使い「216.58.197.132」を「https://www.google.com/」と結びつけている為です。

話を戻しますが検索エンジンを使ったり直接URLをブラウザに打ち込むことによりWEBページが開かれると思います。
これはURLのIPの先に接続してそのページを見てることを表します。
なのでこのIPの先の人が公開しているPCの電源を切れば当然ながら接続することは出来ません。
この時IPの先の個人や企業はWEBサーバと呼ばれるものを利用していてそのWEBサーバが接続元の人のブラウザにデータを渡しているのです。
この個人や企業の情報発信側をサーバ、利用者をクライアントと呼びます。
クライアントがサーバに「WEBページを見せろ」等の要求をすることをリクエスト、「WEBページの情報を返す」等の返事をレスポンスと言います。
また場合によってはサーバ側でWEBサーバがDB(データベース)サーバから情報を取ってくる場合もあります。
データベースというのは主に会員サイトのように情報を保存しておく為に使います。



8.プログラミング言語とは


さて恐らく一度は皆も聞いたことがあると思いますが機械は全部0と1から成り立っております。これを機械語(マシン語)と言います。仕組みとしては電圧が高い時は「1」低い時は「0」と機械が解釈しているのです。
だけど一々機械に1と0を連続して入力するのは物凄い手間がかかります。
ので2進法から16進法に変えてみます。
例えば10進数で"36500"と入力したい場合、2進数では"1000111010010100"、16進数では"8E94"となります。
2進数では長くても16進数だと短く済みますね。よって人間が機械に対して命令する時は16進数で使われることが多いです。(16進数を使わないプログラミング言語が多いけど)
ちなみに16進数で記述したとしても前述通り機械は電圧の高さでしか判断できないので0と1しか判別出来ません。よって16進数で入力したものを0と1の2進数に翻訳する必要があります。
余談:ちなみに10進数ではなく16進数が使われる理由としては人間の手が10本だから人間は10進数だけどコスパ的に16進数が良い。という説を聞きますがだったら20進数でも良いじゃんと思います。
本当の理由は2進数と相性が良いのが16進数だったからでしょう。
例)2進数4桁の最大数である1111を16進数で表すと16進数一桁の最大値のFとなります。


今の16進数の話と同じでプログラミング言語の存在意義は長ったらしい2進数の羅列を短く人間でもわかりやすくする為に存在します。
当然先程同様プログラミング言語を機械が理解することはないので機械がわかるように翻訳する必要があります。
(ややこしくなるのでコンパイラ等の話は割愛)

また、複数プログラミング言語がある理由としては方言みたいなものです。
言い方が違うだけで全部意味合いは一緒です。
例として例えば外人がいるとします。
外人に対して「おは」と言うとします。
「おは」の意味が伝わらない場合外人に「「おは」は「おはよう」の略だよ。「おはよう」は英語で「good morning」だよ」訳す必要があります。
直接「おはよう」と話しても良いのですが発言者は面倒くさいので「おは」の二文字にしました。発言者が楽をする分翻訳者には手間がかかりましたね。
この例えは外人が機械となります。「おは」のような発言は短く記述できるがその分翻訳に手間がかかる(プログラム速度が落ちる)というわけです。
※中にはおはようではなく「おはようじょぺろぺろ」のようによくわからない挨拶をする人がいるせいで長い=速度が速いというわけではありません。別に発言者の問題じゃない場合も当然ありますが。

もう少し詳しく踏み込むと言語が多い理由としては得意分野が違うというのもあります。
例えばJavaという言語はWEBサービスに特化している、C++は車等のシステムに向いている等。
専門用語を出すのならライブラリやフレームワークによって同じ言語でも出来ることがかなり異なります。



9.番外編:ハッカーとクラッカー


よくごっちゃにしている人がいますがハッカーとはPCに滅茶苦茶詳しい人を指します。
皆がよく使うような悪い行いをする人はクラッカーと呼びます。
ハッキングという言葉も「紐解く」や「解析する」という意味合いです。(だからライフハックって言うよね)
皆がよく使うような悪い行いはクラッキングと言います。
ただあまりにもごっちゃにする人が多すぎるので最近ではホワイトハッカー(ホワイトハット)やブラックハッカー(ブラックハット)と呼ぶようになりました。
また、セキュリティ系のエンジニアは総じて多少なりともクラッキング行為が出来ます。敵の手法を知らずして対策なんて当然出来ません。なのでクラッキング=悪のある行為と捉えるのも多少違います。(言うてペネトレーションテストという用語が有るんだけどね。)

よく誤解されていることが「IPなんて知られても何も出来ねえよw」とか「ハッキング(クラッキング)なんて出来るわけねえじゃんw」とか「そんな技術簡単には学べないし書籍にも無い」とか言われていてセキュリティ意識の低さが嘆かわしいです。
少なくとも僕の周りには大手配信者が多く、有名な分狙われることも多いと思うので次回の記事では悪用されないようギリギリの範囲でクラッキングについて詳しく書ければなと思っております。

コメント


管理者のみに表示

トラックバック