派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】レゴ®シリアスプレイ®でわかる自分の感情とニーズとは?

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年9月28日開催のイベントでは、レゴ・ブロックを使った「レゴ®シリアスプレイ®」のワークショップを開催。それぞれがグループワークを通して、日頃なかなか見つめることのない「自分のニーズ」を見つけていきます。今回は、この記事を執筆しているライターもワークに参加して、一緒に学びました。

f:id:itstaffing:20181107101430j:plain

■今回のイベントのポイント

・頭で考えずに、手の触感を活用してできるだけ直感でワークする
・作品からストーリーを語ることで、無意識下の思いを見つけていく
・不本意な状態にあるとき「相手がこうすべき」より先に自分の「こうしたい」を明らかに


【講 師】納富 順一さん
▲【講 師】納富 順一さん
大学卒業後1年間のニートの後、テレビ局のADを経て、人材業界に。新卒、中途、障がい者など幅広い分野で人材ビジネスを経験。企業、求職者の目線に立ちづらい人材業界のあり方に違和感を持ち、もっと時代にあった本質的なアプローチを追求するためにキャリア解放区の理事長に就任。

レゴ®を使って対話を進める

納富さんは、「新卒一括採用という仕組み」に同調しない就活生を中心として、対話をベースとした採用支援を行っています。その一環として、今回のようにレゴ・ブロックを使った対話のワークショップも進めているそう。スキルだけでなく、生き方や内側に持っているものを見つめていくようにしています。

f:id:itstaffing:20181107101437j:plain
▲最初に、レゴ®シリアスプレイ®が生まれた理由を解説

この日に紹介する『レゴ®シリアスプレイ®』は、デンマークのレゴ社が、スイスの国際経営開発研究所、マサチューセッツ工科大学と協力して開発したプログラムで、2001年に完成しました。広く知られるようになったのは、NASAに導入され、チームの関係性がよくなったという実績が出てからのこと。その後、マイクロソフトやフェイスブックなど、アメリカ西海岸の企業を中心に導入が進んでいます。国内でも、企業や教育機関などに広まっています。

レゴ®シリアスプレイ®はできる限り直感的に

レゴ®シリアスプレイ®の起源などが説明された後、いよいよやり方の解説です。これから、レゴ・ブロックで作品を作っていきますが、レゴ・ブロックをまったく触ったことがないという方でも大丈夫です。むしろ、レゴ・ブロックに慣れ、作品を作り慣れている人はワークが難しくなると言います。頭で考えずに、できるだけ直感でくみ上げることが大切。設計図を頭で考えてから作るようなことはしないでほしいとのことでした。

f:id:itstaffing:20181107101440j:plain
▲各自に同じパーツが配られており、この中で作品を作っていく

「手にはさまざまな神経が張り巡らされており、外部化された脳とも言われています。手の感覚は脳と連動しているので、思考で考えずに、手の感覚でくみ上げてください。これはとても大事なポイントです」

最初のワークは、配られたパーツを使って「できるだけ高いタワーを作る」が課題。ワークがスタートすると、それぞれが思い思いに作り始めました。途中まで作ったのに崩れてしまい「あっ」という声が漏れる人も。

f:id:itstaffing:20181107101442j:plain
▲配られたパーツをすべて使い、できるだけ高く積み上げていく

ワークをして感じたのは、レゴ・ブロックを扱う手の感触の気持ちよさ。カチッとはまったときには、体で気持ちよさを感じることができます。いきなりタワーを作り始めるのではなく、いくつかくっつけたり外したりしていると、徐々にレゴ・ブロックの感覚がつかめてきました。「テストではないので隣の人の作品を見てもいいですよ」という納富さんの言葉を受け、隣の人が使っていた、「細長いレゴを横向きに使う」というテクニックを真似しました。

作品からストーリーを語る

「レゴ®シリアスプレイ®をするうえで大事なことのひとつは、作品からストーリーを語るということです。ほかの人の作品も見ながら、自分のタワーの『自慢ポイント』を説明します。その際に、自慢ポイントを指さしながら語り、聞く人はその指の先にある作品を見るようにします」

作品を見る理由は、リアルな人間関係を持ち込まないため。たとえば、社内などでワークをする場合、すでに人間関係ができあがっていると、上下関係などが出て、萎縮してしまう場合があるからなのだそう。目を見て話すのではなく、お互いに作品を見ながら話すこと。「レゴ®シリアスプレイ®は作品が全て」なのです。

グループ内で、それぞれの自慢ポイントを語り合いました。それぞれ、「不安定にならないようにした」「ここのアヒルっぽい形がいい」など語り合いました。私はもちろん、細長いレゴ・ブロックを縦に使ったこと。そのおかげで高さが稼げました。

f:id:itstaffing:20181107101448j:plain
▲出来上がった作品の中で自慢できるポイントを探し、指をさしながら説明する

「次に、そのタワーに『自分らしさ』を加えてアレンジしてください」

というのが次のワーク。私たちのグループは、自分自身を、バランスをとる天秤になぞらえる人や、回るレゴ・ブロックで楽しさを表現する人、お花で遊び要素を入れる人などがいました。

意図しないものからストーリーを作る

次のワークは、配られた写真の見本と同じ作品を作ること。写真には何種類かの作品があり、どれでも好きなものを選んでよいそうです。

「作ったものを、あなたにとっての『最悪な上司』と考えて、作品を通して最悪な理由を語ってください。レゴ®シリアスプレイ®は、作ったものに意味を与えることが大事。意図するものだけでなく、意図せざるものにも意味を与えていくためのトレーニングです」

トカゲに似た形を「トカゲのように逃げ足が速い」、頭がふたつあるモチーフを「矛盾だらけ」と意味づけをしながら、各自が何とか説明していました。

f:id:itstaffing:20181107101455j:plain
▲見本を見ながら作ったものに対しても、ストーリーを与えていく

「ストーリーを語って意味を与えていくのは、レゴ®シリアスプレイ®の最もシリアスな部分です。子どもはメタファーという概念が理解できないので、色とか形などの意味を与えていくことはできません。だからレゴ®シリアスプレイ®は大人向けなのです」

不本意を表す作品から、自分のニーズを見つける

これまではウォーミングアップ。これからが本題のワークです。

「人間関係で不本意だと思ったときのイメージを表現してください。『本意ではない』ということですが、具体的には悲しかったり、イライラしたり、寂しかったりという、ネガティブな感情を引き起こされたときのことを思い出してください。感情が動いた時のことを、できるだけ直感で作品にしてみてください」

それぞれが個人で作品を作ります。時間が来たら、これまでと同じようにストーリーを語っていきます。

「不本意だった話を細かくするのではなく、どこら辺が不本意なのか、色や形を通して意味を語ります。作品には本人の意識、無意識が両方とも反映されているので、『なんとなく作った』などとは言わないでくださいね」

グループ内の女性は、「仕事でクレームを入れてくる人がいる。いきなりひどいことを言ってきて困った」と言います。囲いの中に入っている相手が、狭い視野でいることを表していました。

f:id:itstaffing:20181107101457j:plain
▲作品から離れて語ることのないようにする。聞く人も、作品を見ながら話を聞く

私は「相手に伝えようとしたことがうまく伝わらず、相手を怒らせてしまった」様子を説明しました。伝える前にはお花だったのに、方向が曲がり、怒りをあらわす赤いレゴ・ブロックになり、ばらばらの方向を向いてしまうという形です。

