未経験からのフルスタックエンジニア

スキルをつけよう!未経験からフリーランスエンジニアへの成長記録

AWS 学習履歴(3)~S3~

AWS学習履歴の趣旨

AWSでデプロイをしたことはあるものの、AWSの理解に足りない部分があるのが悔しいと思い、UdemyのAWS講座で勉強を開始しました。

以下の記事の続きです。

atora1992.hatenablog.com

学習内容を全て残すことは量が莫大になるので無理ですが、『重要かな?と思った部分を記録として残そう!』というのが趣旨です。

更新頻度は不定期ですが、地道に続けていこうかと思います。

応援よろしくお願いします。

S3

"Simple Storage Service"が正式名称です。(Sが3つで"S3")

オブジェクトストレージで、AWSではS3やGlacier(S3より安いもの、長期データ保管用のストレージ)があります。(インスタンスストアやEBSはブロックストレージです)

ユーザーがデータを容量制限なく保存可能で

  • 高い耐久性
  • 安価(約3円/(月・GB))
  • AWS側で性能が保証
  • 暗号化も可能

保存場所はバケットという単位で決めることができます。このバケットの名前は世界中で一意である必要があります。

バケット内に格納されるファイルはオブジェクトと呼ばれ、バケット内でのオブジェクト数は無制限です。一つのオブジェクトのデータサイズは0KB〜5TBまでと、大きなデータも保管できます。

オブジェクト

オブジェクトの構成要素

要素 説明
key オブジェクトの名前。バケット内でのオブジェクトの識別子
value データそのもの
version ID バージョン管理(後述)に使用
メタデータ オブジェクトに付随する情報
サブリソース バケット構成情報を保存・管理するためのサポート

バージョン管理

バージョン管理を有効化すると、バージョン毎にデータが残ります。最新バージョンのデータがオブジェクトとして適用されます。

バージョン管理を有効化しておくと、オブジェクトを削除した際にも、削除バージョンが残ります(これが適用されるのでオブジェクトが削除された状態になる)。この削除バージョンデータを削除すれば、データの復元が可能です。

バージョン管理をすることで、削除時のバックアップや、特定タイミングのデータ状態に戻すことも可能です。

S3の整合性モデル

同時にデータ処理を行った時に、どのようにデータの整合性をとるかが、新規登録・更新・削除で決まっています。

データ処理 モデル
新規登録 consistency read:登録後即時にデータ反映
更新 eventual consistency read:更新直後はデータ反映に時間がかかる
削除 eventual consistency read:削除直後はデータ反映に時間がかかる

更新と削除では、結果が合えばいいという、結果整合性モデルを採用しているため、処理反映に時間がかかります。

アクセス管理

  • IAMポリシー・ロールでの管理
  • バケットポリシー:バケット毎にアクセス権限を設定
  • ACLバケットとオブジェクトへのアクセス権限を設定(バケットポリシーより細かく設定できる)
  • 署名付URL:AWS SDKで生成した著名付URLでオブジェクトへの一定時間アクセスを許可

レプリケーション

リージョン間をまたいで(クロスリージョン)、バケット(内のオブジェクト)の複製を作成可能です。

複製のトリガーは、バケットに対するオブジェクトの作成・更新・削除となっており、指定したバケットでこれら処理が行われると、複製が行われます。
※バージョニング機能の有効化が必要です
※複製バケットは別リージョンを指定します
※双方向レプリケーションも可能です
※データの転送には費用がかかります

バックアップ

Glacierを使ってバックアップ・復元が可能です。

S3からGlacierへバックアップをとり、S3内のデータを削除すると、Glacier内の該当のデータを削除されます。

復元がオブジェクト単位でも可能です。

AWS CLI

インスタンスに接続していなくとも、コマンドラインからAWSサービスを制御・管理できます。

aws.amazon.com

インスタンスssh接続しなければ使えなかったコマンドが、ターミナルのどこでも使うことができるようになります。

AWS CLIを用いるには、IAMユーザーによる設定が必要です。

  1. ユーザー追加時に、アクセス権限で「プログラムによるアクセス」を有効化する
  2. ユーザーの認証情報タブから「アクセスキーの作成」を実行
  3. ターミナルでキーを設定する($ aws configureと打ち込むと、順にアクセスキー→シークレットアクセスキー→デフォルトのリージョン→デフォルトの出力形式の入力を求められます。こちらで、作成したキー情報、リージョン情報、データ形式JSONなど)を設定してください)

ここで設定すれば、インスタンスに接続していなくとも、例えば以下のようなコマンドが使用できます。

$ aws s3 ls  #S3のバケット一覧を表示
$ aws s3 mb s3://バケット名  #新規にバケットを作成(リージョンは設定したデフォルトのリージョンが適用されます)
$ aws s3 rb s3://バケット名  #指定したバケットを削除

#レプリケーション実行
$ aws s3 cp --recursive s3://レプリケーションしたいバケット名 s3://レプリケーション先のバケット名
※エラーが出る場合は、"$ set tz=jst"とタイムゾーンの設定を行なってください)

これ以外にも多くのコマンドが使えるので、以下のマニュアルを参照してみてください。

docs.aws.amazon.com

静的ホスティング(Static website hosting)

S3だけで静的なwebページを作成することができます。

バケット作成時に、パブリックアクセス設定を全て許可し、プロパティで静的ホスティングの設定、バケットポリシーを設定してインターネットからアクセスできるようにする必要があります。

S3の外部接続

AWS Storage Gateway

オンプレ環境とAWSのストレージサービスを接続することが可能です。なので、オンプレのバックアップをS3でとったりなど、オンプレ側からAWSの有する機能・性能を活用できます。

種類 説明
ファイルゲートウェイ オンプレのファイルデータをゲートウェイ経由でS3オブジェクトとして格納
ボリュームゲートウェイ オンプレのディスクデータをゲートウェイ経由でSnapshotとしてS3に取得し、災害時対策として使用可能(AWS上でEBSへの復元も可能)
テープゲートウェイ 長期保存する際にテープを使用することがあるが、それを仮想テープライブラリとして提供。Glacierに格納される
S3 Transfer Accelaration

クライアントとS3バケット間で長距離でもファイル転送を高速で行える。

Snowball

物理的にオンプレ環境をS3に移行することも可能です。AWSから借りられる機器を用いて、直接AWSのデータセンターでデータの移行を行えるサービスです。

AWS 学習履歴(2)~IAM・EC2・ストレージ・Snapshot・VPC~

AWS学習履歴の趣旨

AWSでデプロイをしたことはあるものの、AWSの理解に足りない部分があるのが悔しいと思い、UdemyのAWS講座で勉強を開始しました。

