独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【情報処理】仮想化とコンテナの基本

ここでは仮想化とコンテナの基本について説明します。

仮想化とは

クラウドサービスなどでは、サーバーの仮想化の技術が使われています。
仮想化とはどのような技術をさすでしょうか。
一昔前までは、システムを構築する際はサーバーを調達し、1台のサーバーに1つのOSをインストールし、その中にシステムを構築をしていました。
しかし、物理的なサーバーのスペックが高スペックでも、システムが使用するリソースが少ないのであれば、オーバースペックとなります。
そこで、物理的に1つのサーバーに対して複数のOSが稼働できる状態にし、サーバーリソースを効率よく利用できる技術が作られました。
それが仮想化です。
仮想という言葉には「事実上の」という意味があります。
物理的には1台のサーバーでも、事実上複数のサーバーが稼働しているように見えるため、仮想化と呼ばれているのだと思います。
1台のサーバーで複数のOSを動かすだけではなく、逆に1つのOSを複数のサーバーで稼働させることも可能です。

仮想化の分類

仮想化には大きく2つの分類があります。

  • ハイパーバイザー型
  • ホストOS型

の2つです。

ハイパーバイザー型

ハイパーバイザー型のイメージは、ハードウェア上で仮想化ソフト(ハイパーバイザー型のソフト)が稼働し、仮想化ソフト上で複数のOSが稼働しているイメージです。
仮想化ソフト上で動いているOSのことをゲストOS、または仮想マシン(Virtual Machine : VM)と呼びます。
ハイパーバイザー型の仮想化ソフトには

などがあります。
ハイパーバイザー型の仮想化を行う場合、OSと通信する際に仮想化ソフトを中継する必要があるため、ハードウェア上に直接OSをインストールするよりもパフォーマンスは落ちます。
しかし、その分リソースを有効活用できたり、バックアップが用意になったり、ハードウェアに障害があった場合に仮想化ソフトを通じて別のハードウェアに移動できるなど、様々なメリットがあります。
クラウドのIaaSで使用されている技術です。

ホストOS型

ホストOS型は、OS上に仮想化ソフトをインストールし、そのソフトの上で別のOSを動作させます。
例としてはWindows上に仮想化ソフトをインストールし、その仮想化ソフト上でLinuxOSを動作させる。
あるいは、Mac OS上に仮想化ソフトをインストールし、その仮想化ソフト上でWindowsを動作させる、などです。
この時、仮想化ソフトをインストールするOSのことをホストOS、仮想化ソフト上で動作するOSのことをゲストOS、または仮想マシン(Virtual Machine : VM)と呼びます。

ホストOS型の仮想化ソフトには

などがあります。
ホストOS型の場合、仮想マシンはホストOSのリソースの中で動作するため、その分パフォーマンスは悪くなります。
また、ホストOSに障害があった場合には仮想マシンも動作しなくなります。
そういった点から、ホストOS型の仮想化はサーバーの運用形態としては使用されません。
ただ、ファイルをコピーするだけで新しい仮想マシンを作成することができるため、開発環境を構築する際などによく利用されています。

コンテナ

仮想化の技術によって、サーバーのリソースを活用できるようになりましたが、同じOSが複数存在する場合も少なくありません。
そうなった場合、複数のOSを動かす分だけリソースが無駄に動いていることになります。
そこで、1つのOSの中で独立したアプリケーションの実行環境を作ることができる技術が登場しました。
それがコンテナです。
コンテナはDocker社が開発しているDockerが有名です。
開発環境、アプリケーションの実行環境を作る際に便利なツールで、クラウドのPaaSでも利用されています。

【情報処理】クラウドの基本

クラウドについての解説になります。

クラウドとは

クラウドは、クラウドコンピューティングの略です。
クラウドとは、「コンピュータの資源(リソース)を必要な時に必要な分だけ使うことができる仕組み」のことです。
定義としてはこんな感じですが、一般のユーザーが利用するものから、ITのサービスを提供する側が資料するサービスまで実に様々です。
一言でクラウドと言っても色々と分類があるので、後で見ていきます。

今はクラウドという仕組みは当たり前に使われていますが、一昔前は、システムを作ってサービスを提供するためには自分たちでサーバー機器を調達し、サーバーOSをインストールし、そこにシステムを構築するという作業を行っていました。
それがクラウドという技術が登場したおかげで、自分たち機器やOSを調達しなくても簡単にサーバーを用意することができるようになりました。

クラウドには雲という意味があります。
サービスを構築したり利用したりする場合にはどこかに物理的なサーバーが存在するのですが、それがどこにあるのかを意識しなくても使うことができるのでそのような言葉になったようです。

クラウドとオンプレミス

先ほどの説明で、一昔前は自分たちでサーバーを調達してサーバーを構築してサービスを提供していたと書きました。
このように自分たちでサーバーを提供して1からサービスをつくっていくことをオンプレミスと呼びます。
現在はクラウドを利用することが一般的になってきていますが、クラウドとオンプレミスはそれぞれメリットとデメリットがあります。
クラウドが主流だからクラウドを利用する、というのではなく、それぞれの特徴を知ったうえでうまく使い分けることが重要です。

クラウドのメリット

クラウドを利用することのメリットとしては

  • リソースを調達のコストを抑えられる(初期コストを低くできる)
  • すぐに始める事ができる(サーバーを調達する期間を考慮しなくても良い)
  • メンテナンスのコストを抑えらえる
  • 必要な時だけスペックを変更できる

などがあります。
オンプレミスの場合、物理的にサーバーようのコンピューターを調達する必要があるので、届くまでに時間がかかるため、使い始めるまでに多少時間がかかります。
また、サーバー用のハードウェアやソフトウェアライセンス購入分のお金のコストもかかります。
その点クラウドであればハードウェアやライセンスを調達する必要がない分、初期コストを安く抑えられ、かつアカウントさえあればすぐに使い始める事ができます。
(使用した分だけのお金はかかります。)
また、サーバーのメンテナンスや障害対応をクラウド事業者に任せる事ができるのもメリットの一つです。
システムによっては、特定の期間、あるいは特定の時間帯だけ負荷が集中するようなシステムもあります。
クラウドでは、必要に応じてサーバーを増設して負荷分散したり、スペックを変更する事ができます。
オンプレミスの場合、負荷がピークの時に合わせて構築しておく必要があるため、ピーク時以外はリソースを持て余すことになります。
クラウドであればまさに必要な時に必要な分だけリソースを使う事ができるので、様々なシステムに柔軟に対応する事ができます。

クラウドのデメリット