f:id:itstaffing:20181107101502j:plain
▲ポイントとなる箇所に指をさしながら説明を進める

その後、テーブル内の付箋紙にその時の感情を書いていきます。「悲しい」「イライラした」など、それぞれが思い思いに書きました。

f:id:itstaffing:20181107101505j:plain
▲不本意だと思った状況に対して、自分の感情を付箋紙に書いていく

「不本意な感情を覚えると、『本当は相手がこうすべきなのに』と、人を正したり、糾弾する方向に走りやすくなります。そういう意図がみなさんの作品にもあると思います。ところが、その裏には『本意』があります。人は、興味関心のないどうでもいいことには感情が動かないはず。内なる願いが阻害されているから、不本意な気持ちになるのです。今度は、作品を直して本当に望んでいたこと、願い、ニーズを表してください」

それぞれ作品を作り、その後、同じように発表していきます。

f:id:itstaffing:20181107101508j:plain
▲「本当に望んでいたこと」を表す作品を作る

同じグループで「クレームを言う人」を不本意なできごととして表していた女性は、周囲に助けてもらうという意図の作品を作りました。

「クレームを言う人にいらいらしていたのですが、本当は周囲の人に助けてほしかったんだと気が付きました。先ほど付箋紙に『悲しい』という気持ちを書いて、なぜ悲しいのか考えたら『助けてほしかった』のだとわかったんです」

私は、自分の気持ちが相手にうまく伝わっている、という作品に。その際に、相手が受け止めきれるような、受け止めやすい小さな形のレゴ・ブロックを選びました。「自分の選び方も違っていればよかった」と気づくことができました。

それらのストーリーを語った後、その時の感情をさらに付箋紙に書いて、ワークは終了です。

f:id:itstaffing:20181107101512j:plain
▲本当に望んでいたことが実現したら、どんな感情になるか付箋紙に書く

「これまでの社会では、感情を押し殺して仕事をするのがよしとされていました。ところが、価値観が変わりつつあり、企業も変化しています。感情を表現して、やりとりしたうえで、いい関係性を作っていくことが大切だと見直されています。それは、家族やパートナーとの間でも同じ。相手を変えようとしたり、相手を律するのではなく、自分の願いや感情を相手に伝えれば対話につながっていきます」

仕事の現場で重視されがちな客観性や「べき論」を振りかざしてもなかなかうまくいかないもの。感情ベースにコミュニケーションを取り、人間関係を構築していくことこそ、これからの組織の在り方になっていくのかもしれません。

【イベントレポート】C言語を学ぶために、まずすべきこととは?

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年9月19日のイベントでは「プログラミング未経験でもOK!C言語開発環境の構築から、プログラミングの体験まで」と題して、C言語のハンズオンイベントを開催。

マイコンからサーバコンピュータまで、さまざまな環境で使われており、コンピュータのハードウェアを理解するのにも最適な言語といわれるC言語の魅力を、C言語の著書を多数執筆している種田元樹さんに解説していただきました。

f:id:itstaffing:20181022142907j:plain

■今回のイベントのポイント

・C言語の歴史
・C言語につまずかないコツ
・開発環境の構築
・プログラミング体験


【講 師】種田 元樹さん
▲【講 師】種田 元樹さん
2007年に日本シー・エー・ディー株式会社に入社以来、プログラマとして主にC言語での自社製品開発に携わる。著書として『Linuxネットワークプログラミングバイブル』『本当は怖いC言語』『C言語本格入門』(技術評論社)などがある。

C言語の歴史

今回のイベントはハンズオン形式ということで、参加者は自身のWindowsやMacのノートPC持参で参加しました。

f:id:itstaffing:20181022142912j:plain
▲今回はハンズオンイベントということで参加者は全員ノートPCを持参

プログラミング体験をする前に、種田さんは、まずC言語の基本について紹介してくださいました。

C言語は1973年に誕生したと言われているそうです。ずいぶん歴史のある言語だなと思ってしまいますが、1954年に誕生したFORTRANや、1959年に誕生したCOBOLに比べれば、新しい言語と言えます。

さすがに、VBやJavaScriptなどに比べると古いため、最新の言語に比べると人気はさほど高くないようです。ただし、システム記述言語として相変わらずさまざまな分野に使われており、Linuxを使っている人はC言語を覚えておくと役立つシーンもまだまだ多いといえます。また、近年ではIoT機器の基板に搭載されるような組み込み系のプログラムを書くのにも使われているそうです。

C言語につまずかないコツ

種田さんが自社内でリサーチした結果、エンジニアの人たちも「C言語は難しい」という声があったそうです。

代表的なのが「文字列が難しい」「includeが難しい」「構造体とクラスの違いが難しい」というもの。

C言語の文字列とはどのようなものでしょう。もちろんC言語においても、Aは文字でAAAAは文字列ということになりますが、最近のプログラミング言語では文字列用のデータ型(クラス)が用意されているのに対して、C言語にはありません。種田さんによれば「C言語は文字列という概念が薄いプログラミング言語」と言えるそうです。

f:id:itstaffing:20181022142915j:plain
▲C#では変数をString型(クラス)で宣言することで、変数同士を単純に比較することができるが、C言語には文字列のための型が無いため、同様の処理をするには一手間かかる

f:id:itstaffing:20181022142919j:plain
▲C言語では文字(char)型の配列、つまりメモリ上に連続して保存された数値(文字コード)の羅列であるため、後述するような文字列の操作(分割など)では、配列のデータを順に読み出し、操作するといった処理が必要になる。なお、上図の0xで始まるデータは16進数を表す

C言語のプログラムでは冒頭に「#include」という単語が記述されていますが、これも「よくわからない」と言われるそうです。

#include <stdio.h> //←この部分です
int main(){

printf(……);

}

これは、ファイルを外から読み込んでプログラムをその場所に貼り付ける命令で、上記の例で言えばstdio.hという外部ファイルをプログラムの冒頭に貼り付けていることになります。stdio.hは標準入出力に関する各種命令をあらかじめ定義してある膨大な量のプログラムが記述されています。上記のプログラムでprintf()という命令を使っていますが、この命令もstdio.hの中で定義されているため、stdio.hを読み込んで初めて使えるようになります。

Javaを始めとする最近のオブジェクト指向言語にはクラスという考え方があります。クラスはデータと手続きを一緒に扱える工夫がされているのに対して、C言語ではデータだけを扱うため、手続きの部分は自分で個別にプログラムします。

f:id:itstaffing:20181022142921j:plain
▲Stringクラスには、あらかじめ文字列分割のための.split()というメソッドが用意されているため、簡単に文字列を分割できる

f:id:itstaffing:20181022142924j:plain
▲C言語で文字列を分割するためには、自分でプログラムを書かなければならない

開発環境の構築

いよいよ、プログラミング環境の構築開始です。Windows上では、いくつか選択肢がありますが、今回はCygwinというソフトウェアを使います。gnupack_devel-13.06-2015.11.08.exeというプログラムをダウンロードして実行します。そしてC:\gnupack_devel-13.06-2015.11.08 の中にある、startup_cygwin.exe をダブルクリックすると、Linux上でよく利用されているGNUソフトウェアツールが使える環境が起動します。

▼こちらからダウンロードできます
https://ja.osdn.net/projects/gnupack/releases/p10360

Mac OSの場合は、AppStoreに接続して、Xcodeをダウンロードします。そしてターミナルを開き、次のコマンドを実行します。

xcode-select --install [return]