以下の記事の続きです。

atora1992.hatenablog.com

学習内容を全て残すことは量が莫大になるので無理ですが、『重要かな?と思った部分を記録として残そう!』というのが趣旨です。

更新頻度は不定期ですが、地道に続けていこうかと思います。

応援よろしくお願いします。

IAM補足

IAMには、どのような権限を持たせるかの設定ができます。

  • IAMポリシー:ユーザー・グループに対しての設定
  • IAMロール:リソース(EC2など)に対しての設定

EC2補足

Elastic IP

動的に変わらないIPアドレス(設定しない場合、EC2インスタンスを再起動するごとにIPアドレスが変更されます(新しくIPアドレスが割り当てられる)

EC2インスタンスのサイドバーからElastic IPを作成したのち、インスタンスと関連づけることで、EC2にElastic IPを付与できます。

bashシェルスクリプト)によるLinux設定の初期設定

EC2インスタンス作成時に、手順3の下に「高度な詳細」があります。
そこで、Linuxコマンドを記述しておくことで、EC2作成時に自動的にコマンドが実行されます。

ストレージ

ストレージ 説明
インスタンスストア EC2と不可分の物理ストレージ。EC2の一時的なデータ保存に使われる。(無料) ※EC2の停止・終了でクリアされます
EBS(Elastic Block Store) EC2とは独立管理されるストレージ。EC2とはネットワークで接続。EC2を終了しても永続的にデータが保持される。Snapshot(後ほど説明します)を取ることができ、EBSを簡単に丸ごとコピーできます。(有料)

EBS

  • EC2から他のAZ(Availablity Zone:各リージョン内の、複数の独立したロケーション。各AZは低レイテンシーのリンクで接続されています。)のEBSには接続不可
  • 1つのEBSに複数のEC2を紐づけることはできない
  • EC2に複数のEBSを紐づけることは可能
  • 他のEC2への付け替え可能
  • Snapshotでバックアップを取れる

Snapshot

ストレージのバックアップを簡単に取れます。SnapshotはS3に保存されます。(似たものとしてAMIがありますが、こちらはOSの設定に使うものです。)

  • 静止点(インスタンス停止時)での設定が推奨されています(データの整合性を保つため)
  • 2世代目以降は増分データを保存します(増分バックアップ)(1世代目を削除しても復元可能です)
  • 復元は他のAZのEBSにも可能です

簡単な手順の概略(あるEBSのコピーを取れます)

  1. EC2インスタンス停止
  2. EC2インスタンスのサイドバーから「ボリューム」を選択
  3. バックアップを取りたいボリュームを指定してSnapshotの作成
  4. 作成したSnapshotを選択して、ボリュームを作成
  5. もともと紐づいている(アタッチされている)ボリュームのデバイス情報を元に、新たに作成したボリュームをEC2にアタッチする

VPC(Virtual Private Cloud)

VPCAWSクラウド内でユーザーが定義した仮想ネットワークを構築できるサービスです。
複数のAZにまたぐことが可能で、AZ内に複数のVPCを設定することも可能です。
さらに、このVPCはサブネットでさらに中身を分割することが可能です。(VPCはサブネットとのセットが必須)。このサブネット内にEC2インスタンスを設置することになります。

VPCを外部リソースと接続するには以下で説明するパブリックサブネットAWSネットワークを使うか、エンドポイントを使用します。

VPCの設定の大まかな流れは以下の4ステップです。

  1. CIDR形式でIPアドレスレンジを選択
  2. AZのサブネットを選択
  3. インターネット経路を選択
  4. VPCトラフィック許可の設定

CIDR形式

IPアドレスの設定形式の一つです。
同じネットワークとして扱うIPアドレスの個数を調整できます。

IPアドレスは、0~255の数字の4つの組み合わせから構成されています。実際は、各桁は8つのバイナリ値(0か1)の集合です。

CIDR形式では、IPアドレスに続いてどの範囲を固定するかを指定できます。例えば以下の太文字部分で、IPアドレスの個数を調整しています。

10.5.0.xxx/16

上記の例では、/16と指定することで、左から16桁目まで(バイナリ値基準)が同じネットワークとして認識でき(10.5の部分)、右側の残った部分(0.xxxの部分)が自由に設定できる範囲(IPアドレスとして有効)となります。つまり、この例で設定できるIPアドレスの最小は"10.5.0.0"、最大は"10.5.255.255"となります。

推奨されているCIDRは上記の例で使った/16です。(VPCは/16~/25で設定が可能)

もし、VPCIPアドレスのCIDRを/16とした場合、そのサブネットとして設定可能なIPアドレスの例を挙げます。

CIDR 可能サブネット数 サブネットあたりのIPアドレス
/18 4 16379
/20 16 4091
/22 64 1019
/24 256 251

VPCのサブネット数の最大は200なので、それを念頭に置いてサブネットもCIDR形式で指定する必要があります。ただし、AWS側ですでに使用されているIPアドレスもあり、それは使用不可となります。

サブネット

CIDR範囲で分割したネットワークセグメント。
CIDRとしては/24が推奨されています。

サブネットは以下の2つに分けられます。

サブネット 説明
パブリックサブネット(Webサーバー) インターネットと接続できる
プライベートサブネット(DBサーバー) 直接インターネットと接続できない。インターネットから隔離することでセキュリティが高まる

サブネット作成で両者を分けるのではなく、そこにインターネット接続の設定をするかしないかで区別します。

パブリックサブネットでは、インターネットと接続するためにインターネットゲートウェイを設定、かつIPアドレスの自動割り当てを有効化する必要があります。

プライベートサブネットからインターネットに接続するには、パブリック側にNATゲートウェイを設置し、そこを介してインターネットと接続することになります。

インターネット経路の設定

経路の設定はルートテーブルにて行います。
ルートテーブルは、VPC(サブネット)作成時にデフォルトで作成されます。

まず、VPCがインターネット接続をできるようにするには、インターネットゲートウェイ(インターネットとの接続口)を作成してVPCにアタッチする必要があります。

その後、VPCと関連づいているルートテーブルにてインターネットゲートウェイを選択し、パブリックサブネットにしたいサブネットと関連づけを行います。こうすることで、関連づけられたサブネットはインターネットとの接続が可能(パブリックサブネット)となります。

NATゲートウェイ

NATゲートウェイを用いることで、プライベートサブネットからインターネット・AWSクラウドとの通信が可能になります。

こちらはElastic IPが必要で、有料となります。

実際には、パブリック側にNATゲートウェイを作成し、プライベートのルートテーブルでプライベートサブネットとNATゲートウェイをつなぐことになります。

VPCトラフィック許可の設定