ではクラウドのデメリットも見ていきましょう。

  • 提供されているサービスしか利用できない
  • 社内のサービスとの連携が難しい場合もある
  • クラウド事業者都合のメンテナンスにより予期せぬ事が起きる

などがあります。
当然ですがクラウドでは提供されていないサービスを利用する事はできません。
今はクラウドも多くのサービスがあり、不便する事はそれほど多くないかもしれませんが、やはり自由度という点ではオンプレミスの方が高くなります。
またクラウドでは、ネットワークやセキュリティの観点から自社のサービスとの連携が難しい場合もあります。
クラウドでももちろんセキュリティは考慮されていますが、オンプレミスの方が閉じたネットワークでサービスを構築できる分、セキュリティ面でも安全に構築する事ができます。
また、クラウドを利用する場合、サーバーのメンテナンスはクラウド事業者によって行われることになります。
これは自分たちでメンテナンスをする必要がないという点でメリットでもあるのですが、予期しないタイミングでサービスが停止してしまう可能性があることでもあります。
計画的に自分たちでメンテナンスをできないという点ではデメリットでもあります。

パブリック・クラウドとプライベート・クラウド

クラウドには、パブリック・クラウドとプライベート・クラウドがあります。
パブリック・クラウドとは、インターネットを使って不特定多数の人がアクセスすることができるクラウドです。
上記のメリットやデメリットとして説明したのは主にパブリック・クラウドの説明になります。
既に説明した通り、クラウドはオンプレミスと比べてコスト面やシステムの導入スピードにおいて大きなメリットがあります。
しかし、セキュリティの面でどうしても導入が難しいという組織もあることでしょう。
その場合、プライベート・クラウドという選択肢もあります。
これは、サービスとしては通常のクラウドと同じですが、VPNや専用回線を使って接続することで、自社専用のクラウドとして利用することを可能とした技術です。
パブリック・クラウドよりもコストはかかるものの、物理的にサーバーを調達せずに済むのでオンプレミスに比較すれば安価になります。
ちょうどパブリック・クラウドとオンプレミスの中間に位置する運用方法と考えて良いでしょう。
システムを導入す際には、パブリック・クラウド、プライベート・クラウド、オンプレミスのそれぞれの特性を理解して適切に運用方法を決めることが大切です。

クラウドの分類

クラウドにはいくつかの分類があります。

  • SaaS(Software as a Service)
  • PaaS(Platform as a Service)
  • IaaS(Infrastracture as a Service)

などがあります。

SaaS

Software as a Service
予め用意されたアプリケーションがサービスとして提供されているもの。
SaaSの代表的な例としてよく紹介されるのは

などがあります。
専門的な知識も不要でお手軽に活用する事ができますが、提供されている機能を使うことしかできないため、自由度は低いです。

PaaS

Platform as a Service
アプリケーションを稼働させるための環境、あるいは開発環境などを提供してくれるサービスです。
例えば、OS、データベース、プログラミング言語、ライブラリ、フレームワークなどを提供してくれます。
Paasの例としては

などがあります。

IaaS

Infrastructure as a Service
インフラに関わる部分、つまりストレージなどのハードウェアに関するリソースを提供してくれるサービスです。
IaaSの例としては

などがあります。

クラウド事業者

クラウドサービスを提供している主な事業者を紹介します。
世界中で広く認知されているクラウド事象者としては

があります。
また、中国企業アリババグループが提供するAlibaba Cloudも急成長を遂げています。
国内企業だと

などがあります。

【Linux】Linux入門(コマンド編)

基本コマンド

  • pwd
    point working directory
    現在の作業場所(カレントディレクトリ)を確認するコマンド。

  • ls
    list
    ファイルの一覧を確認するコマンド。
    ls -l とするとファイルの詳細情報も同時に確認できる。
    ls -aとすると、隠しファイルも含めて表示される。
    ls -laのように組み合わせることも可能。
    -a, -lなどはオプションと呼ばれ、コマンドの動作を調整してくれる。
    コマンドによって指定できるオプションが決まっており、一般的には-を付けて指定します。

  • cd
    change directory
    カレントディレクトリを移動するためのコマンド。
    cd [移動場所]
    のようにコマンドと同時に移動場所を指定する。
    相対パス絶対パスによる指定が可能。
    このようにオプションとは別でコマンドに指定する値のことを引数と呼びます。
    cdコマンドでは引数を指定しなかった場合はユーザーのホームディレクトリに移動します。
    また、cd ~
    と指定してもホームディレクトリに移動します。

  • echo
    引数で指定された文字列を標準出力するためのコマンド。
    echo [文字列]とすると、文字列が画面に出力されます。
    文字列はダブルクォーテーションでくくって表現します。
    例えば
    echo "Hello" のようにします。

ディレクトリ操作コマンド

  • mkdir
    make directory
    新しいディレクトリを作成するためのコマンドです。
    ディレクトリとはWindowsでいうところのフォルダのことです。
    Linuxの場合はフォルダのことをディレクトリと呼びます。
    mkdir [新規ディレクトリ名] とするとディレクトリが作成されます。

  • rmdir
    remove directory
    ディレクトリを削除するためのコマンド。
    rm [ディレクトリ名]
    とすると削除することができます。
    ただし、このコマンドで削除できるのは中身が空のディレクトリのみです。
    中身が既に存在する場合には後述するrmコマンドを使用します。

ファイル操作コマンド

  • touch
    ファイルの更新日時を更新するコマンド。
    touch [ファイル名]
    とすることで、対象のファイルの更新日時がコマンド実行時の日時に更新されます。
    ファイルが存在しない場合は、中身が空のファイルが作成されるため、ファイルを作成する際にもよく使用されます。

  • cp
    copy(コピー)
    ファイルをコピーするコマンド。
    cp [コピー元] [コピー先]
    コピー先に新しいファイル名を指定した場合、コピー元のファイルがコピーされたコピー先で指定した名前で出来上がる。
    コピー先にディレクトリを指定した場合は、ディレクトリの中にコピー元のファイルがコピーされる。
    ディレクトリ毎コピーすることも可能。
    ディレクトリの中身も含めてコピーしたい場合は、-r のオプションを付ける。

  • mv
    move(移動)
    ファイルを移動するコマンド。
    mv [移動元] [移動先]
    移動先がディレクトリの場合、移動元のファイルを移動先のディレクトリに移動する。
    移動で存在しないファイル名を指定した場合、移動元のファイルのリネームとなる。

  • rm
    remove(削除)
    ファイルを削除するコマンド。
    rm [ファイル名]
    ディレクトリを指定することも可能。
    ディレクトリを中身も含めて丸ごと削除する場合は、-r のオプションを付ける。

  • file
    ファイルの詳細を調べるコマンド。
    file [ファイル名]
    とするとファイルの種類を特定することができる。
    ファイルに拡張子がなく、何のファイルか分からない場合などに役に立ちます。