f:id:itstaffing:20181022142926j:plain
▲インストールからプログラミングまで、分からないところは種田さんや会場スタッフがその場でサポートしました

プログラミング体験

環境が整ったらプログラミングのスタートです。

限られた時間ということもあり、「hello, world」というメッセージを画面に表示する単純なプログラムに挑戦しました。

テキストエディタ(Windowsならばメモ帳)を起動して、新規にhello.cという名前のファイルを作成します。そして次のプログラムを記述して、保存します。

#include <stdio.h>
int main(int argc, char argv[])
{

printf("hello, world¥n");
return 0;

}

ここでプログラミング時の注意がいくつかありました。

最初は文について。C言語の文は、セミコロン(;)で終わります。上記のprintf()文は、次のように記述しても文法上は問題ありません。

printf
(
"hello, world¥n"
);

複数行にまたがって、ちょっと読みにくくなりますね。読みやすさという点で、次に注意するのがインデント(字下げ)です。インデントは、プログラムのかたまりを人間が把握しやすくするために使います。インデントを入れても入れなくても、プログラムの意味は変わりません。

どう字下げするかは言語としてのルールがあるわけではありません。1段のインデントに4つのスペースを使う人、8つのスペースを使う人、tabキーで入力されるタブを使う人など、人それぞれです。ただ、仕事でプログラミングを行う場合は、チームでのルールがあったりしますので守りましょう。

そして、最後の注意点はプログラムに注釈を入れるためのコメント文です。コメントは次の2種類の記述方法があります。

//コメント
/*コメント*/

両者の違いは、//のほうは、//から行末までは、すべてコメントとして扱われますが、/*と*/のほうは、2つに挟まれた部分だけがコメントとして扱われます。

コメントの中身は、コンパイル時に何も影響しないため、プログラムのコンパイルしたくない部分を一時的に/*と*/で囲んで、コンパイルされないようにするために使うこともあります。

さて、エディタでhello.cというCのソースファイルを記述し、保存したら、次にコマンドラインから、

gcc hello.c

というコマンドを実行します。すると、画面にたくさんのメッセージが表示されます。これは、C言語のプログラムを、コンピュータが実行できる形式に翻訳するコンパイルという作業です。

コンパイルが終わるとa.exeという実行ファイルが出来上がります(Windowsの場合。Mac OSではa.out)。これを実行すると、画面に「hello, World」というメッセージが表示されます。

f:id:itstaffing:20181022142931j:plain
▲何度か入力ミスのせいでコンパイルエラーが出ましたが、最後はちゃんと動くプログラムが完成しました

新しい言語を学ぼうとするときに、プログラミング環境を整えるところで気持ちが萎えてしまうことも多いのですが、今回のイベントでは、自身のPCに環境構築をつくるところを詳しく解説されたので、これから勉強される方は参考にしながら、C言語について、いろいろと試してみてください。

【イベントレポート】エンジニアが生き残るためのテクノロジーの授業[第6回]「ハードウェアと仮想化の選び方」

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年9月12日のイベントでは「エンジニアが生き残るためのテクノロジーの授業」の第6回として「ハードウェアと仮想化の選び方」を開催。

ますます多様化するハードウェアと、技術進化の著しい仮想化テクノロジーについて、増井さんならではの分かりやすい語り口で解説をしてくださいました。

f:id:itstaffing:20181015111604j:plain

■今回のイベントのポイント

・分散と集中を繰り返す歴史
・多様化するハードウェア
・現代に必須の「仮想化」
・障害対応と稼働率


【講 師】増井 敏克さん
▲【講 師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』(以上、ソシム)がある。

分散と集中を繰り返す歴史

ハードウェアの話といっても、回路設計の話ではありません。ビジネスで、ITを支えるハードウェアをどのように使っていくかという話だそうです。

ハードウェアを語るときに欠かせないのが「歴史は繰り返される」ということ。

まず、処理する場所について考えます。1970年代頃にはメインフレームと呼ばれる大型のコンピュータに、複数台のダム端末と呼ばれるディスプレイ&キーボードを接続して、多人数で利用していました。これは集中型です。80年代にパソコンが登場すると、手元のパソコンでいろいろなことが処理できるようになり、次第に分散型へと移行します。

ところが、90年代にインターネットが普及し始めると、パソコンではWebブラウザの利用が増え、再びサーバによる集中型に移行します。2000年代に、いわゆるWeb2.0が登場すると、パソコンの性能アップに伴い、ブラウザ側で高度な処理ができるようになり、分散型に移行。その後、スマートフォンが登場しますが、パソコンに比べると処理能力が低いため、サーバ側でさまざまな処理するようになり、集中型に戻ります。

f:id:itstaffing:20181015111530j:plain
▲歴史を見ると集中型と分散型が繰り返されている。現在はIoTの登場で、分散型への移行期となりつつある

データをどこに置くかというのも重要なテーマ。災害対策の視点からはバックアップデータを物理的距離の離れたところに置いておきたいというニーズもあります。しかし、ネットワークを経由すると遅いという問題もあるほか、一か所で管理する方が楽という管理面でのニーズや、安価に管理したいという予算面でのニーズもあります。

システムを仮想サーバで構築するか物理サーバで構築するか、クラウドを利用するかオンプレミスで使うかも悩ましい問題ですが、最近の流行りはハイブリッド型だそうです。

f:id:itstaffing:20181015111532j:plain
▲どちらが良い悪いではなく、どう組み合わせてどう使うかが重要。ハイブリッド型は良いとこ取り

また、複数のサーバを使って、どのように分散していくかというのも一つのテーマです。分散の方法には垂直分散と水平分散があり、それぞれ目的によって向き・不向きがあるそうです。

f:id:itstaffing:20181015111535j:plain
▲目的に合わせて垂直分散と水平分散を選び、構成していくべき

多様化するハードウェア

コンピュータを構成する要素には、ずっと変わらない五大装置があります。

f:id:itstaffing:20181015111539j:plain
▲HDDがSSDに変わったりしているが、昔のパソコンも今のパソコンも基本構成は同じ

一方で、近年、飛躍的に変わってきたものもあります。その代表がセンサー。カメラ(光学センサー)や重力センサー、温度センサーなど、次々に新しいものが登場し、性能も日進月歩で向上しています。こうしたセンサーをどう使うかについて、増井さんは「どれだけよい結果を画面上に出力しても、人に伝わらなければ意味がない」として、利用者が使いやすいインターフェイスが、今後さらに重要になってくるとのことでした。

また、面白かったのが「匂い」「味覚」のセンサーについて。すでにセンサー自体は存在しますが、そのセンシングの結果を、どうすれば人に伝わるのかという話。増井さんも、個人的に興味があるそうで、注目しているそうです。

f:id:itstaffing:20181015111543j:plain
▲匂いや味をどう伝えるかは増井さんも注目する今後の大きなテーマ!?

現代に必須の「仮想化」

「仮想化」というと、最近よく聞くようになったと思われがちですが、実は仮想化という考え方自体は昔からあったそうです。

1970年代のメインフレームの時代には、MVSといった仮装記憶機能を備えたOSが存在しており、現在もIBMのz/OSなどにその機能が受け継がれています。

また、複数のHDDをまとめて1台のストレージのように扱うRAIDも、古くからある技術で、一種の仮想化と呼べるものだそうです。

一方で、最近よく耳にする「仮想化」技術には、以下のようなものがあります。