セキュリティグループ

サブネット同士の通信制御を行えます。例えば、セキュリティグループを用いることで、パブリックからプライベートへの接続を制限したり、許可したりできます。

プライベート側のセキュリティグループにおいて、パブリックのセキュリティグループを指定することで、パブリックからプライベートへの通信が可能になります。

セキュリテイグループで設定したルールは、設定の順番関係なく全てが適用されます。

ネットワークACL

ネットワーク単位でアクセス制御(特定のIPアドレスを許可・不許可)ができます。(EC2インスタンス・サブネット作成でデフォルトで作成されます。デフォルトでは、インバウンド・アウトバウンド全て許可となります)

ルール番号をつけて設定します。(100、200、300..とつけていきます)
セキュリテイグループと違ってこの順番が大切です。ルールは上から順(番号昇順)に読まれます。ですので、はじめに全て許可してから後のルールで、あるIPアドレスのアクセスを不許可にしても、不許可になりません。先に不許可する必要があります。(あるIPアドレスのアクセスを不許可→全て許可、とすればちゃんと不許可も適用されます)

エンドポイント

グローバルIPをもつAWSサービスに対して、VPC内から直接アクセスするための出口です。

例えば、DBサーバーとして考えているプライベートサブネットとS3を接続したい時、エンドポイントをS3アクセスとして作成し(AWS側にデフォルトで設定があるので選択するだけです)、VPCを選択後、プライベートサブネットを選択するだけで、プライベートからS3へのアクセスが可能になります。

VPC間の接続

VPC Peeringというものがあり、VPC間を接続できます。
ただし、基本一対一で接続することを念頭において、VPC構成を考える必要があります。

また、他リージョンのVPCともDirect Connect Gatewayによって接続可能です。

VPCとの接続

オンプレ環境とVPCを接続することもできます

  • VPN接続
  • Direct Connect(専用線による物理的な接続)

次の記事へ

atora1992.hatenablog.com

Linux学習履歴(4)~ファイルの圧縮解凍・フィルタコマンド~

以下の記事の続きです。

atora1992.hatenablog.com

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は4日目の中間地点から最後までの内容についてです。

コマンドの備忘録的になってしまうと思いますので、悪しからず。

4日目

ファイルを圧縮・解凍してみる

圧縮ファイルでよくみるのは、"zip"形式かと思います。
これは、正確には「圧縮アーカイブ」と呼ばれるものだそうです。

圧縮ファイル:圧縮ソフトによってファイルを個別に圧縮したもの
アーカイブファイル:複数のファイルを一つにまとめたもの

なので、単純にアーカイブファイルといった場合には、圧縮されてはいません。"zip"ファイルは、アーカイブされた後に圧縮されています。

圧縮ファイル、アーカイブファイルの形式は色々ありますが、今回は以下のものを取り上げます。

  • .gz:gzip形式の圧縮ファイル
  • .bz2:bzip2形式の圧縮ファイル
  • .tar:tar形式のアーカイブファイル

gzip

$ gzip -v [ファイルのパス]  #ファイルの圧縮、"v"オプション指定で圧縮率を確認できる
※元のファイルは削除される

$ gunzip [圧縮ファイルのパス]  #解凍する
$ gzip -d [圧縮ファイルのパス]  #解凍する

#圧縮ファイルがテキストファイルの場合
$ gzcat [圧縮ファイル]  #解凍せずに中身を見れる
※Mac以外は上記とコマンドが違う場合がある

bzip2

gzipよりも圧縮率が高い方法です。

$ bzip2 -v [ファイルのパス]  #ファイルの圧縮、"v"オプション指定で圧縮率を確認できる
※元のファイルは削除される

$ bunzip2 [圧縮ファイルのパス]  #解凍する
$ bzip2 -d [圧縮ファイルのパス]  #解凍する

#圧縮ファイルがテキストファイルの場合
$ bzcat [圧縮ファイル]  #解凍せずに中身を見れる

tar

$ tar -cvf [アーカイブファイルのパス] [アーカイブするディレクトリ]  #"c"は新規アーカイブ作成、"v"はファイル情報の表示、"f"はアーカイブファイルのパスを指定するオプション
※拡張子が自動でつかないため、指定する必要がある
※元のディレクトリは残存する

(具体例)
$ tar -cvf atora.tar Atora/  #カレントディレクトリのAtoraディレクトリのアーカイブファイルをカレントディレクトリにatora.tarとして作成する

$ tar -tvf [アーカイブファイルのパス]  #アーカイブファイルの中身を確認
$ tar -xvf [アーカイブファイルのパス]  #アーカイブファイルの展開
※展開はカレントディレクトリにて行われるので、元のディレクトリの名前を変更する必要あり
※アーカイブファイルを展開した場合には、更新日時などの情報はアーカイブに格納された時と同じ
$ tar -xvf [アーカイブファイルのパス] -C [ディレクトリのパス]  #カレントディレクトリ以外のディレクトリにて展開

上記のアーカイブ化・圧縮を組み合わせることで、圧縮アーカイブを作成できます。もしくは以下のコマンドでも作成できます。

$ tar -cvzf [アーカイブファイルのパス] [アーカイブするディレクトリ]   #gzip形式で圧縮アーカイブを作成
$ tar -cvjf [アーカイブファイルのパス] [アーカイブするディレクトリ]   #bzip2形式で圧縮アーカイブを作成

(具体例)
$ tar -cvzf atora.tgz Atora  #カレントディレクトリのAtoraディレクトリの圧縮アーカイブをカレントディレクトリにatora.tgzとして作成する("tgz"は".tar.gz"の短縮形)
$ tar -cvjf atora.tbz2 Atora  #カレントディレクトリのAtoraディレクトリの圧縮アーカイブをカレントディレクトリにatora.tbz2として作成する("tbz2"は".tar.bz2"の短縮形)

展開・解凍も同じように可能です。

#gzip形式
$ tar -tvzf [アーカイブファイルのパス]  #中身を確認
$ tar -xvzf [アーカイブファイルのパス]  -C [ディレクトリのパス]  #展開

#bzip形式
$ tar -tvjf [アーカイブファイルのパス]  #中身を確認
$ tar -xvjf [アーカイブファイルのパス]  -C [ディレクトリのパス]  #展開

フィルタコマンド

標準入力と標準出力の両方を使うコマンド

sort

テキストファイルの中身を並び替えることができます。