ファイル参照のコマンド

  • cat
    cat [ファイル名]
    とすることでファイルの中身が標準出力される(画面に表示される)。
    行数の少ないファイルの内容を確かめるのには向いているが、行数の多いファイルの中身を見るのには向いていない。

  • more
    1ページ分のファイルの内容を表示するコマンド。
    Enterで次のページに進むことができる。
    後戻りをすることはできない。

  • less
    1ページ分のファイルの内容を表示するコマンド。
    moreに似ているが、moreを改良して機能を追加したコマンドなので、一般にlessの方が便利です。
    スペースで次のページに進む。

  • head
    ファイルの先頭行を表示するコマンド。
    オプションで先頭の何行を表示するかを指定できます。

  • tail
    ファイルの末尾を表示するコマンド。
    -f のオプションを付けることで、リアルタイムでファイルの変更をモニタすることができます。
    ログファイルを監視する場合などに使用することができます。

ファイル検索のコマンド

  • locate
    ファイル名で検索するコマンド。
    locate [ファイル名パターン]
    ワイルドカード(*など)が使用可能。
    インストールされていない場合もあり、その場合はインストールしなければ使用できない。

  • find
    オプションを使用して様々なファイル検索が行えるコマンド。
    find /検索したいディレクトリ オプション
    で検索を行う。 以下は主要なオプション。

その他、サイズ、ユーザー、パーミッションなどによる検索も可能。
複数条件指定するときは、-a を付ける。

その他のファイル操作

  • grep
    検索キーワードを指定してファイルの中から該当する個所を検索するコマンド。
    grep [検索キーワード] [検索対象のファイル]
    パイプを使って他のコマンドと組み合わせて紹介する場合も多い。
    パイプについては別記事で解説。

  • sort
    テキストファイルの中身をソート(並び替え)するコマンド。
    オプションにより、何列目でソートするか、逆順でソートするか、数値としてソートするか、などが指定可能。
    -r で逆順でのソート、-kn n列目でソート。

  • tr
    文字列の置き換えを行うコマンド。
    パイプなどと組み合わせて使われる。

  • diff ファイルの比較を行うコマンド。

  • ln
    リンクを張るコマンド。
    リンクにはハードリンクとシンボリックリンクがある。
    ほとんどの場合はシンボリックリンクを使用する。
    ファイルのショートカットのようなもの。
    ln -s でシンボリックリンクになる。

コマンド入力の効率化

  • tabキー
    Linux(正確にはbash)にはコマンドを途中まで入力した状態でタブキーを押すと、補完してくれる機能があります。
    候補が複数ある場合はその候補の一覧を表示してくれたりします。
    コマンドだけでなく、ファイルやフォルダ名を引数として入力する際にも使えます。

  • 上下矢印キー
    コマンドの入力待ち状態の時に上矢印キーを押すと、直前に実行したコマンドの内容が表示されます。
    更に上ボタンでコマンドの実行履歴を過去にさかのぼることができます。
    また、下矢印キーで直近の履歴まで戻せます。

tabキーと上下矢印キーはコマンドを効率よく操作するために欠かせない操作なので積極的に活用していきましょう。

【Linux】Linux入門(Linuxの概要)

Linuxの基本的な解説です。

Linuxとは

Linuxリナックス)は、サーバーや組み込み系のシステム幅広い分野で利用されているコンピュータOSです。
UNIXというOSを真似てリーナス・トーバルズという人物が作り上げたOSがLinuxです。
コンピュータOSの中にはUNIXから派生して作られたOSもあります。(Mac OSなど)
LinuxUNIXから直接派生したOSではありませんが、UNIXと同じような操作性からUNIXライクなOSなどとも呼ばれます。

Linuxのライセンス

Linuxオープンソースと呼ばれ、誰でも自由に利用、修正、再配布することができます。
具体的には以下のような特徴があります。

  • プログラムを実行する自由
  • ソースの改変の自由
  • 利用・再配布の自由
  • 改良したプログラムをリリースする権利

Linuxは元々UNIXというOSを真似て作られたものですが、その背景にはライセンスの問題が絡んでいます。
それこそUNIXは元々はオープンソースで、ソースコードが公開されていたのですが、後にライセンスビジネスが始まり、無償で利用することができなくなってしまいました。
そこでリーナスが一から無償で使用できるOSとしてLinuxを作った背景があります。

Linuxディストリビューション

Linuxは狭義にはカーネルと呼ばれるOSの核の部分のことを指します。
しかし、実際にOSとして使用するには、カーネルだけではなく様々なソフトウェアが必要になります。
カーネルだけの状態から様々なソフトウェアを構築していくのは専門的な知識がないと難しいです。
そこで、様々な企業や団体が、LinuxのOSにあらかじめ必要なソフトウェアをインストールしておき、使いやすい状態で配布しています。
このように配布されているものをLinuxディストリビューションと呼びます。
配布している企業や団体のことをディストリビューターと呼びます。
これらディストリビューションは無償で使えるものもあれば有償のものもあります。
数多くの種類がありますが、有名どころでいうと、大きくRed Hat系とDebian系の2種類に分かれます。
Red Hat系には、FedoraRed Hat Enterprise LinuxCentOSなどがあります。
Debian系にはUbuntu、Kali Linuxなどがあります。

それぞれに特徴があり、使用できるコマンドもRed Hat系とDebian系で異なります。
Red Hat Enterprise Linuxは略してRHELとも呼ばれ、Red Hat社が開発、販売しているLinuxOSで、有償です。
CentOSRHELから商用パッケージを除去したもので、無償で利用することができます。
Ubuntuは使いやすさを売りにしているLinuxOSです。

コマンド操作

LinuxGUIによる操作も可能ですが、一般的にはCUIによる操作をすることが多いです。
GUIとは、Graphical User Interfaceの略で、マウス操作で直観的に操作できるような仕組みです。
WindowsMac OSなどがGUIです。
CUIはCharacter User Interfaceの略で、キーボードでの入力よる文字だけで操作をします。
テレビや映画などで黒い画面に文字だけを入力する画面を見たことがある人も多いかと思いますが、あのようなイメージです。
WindowsならコマンドプロンプトPowerShellMacの場合はターミナルで同じようなことができます。