f:id:itstaffing:20181015111547j:plain
▲「仮想化」と一口に言っても、いろいろな領域でそれぞれの仮想化技術が開発・導入されている

仮想化のメリットとして、スペースの削減があります。1つの物理マシンを複数の仮想マシンとして利用できるため、たとえば月末月初にしか負荷が高まらないシステムの空いている期間を有効活用することも可能になります。

また、準備期間の短縮もメリットの一つ。新規にサーバが必要になったときに、いちいちハードウェアを買い揃える必要がありません。システムに障害が起きた場合も、すぐに代替システムを用意できるため、BCP対策としても効果を発揮します。

仮想マシンの仕組みにはいくつかあります。ホストOS型、ハイパーバイザー型のほかに、コンテナ型と呼ばれるものもあります。

f:id:itstaffing:20181015111550j:plain
▲ホストOS型とハイパーバイザー型。一般的にホストOS型よりもハイパーバイザー型の方が高速に処理できる
f:id:itstaffing:20181015111552j:plain
▲コンテナ型は仮想マシン上で動かすOSの種類が限定されるものの、仮想マシンの起動に時間がかからないなどメリットも多い

そのコンテナ型の中でも、現在人気急上昇中なのが「Docker」という仮想化ソフトウェアです。Docker上の仮想マシンで動かせるOSはLinuxのみですが、PHPを利用したり、Linuxサーバ環境を複数用意したりといった目的にはピッタリです。

しかも、仮想マシンをイメージファイルとして保存でき、同じ環境の仮想マシンを手軽に起動できます。すでに多くのイメージがDocker Hubというサイトで公開されており、目的に合ったイメージをダウンロードして、環境構築済みのLinuxサーバを起動できるそうです。便利ですよね。

f:id:itstaffing:20181015111557j:plain
▲Dockerはイメージがあれば手軽にLinux仮想マシン環境が起動できる。その便利さから現在人気急上昇中

他にも仮想メモリや仮想ディスクなど、現在、仮想化という考え方はいたるところで実装され導入されています。

障害対応と稼働率

システムを運用していく上で、何らかの障害が起きることがあります。システムが停止してしまうとビジネス上の損失が生じますから、これを何とか抑止したい、抑止できなくても停止している時間を短くしたいと考えるのは当然のことです。このシステムの耐障害性は稼働率という数字で計ることができます。

f:id:itstaffing:20181015111601j:plain
▲MTBFを伸ばすためにメモリにエラーチェック機能を持たせたり、ストレージをRAIDで構成したり、UPS(無停電電源)を導入したりしている

稼働率は99.99……と、小数点以下に9が並び、100%に近いほど信頼性が高いということになります。増井さんによれば「小数点以下5桁という事業者も見たことがある」そうです。

イベント開催日の1週間前に、北海道で地震による大規模停電がありました。増井さんが管理している一部のサーバは北海道のデータセンターにあったそうですが、停止することはなかったそうです。

「私のHPなら年間3日ぐらい止まっても大きな問題はありませんが、商売をしている人はそうはいきません」(増井さん)

データセンターやクラウドサービスを選ぶときにはSLA(サービス品質保証)を確認しておくことが大切。また、サービス終了や突然の値上げなど、ある程度リスクがあることを頭の隅に置いておくことも大切だそうです。

今回のイベントは、ハードウェアと仮想化ということで、難しい話かなと思われがちですが、サーバを利用する側の注意点をしっかりと押さえることができると、面白くなってきます。増井さんによる全6回の「エンジニアが生き残るためのテクノロジーの授業」は、いかがでしたか。最近のトレンドを中心にテーマごとに詳しく説明していただきました。一度、第1回から復習してみてくださいね。

【イベントレポート】エンジニアが生き残るためのテクノロジーの授業[第5回]「データベースの設計とデータ分析」

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年8月29日のイベントでは「エンジニアが生き残るためのテクノロジーの授業」の第5回として「データベースの設計とデータ分析」を開催。

データベースは、ソフトウェア開発エンジニアも、インフラエンジニアも知っておきたいテーマ。その仕組みや利用時のポイントを、増井さんならではの、分かりやすい語り口で解説してもらいました。

f:id:itstaffing:20181010103223j:plain

■今回のイベントのポイント

・データベースを使うメリット
・データベースならではの機能
・テーブルの正規化
・分析に必須の統計学
・データの匿名化と価値


【講 師】増井 敏克さん
▲【講 師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』(以上、ソシム)がある。

データベースを使うメリット

データをまとめて管理したいシーンは、身の回りにいくらでもあります。しかし、これをファイルで管理しようとすると、やがて限界に突き当たります。

f:id:itstaffing:20181010103232j:plain
▲ファイルで管理するとさまざまな問題が生じてしまう。これらを解決するのがデータベース

データベースは、データをまとめて管理し、大量のデータから必要なものを素早く取り出したり、大勢で使用する際にデータの整合性を確保したりしてくれるソフトウェアです。

データベースには、階層型データベース、オブジェクト指向データベース、関係データベース、NoSQLなど、さまざまなタイプがありますが、現在の主流は、関係データベースです。近年、データ分析の世界ではNoSQLが使われ始めていますが、それ以外の分野への普及は、まだまだこれから。そこで今回のイベントでは、主流である関係データベースについて学んでいきます。

関係データベースが管理するデータはExcelと同様の表形式(テーブル)で表せます。ただし、Excelとの違いも数多くあります。

f:id:itstaffing:20181010103140j:plain
▲関係データベースのデータはテーブルで表すことができる

一番の特徴は、SQLという言語を使って操作することができるという点。SQLは標準化されていますが、データベース製品ごとに拡張された方言もあるそうです。このSQLを使うことで、複数のテーブルを結合して必要なデータを取り出します。

SQLについて、増井さんは「この8つの文は、最低限覚えておきたいもの」と紹介してくださいました。

f:id:itstaffing:20181010103144j:plain
▲最低限覚えておきたいSQL文

ここまで単に「データベース」と呼んできましたが、正しくは中身のデータの集まりが「データベース」であり、データベースを管理するシステムソフトウェア(DBMS:DataBase Management System)です。ただし、ここでは以降もDBMSをデータベースと呼びます。

f:id:itstaffing:20181010103147j:plain
▲データベースを管理するのがDBMS。でも、DBMSがデータベースと呼ばれていることが多い

データベースはとても便利なので、あらゆるデータを保管したくなりますが、データベースが得意とするのは構造化データ。画像や音声、ブログのデータなどの非構造化データ管理は不得意なので注意が必要です。

データベースならではの機能

データベースならではの機能として、重複の防止と検索性の向上という2つの要素があります。

重複の防止では、同時実行制御やトランザクション管理が挙げられます。トランザクションと呼ばれる一連の処理をまとめて処理することで、データの整合性を担保します。

f:id:itstaffing:20181010103151j:plain
▲「+1万円」の更新に失敗すると、「-1万円」の処理も取り消す。これで整合性が保たれる

システム障害発生時のデータ回復もデータベースの重要な役割です。運用中にシステムに障害が発生した場合も、ロールバックとロールフォワードを組み合わせてデータを回復します。

f:id:itstaffing:20181010103153j:plain
▲定期的にチェックポイントを設け、障害発生時には直前のチェックポイントまで戻り、障害発生時までに確定していた処理はロールフォワードし、確定していなかったものはロールバックして元に戻す

検索性についても、二分探索のように、二分木による索引を使った検索など高速な検索アルゴリズムが実装されているそうです。