$ sort [ファイルのパス] [ファイルのパス] ... #行の先頭から順に文字を比較し、アルファベット順にソート(昇順)(複数ファイル指定可能)
$ sort -r [ファイルのパス]  #行の先頭から順に文字を比較し、アルファベット順にソート(降順)
$ sort -k [最初のフィールド番号] , [最後のフィールド番号] -t [区切り文字]  #区切り文字で区切られたフィールド(情報)のうち、指定された範囲の値を元にソート
※最後のフィールド番号を指定しない場合、指定したフィールドから行末までが対象となる
$ sort -k [最初のフィールド番号] , [最後のフィールド番号] -n -t [区切り文字]  #"n"オプションで数値によるソートが可能
$ sort [ファイルのパス] [ファイルのパス] ... > [違うファイルのパス]  #ソート結果をファイルに書き出す
$ sort [ファイルのパス] [ファイルのパス] ... | tee [違うファイルのパス]  #ソート結果を書き出しつつ、ターミナルに結果を表示

uniq

テキストファイルの中身で、隣接する重複行を削除できます。

$ uniq [ファイルのパス]
※重複する行を1つにします

隣接しない重複行は削除されないので、sortコマンドと組み合わせることで全ての重複行を削除できます。

$ sort [ファイルのパス] | uniq
$ sort -u [ファイルのパス]  #"u"オプションを使用しても同じ結果となる

逆に、重複した行のみを表示、重複回数をカウントするには

$ sort [ファイルのパス] | uniq -d  #重複した行のみを表示
$ sort [ファイルのパス] | uniq -c  #重複回数をカウント
$ sort [ファイルのパス] | uniq -c | sort -nrb  #重複回数をカウントし、回数の多い順に並び替える("b"オプションは先頭のスペースを無視するオプション)

wc

ファイルの行数、単語数、文字数をカウントするコマンドです。

$ wc [ファイルのパス]  #結果は、行数、単語数、文字数(バイト)の順に表示"c"オプションで文字数のみ、"l"オプションで行数のみ、"w"オプションで単語数のみを表示

$ ls ~ | wc -l  #ホームディレクトリのファイル数をカウント
$ find [検索条件] | wc -l  #検索条件に一致するファイス数をカウント

tr

文字単位の置換や削除を行うコマンドです。
正規表現で文字を指定することもできます。
引数にファイルを指定できません。そのためリダイレクションで"< [ファイルのパス]"とするか、パイプの2コマンド目以降で使用する必要があります。

#置換
$ tr [置換前の文字] [置換後の文字] < [ファイルのパス]  #ファイル内の文字を置換する
※文字単位の置換を行う

$ tr [置換前の文字1][置換前の文字2][置換前の文字3].. [置換後の文字1][置換後の文字2][置換後の文字3].. < [ファイルのパス]  #複数文字の置換
(具体例)
$ tr abc ABC < [ファイルのパス]  #a→A、b→B、c→Cに置換します
※文字列として置換していない

#削除
$ tr -d [削除する文字]  #指定した文字を削除する
(具体例)
$ tr -d " " < [ファイルのパス]  #スペースを削除する(ダブルクォーテーションでくくる必要あり)
$ tr -d abc < [ファイルのパス]  #"a"、"b"、"c"、を削除する

#連続した文字をまとめる
$ tr -s [まとめたい文字] < [ファイルのパス]
$ tr -s [置換前の文字] [置換後の文字] < [ファイルのパス]  #置換後にまとめることも可能

次の記事へ

atora1992.hatenablog.com

Linux学習履歴(3)~マニュアル参照・ファイル検索~

以下の記事の続きです。

atora1992.hatenablog.com

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は4日目の中間地点までの内容についてです。

コマンドの備忘録的になってしまうと思いますので、悪しからず。

4日目

マニュアルを参照する

コマンドのマニュアルを見たい場合には

$ man [コマンド名]

デフォルトは英語です。自分は日本語化していませんが、日本語化も可能とのことです。

qiita.com

オンラインマニュアルはページャ(lessとか)を用いているので、そのコマンドが使えます。

  • Space: 次のページへ
  • b: 前のページへ
  • q: 終了する

具体例

$ man grep

GREP(1)                   BSD General Commands Manual                  GREP(1)

NAME
     grep, egrep, fgrep, zgrep, zegrep, zfgrep -- file pattern searcher