ではなぜCUIの操作が一般的なのでしょうか。
GUIの場合、画面の描写に対して多くのコンピュータリソース(CPUやメモリ)を使用します。
例えばLinuxをサーバーOSとして使用する場合、システムの規模にもよりますが、大量のリクエストを高速にさばいて処理し、レスポンスを返すことが必要になります。
つまり画面描写の処理があると、サーバーの本来必要な処理以外の部分でリソースを使う必要が出てきてしまううので、サーバーをしての機能を最大限に発揮するにはCUIでの操作の方ができしています。

また、コマンド操作前提なこともあって、ほぼすべての操作がコマンドで実施できます。
慣れるまでは難しく感じますが、慣れるとGUIよりも素早く行える操作もあります。
ちなみにMac OSも元はUNIXからの派生なので、Linuxと同じようなコマンドが使えます。

LinuxカーネルではX Windows Systemと呼ばれるものが動いており、これを利用することでGUIによる操作も可能です。

環境構築

TODO

プロンプトの説明

Linuxの環境を作ってログインすると、環境にもよりますが以下のように表示されます。
[vagrant@localhost ~]$

これをプロンプトと呼びます。
プロンプトは、促すという意味の英語で、入力を促してる部分であることを表します。

一つ一つの要素を解説します。

  • vagrant:ユーザー名
  • localhost:マシン名
  • ~:作業場所。~はチルダと読み、ホームディレクトリを短く表現した形
  • $:一般ユーザーの権限を表す記号。管理者の場合は#になる。

システムの全体像

Windowsの場合、フォルダの構成はCドライブから始まりますが、LinuxにはCドライブのような概念はありません。
「/」がルートディレクトリといって、システムの一番上の階層を表します。
ちなみにwindowsでいうところのフォルダは、Linuxではディレクトリと呼ばれることが多いです。

ここではよく使われる階層を解説。

/bin
cat, cpなど、システムを動かすための基本コマンドがいっぱい入っている。

/dev
バイスファイルを格納する。ハードウェアを扱えるように用意された特殊なファイル。

/etc
アプリケーションなどの設定ファイルが入っている。
Linux自体の設定ファイルもここに入っている。

/home
各ユーザーのホームディレクトリが入っている。

/sbin
システム管理用のコマンドが入っている。
管理者ユーザー向けのコマンド。shutdownなど。

/usr
一般的なアプリケーションが格納されているディレクト
新しくアプリケーションをインストールする場合は、大抵ここに入る。

/var
システムのログファイルなど、頻繁に書き換わるファイルが置かれる。

【情報処理】ネットワークの基本(IPv4)

ここではネットワークの中でも、IPv4IPアドレスについて解説します。
IPアドレスの基本と、IPv4IPv6のざっくりとした解説はネットワークの基本の記事に書きましたので、そちらを参照ください。
ここではIPアドレスという表記は基本的にIPv4におけるIPアドレスの前提で解説します。

IPアドレスとは

まずはIPアドレスがそもそも何なのかをおさらいします。
IPアドレスは、Internet Protocol アドレスの略で、ネットワーク上の住所を表す数値となります。
同じネットワーク内において、異なるコンピュータ同士(ルータなどの通信機器も含む)ではIPアドレスの値は重複してはいけません。
同一ネットワーク内で問題なく通信を行う場合、全ての機器に異なるIPアドレスを割り当てる必要があります。
スマホやPCなどでインターネットに接続する際には、必ずIPアドレスが必要になります。

プライベートIPアドレスグローバルIPアドレス

IPv4IPアドレスにはプライベートIPアドレスグローバルIPアドレスがあります。
これはIPv4を効率よく活用するための仕組みの一つです。

簡単にいうと、グローバルIPアドレスはインターネットに接続するためのIPアドレスで、プライベートIPアドレスは、社内や学校内や家庭内など、閉じられたネットワーク内におけるIPアドレスです。

プライベートIPアドレスは、同じネットワーク内でアドレスが重複しないように割り振ります。
基本的にはどんな値でも割り振れますが、IPアドレスの管理組織により値の範囲が定められており、
10.0.0.0~10.255.255.255(クラスA)
172.16.0.0~172.31.255.255(クラスB)
192.168.0.0~192.168.255.255(クラスC)
の範囲から割り振ることになっています。

プライベートIPアドレスは、Windowsの場合はコマンドプロンプトから確認することができます。
コマンドプロンプトを起動し、
ipconfig
とコマンドを入力します。

ネットワークアダプタの数だけ情報が表示されるかと思いますが、その中でインターネットの接続に使用されているネットワークアダプタ
IPv4 アドレス」
の右側に書かれているピリオドで区切られた4つの数値がプライベートIPアドレスです。
私の環境の場合
192.168.0.6
となっています。

プライベートIPアドレスはネットワークの設定から自分で設定することもできますが、ルータの機能で自動的に重複しないように割り振ってくれます。

続いてグローバルIPアドレスを確認してみましょう。
グローバルIPアドレスは下記のサイトから確認することができます。

https://www.cman.jp/network/support/go_access.cgi

IPアドレスの管理組織

ここでIPアドレスの管理組織についても見ておきましょう。
IPv4では約43億のIPアドレスが使用可能ですが、個人個人が好き勝手にアドレスを使用しては、すぐに枯渇してしまいますし、何よりいたるところで重複が起きてしまいます。
IPアドレスが重複せずに効率よく使用されるように、管理組織が存在します。
IPアドレスの管理組織は、IANA(Internet Assigned Numbers Authority) を頂点とした階層構造になっています。
IANAの下には、地域ごとの管理組織があり、その下に国ごとの管理組織があります。
日本は、APNIC(Asia Pacific Network Information Centre)というアジアの管理組織の下にあるJPNICという組織が管理しています。
JPNICの下には各インターネットサービスプロバイダーがあります。
インターネットを利用するユーザーは、このインターネットサービスプロバイダーと契約することで、IPアドレスを使用することができるようになります。

IPアドレスの表記方法

ここではIPアドレスの表記方法について説明します。
プライベートIPアドレスグローバルIPアドレスも、4つの数値がピリオドで区切られて表記されています。
IPv4は、32bitで表現されています。
普通に表記すれば0と1の組み合わせが32個並ぶ形になりますが、それだと人が見た時に分かりにくいです。
そのため、8bitで4つに区切り、それぞれを10進数で表示するのが一般的です。
8bitの場合、10進数では最大255まで表現できます。
なので、IPv4IPアドレスは0~255の数値が4つ並んだ形で表現されます。

DHCP

IPアドレスは、手動で設定することも可能です。
Windowsの場合、
コントロールパネル ⇒ ネットワークとインターネット ⇒ ネットワークと共有センター ⇒ アダプターの設定の変更
を選択します。
選択すると自分のPCのネットワークアダプタの一覧が表示されます。
その中からインターネットに接続されているアダプタを右クリックし、「プロパティ」を選択します。