f:id:itstaffing:20181010103155j:plain
▲データ件数が膨大になってもパフォーマンスが低下せず高速な検索が行える

テーブルの正規化

データベースを設計するときには、テーブルの正規化という点も考える必要があります。

f:id:itstaffing:20181010103158j:plain
▲テーブルの正規化では増井さんから演習課題も出された

たとえば取引先データのそれぞれに、送金先として銀行名を直接入力していたとします。ある時、その銀行が行名変更したとしたら、どうでしょう。すべての取引先のデータについて、銀行名を一つひとつ修正していかなければなりません。そこで銀行名は別テーブルにして管理しておきます。これがテーブルの正規化です。

f:id:itstaffing:20181010103202j:plain
▲銀行名が変わった場合も銀行名のテーブルの1か所を書き換えるだけで済む

これを踏まえて、会場では増井さんからテーブルの正規化の演習課題が出され、参加者は熱心に取り組みました。

このように、テーブルを分けても、必要なデータは外部結合を使えば取り出すことができます。

f:id:itstaffing:20181010103205j:plain
▲テーブルを分けても、SQL文を使って結合すれば必要なデータを取り出せる

分析に必須の統計学

次に入力したデータを基に分析するときの知識についてです。

増井さんは3つのグラフを示してくれました。一見するとA社、B社、C社ともに同じ様に売上を伸ばしているように見えますが、縦軸と横軸に注目すると、そうではないことがわかります。

f:id:itstaffing:20181010103209j:plain
▲B社は縦軸の刻みが細かく、C社は横軸が2年で1目盛りなので、いずれも成長率はA社より劣ることがわかる

このように、データを分析するには、データをどのように捉え、比較していくのかを知る必要があることがわかります。増井さんによれば、分析に必要な統計知識とは、合計や平均、最大値や中央値、標準偏差などの基礎的なもので十分なのだそうです。

高度な分析が必要なときはツールを使います。実はExcelでも、アドインの「分析ツール」を使うと、けっこうなところまではできるとのこと。プログラムを組むなら、関連ライブラリが充実しているR言語やPythonがお勧めとのことでした。

一方で、上記のグラフのトリックでもわかるように、分析結果を正しく表現することも大切です。ここで増井さんから出された課題が、データに対してどのような種類のグラフを使うかというもの。

f:id:itstaffing:20181010103214j:plain
▲どんな種類のグラフを使うと効果的か?正解は一つではないとのこと。

解答として、例1は棒グラフで「量をわかりやすく伝える」、例2は折れ線グラフで「変化をわかりやすく伝える」、例3は円グラフで「割合をわかりやすく伝える」という例が示されましたが、例1を円グラフ、例3を棒グラフでもかまわないそうです。

データの匿名化と価値

データ分析を行う場合に、最近、特に注意が必要なのが「データってそのまま使っていいのか?」ということ。特に、改正された個人情報保護法や、EUが推進するGDPRには注意を払い、それらに抵触しないようにデータを取り扱う必要があります。

f:id:itstaffing:20181010103218j:plain
▲データの活用には、法律に抵触しないように活用するための知識も求められる

そこで登場するのが「k-匿名化」という手法です。最近よく使われていますが個人情報を「文京区、男性、30代」というように、同じような属性を持つ人がk人いる状態まで匿名化することで、個人を特定できないようにするのだそうです。

f:id:itstaffing:20181010103220j:plain
▲文京区在住の30代の男性は大勢いるので誰のことか特定できない

今回のイベントは、特定の製品に依存しない、データベースの全体像を把握するのにとても役立ちました。印象的だったのはテーブルの正規化。関係データベースのテーブル設計について、大切なものを学べました。本シリーズのイベントも、次回で最終回。お楽しみに。

【イベントレポート】フロントエンドエンジニアに転身したい人のための HTML&CSSの基礎知識とつまずかずに学ぶ方法とは

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年8月24日のイベントでは「これから需要の高まる職種『フロントエンドエンジニア』に転身したい人のための HTML&CSSの基礎知識&つまずかずに学び通すための学習方法」と題して、オンラインプログラミングスクール「CodeCamp」で講師として活躍する山崎響さんに、フロントエンドエンジニアについて教えていただきました。

f:id:itstaffing:20180925143726j:plain

■今回のイベントのポイント

・食いっぱぐれたくなければフロントエンドエンジニアを目指そう
・Webデザイナーやバックエンドエンジニアが目指すからこそ価値がある理由
・フロントエンドエンジニアに必要なスキル
・こんなに簡単に!HTML&CSSの基礎知識をデモンストレーション形式で解説
・使える力を身につけて、つまずかずに学び通すための学習方法

【講 師】山崎 響さん
▲【講 師】山崎 響さん
株式会社エルビーエム代表取締役・株式会社フェローライン執行役員CBO。オンラインプログラミングスクール「CodeCamp」で講師として、受講生がつまずきやすいポイントをフォローしながら『学ぶ楽しさ』を共にする授業を行う。HTML・CSSを16歳の時に独学で習得し、実務経験を積んだのち独立。デザイナー兼エンジニアとして制作業務に携わる。担当教科はHTML5、CSS3、JavaScript、PHPなど。著書に『HTML5&CSS3しっかり入門教室』(翔泳社)がある。

食いっぱぐれたくなければフロントエンドエンジニアを目指そう

今回、山崎さんが語ったのは「バックエンドのエンジニアやデザイナーが、フロントエンドエンジニアになると、こんないいことがあるよ」というお話です。では、いったい、フロントエンドエンジニアってどんなことができる人の事を指すのでしょうか?

一般には次のような素養を備える人だと言われています。


イメージ
▲HTMLやCSSのコーディングのみならず、システムやサービスの一歩踏み込んだ領域にまで知識やスキルが及ぶ人のこと

なぜ、フロントエンドエンジニアは「食いっぱぐれない」のでしょうか。山崎さんは次の3つを挙げ、今後の需要の高まりを説明しました。

f:id:itstaffing:20180925143734j:plain
▲クリエイティブワークはAIの苦手領域。将来も無くならないというのは大きな安心材料

Webデザイナーやバックエンドエンジニアが目指すからこそ価値がある理由

山崎さんによれば「デザイナーやバックエンドエンジニアこそが、フロントエンドエンジニアを目指すべきだそうです。

f:id:itstaffing:20180925143736j:plain
▲デザイナーもバックエンドエンジニアも、フロントエンドエンジニアの知識やスキルを備えることで自身の仕事の幅が広がり質も高まる

特にフロントエンドエンジニアのスキルも併せ持ったバックエンドエンジニアは、話の理解が早く、現場で重宝されるそうです。

フロントエンドエンジニアに必要なスキル

では、フロントエンドエンジニアに必要なスキルには、どのようなものがあるのでしょうか。山崎さんは次のような技術を示してくれました。

f:id:itstaffing:20180925143739j:plain
▲たくさんあり、「そんなに覚えないとダメなの?」と思うかもしれないが、上の段ほど優先順位が高く、下の段は必要に応じて身につければよいとのこと

いずれの技術も進歩のスピードが速いため、常に情報収集と勉強が必要です。とはいえ、HTML、CSS、JS等の基礎的な技術は、時間を経ても、それほど大きく変わっているわけではありません。そこで、スキルを効率よく身につけるためのポイントとして山崎さんが推奨するのが、

・基礎技術を、時間をかけずに押さえる
・我流ではなく正しい基礎を学ぶ
・学習内容の濃淡を明確にする