SYNOPSIS
     grep [-abcdDEFGHhIiJLlmnOopqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
          [-e pattern] [-f file] [--binary-files=value] [--color[=when]]
          [--colour[=when]] [--context[=num]] [--label] [--line-buffered]
          [--null] [pattern] [file ...]

DESCRIPTION
     The grep utility searches any given input files, selecting lines that
     match one or more patterns.  By default, a pattern matches an input line
     if the regular expression (RE) in the pattern matches the input line
     without its trailing newline.  An empty expression matches every line.
     Each input line that matches at least one of the patterns is written to
     the standard output.

.....

[file ...]は複数ファイル選択が可能なことを示しています。

GREP(1)は、grepコマンドがセクション1に属していることを示しています。
セクションは8つあり、若いセクションの内容が表示されます。

セクション 説明
1 user commands
2 system calls
3 library functions
4 special files (devices)
5 file formats and filesystems
6 games
7 overview and miscellany section
8 administration and privileged commands

他のセクションに属しているかどうかは、マニュアル中のSEE ALSOで確認できます。
もしくは、以下のコマンドでも確認できます。

$ man -wa [コマンド名]

セクション指定で検索したい場合は以下のように、セクション番号を指定します。

$ man [セクション番号] [コマンド名]

キーワードで検索することもできます。(キーワードには正規表現が使えます)

$ apropos [キーワード]
$ apropos [キーワード] | grep "(1)"  #セクション1のみを検索する

コマンドに関する簡単な説明を表示するには

$ whatis [コマンド名]

コマンドの保存先を調べるには

$ type [コマンド名]  #エイリアスというコマンドの別名が定義されている場合、その内容を表示する
$ which [コマンド名]  #エイリアスが設定されていても、保存先のパスを表示する

typeで調べた結果、例えば"cd is a shell builtin”と表示される場合があります。これは、cdがシェルの組み込みコマンドであることを示しています。実行可能形式のファイルとシェルの組み込みコマンドの両方がある場合には、以下のコマンドで確認できます。

$ type -a [コマンド名]

ファイルを検索する

$ find [検索の起点となるディレクトリ] -name [名前]  #名前で検索
※ファイルだけだなくディレクトリもヒットする
$ find [検索の起点となるディレクトリ] -mtime [日数]  #更新日時で検索する
$ find [検索の起点となるディレクトリ] -mtime +[日数]  #日数より前
$ find [検索の起点となるディレクトリ] -mtime -[日数]  #日数よりあとから現在まで
$ find [検索の起点となるディレクトリ] -atime [日数]  #アクセスした時間で検索する 

検索となる起点のディレクトリから、サブディレクトリまでが検索範囲となります。起点となるディレクトリを指定しない場合は、カレントディレクトリが起点となります。

ワイルドカードによる検索も可能です。

$ find -name "*.js*"  #カレントディレクトリ以下で、拡張子が"js"のファイルを検索する
※ワイルドカードを使用する場合は、ダブルクォーテーション(シングルクォーテーション)で括る

ファイルかディレクトリかを指定して検索したい場合にはtypeオプションを使用します。

$ find [検索の起点となるディレクトリ]  -type d  #ディレクトリ検索
$ find [検索の起点となるディレクトリ]  -type f  #通常のファイル検索

上記の検索条件を複数指定(AND検索)もできます。その場合は、オプションをスペースで分割してタイプしてください。

OR検索したい場合には、oオプションを使用します。

$ find -name "*.js" -o -name "*.haml"  #拡張子が"js"か"haml"のファイルを検索する

否定条件を使いたい場合には、条件の前に"\!"をつけます。

$ type Pictures -type d \! -empty #Picturesディレクトリ以下の、空でないディレクトリを検索する

今までは、単に検索するだけでしたが、検索実行結果をコマンドに渡すこともできます(コマンド置換)。実行結果を取り出すコマンドをバッククォーテーションで括ります。もしくは、$(コマンド)とします。

$ ls -l `which cd`
-rwxr-xr-x  15 root  wheel  190  8 18  2018 /usr/bin/cd

$ ls -l $(which cd)
-rwxr-xr-x  15 root  wheel  190  8 18  2018 /usr/bin/cd

ただし、ファイル名にスペースなどがあるとうまくいかない場合があります。 そこで、別のコマンドを実行できるexecオプション(もしくはokオプション)が使えます。

$ find [検索の起点となるディレクトリ] -name [名前] -exec [実行したいコマンド] {} \;
※{}が検索結果のファイルに置きかわる
※{}と\;の間にスペースが必須

$ find [検索の起点となるディレクトリ] -name [名前] -ok [実行したいコマンド] {} \;  #実行したいコマンドを実行する前に実行するかどうか(y or n)を確認する

$ find . -name "*.js" -print -exec ls -l {} \;  #カレントディレクトリ以下の、拡張子が"js"のファイルの詳細を表示する("print"オプションで検索結果のファイルのパスを表示できます)

execオプションではなくて、xargsコマンドを使用しても同様のことが可能です。

$ find . -name "*.js" -print0 | xargs -0 grep -n "alert"  #カレントディレクトリ以下の、拡張子が"js"のファイルのうち、"alert"を含む行を行番号を付与して表示する
※-print0と-0"0"は、ファイル名にスペースや特殊文字がある場合に設定する

次の記事へ

atora1992.hatenablog.com

Linux学習履歴(2)~テキストファイルの中身を見る・viエディタ~

以下の記事の続きです。

atora1992.hatenablog.com

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は3日目の内容についてです。

コマンドの備忘録的になってしまうと思いますので、悪しからず。

3日目

テキストファイルの中身を表示する

$ head -n [行数] [テキストファイルのパス]  #テキストファイルの最初から、行数で指定した部分までを表示する(行数を指定しない場合、10行分表示される)

$ tail -n [行数] [テキストファイルのパス]  #テキストファイルの最後から、行数で指定した行数分までを表示する(行数を指定しない場合、最後の10行分表示される)

上記のコマンドで、パスを指定しない場合は、入力が標準入力となるので、他のコマンドと組み合わせて使用可能(パイプ)

$ cat -n パス | head -n 20 | tail -n 10  #パスで指定したファイルの11行目から20行目までを、行番号を付与して表示する

※headで最初から20行目までを指定し、tailで最後から10行分を指定することで、結果11行目から20行目までを指定したことになります

上記では、テキストファイルの一部を取り出して表示しましたが、長いテキストファイルの全てを閲覧するのに便利なのが以下のコマンドです

$ less [テキストファイルのパス] 
$ less -N [テキストファイルのパス]  #"-N"を指定すると、各行の先頭に行番号が付与される
$ less -p文字列 [テキストファイルのパス]  #"-p"で文字列を指定すると、ファイルで文字列を含む行を最初に表示する

このコマンドを使用すると、ページをめくるように1画面ずつ表示できます(ページャ)。

キー 説明
Space 次のページへ進む
b 前のページへ戻る
Enter 1行進む
y 1行戻る
d 半画面進む
w 半画面戻る
g 最初の行に戻る
数字 q 指定した行に移動する
Shift + g 最後の行に移動する

また、lessには検索機能もあります。
"/"を入力後、検索したい文字列をタイプしてEnterを押すだけです。
※小文字・大文字を区別します

同じ文字列をファイル後方に向かって検索するには"N"キー、前に向かって検索するには"Shift + N"を押します。

テキストファイルから必要な行を取り出す

$ grep [検索したい文字列] [ファイルのパス] [ファイルのパス] ...  #ファイル内容のうち、検索したい文字列を含む行を表示する(複数ファイル指定可能)
※ファイルのパスには、ワイルドカードの使用も可能
※検索したい文字列にスペースが含まれる場合、ダブルクォーテーション(シングルクォーテーション)でくくる必要がある
※小文字・大文字を区別する

$ grep -i [検索したい文字列] [ファイルのパス]  #"-i"をつけることで、小文字・大文字の区別なく検索できる
$ grep -v [検索したい文字列] [ファイルのパス]  #"-v"をつけることで引数で指定した文字列を含まない行を表示する
$ grep -h [検索したい文字列] [ファイルのパス]  #"-h"をつけることで複数のファイルを検索した場合の結果に、ファイル名を表示しなくなる
$ grep -e [文字列1] -e [文字列2] ... [ファイルのパス]  #"-e"は検索文字列を指定する形式。複数のOR検索ができる
$ grep [文字列1] [ファイルのパス] | grep [文字列2] | grep ...  #文字列のAND検索ができる

パイプによる他のコマンドとの併用も可能です。

$ cat -n パス | grep [文字列]  #パスで指定したファイル内容のうち、文字列を含む行を、行番号とともに表示する

検索する文字列には正規表現の使用も可能です。

$ grep -v -e '^090' -e '^$' ファイル  #先頭が090から始まらず、空行ではない行を表示する'^$'で空行を示す。"^"は行頭、"$"は行末を表すので、その間に文字を指定しない=空行となる

grepコマンドでは、正規表現に使う特殊文字をそのまま検索するには、エスケープ(\)が必要となります。エスケープ量が増えると検索しにくいので、正規表現を全く使えない検索コマンドがあります。

$ fgrep
$ grep -F

使い方は"grep"と同じですが、正規表現特殊文字かどうかを気にすることなく検索できます。ただし、シェルのワイルドカードを文字として検索するには、ダブルクォーテーション(シングルクォーテーション)でくくる必要があります。

他にも、正規表現での検索を強化したコマンドもあるそうです

$ egrep
$ grep -E

vi エディタの基本操作

基本1

viはターミナル・エミュレータ上で動作するエディタの一つです。
vimはviの上位互換のエディタとなります。
vimがインストールされているシステムでは、基本的にviコマンドでvimが起動するようです。

$ vi [ファイルのパス]  #vimを起動する。複数ファイルを引数で渡せば、同時に開くこともできる(:nで次のファイル、:n!で前のファイルに切り替え可能)
※指定したファイルが存在しない場合、新規に作成します

vimには2つのモードがあります

  1. コマンド・モード(タイプした文字がコマンドとして認識される)
  2. インサート・モード(タイプした文字がそのまま挿入される)

起動時には自動的にコマンド・モードとなります。
インサート・モードにするには、"I"(アイ)キーを押してください。
逆に、インサート・モードからコマンド・モードに戻るには、"esc"(エスケープ)キーを押してください。

編集内容を保存して終了するには以下の手順を踏みます。

  1. コマンド・モードでコロン":"をタイプ
  2. wqとタイプ("w"はファイルの書き込み、"q"は終了コマンドです)
  3. Enterを押す

以上で保存・終了できます。

代表的なコマンド(コマンド・モードです、コロンをタイプする必要はありません)
※小文字・大文字の区別があります

キー 説明
h カーソルを左に1文字ずらす
j カーソルを下に1文字ずらす
k カーソルを上に1文字ずらす
l カーソルを右に1文字ずらす
0(数字) 行頭へ移動する
$ 行末へ移動する
f[文字] 現在行の指定した文字に移動する(行末に向かって検索)
F[文字] 現在行の指定した文字に移動する(行頭に向かって検索)
[数字]G 指定した行番号の行の先頭に移動する
Enter 1行下の先頭の文字に移動する
- 1行上の先頭の文字に移動する
Ctrl + b 前画面にスクロール
Ctrl + f 次画面にスクロール
Ctrl + d 半画面後ろにスクロール
Ctrl + u 半画面前にスクロール
x カーソル位置の文字を削除
X カーソル前の文字を削除
dd 現在行の削除
D カーソル位置から行末までを削除
d0 行の先頭からカーソル位置までを削除
u 前に実行したコマンドを一つずつ遡って取り消す
Ctrl + r 取り消したコマンドをやり直す

※f[文字]、F[文字]実行後、";"を押すことで、繰り返し検索を実行できます。","を押すと逆方向に検索をできます。
※コマンドの前に数値を打つと、その数値分コマンドを繰り返します("3h"とすれば、カーソルを3文字分左にずらします。"2f[文字]"とすれば、検索して見つかった2つ目の候補に移動します)

dコマンドなどを用いて削除した場合、削除した文字列は「バッファ」と呼ばれる領域に入れられます。そのバッファはpコマンドでカーソル位置の後に書き出すことが可能です。

My name is Atora [Y]amada  #[]はカーソル位置
↓  D
My name is Atora[]
↓ 
My name is[]Atora
↓  p
My name is Yamada Atora

前に追加したい場合は、Pコマンドを使用します。
バッファの内容は、新たに削除しない限り残りますので、繰り返し使用できます。

また、y[カーソル移動コマンド]yyコマンド(現在行をバッファに格納する)を用いれば、削除することなく指定した文字列をバッファに格納できます。

Atora Ya[m]ada
Yamada Atora
↓  2yy(カーソル位置から2行分をバッファに格納)、p
Atora Yamada
Atora Yamada
Yamada Atora
Yamada Atora

詳しい内容はvimチュートリアルで確認してください

$ vimtutor

基本2

:r [ファイルのパス]  #カーソル位置に別のファイル内容を読み込む(Tabによる補完機能が使える)
:w  #ファイルの書き出し(ファイルを指定すると、そのファイルに書き出せる)
:[最初の行番号],[最後の行番号] w [ファイルのパス]  #指定した範囲を書き出す
:q   #エディタの終了
:q!  #ファイル変更内容を破棄して強制的に終了

ブックマークを設定して、瞬時に目的の場所まで移動することも可能です

m [a~zのいずれかの文字]  #ブックマークを設定したい位置でこのコマンドを実行する
` [a~zのいずれかの文字]  #ブックマークで設定したアルファベットを入力すると、ブックマーク位置まで移動する

vimでも文字列の検索がlessコマンドと同じように可能です。

vim内で、シェルのコマンドも実行可能です。

:! [シェルのコマンド]  #シェルのコマンドを実行する(実行後Enterでvimに戻れます)
:r! [シェルのコマンド]  #シェルのコマンド実行結果を取り込む

文字列を置換することも可能です。正規表現を利用したり、範囲指定することもできます。

:[範囲]s/[置換前の文字列]/[置換後の文字列]/[オプション][範囲][オプション]は省略可能。その場合、現在行が対象となる
※スペースはいらない
※検索は行単位で行われ、行中ではじめにヒットした文字列のみ置換される
※全ての文字列を確実に置換したい場合は、オプションに"g"をタイプする
※"&"を用いることで、置換前の文字列を代替できる(Linux/& OS/とすれば、置換後の文字列は"Linux OS"となる)

範囲指定の具体例

:%  #ファイル全体
:[開始行番号],[終了行番号]  #行指定する(現在行は"."、最後の行は"$"で表せる)

コマンド・モード、インサート・モードのほかにもモードがあります。
ビジュアル・モードでは、文字列のコピーや移動がより簡単に行えます。
ビジュアル・モードにするには、"v"、"V"、"Ctrl + V"の3つがあります。

  • v: 文字単位の選択が可能
  • V: 行単位の選択が可能
  • Ctrl + V: 矩形の範囲が選択可能

範囲指定が強いので、コピー・削除がしやすいかと思います。

おまけ

コマンド・モードで実行したコマンドの履歴が見れます。
コロン":"をタイプしてから上矢印(もしくはCtrl + P)でコマンド履歴を遡り、下矢印(もしくはCtrl + N)で遡りを戻れます

次の記事へ

atora1992.hatenablog.com

Linux学習履歴(1)~Linuxとは・シェルの基本機能・ディレクトリの操作・移動とコピー~

Linuxをあまり気にせずに使用してきたので、基礎的なことを学習しようと思い、『Linuxコマンドライン入門』を読んでいこうという趣旨の記事です。

全てをまとめる訳ではないので、ご注意ください。
また、Macユーザーです。
自分が知らなかった部分、使いそうだなと思った部分をピックアップしていきます。

Linuxコマンドライン入門』が日ごとに6日間分別れているので、今回は、1日目〜2日目の内容についてです。

1日目

Linuxとは

LinuxUNIX系OSコマンドの一つです。

UNIXとは、OS XMicrosoft Windowsと同じくオペレーティングシステム(基本ソフト:OS)のひとつ。

Linuxカーネル部分のみをさす。

カーネル:OSの中心部分

UNIXコマンドではGUIで不得意な処理(拡張子指定のファイル一括コピーなど)を簡単にできるなど、コマンドを扱えるようになれば楽になる作業もある。

シェルスクリプトUNIXのコマンドで記述したプログラム。定期実行も可能

ターミナル・エミュレータ

キャラクタ端末(昔使用されていた、文字しか表示しない端末)をウィンドウシステム上で擬似的に再現したもの

ターミナル・エミュレーターはキャラクタ端末を模したものなので、コマンドの解釈・実行はコマンドインタプリタが行う(UNIXではシェル)

ユーザーが直接カーネルに働きかけることはできず、このシェルを介して、コマンドの実行をカーネルに依頼することになる。

具体例

$ echo Hello
-> Hello  #文字列が表示される
$ echo Atora Yamada
-> Atora Yamada  #引数を2つ以上渡すことも可能
$ echo Atora,Yamada
-> Atora,Yamada  #","で区切ることはできない。引数1つとして認識される。

コマンドにはオプションをつけつことも可能。
複数オプションも可能。

$ cal -j 12 2019  #"-j"オプションで、その年の1月1日からの通算日を表示
$ cal -3j 7 2019  #"-3"と"-j"オプションを同時指定。6から8月分のカレンダーを表示

上記では、オプションの指定にハイフン1つ+略語で表していましたが、ものによってはハイフン2つ+英単語という形式もある(GNU形式のオプション)。

$ ruby --version

ファイルシステム

$ ls [表示するディレクトリのパス]  #ディレクトリもファイルも同じように表示
$ ls -F  #"-F"オプションで、ディレクトリは最後にスラッシュがつくようになる

UNIXでは、ファイル名の先頭がピリオドで始まるファイル(ディレクトリ)は隠しファイルドットファイル)と呼ばれる。このファイルを表示させるには、以下のようなオプションを使用する

$ ls -a

スペースを含むものを指定するには、引数を"引数"もしくは'引数'とする必要がある。そうしないと、複数の引数として認識されてしまう。

$ ls "Atora Yamada"

コピーコマンド

$ cp -i [コピー元のファイルのパス] [コピー先のファイルのパス]   #コピー先での上書きの確認をとりたい場合は、"-i"オプションをつける

削除コマンド

$ rm [削除するファイルのパス]  #rmで削除すると、その時点でディスク上から削除される(ゴミ箱に入る訳ではない)ので、削除の取り消しは不可能

おまけ

cd ~-  #直前にいたディレクトリに行く

option + →  #次の単語へカーソルを移動
option + ←  #前の単語へカーソルを移動
Ctrl + F  #一文字カーソルを進める
Ctrl + B  #一文字カーソルを戻す

2日目

シェルの基本機能

ワイルドカード

*  #任意の0個以上の文字列に一致
?  #任意の1文字と一致

使用例)
$ ls Pictures/?*.???  #Picturesディレクトリの下で、拡張子が3文字のファイル一覧を表示

ワイルドカードやホームディレクトリを表す"~"はそれぞれのコマンドが解釈している訳ではなく、シェルが展開してカーネルに伝達している。

ワイルドカードを名前に含む場合は、引数を"引数"もしくは'引数'とする必要がある。

UNIXでは、普通のファイルだけではなく、ディレクトリ・周辺機器もファイルとして扱うので、単にファイルと表記されていた場合でも、ディレクトリや周辺機器が含まれている可能性がある。

コマンドの入力と出力

入出力先 説明 バイス
標準入力(stdin) 標準的な入力先 キーボード
標準出力(stdout) 標準的な出力先 ターミナルウィンドウ
標準エラー出力(stderr) エラーの標準的な出力先 ターミナルウィンドウ

リダイレクション:標準入力・出力をファイルに変更する機能

標準出力先をファイルにリダイレクトする

[コマンド] > [ファイルのパス]

使用例)
$ cat > name.txt  #name.txtを作成する
Atora <Enter>
Yamada <Enter>
Ctrl + D  #テキスト入力を終了する

$ cat name.txt
Atora
Yamada

存在するファイルに対してリダイレクトすると、ファイルの中身が消去される。
追加するには">>"を用います

$ cat >> name.txt
Taro

$ cat name.txt
Atora
Yamada
Taro

標準入力先をファイルにリダイレクトするのは、すでに引数の概念で使われている。

※標準出力を入力と同じファイルにリダイレクトすると、ファイルの中身が空になるので注意。

コマンドをパイプでつなぐ

パイプ:コマンドの実行結果を別のコマンドに渡してさらに処理を行う機能

$ [コマンド1] | [コマンド2] | [コマンド3] | ....

使用例)
$ last | head | cat -n  #以前にログインしたユーザーの情報(last)のうち、10行文を出力し(head)、行番号を付与する(cat -n)

ディレクトリの操作

$ ls -l  [ディレクトリのパス]  #ディレクトリ一覧の詳細表示
$ ls -l  [ファイルのパス]  #ファイルの詳細表示
$ ls -ld  [ディレクトリのパス]  #ディレクトリ自体の詳細表示
$ ls -lh  #ファイルサイズを単位付きで表示

$ mkdir -p [作成したいディレクトリのパス]  #"-p"オプションをつけることで、途中の存在しないディレクトリも作成しつつ、目的のディレクトリの作成を行える

$ mkdir sample; cd sample  #";"で区切ることで、複数のコマンドを1行で実行できる

$ rm -r [丸ごと削除するディレクトリのパス]  #指定したディレクトリ以下も全て削除
$ rmdir [削除するディレクトリのパス]  #削除するディレクトリ以下が空でないとエラーになる
$ rm -ri [丸ごと削除するディレクトリのパス]  #ディレクトリ以下のファイルを削除するかどうか確認ができる(途中で削除をやめた場合、ディレクトリも削除されない)

おまけ

$ which [コマンド名]  #コマンドの保存先を調べる

移動とコピー

コピー

$ cp -p [コピー元のファイルのパス] [コピー先のファイルのパス]  #ファイルの属性(変更日時やアクセス権限など)を保持したままコピーする
$ cp -R [コピー元のディレクトリ] [コピー先のディレクトリ]  #ディレクトリを丸ごとコピーする。コピー先にコピー元と同じファイルがある場合は上書き、コピー先にしかないファイルはそのまま残る
$ cp -v [コピー元のファイルのパス] [コピー先のファイルのパス]  #コピーされたファイル名が順に表示される

移動

$ mv [元のファイルのパス] [移動先のディレクトリ]

おまけ

はてなブログLinuxコマンドのシンタックスハイライトは、"sh"が対応しています。(確実に綺麗にはハイライトされていませんがすみません)

次の記事へ

atora1992.hatenablog.com

FLOC 教養としてのテクノロジーセミナー7/27に参加してみた

7/27に、FLOC主催の講座
『教養としてのテクノロジーセミナー』
を受講してきました。

FLOCとは

floc.jp

FLOCブロックチェーン大学校は、ブロックチェーン専門スクールです。インターネットの情報革命の次に起こるブロックチェーン革命は、社会を大きく変えていくと言われています。 そのブロックチェーンテクノロジーにおける技術者の育成から、ビジネススクール、検定試験によるアセスメントの構築、人材紹介、起業家育成などを通じ、ブロックチェーンのプラットフォームを構築していきます。フィンテックやIoT、スマートコントラクト等の第4次産業革命の成長と社会の発展に貢献していきます。

ブロックチェーン総合スクールです。東京と大阪に教室があるようです。

セミナーの内容

セミナーでは、以下の3つに焦点を絞っていました。

  1. ビッグデータ
  2. AI
  3. ブロックチェーン

これらがどういったものなのかを90分で概要をおさえる、という趣旨のセミナーでした。

過去30年間の激変を振り返る

ちょうど平成の時代を振り返るところから、セミナーは始まりました。
以下の3点を振り返りました。

  1. 経済力の激変
    平成の始めでは、日本の企業が世界的にもトップを走っていたが、現在ではアメリカのIT企業がトップを占めるようになった。というのも、日本がIT・イノベーションに遅れを取っているから。さらに、ビッグデータ・AI・ブロックチェーンという技術が出てきた今からは、さらなる激変が予想される。
  2. デジタルライフの激変
    インターネットが普及し、10年前にはスマホが登場することで、インターネットが生活になくてはならないものとなった。
  3. 仕事の激変
    機械化が進み、人がやる必要のないことが出てきた。さらに、AIの登場で、雇用形態の激変が予想されている。(マイケル・オズボーン教授『雇用の未来』)

自分か生まれる前からの振り返りであったため、実感できないこともあるが、自分なりに振り返ってみる。
ゲームが好きなので、ゲームで生まれてから今までを振り返ってみると、技術の進化が実感できるかと思う。

FC→SFC→PS→PS2PS3PS4

iPhoneが発売されたのが、2007年。
PS3が発売されたのが、2006年。
PS2の時代までは、実際に部屋に集まって対戦していたものが、PS3からはオンラインで見知らぬ世界中の人と共闘を組むことができるようになった。この時期から、インターネットというものが身近になり、なくてはならない存在となった気がする。

PS4が発売された頃からは、VR・ARなどの技術が普及し始めた。

スーパーファミコンをやっていた時には想像もつかない世界になったものだなぁとつくづく感じる。それと同時に、今後も大きな変化がすぐにでも起こる気がする。その波に乗れるかどうか、そこが今からの時代重要なのかなと思う。

ビッグデータ

企業体で管理できるデータ:構造化データ
企業体で管理できないデータ:非構造化データ

昨今では、非構造化データがSNSの普及などにより莫大になっており、上記両者を活用していくことが、ビッグデータと言われるみたい。
例えば、Twitterは2~3億ツイート/day、つまり、1日で8テラバイトぐらいの情報が増え続けているらしい。

これらの莫大なデータをどう活用できるかが重要とのこと。
今は、物理的な戦争は一部をのぞいてないが、データの奪い合いで国同士戦争状態にあるらしい。

データの量でいうと、国民の少ない日本は不利で、中国やアメリカがやはり強い。

AI

AIにも段階がある。

レベル 内容
Lv.1 言われたことだけを実行する エアコン/冷蔵庫
Lv.2 ルールを理解して判断する ルンバ/Siri
Lv.3 ルールを改善して、より良い判断ができる 検索エンジン/異常検知
Lv.4 自分で判断基準を設計し、判断する 外観検査/異常予測

Lv.3が機械学習(Machine Learning)
Lv.4が深層学習(Deep Learning

深層学習では、ニューラルネットワークを活用(多層ニューラルネットワーク

最近では、入国審査など間違いが許されない場所においてもAIが使われるようになってきた。

ブロックチェーン

変更・削除・改ざんできない+ダウンしない+正しい情報のみが記録されるネットワーク共有型のデータベース

今までは、ある会社が中央集権型でデータを管理しており、そこのデータがなくなると、全て消えてしまっていたし、改ざんの余地があった。

ブロックチェーンでは分散管理型を取り入れ、リアルタイムで誰もがデータを共有できる。そのため、一人の人がデータを消してしまっても、他の人が持っているため、データが消えることはない。また、データは暗号化されており、過去のデータを改ざんしようとしても、暗号化により現在のデータと辻褄が合わなくなるなど、改ざんがほぼ不可能と言われているそうだ。
改ざんが不可能→信頼できるデータということで、経済的な価値をも共有できる技術らしい。
例えば、ルイヴィトンでは、商品の原材料・工場などのデータをブロックチェーンで共有することで、自社の商品であることを格付けし、商品価値を維持している。

これからどんなアクションを取るべきか

  1. 未来の仕組みを想像する
    映画や漫画など、なんでもいいので未来がどうなっているかを考えてみる
  2. 日常にアンテナを立てる
    "zapier"や"IFTTT"などを活用して、情報収拾を自動化する
  3. 知識を体系化する
    ニュースや書籍、ユースケースを知る前に、基礎知識を蓄える
  4. 社会の大きな流れに早くのる
  5. 作る人から創る人へ
    ルールの上で、仕事をする人(作る人)は、そこにルールが有る限り、AIで自動化されてしまう可能性がある。そうではなくて、ルール自体を創る人になる

受講した感想

なんとなくニュースでは聞いていたことが、世界では生活に浸透してきていることを知り、これからまだまだ人生のある身として少なくとも、これらの技術のリテラシーを身につけておかなければならないと感じた。
ブロックチェーンと聞くとなんとなく難しそうに思えるが、例えばAWSではパッケージ化されているし、将来的に扱ってみたいと思う。

aws.amazon.com

まずは、アクションの第一歩目を踏み出せたということで、これからも継続して学んでいきたい。