プロパティのウィンドウから、「インターネット プロトコル バージョン4(TCP/IPv4)」を選択し、プロパティを選択します。
するとIPアドレスを設定することができる画面が表示されます。
この画面で「IPアドレスを自動的に取得する」にチェックが入っている場合は、ルータの機能により各端末に自動でIPアドレスが割り振られます。

そうでない場合は、IPアドレスサブネットマスクデフォルトゲートウェイなどを手動で設定する必要があります。

ここでDHCPと呼ばれる機能について説明します。
DHCPとは、Dynamic Host Configuration Protocol の略で、IPアドレスやそれに関連する設定情報を動的に割り当ててくれる技術のことです。
ルータ(インターネットに接続するために必要な機器)には大抵このDHCPの機能がついています。
ルータでDHCPの機能が有効になっていれば、無線wi-fiや有線LANに接続した際に、自動的に重複しないようにIPアドレスを割り当ててくれます。

NAT

ここでプライベートIPアドレスグローバルIPアドレスの話に戻ります。
もし今社内や学校内、家庭内にいて、2台以上のPCを使用できる状態にあるのであれば、是非ともその2台でプライベートIPアドレスグローバルIPアドレスを確認してみてください。

おそらく、プライベートIPアドレスは2台で異なる値となっており、グローバルIPアドレスは2台で同じ値となっていると思います。

まず、基本的にIPアドレスはネットワーク内で重複しないように設定する必要があります。
ですので、同じネットワーク内にある端末同士ではプライベートIPアドレスは重複しないように設定されているはずです。
(仮に重複していた場合は、同じネットワーク内の端末同士やインターネット上でうまく通信できなくなります。)
手動でIPアドレスを設定している場合は、お互いでIPアドレスを確認しながら、重複しないように設定します。
DHCPの機能で自動的にIPアドレスを割り振っている場合は、DCHPの機能で各端末同士で重複しないようにIPアドレスを割り振ってくれます。

プライベートIPアドレスは、同じネットワーク内だけで有効となるIPアドレスです。
なので、プライベートIPアドレスを使ってインターネットに接続することはできません。
インターネットに接続する場合にはグローバルIPアドレスが必要です。

そこで、ルータにはプライベートIPアドレスグローバルIPアドレスを変換するための機能がついています。
それがNATと呼ばれる機能です。
NATはNetwork Address Translation の略で、先に述べた通りプライベートIPアドレスグローバルIPアドレスを相互に変換してくれる機能のことです。
この機能により、各PCではプライベートIPアドレスしか設定していない状態でも、インターネットへの接続が可能となっています。

厳密にいうと、NATはプライベートIPアドレスグローバルIPアドレスを1対1に変換する機能のことをいいます。
ただ、多くの場合、同じネットワーク内で各端末のグローバルIPアドレスを確認すると同じ値になっているかと思います。
つまり、グローバルIPアドレスとプライベートIPアドレスが1対多で変換されています。
これはNAPTと呼ばれる機能によって実現されています。
NAPTはNetwork Address and Port Translation の略で、IPアドレスに加えてポート番号と呼ばれる値も付け加えることによって、1対多の変換を可能にしている機能です。
Linuxサーバーに実装されているNAPTの機能はIPマスカレードと呼ばれます。

このように厳密にはNATとNAPTで機能の違いがありますが、ルータのマニュアル等ではほとんどの場合NAPTの機能もNATという言葉で説明されています。

サブネットマスク

コマンドプロンプトからIPv4アドレスを確認した場合、IPv4アドレスのすぐ下にサブネットマスクという表記があるかと思います。
続いてはこのサブネットマスクについて説明します。
サブネットマスクIPアドレスを「ネットワーク部」と「ホスト部」に分けるための仕組みです。
ネットワーク部とは、そのIPアドレスがどのグループに属しているかを表す部分で、ホスト部は、そのグループの中での各端末を区別するための部分です。

IPアドレスは32bitの数値で表すことができます。
ただ、数値を無作為に割り振ってしまうと管理しにくくなります。
例えば、ある程度規模の大きな企業の場合、部署ごとに、あるいはフロアごとに、など、意味のある単位でグルーピングしてIPアドレスを割り振った方が管理もしやすく、またセキュリティの面なども考慮しやすくなります。
このようにネットワークをグループ分けは、32bitを適当な場所で区切って、ネットワーク部とホスト部に分けることによって実現します。

このとき、32bitの内どこまでがネットワーク部でどこからがホスト部なのかを識別するために用いられるのがサブネットマスクです。
サブネットマスクを32bitで表示したときに、1で表示されている部分がネットワーク部です。

例えば私の環境ではIPv4アドレスとサブネットマスクは以下の様になっています。

IPv4 アドレス 192.168.0.6
サブネットマスク 255.255.255.0

このサブネットマスクの値を2進数で表示すると、
11111111.11111111.11111111.00000000
となります。
つまり、192.168.0.6のうちの最初の24bit(192.168.0まで)がネットワーク部を表し、後半の8bit(6の部分)がホスト部を表します。

例えば、
192.168.0.7
というIPアドレスの端末は、同じネットワーク部(グループ)であることを表しており、
192.168.1.5
というIPアドレスだった場合、異なるネットワーク部に属していることになります。

どこまでがネットワーク部でどこからがホスト部かを表す方法には、サブネットマスクを使用せずに、IPアドレスのあとにネットワーク部のbit数を/(スラッシュ)で区切って表記する方法もあります。
例えば、今回の例の場合、前半の24bitがネットワーク部を表しているので
192.168.0.6/24
と表記します。
このような表記方法をCIDR記法と呼びます。

クラスによるIPの分類

先に紹介したサブネットマスクやCIDRと呼ばれるネットワークの分け方はIPアドレスが登場したときからあったわけではありません。
IPアドレスが登場したばかりのころは、クラスと呼ばれる方法でIPアドレスのグループを管理していました。
しかし、その方法では、IPアドレスを有効活用できない(つまり、使われないIPアドレスが多く出てしまう)問題がありました。
先に述べたIPアドレス枯渇問題により、いずれIPアドレスが足りなくなると言われている中、IPアドレス有効に活用される仕組みとして登場したのがサブネットマスクやCIDRといった仕組みです。

そのため、クラスの分類は現在はそれほど重要な概念ではありませんが、簡単に説明しておきます。
クラスでIPアドレスを分類する場合、A~Dまでの4つのクラスがあります。

クラスAは、先頭の1bitが0で始まり、先頭8ビットまでがネットワーク部になります。
IPアドレスの範囲を10進数で表すと0.0.0.0~127.255.255.255です。
下位の24bitがホスト部になります。
1つのネットワーク部で割り当てができるホストの数は16,777,214個です。