という3点です。

「初心者がそこまで知らなくてもいいよね」ということもたくさんあるため、取捨選択が大切。そして一番大切なのは“できる楽しさ”を感じることだそうです。

「テキストエディタとWebブラウザがあれば、手軽に始めることができますから、すぐに楽しさを感じていただけるはずです」(山崎さん)

こんなに簡単に!HTML&CSSの基礎知識をデモンストレーション形式で解説

ここからは、山崎さんによるデモンストレーションが始まりました。

実際の仕事をイメージして作業を進めます。まずフロントエンドエンジニアのもとに、デザイナーから、完成イメージが届きます。

このとき、画像の素材が、デザインとは別に渡されればよいのですが、無い場合はデザイン画面から切り出す作業も発生します。

f:id:itstaffing:20180925143741j:plain
▲コーディングに入る前に、画面に読み込む画像などを整理しておく

そして、テキストエディタを起動して新規ファイルとしてindex.htmlを作成します。続いて、デザインの構成を確認します。

・ヘッダ
・ナビゲーションバー
・見出し
・コンテンツ
・トピック
・ニュース
・ギャラリー(JS)
・アクセスマップ(Google マップの埋め込み)
・フッター

確認した構成に従って、HTMLの基礎構文を入力します。

f:id:itstaffing:20180925143744j:plain
▲index.htmlを作成し、基礎構文を入力する

続いて、文書タイプの宣言文(HTML5)を入力し、言語設定、ヘッダ情報、キャラクターセット(UTF-8)などを指定します。bodyタグで囲まれた範囲に原稿をテキスト入力し、マークアップしていきます。「ここは見出し」「ここは本文」などの構造化タグを付けていきます。

検索エンジンのクローラーが参照するメタタグや、検索エンジンでサイト概要として表示されるdescriptionなども入力します。

さらに、画像の読み込みや、ページ内ジャンプなどもタグで指定していきます。

f:id:itstaffing:20180925143746j:plain
▲実際に目の前でサイトがつくられるので、わからない部分が細かく確認できます

そして、今回の見どころでもあるGoogle マップの読み込みを指定します。

Google マップは、従来は無料で1日2万5千マップロードまで利用でき、それを超える場合は利用料を前払いという仕組みでしたが、2018年7月16日からは、1ヶ月2万8千マップロードまでが無料で、それを超えると従量課金となりました。そのため、事前にAPIにアクセスするためのキーの取得が必要になったそうです。今回はキーの取得から、マップの表示を実装するところまで実演してくださいました。

本文の構造化が終わったら、次にCSSを適用し、デザインを整えていきます。

CSSには「ノーマライズCSS」と「自分で設定するCSS」というものがありますが、ノーマライズCSSという存在を初めて聞いたという人もいるかもしれません。

実はWebブラウザにはそれぞれ固有の表示ルールがあります。たとえばFirefoxは、特に指定がなければページを表示する際に、ページの端に自動的にマージンが挿入されることが知られています。小さなことですが、それでページの見え方が変わってしまうこともあります。そこで、ブラウザ固有の部分を吸収するために、ノーマライズCSSであらかじめ各ブラウザの差異を吸収しておき、その上で「自分で設定する」CSSを適用して、目的のデザインに仕上げていきます。

このノーマライズCSSは、Web上を探すといくつか見つかるそうなので、いろいろと試してみるのがよいそうです。

f:id:itstaffing:20180925143748j:plain
▲ノーマライズCSSの存在はコーダーの人以外には耳慣れない存在

CSSファイルが完成したら、HTMLファイル内にCSSの読み込みを指示します。

このとき、初期化、ノーマライズCSS読み込み、自分で設定するCSS読み込みの順に指定します。こうして、イベントの短い時間内に、ページが完成するところまで実演してくださいました。

使える力を身につけて、つまずかずに学び通すための学習方法

最後に、山崎さんが、フロントエンドエンジニアになるためのスキルを身につけるためのコツを教えてくださいました。

・手を動かして何度も書き、手で覚える
・疲れたと思ったら休憩する、寝る
・最初から完璧に覚えようとしない

とにかく、「プログラムがうまくできた事を楽しむ」のが大切だそうです。

f:id:itstaffing:20180925143751j:plain
▲短時間でデザイン通りのレイアウトや機能を実装してしまうことにビックリ

今回のイベントで、フロントエンドエンジニアという仕事の面白さがとてもよくわかりました。特に、自分の書いたコードの結果がすぐにその場で確認できるというのは魅力的です。ノーマライズCSSなど、聞きなれないものもあったかもしれません。これを機に正しい基礎を身に付けていきましょう。

【イベントレポート】プログラミング未経験でもOK!Pythonで体験するAI(ディープラーニング)と独学でプログラミングをマスターする方法

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年7月27日のイベントでは「プログラミング未経験でもOK!Pythonで体験するAI(ディープラーニング)と独学でプログラミングをマスターする方法」と題して、書籍『わかるPython[決定版]』や『100問でわかるPython』などの著者、松浦健一郎さんをお迎えして、AIプログラミングとPythonの独学方法について教えていただきました。

f:id:itstaffing:20180920101939j:plain

■今回のイベントのポイント

・今、どのプログラミング言語を学ぶべきか?
・ディープラーニングを体験しよう
・Pythonはここがキモ~この機能を使え!
・独学でプログラミングスキルを身に付けるには


【講 師】松浦 健一郎さん
▲【講 師】松浦 健一郎さん
東京大学工学系研究科電子工学専攻修士課程修了。大学では並列コンパイラを学ぶ。学生時代からプログラミング記事の執筆やソフトウェア開発に携わる。NEC中央研究所において並列コンピューティングの研究に従事した後、フリーランスに。研究所や大学や企業からの依頼で、ソフトウェア開発や研究支援の業務を行い、書籍を執筆する傍ら、企業や学校でプログラミングを教える。司 ゆき氏と共著で、28冊の書籍を執筆。ハンドパペットを使ったプログラミング教育動画の配信なども行っている。近著に『わかるPython[決定版]』(ソフトバンククリエイティブ)、『おもしろまじめなAIスピーカーアプリをつくろう』(秀和システム)などがある。

今、どのプログラミング言語を学ぶべきか?

これまでに多数のプログラミング言語を学び、使いこなしてきた松浦さんは、言語の学び方にもいくつかオススメの方法があるそうです。それは次のようなもの。

・いくつでも学ぶ
・そのとき必要な言語を学ぶ
・目的のものが作れる言語を学ぶ
・短期間で学ぶ

そして、仕事をしながら学ぶ(仕事に育ててもらう)というのがポイント。Pythonを学ぶなら、Pythonの仕事をするのがベストということになります。

いくつもの言語を学ぶのは大変と思うかもしれませんが、共通の概念を学んでおけば、大丈夫。各言語で共通の概念とは次のような項目です。

・データ構造
・アルゴリズム
・計算機アーキテクチャ

松浦さんがPythonをオススメする理由の一つとして紹介してくれたのが、「活きのいい言語を選ぶ」というものでした。

たとえば、大ヒットした映画の続編となるパート2が面白くないという評価を受けることが多いのは、オリジナルの作者が制作から離れていることがあるから。プログラミング言語も同様で、その言語の作者が今でもバージョンアップに関わっているものが、オリジナルの設計思想が失われていない「活きのいい」言語だそうです。Python開発者のグイド・ヴァンロッサムは62歳とメジャーな言語の開発者としては若いので、今後もPythonに関わり続けてくれることを期待したいです。