クラスBは、先頭の2bitが10で始まり、先頭の16ビットまでがネットワーク部です。
IPアドレスの範囲を10進数で表すと128.0.0.0~191.255.255.255です。
下位の16bitがホスト部になります。
1つのネットワーク部で割り当てできるホストの数は65,534個です。

クラスCは先頭の3bitが110から始まり、先頭から24bitまでがネットワーク部です。
IPアドレスの範囲を10進数で表すと192.0.0.0~223.255.255.255です。
下位8bitがホスト部になります。
1つのネットワーク部で割り当てできるホストの数は254個です。

クラスDは、先頭の4bitが1110で始まり、先頭の32bitまでがネットワーク部です。
IPアドレスの範囲を10進数で表すと224.0.0.0~239.255.255.255です。
クラスDはIPマルチキャストと呼ばれる通信で利用されるもので、ホスト部はありません。

クラスでの分類の場合、クラスA、クラスB、クラスCのいずれかのクラスでIPアドレスを割り当てることになりますが、この場合無駄が多く発生します。
そのため、できるだけ無駄なくIPアドレスを利用できるようにサブネットマスク等が登場し、今ではあまり使用されていません。

ホスト部に割り当て可能なアドレス

サブネットマスクが255.255.255.0だった場合、ホスト部に割り当て可能なアドレス後半の8bit分です。
この場合、0~255までの範囲が扱えるので、最大256台の端末を接続することが可能になりそうです。
しかし、実際には全ての値が扱えるわけではなく、端末に割り当てることができない数値もあります。

まず、ホスト部の数値が全て0となっているアドレスは、ネットワークアドレスと呼ばれます。
ネットワークアドレスはそのネットワークそのものを表すアドレスとなっており、端末に割り当てることはできません。
今回の例でいうと192.168.0.0がネットワークアドレスになります。

そして、ホスト部の数値が全て1となっているアドレスは、ブロードキャストアドレスと呼ばれます。
ブロードキャストアドレスは、そのネットワーク内の全ての機器に一斉にデータを送るときに使用される特別なアドレスで、このアドレスも端末に割り当てることはできません。
今回の例でいうと192.168.0.255がブロードキャストアドレスとなります。

まとめると、ホスト部が8bitだった場合、端末に割り当てることができるIPアドレスの数は、256 - 2(ネットワークアドレスとブロードキャストアドレス) = 254 ということになります。
一般化すると、ホスト部がnbitだった場合、そのネットワーク内で割り当て割れるIPアドレスの数は 2のn乗 - 2個 ということになります。

また、ルータにもIPアドレスが必要になりますが、ルータは一般的にホスト部のアドレスが1のアドレスを割り当てることが多いです。
今回の例でいうと、192.168.0.1がルータのアドレスとなります。
ルータのIPアドレスは、コマンドプロンプトでipconfigでIPアドレスを確認した際の「デフォルト ゲートウェイ」の値です。

【情報処理】サーバーの基本

ITの世界にはサーバーという言葉が頻繁に出てきますが、
サーバーって何ですか?と聞いて簡潔に答えられる人は意外と少ない気がします。
ここではサーバーについて解説します。

ちなみに、日本語の場合は本やサイトによって「サーバー」と書く場合と「サーバ」と書く場合があります。
書いている人の好み(と気分)なので、どちらでもよいのですが、
ここではサーバーとします。
英語ではServerと書きます。

サーバーとは

サーバーとは、教科書的な説明をするならば、サービスを提供するコンピュータのことです。
ただしそれだけではまだイメージがしにくい場合も多いかと思います。
もう少し具体的に言えば、依頼者(クライアント)からの要求(リクエスト)を受けたら、
その内容に応じて応答(レスポンス)をクライアントに返してあげるコンピュータです。

こう書くと、クライアントとかリクエストとはいったい何?
となるかもしれません。
これはサーバーの種類によって変わります。
ではサーバーの種類についてみていきます。

サーバーの種類

サーバーの種類の説明に入る前に、サーバーと聞くと物理的にでかくて高性能なコンピュータのことをイメージする人も多いかもしれません。
それも間違いではありません。
しかし、先ほど説明したようにサーバーとはリクエストに応じてレスポンスを返す役割を持つコンピュータのことなので、高性能なコンピュータのことを指すわけではないことに注意してください。
文脈にもよりますが、サーバーとは基本的にはソフトウェアのことを指します。
サーバーソフトウェアにも役割によって様々な種類がありますが、代表的なサーバーソフトウェアは例えば

等があります。
もちろんここで上げた例はごく一部です。
コンピュータの世界には様々なサーバーがあります。
簡単にそれぞれ解説します。

Webサーバー

Webサーバーはサーバーの中でもイメージがしやすいサーバーかもしれません。
なぜならインターネットを利用する上で欠かすことのできないサーバーだからです。
ブラウザを使ってインターネットを閲覧するとき、必ず何かしらのURLがあることはご存知かと思います。
Webサーバーは、URLをリクエストとして受け取り、そのURLに対するWebページを返す役割を持つサーバーです。
クライアントはWebブラウザになります。
URLを受け取ると、それに合わせてHTMLファイルや画像ファイルなど、 対象となるWebページを構成するリソース(資源)をレスポンスとして返します。 Webサーバーの場合、Webブラウザがクライアントとなります。 厳密にはWebサーバーに送られるリクエストはHTTPリクエストと呼ばれ、URL以外の情報もあります。
また、レスポンスはHTTPレスポンスと呼ばれ、リソース以外の情報もありますが、ここでは分かりやすさを優先しています。
まずはURLを受け取ってそれに対応したWebページを返すサーバーと思っても良いかと思います。

代表的なWebサーバーの製品は

等があります。

APサーバー

APサーバー(アプリケーションサーバー)はプログラムを動かすためのサーバーです。
静的Webサイト(あらかじめ決められた情報を見るだけのWebサイト)を作成するのであれば、Webサーバーがあれば機能します。
しかし、ユーザーの情報を登録したり、データを検索したりなどの機能を持ったWebアプリケーションを作成する場合は、HTMLやCSSだけで作成することはできません。
プログラムを作成して、リクエストによって動的にWebページを作成する機能が必要です。

リクエストに応じてプログラムを動作させたり、動的にWebページを作成してくれる機能を持つサーバーがAPサーバーです。
Webサーバーとしての機能も兼ね備えているAPサーバーもあります。

例えば、学校のホームページ、企業のホームページなどは見る人によって表示が変わったりしませんし、ログインして何かの機能を利用するといった場面もあまりないと思います。
そういった場合は静的Webサイトになるので、Webサーバーで対応することができます。
しかし、SNSECサイトを利用する場合は、ユーザーのログインが必要になり、ユーザーごとに表示される内容が異なります。
このようなサービスを提供する場合にはAPサーバーが必要になります。

代表的なAPサーバーは

等があります。

DBサーバー

DBサーバーは、データベースを扱うサーバーです。
データベースとはデータを管理するためのシステムです。
例えばSNSを利用する場合、ユーザーのデータや各ユーザーが投稿したデータがどこかに保持されている必要があります。
ECサイトの場合、ユーザーのデータ、商品のデータ、ユーザーの購入履歴のデータなどを保持しておく必要があります。
このようなデータを保持しながら、プログラムで扱いやすいように管理してくれるのがデータベースです。
現在はデータベースにも様々な種類がありますが、最も広く使用されているのはRDB(リレーショナルデータベース)と呼ばれる、表形式でデータを保持するDBサーバーです。
RDBサーバーではSQLと呼ばれる、データベースを操作するための言語があるのですが、SQLで操作したいことを記述してDBサーバーに送信すると、見たいデータや操作の結果などを返してくれます。

代表的なDBサーバーは

等があります。

メールサーバー

メールサーバーは、メールの送受信に関する機能を提供してくれるサーバーです。
厳密には受信と送信で別々のサーバーになる場合もありますが、ひとまずメールの機能を提供するサーバーと思って良いでしょう。
クライアントはメーラーと呼ばれる、メールを扱うソフトウェアです。
例えば、OutLook, Thunderbard, G-mailなどがメーラーになります。

DNSサーバー

DNSはDomain Name Systemの略です。
詳細は割愛しますが、簡単に説明すると、ドメイン名とIPアドレスの対応付けを行ってくれるサーバーです。
インターネットを利用するとき、Webページを特定するのにURLを使用します。
しかし、ネットワーク上のコンピュータは内部的にはIPアドレスと呼ばれる数値で管理されています。
この数値と、URLで指定されているwww.xxxxx.co.jpのような文字列(ドメイン)の対応付けを行ってくれるサーバーです。

サーバー用のOS

コンピュータを使うときは、ほとんどの場合何かしらのOSが入っています。
PCの場合は、WindowsMac OSスマホの場合はAndroidiOSなどを使用している場合がほとんどでしょう。
サーバーもPCやスマホと同様に様々なソフトウェア動かすためのコンピュータで、同じようにOSが必要です。
サーバー用のOSはいくつかありますが、メジャーなものはLinuxWindows Serverなどです。
Windows ServerはMicrosoftが提供しているサーバー用のOSです。
LinuxオープンソースのOSで、多くのWebサービスのサーバーOSとして利用されています。

サーバー用のハードウェア

サーバーと聞くと高機能のコンピュータをイメージする場合が多いというのは先述しました。
しかしここまでで説明したようにサーバーはソフトウェアの機能である場合が多いです。
サーバー用のソフトウェアは無償でインストールして利用することができるものも多いです。
そのため、普段使用しているような普通のノートPCでもサーバー用のソフトウェアはインストール可能です。
そしてサーバー用のソフトウェアをインストールすればそのコンピュータはサーバーとして機能します。

ではなぜ大きくて高性能なコンピュータが使用されるのでしょうか。
何故かというと、サーバーというのは、いつでも稼働している必要があるので、基本的に電源を落とせません。
また、サーバーが停止してしまうと、サービスの内容によっては大きな影響が出てしまう可能性があります。
そのため、物理的に障害が発生しにくい、または発生しても何らかの対処ができる状況が必要です。
また、多くの人が利用するサービスの場合は、それに耐え得る性能が必要です。
なので結果的にサーバーの環境となるハードウェアは物理的に優れたものを用意するのです。

【情報処理】セキュリティの基礎

ここではセキュリティの基礎のついて解説します。

セキュリティの必要性

コンピュータを扱う上でセキュリティは重要です。
インターネットの発展により、世界中のコンピュータ同士とやり取りができるようになりました。
それは、とても便利になった反面、情報漏洩や不正な攻撃が行われるリスクが高まったことでもあります。

個人でインターネットを利用する場合は、情報漏洩により個人情報を不正に利用されてしまうリスクがあります。
企業の場合、企業が保持している個人情報が流出することにより、企業の信用が失われてしまう可能性があります。
このような事態にならないように、コンピュータを扱う以上、最低限のセキュリティの知識を身に付ける必要があります。

インターネット通信にはどのようなリスクがあり、どのような対策をしているのかを簡単に説明していきます。

インターネット上のリスク

セキュリティの攻撃には様々なものが存在しますが、代表的なものを上げると、

  • 盗聴
  • 改ざん
  • なりすまし

があります。

盗聴

盗聴と聞くと、会話や音声を盗み聞きするイメージを持つかと思います。
ここで説明する盗聴はネットワーク盗聴といい、音声を盗み聞きすることではなく、ネットワーク上流れるデータ(パケット)を不正に覗き見ることを言います。

これはWiresharkのようなパケット解析ツールを使うことで簡単に実現できます。
このツールはもともと盗聴用のツールではなく、ネットワーク上に流れるデータを解析することでネットワークの状態などを分析するためのツールです。
しかし、結果として同じネットワーク内に流れるデータを見れることから、盗聴という使い方もできてしまいます。

では盗聴されることでどんな問題があるでしょうか。
例えば、WebサービスにログインするときのIDやパスワードを知られてしまう事で、不正にログインされてしまう可能性があります。
また、クレジットカードの情報などを盗まれて不正利用されるなども考えられます。
また、仕事上のやり取りを見られることで情報が流出して問題なる可能性もあります。

このような問題が起きないように、盗聴の対策が必要になります。

盗聴の対策

では、どうすれば盗聴を防ぐことができるでしょうか。
実は、盗聴を防ぐのは簡単ではありません。
というのも、同じネットワーク内(同じ無線LANを使用している場合など)であれば、データは盗聴できてしまうからです。
公共の無線Wi-Fiを利用したりすれば、盗聴のリスクは防げません。

ではどうやって盗聴の問題を解決するのか。
それは盗聴されたとしても内容を解読されないようにすれば良いです。
それには暗号という技術を使います。
通信する内容を暗号化することで、盗聴されて中身を見られても、簡単には中身が分からないようにするのです。
データを受け取った側は、暗号化されたデータを複合(元に戻す)して内容を確認します。