※本イベントが開催された2018年7月、グイド・ヴァンロッサム氏はPythonの機能拡張に関する議論の調停役からの引退を発表したが、当面の間はPythonの開発に携わるとのこと。

一方で、コンピュータアーキテクチャを理解するのに役立つ機械語も、オススメの言語とのこと。

ディープラーニングを体験しよう

Pythonといえば機械学習。そこで実際にディープラーニング(深層学習)を体験してみることに。

f:id:itstaffing:20180920101943j:plain
▲実際にノード間をつないだり、自分で計算したりしてディープラーニングの中身を体験

ディープラーニングを知るために、まずはニューラルネットワークの基礎を学びます。

f:id:itstaffing:20180920101946j:plain
▲基本的なニューラルネットワークのモデル

結合されたノードとノードの間を、信号が伝わっていきます。結合には「重い結合」と「軽い結合」があり、重い結合は次のノードに信号を強く伝え、軽い結合は弱く伝えます。入力層に入力された信号は、中間層に伝わり、続いて出力層に伝わります。出力層に伝わった信号が、ニューラルネットワークが出した「答え」に相当するのだそうです。

ある層のノードと次の層のノードをすべて結合させたものを「全結合のニューラルネットワーク」と呼び、中間層が2層以上のものを「ディープニューラルネットワーク」と呼びます。

f:id:itstaffing:20180920101948j:plain
▲中間層が2層以上のものがディープニューラルネットワーク

ニューラルネットワークの結合の強さを調整する作業を「学習」と呼び、ディープニューラルネットワークの結合の強さを調整することを「ディープラーニング」と呼ぶそうです。最近、いろいろな場所で「ディープラーニング」という言葉は耳にしますが、その意味は今回のイベントで初めて知った、という方もいらっしゃったのではないでしょうか。

結合の強さを決めるのが「重み」と「バイアス」です。下図の例では、入力Aに重みAXをかけ、入力BにBXをかけ、バイアスXを足したものが出力Xに、同様にAにAYをかけ、BにBYをかけ、バイアスYを足したものが出力Yになります。

f:id:itstaffing:20180920101951j:plain
▲この重みとバイアスで結合の強さを調整する

Pythonのディープラーニングのサンプルとしてよく紹介されるのが手書き文字認識。MNISTと呼ばれる手書き数字のデータを使います。

f:id:itstaffing:20180920101953j:plain
▲MNISTは色々な字体で書かれた0から9までの数字画像データ

このデータはグレースケールの画像で、輝度0~255の256段階の階調で表されています。本来、MNISTのデータはピクセル数も多いのですが、松浦さんは、参加者が手計算でもできるように、4×4ピクセルのデータを例に、処理をわかりやすく紹介してくれました。

まず、入力データに重みを適用する「畳み込み」という処理を行います。これは「畳み込みニューラルネットワーク(CNN)」で行う処理の一部です。

f:id:itstaffing:20180920101956j:plain
▲畳み込みは画像処理に使われる処理で、数学の内積や積和演算に相当する

4×4の入力データに対して3×3の重みを適用するには、3×3の重みをずらしながら演算します。しかし、これでは結果が2×2のデータになってしまい、入力データの4×4に比べると情報量が減少してしまいます。

f:id:itstaffing:20180920101958j:plain
▲4×4のデータに3×3の重みを適用すると結果は2×2になってしまう

そこで、入力データの周囲を0で埋める「パディング」という処理を行います。これにより、元のサイズの出力が得られます。

f:id:itstaffing:20180920102001j:plain
▲元データの周囲を0で埋めることで、元データのサイズの出力が得られる

畳み込みの後に「プーリング」という演算を行います。典型的なプーリングの手法は、マックスプーリングといって、2×2の4つのマトリックスの中から、それぞれの最大値を取り出します。

f:id:itstaffing:20180920102003j:plain
▲左上の2×2に着目すると8、14、19、12なので最大値は19。右下では20、15、15、10なので最大値は20になる

さらに、過学習を防ぐための「ドロップアウト」という処理を経て、最終的な出力を行います。こうした処理を何段階も組み合わせて、次のようなMNISTを認識するためのCNNを構築するそうです。

f:id:itstaffing:20180920102006j:plain
▲MNISTを認識するためのCNNでは、このように何段階もの処理を行っている

Pythonはここがキモ~この機能を使え!

ここからは、松浦さんオススメのPythonのキモとなる機能について。まずはデータ型からです。Pythonでは次のようなデータ型が使えます。

・タプル:値の集まり
(値,値,……)

・リスト:値を追加・変更・削除可能
[値,値,……]

・集合:重複しない値の集まり、高速検索
{値,値,……}

・辞書:重複しないキーと値の組の集まり、高速検索
{キー:値,キー:値,……}

これらのデータ型の特性を把握し、適切に使い分けることで、プログラムを簡潔にしたり、プログラムの実行速度を高めたりといった、効果的なプログラミングができるようになるとのことです。

また、プログラムを短く書けることも、Pythonの特長だそうです。

f:id:itstaffing:20180920102008j:plain
▲C言語で書いたのと同じプログラムをPythonではここまで短く書くことができる

特に「内包表記」は、for文よりもプログラムを短く簡潔に書くのに役立つそうです。

f:id:itstaffing:20180920102011j:plain
▲Pythonのfor文でループさせる処理も、内包表記を使えばさらに短く書ける

独学でプログラミングスキルを身に付けるには

最後に、独学でプログラミングスキルを身に付けるためのアドバイスもいただきました。

開発を成功させるには、開発を小さなステップに分けるのがコツだそうです。たとえば、最終目標までの道筋を設計し、目標1→目標2→目標3……→最終目標というように、細かな目標を立て、一つ一つクリアしていく。実際にプログラミングするときも、目標ごとにプログラムの動作を確認しながら進めます。

目標1を作成→目標1の動作を確認する→修正する→完成
目標2を作成→目標2の動作を確認する→修正する→完成

最終目標までの道筋を設計した上で、この作業を繰り返していくと良いとのことでした。

f:id:itstaffing:20180920102013j:plain
▲ディープラーニングの中身や、Pythonについての新たな魅力を知る濃い内容でした

今回のイベントでは、ディープラーニングがどんなことをしているのか、その片鱗に触れられたのがとても印象的でした。AI関連のプログラムを開発する予定はなくとも、色々な処理を短く簡潔に書けるなど、Pythonの新たな魅力を知ることができました。Pythonに関しては、今注目の言語ということもあり、勉強している方も多いと思います。ぜひ、松浦さんの著書『わかるPython[決定版]』も活用してみましょう。

【イベントレポート】エンジニアが生き残るためのテクノロジーの授業[第4回]「安定したネットワークを作る技術の基礎知識」

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年7月18日のイベントでは「エンジニアが生き残るためのテクノロジーの授業」の第4回として「安定したネットワークを作る技術の基礎知識」を開催。

インターネットやLANなど、私たちの身の回りのネットワークが安定して通信できるのは何故か? その仕組みを支えるさまざまな技術の基礎について、増井さんならではの、分かりやすい語り口で解説しました。

f:id:itstaffing:20180910131752j:plain

■今回のイベントのポイント

・インターネットの合言葉「プロトコル」
・パケット交換のメリット
・データを正しく届けるための工夫
・メールの仕組みと暗号化
・IPv6の登場