暗号化によってデータを盗聴されても簡単には見れなくなりますが、それでも、第三者が暗号を破って内容を解読されてしまう可能性はゼロではありません。
最近は個人情報を扱うほとんどのサイトやWi-Fiが暗号化されていますが、それでもリスクが完全になくなるわけではないです。
なので、大事な情報を扱う操作は公共のネットワークを使った環境では行わないなど、コンピュータを扱う人のリテラシーも重要になってきます。

改ざん

暗号化の技術を使えば、ある程度ネットワーク盗聴のリスクをなくすことができます。
しかし、そもそも送信したデータを第三者が途中で横取りし、別のデータに書き換えてしまったらどうなるでしょうか。
意図しない内容のデータが相手に送られてしまいます。
このような攻撃をデータの改ざんと呼びます。

ここでは詳しくは解説しませんが、インターネット上の通信ではメッセージダイジェストという仕組みを使って改ざんを防止します。

なりすまし

なりすましとは、メッセージを送る人が本人ではない別の人を装ってデータを送信する攻撃です。
つまり、Aさんではない人が、自分はAさんだと名乗って、誰かにデータを送ります。
Aさんは自分の意図しないところで自分以外の人が勝手に誰かにメッセージを送られてしまいます。
これではAさんも、メッセージを送られた方も困ってしまいます。

ここも詳しくは書きませんが、認証局という仕組みを使ってなりすましの対策を行います。

httpとhttps

インターネット上で情報を閲覧すると、どのWebサイトにもURLというアルファベットと数字の並びがあるはずです。
URLはhttpから始まるものとhttpsから始まるものがあります。
ちなみに最近のブラウザはhttpsは鍵マークがついていてhttpには鍵マークがついていないように区別されていて、文字までは見えないので意識しないのかもしれませんが。

これはWebにおける通信プロトコルの違いですが、簡単に違いを言えばhttpはセキュリティに対する考慮は何もなく、httpsはhttpの上にセキュリティの技術が色々と盛り込まれています。
httpsによる通信であれば、先ほど述べた盗聴や改ざん、なりすましなどを防ぐための技術が盛り込まれています。

セキュリティに対する意識

セキュリティのリスクや対策に対する知識、そして意識はすごく大事です。
ITを仕事にしたい人はもちろん、直接ITに関わる仕事はしていなかったとしても、スマホやPCに使う機会がある以上、セキュリティに対する意識は大事です。

特に注意してほしいのは、インターネットを閲覧するときに、URLがhttpsになっていれば全てが安全というわけではないということ。
URLがhttpsで、サイトもまともなサイトの様に見えても、実は悪意のある人が作ったそれっぽいサイトで、個人情報を盗む目的で作られた可能性もあります。
これはURLの内容を見なければ分からないこともあります。

また、URLがhttpsでも、Webアプリケーションのプログラムがセキュリティの対策が十分に行われていなかったとしたら、クロスサイトスクリプティングSQLインジェクションといった攻撃によって、情報を抜き取られたり、攻撃の踏み台として使われたりなど、様々なリスクが伴います。

また、悪意のある人が信頼できる人になりすましをしてメールを送ってきて、悪意のあるソフトウェアを実行してしまう場合もあるでしょう。

こういったセキュリティ事故の事例はいくらでもあります。
PCにセキュリティ対策ソフトをインストールして常に最新状態にしていたとしても、セキュリティの技術が発達しても、人間の意識が低ければ簡単にセキュリティ事故は起こります。

セキュリティの基本的な知識を身に付けるとともに、人間が意識を高く持たなければいけないことを認識しておく必要があるでしょう。

最低限のセキュリティ対策

ここで、最低限誰でもできるセキュリティ対策について書いておきます。
まずは、使用しているOSやアプリなどは、定期的にアップデートを行って最新の状態になるように保つことが重要です。
セキュリティ上の欠陥のことを脆弱性と呼びます。
OSのアップデートやアプリのアップデートには、脆弱性を修正したものが多く含まれています。
そのため、アップデートせずに古い状態を保ち続けるのはリスクになります。

また、アンチウィルスソフトなどのセキュリティ対策ソフトを導入することも必要です。
しかし、アンチウィルスソフトを導入したからといって、何もかもが安全であるとは限りません。
アンチウィルスソフトがあったとしても、悪意のあるソフトウェアが実行されてしまう可能性もあります。
セキュリティ対策ソフトは導入しないよりも確実に導入したほうが良いですが、それでも最終的には人間の意識が重要です。

パスワード

色んなWebサービスを利用していると、ログインするときのパスワードを決めることが多々ありますね。
これらのパスワードをどう設定しているかは重要です。
簡単で誰でも推測できるようなパスワードを設定していた場合、不正ログインをされるリスクが高まります。
推測が難しいパスワードにすると、安全性は高まりますが、忘れないようにするはなかなか難しいです。
忘れてしまうからと紙に書いて貼り付けたりしては意味がありません。
そういう意味ではパスワードを考える作業はなかなか大変です。

また、全てのサービスで同じパスワードを使用している場合、そのパスワードが流出したときに被害が大きくなります。
しかし、サービスごとにパスワードを変えて、それぞれで覚えておくのも管理が大変です。
安全性を高くしながら管理が楽なパスワードにするのはそれなりに工夫が必要ということになります。

パスワード管理の問題を解決する方法には様々な工夫があるかと思いますが、私が考えうる方法は大きく2つです。
一つはパスワード管理アプリを使用することです。
「パスワード管理 アプリ」などで検索すると様々なものが出てくるので、レビューを見たり実際に試して使いやすいものを使って見るのも良いかと思います。

2つ目の解決策は、パスワードに自分なりをルールを決めて運用することです。
パスワードは全てのサービスで同じにしてしまうと、流出したときのリスクが高くなるので、サービスごとに異なるものにするのが理想です。
しかし、その場合は覚えるのが大変になります。
そこで、たとえ忘れていたとしても思い出せるように自分なりのルールを設けるとパスワードの運用が楽になります。

例えば、普段使用しているパスワードに、サイト名の頭文字と最後の文字をくっつけるなどです。
ここでは仮にパスワードを「Password」とすると、
Yahooの場合は「PasswordYo」
Amazonの場合は「PasswordAn」 などです。
これはあくまで一例ですが、このように運用のルールを決めておけば、パスワードをサービスごとに異なるものにしつつ、忘れにくい(忘れてもすぐに作ることができる)ものにすることができます。
このように自分なりにルールを決めて運用してみると良いかと思います。

まとめ

  • インターネットは便利な半面、セキュリティのリスクが多くある
  • セキュリティリスクに対応するための技術は多くあるが、それらの技術を使っているからと言って安全な保証はない
  • 最終的には人間の意識が重要になる