【講 師】増井 敏克さん
▲【講 師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』(以上、ソシム)がある。

インターネットの合言葉「プロトコル」

「外国人と日本人が、それぞれ英語と日本語でしゃべっても言葉が通じないし、みんながいっぺんにしゃべっても話が通じません。ネットワークもそれと同じです」(増井さん)

プロトコルがあると、いろいろなネットワークの構成に対応でき、たとえネットワークの構成や回線速度が違っても、互いに通信できます。

プロトコルを定めている主な組織に、次のようなものがあります。

f:id:itstaffing:20180910131717j:plain
▲無線LAN機器を購入するときに目にする「IEEE 802.11ac対応」などの表記は、IEEEが定めたプロトコルだったのですね

ネットワークは次のような役割別の階層構造になっています。増井さんによれば、OSI参照モデルの7階層よりも、TCP/IPの4層を押さえておいたほうが良いそうです。

f:id:itstaffing:20180910131720j:plain
▲プロトコルの階層と言われてもピンと来ませんが、私たちが手紙を出すときに、便箋に文章を書く、封筒に入れる、住所を書く、宛名を書く、郵便ポストに入れる、という手順と同様と考えると良いそうです

パケット交換のメリット

「パケット」という言葉を聞いたことがあるかもしれません。LANやインターネットでは、パケットを交換して通信を行います。このパケット交換の特徴は、従来の電話のような回線交換と比較するとわかります。

f:id:itstaffing:20180910131722j:plain
▲増井さんによれば「実は、意外といいかげん」で、パケットが相手に届かないこともあるそうです

このパケットを、どういう経路で相手に送るかを制御するのがルーティングです。

f:id:itstaffing:20180910131724j:plain
▲ルータは、受け取ったパケットを、どのネットワークに転送するかを制御している

増井さんは、よく「ルータとファイアウォールってどう違うんですか?」と聞かれるそうです。確かに、ファイアウォール付きのルータだと、その区別がつきにくいですね。

f:id:itstaffing:20180910131726j:plain
▲ルータはネットワークを分割して、ネットワーク間の通信を制御するもので、ファイアウォールはセキュリティ上の理由からアクセスの制限を行う目的のもの。それぞれ役割も動作も異なる

では、ルータとスイッチ、そしてハブはどのように違うのでしょうか。ルータはネットワーク層で働きますが、スイッチはL2(レイヤー2)スイッチならばデータリンク層で、L3スイッチならばルータと同様にネットワーク層で働きます。一方、スイッチ機能を持たないリピータハブは物理層で働きます。

ルータは、異なるネットワークやパケットの送信元、送信先を識別するためにIPアドレスを利用します。各コンピュータにどのようなIPアドレスが振られているかは、Windowsならばipconfigコマンドで、UNIX/Linux系OSならばifconfigコマンドで確認できます。

f:id:itstaffing:20180910131729j:plain
▲IPv4は8ビットの値を4つ並べたもので表されます。2進数は苦手です(涙)

ipconfigコマンドを実行すると、IPアドレスのほかに、サブネットマスクというものも表示されます。これは接続しているネットワークの範囲を示すものです。

f:id:itstaffing:20180910131732j:plain
▲でも、2進数のAND計算でネットワークアドレスがわかるんですね。苦手を克服しなきゃ!

このIPアドレスは人間にはわかりにくいので、ドメイン名という名前による管理が行われています。「〇〇.co.jp」とか「△△.com」とかいうのがドメイン名です。ドメイン名とIPアドレスの対応管理や利用時のアドレス変換には、DNS(Domain Name System)が利用されます。

f:id:itstaffing:20180910131734j:plain
▲今までバラバラに聞きかじっていたネットワーク用語がつながりました!

ところで、1台のPCがいろいろなアプリケーションで同時に通信が行えるのはなぜでしょうか。それは、アプリケーションごとに通信ポートを分けているからだそうです。

f:id:itstaffing:20180910131736j:plain
▲ウェルノウンポートの代表的なものは、最低限覚えておくと良いそうです

そのほかにも、より高度で柔軟性に富んだVLANやネットワークの仮想化についても説明してくださいました。

データを正しく届けるための工夫

ネットワークがつながった後は、データを正しく届けるための知識についてです。

TCP/IPのうち、TCPというプロトコルでは、スリーウェイハンドシェークという手続きが行われます。

f:id:itstaffing:20180910131739j:plain
▲SYN/ACKが返ってきても無視してSYNを送信し続けると、接続先のコンピュータは通信不能に陥ります。これが典型的なSYN flood攻撃の手口だとか

TCPには、パケットが届かなかったときのための再送制御や輻輳制御、フロー制御といった、通信の信頼性を高めるためのさまざまな通信規格が定められています。

一方で、信頼よりも速度を求める通信もあります。たとえば音声通話やテレビ会議、名前解決などです。こうした用途にはUDPというプロトコルが使われます。UDPもIPと組み合わせてUDP/IPとして通信に利用されています。

また、IPやEthernetなど、TCPやUDPの下位レイヤーでも、通信に関するチェックが行われています。

たとえばEthernetでは、MACアドレスを基に通信を行います。このMACアドレスを利用して、アクセスに制限をかけるMACアドレスフィルタリングという仕組みもあるそうです。

ここまでに登場した下位3レイヤーでの通信状況を確認するためのコマンドも示してくれました。

f:id:itstaffing:20180910131742j:plain
▲この4つのコマンドは覚えておいて絶対に損はないそうです!!

メールの仕組みと暗号化

アプリケーション層の例としてメールプロトコルについて紹介してくれました。

メールのプロトコルとして長らく使われてきたSMTP(Simple Mail Transfer Protocol)は、シンプルで便利な反面、セキュリティ面で不安があるそうです。たとえばSMTPのみでメールサーバを構築していると、いわゆるスパムメールが簡単に送られてしまいます。これを防止するためにOP25Bという仕組みも導入されているそうです。

f:id:itstaffing:20180910131744j:plain
▲OP25Bを設定することで、どこかのメールサーバに勝手に接続してスパムメールを送るといったことができなくなる

また、メールの送信経路上で盗聴される危険性もあります。そこで現在では、メールの通信経路そのものを暗号化するSMTP over SSLとPOP over SSLというプロトコルが普及しています。

IPv6の登場

先ほど紹介したIPアドレスはバージョン4に相当するものだそうで、IPv4と呼ばれています。しかしIPv4は古い規格で、ネットワークに接続する機器がこれほど増えることを想定していませんでした。IPv4で記述できるアドレスは43億個まで。もう何年も前から、アドレスの不足が叫ばれているのだそうです。

そこで登場したのがIPのバージョン6に相当するIPv6です。

f:id:itstaffing:20180910131747j:plain
▲IPv6は桁数も増えたので当面アドレス不足になることはないそうです

IPv6が登場した当初は、IPv4と互換性がなかったため、IPv6の機器をIPv4ネットワークに接続することができませんでした。しかし、現在はIPv4 over IPv6といったトンネリング技術や、1つの機器にIPv4とIPv6の両方のアドレスを割り当てるデュアルスタックなどの技術で、両者を混在して運用できるようになっているそうです。

f:id:itstaffing:20180910131750j:plain
▲あらためてインターネットやLANってよくできているな、と思いました

今回のイベントでは、ネットワークに関する知識を網羅することができ、全体像を把握することができました。普段何気なく利用しているネットワークの裏側を垣間見た思いです。基礎知識として、復習しておきましょう。