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

PRODUCED BY RECRUIT

【イベントレポート】注目のテーマ、ディープラーニングを知識ゼロから学ぼう

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

2018年10月31日のイベントでは「知識0から始めるディープラーニング 本格的AI開発」を開催。書籍『はじめてのディープラーニング』の著者である我妻幸長さんが、ごくシンプルなディープラーニングモデルを使って、ディープラーニングの基礎からわかりやすく解説してくださいました。

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

・人工知能、ディープラーニングとは
・人工知能と数学
・ディープラーニングの実演
・Swiftによる深層強化学習

【講師プロフィール】
我妻 幸長さん
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。AI関連の教育と研究開発に従事。東北大学大学院理学研究科修了。理学博士(物理学)。著書に「はじめてのディープラーニング」(SBクリエイティブ)、「No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業」(技術評論社)。オンライン教育プラットフォームUdemyで、2万人以上を指導する人気講師。エンジニアとして、VR、ゲーム、SNSなどジャンルを問わず様々なアプリを開発し、数々の技術関連イベントに登壇。

人工知能、ディープラーニングとは

最初にディープラーニングについての紹介がありました。その中でも面白かったのが「AIには強いAIと弱いAIがある」というお話。強いAIは、生物の知能に迫るAIで、ドラえもんや鉄腕アトム、スターウォーズに登場するC3POのような汎用的なものですが、これはまだ実現していません。いっぽうの弱いAIとは、限定的な問題解決や推論に使われるもので、こちらは画像処理や機械制御、音声による会話、文章の認識や作成など、各分野での利用が始まっています。

AIのカテゴリの中には、機械学習のような脳の神経細胞を模倣するものだけでなく、神経細胞でなく遺伝子を模倣するものや、生物の群れを模倣するものなどもあるそうです。

今回は機械学習がテーマなので、まずは機械学習の基礎から説明してくださいました。

ニューラルネットワークは、脳の神経細胞(ニューロン)を模したモデルで、ニューロンが、層を形成していて、同一階層ではつながっていないが、前と後の層とはすべてつながっているという特徴があり、「多層」で構成されるニューラルネットワークで行う学習をディープラーニングと呼ぶそうです。

f:id:itstaffing:20181219133723j:plain
▲ヒトの脳には1000億の神経細胞と100兆個のシナプスがあるそう

そして、ニューラルネットワークでは、入力に対して重み付けやバイアスをかけ出力をしますが、その結果に対して、ニューロンの結びつきの重要度を変えていく、バックプロパゲーションという考え方もポイントです。

f:id:itstaffing:20181219133726j:plain
▲バックプロパゲーションは、結果に基づいてニューロンの重み付けやバイアスを調整していくこと

人工知能と数学

人工知能の根本を理解するには数学が欠かせません。では、人工知能を知るのに必要な数学とは何でしょうか。我妻さんによれば、次のものだそうです。

[線形代数]ベクトル・行列・テンソルによる演算など
[微分]常微分・偏微分・連鎖など
[確率・統計]標準偏差・正規分布など

ディープラーニングは、Pythonと相性がいいと言われていますが、それはNumPyとmatplotlibいうライブラリが用意されており、上記の数学分野の演算が高速で処理できる関数群や、結果を手軽に可視化できるからだそうです。

「数学が何の役に立つのかわからなかった人も多いかもしれませんが、コードにすると手軽に試行錯誤が可能になります」とのことで、さっそく行列積をコード化してみることに。

f:id:itstaffing:20181219133729j:plain
▲PythonにライブラリNumPyを読み込んでいればこの行列積の計算も簡単に記述できる

123
456

という行列と、

11
11
11

という行列の積ならば次のようになります。

import numpy as np

a = np.array([{1,2,3},[4,5,6]})
b = np.array([[1,1],[1,1][1,1])

c = np.dot(a, b)
print(c)

行列の行と列の要素を入れ替える処理を転置と呼びます。

f:id:itstaffing:20181219133733j:plain
▲行列の要素数が増えると転置の処理も時間がかかるが……

NumPyを読み込んでおけば、次のように記述できます。

d = a,T
print(d)

ディープラーニングの実演

いよいよ実際にニューラルネットワークによる機械学習を実装します。とはいえ多層になると難しいので、ここでは単一ニューロンのモデルを使用しました。

f:id:itstaffing:20181219133737j:plain
▲単一のニューロンでも基本原理は変わらない。順伝播と逆伝播があり、逆伝播によりシナプスの結合が強化される
f:id:itstaffing:20181219133739j:plain
▲各ニューロンで入力に対して重み付けやバイアスをかけ、その結果を活性化関数で処理して出力を得る

内容はsin関数のx座標とy座標の値から、ニューロンにゼロから学習させていき、x座標の値からsin関数の結果導かれるy座標を予測させるというシンプルなものでした。

我妻さんがそれぞれの機能や役割を紹介しながら、実際にコード化していきます。3層で入力と出力が1つのニューロン、中間層のみ3つのニューロンというモデルです。

単純化すると入力値xに対して重みwを掛け、バイアスbを加える。これを活性化関数fに入力して出力値yを得ます。

u = xw + b
y = f(u)

活性化関数には、ニューラルネットワークに欠かせないもので、さまざまな関数が用いられますが、ここでは、古くから使われているシグモイド関数を使用します。

y = 1 / (1 + exp(-u))

実際には上記をベースに行列の演算を行っていきます。単一ニューロンによるニューラルネットワークであれば、主要な部分は3~4行で書けてしまうということに驚かされました。

Swiftによる深層強化学習

機械学習と言えばPythonを使うというイメージがありますが、他のプログラミング言語でも実装は可能です。実際に我妻さんが、Swiftでの実装を示してくれました。

内容は「強化学習」です。試行錯誤を通じて、ある環境においてエージェントが最も報酬が得られやすい行動をとるように学習していくもので、有名なものだとチェスやオセロの強化に利用されています。

強化学習に必要な概念には、行動、状態、報酬があります。行動は、エージェントが環境に働きかけること(たとえば迷路内を移動する)。状態はエージェントが環境におかれた状態(進める方向)。報酬は結果に与えられるもの(ゴールに到達すれば+1、罠にはまると-1のような)です。

これを実装する前に、この問題を解くための代表的なアルゴリズムであるQ学習について知っておきます。

f:id:itstaffing:20181219133742j:plain
▲各状態と行動の組み合わせにQ値を設定し、エージェントは最もQ値の高い行動を選択するようにし、Q-Tableの各値が最適化されることで学習を行う

Q値は、次の式に基づいて更新されます。

Q値の更新量=学習係数×(報酬+割引率×次の状態での最大のQ値-現在のQ値)

ただし、扱う状態の数が多いとQ-Tableが巨大になり学習がうまく進まなくなるという問題点があるため、Q-Tableの代わりにニューラルネットワークを使うのだそうです。これをDeep Q-Network(DQN)と呼びます。

f:id:itstaffing:20181219133745j:plain
▲DQNを使うことで状態の数が多い場合の学習もスムーズに進むようになる

そうして我妻さんがデモをしてくれたのが、Cart Pole問題という簡単なゲーム。これは、よく学校の掃除の時間に一度はしたであろう、箒を手のひらの上に立てて、バランスを取り、箒が倒れないようにするというあの遊びです。カートの上に乗せた棒を倒れないように左右に動かすというもので、棒が45度以上傾いたら報酬-1、200フレーム保てたら報酬+1としてSwiftで実装し、iPhoneで動作するものでした。

何回かデモをしてくださり、それを見ているだけでも面白かったのですが、我妻さんによれば、これまで何度も動かしてきた中で、さまざまな戦略が試みられていることが分かったということです。

たとえば「ぶるぶる移動作戦」は、小刻みに左右への動きを繰り返し、バランスを取るという手法、「カウンターアタック作成」は、まず大きくどちらか片方に動かし、すぐに逆に大きく動かすことでバランスを取ろうとする手法だそうで、他にもいくつも特徴的な学習の試みがなされているそうです。

今回のイベントでは、難しい数式も出てきましたが、機械学習の中身に踏み込んだものであり、考え方をコードに落とし込むというプログラミングの根源的な面白さもありました。数学とあわせて、よりディープラーニングへの理解を深めていきましょう。

【イベントレポート】人工知能システムの開発を企画~運用するために気を付けることとは?

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

2018年10月26日のイベントでは「これからますます需要の高まる『人工知能システムのプロジェクトマネージャ』を学ぶ」を開催。

機械学習をはじめとする人工知能の技術が流行する中、ソフトウェアやアルゴリズムの解説本やセミナーが増えています。一方で、アルゴリズムを理解していても、システム開発プロジェクトにおけるプロセスや作業について理解していないと、仕事の進め方に迷うことになります。そこで今回は、書籍『人工知能システムのプロジェクトがわかる本』の著者である本橋洋介さんが、人工知能を使ったシステムの開発プロセスや、各フェーズでの心構えについて解説してくれました。

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

・人工知能システムの開発プロセスと従来型システムの違い
・企画フェーズで気を付けること
・POCフェーズで気を付けること
・開発フェーズで気を付けること
・運用フェーズで気を付けること

【講師プロフィール】
本橋 洋介さん
東京大学工学系研究科産業機械工学専攻修士課程修了。NEC入社後、人工知能・知識科学・機械学習・データマイニング技術と分析ソリューションの研究開発に従事。機械学習の実問題適用を専門としており、これまでに機械学習技術を用いた分析サービス・システムの導入について30社以上に対して実績あり。2016年、NECが新規に創設したシニアデータアナリストの初代認定者になる。AI技術やサービスの広報役としてビジネスカンファレンスなどでの講演を多数行うと共に、企業トップ層へのAI活用に関するロードマップ策定のコンサルティングを実施。「人工知能システムのプロジェクトがわかる本 ―企画・開発から運用・保守まで―」(翔泳社)

人工知能システムの開発プロセスと従来型システムの違い

人工知能システムの開発プロセスは従来型のシステムと違い、企画→トライアル(POC)→開発→運用・保守という流れになるそうです。

f:id:itstaffing:20181212141331j:plain
▲トライアル(POC)というフェーズやデータ分析が入るのがポイント。運用フェーズでもモデル更新や再学習などが発生する。

また、機械学習システムは、完成後、ずっと動き続けているものはなく、本橋さんが知る限りで、長いものでも6年ぐらい。一般のシステムに比べると稼働期間が短いかもしれませんが、その理由は、時間経過と共に、ルールを覚え直させる必要があるためとか。従来型システムと、けっこう違うところがあるものなのですね。

企画フェーズで気を付けること

人工知能システム導入の目的は、概ね以下の4つのいずれかが多いそうです。

・売上向上
・コストダウン
・品質向上
・リスク低減

人工知能に過度に期待するお客さんも多く、実際の予測結果を知ると「この程度か」と落胆することも多いそうです。そんなとき、本橋さんは「コンビニの仕入れを担当する一番スゴイ人の予測は上回れないが、その下に8割ぐらいいるはずの、次にスゴイ人の予測を上回ることはできると思います」と説明するそうです。安定した予測と、全体の底上げにつながるのは大きいですよね。

AIシステムのシステム構成は次のようになっています。学習部と予測部は独立しているというところがポイントです。

f:id:itstaffing:20181212141334j:plain
▲学習部で導き出したルールを、予測部に受け渡して予測を行う

人工知能システムの導入に際しては、まず業務フローを明確にします。

f:id:itstaffing:20181212141338j:plain
▲このほか、通常の意思決定は人工知能が行い、例外処理のみを人間が行うパターンや、人工知能が導き出したルールを人間が確認し、それを情報システムに組み込んでいくというパターンもある。

本橋さんによれば「AIはデータと目的を選んだらほぼ終わり」だそうで「だからデータは重要」とのことです。データ選びは5W2Hだそうです。

f:id:itstaffing:20181212141311j:plain
▲「H」がHow manyとHow muchの2つあるのがポイント

さらに「無いデータは作る」ことも大切な作業だそうです。たとえばコンビニの仕入れ予測をするには各店舗の特徴を知る必要があります。店舗の近くに学校、病院、高速道路があるかどうかなど、Googleマップを見ながら個別に入力する作業が発生することもあるといいます。

また、一度分析をしてから追加データを選ぶのが効果的だそうで、たとえば「仙台の7月の予測が当たらない」という場合、「仙台七夕祭りの影響なのではないか」という考察のもと、追加データを用意します。

POCフェーズで気を付けること

トライアルのプロセスで注意が必要なのは、運用中に使えるデータを確認しておくこと。これは、運用で使えないデータでトライアルを行ったために、システム化できなくなるという問題を防ぐために大切だそうです。

どういうことかというと、たとえば月々のデータを入力する作業によるタイムラグで、インターバルが生じてしまうことがあります。

f:id:itstaffing:20181212141315j:plain
▲入力作業のタイムラグで、データを使いたいタイミングに間に合わないということもある。

また、データ数が少ないと、レアケースを過大に評価してしまう危険性があります。たとえば各都道府県別のデータを持ち寄っても、データの母集団が少ないエリアもあるかもしれません。その場合、中国地方や四国地方といったように、いくつかのエリアをまとめることで、レアケースの過大評価を防げます。

機械学習には「教師あり学習」と「教師なし学習」という2つのモデルがありますが、現在、AIシステムの8割~9割は「教師あり」で動いているそうです。

f:id:itstaffing:20181212141318j:plain
▲教師なし学習はマーケティングレポートなどに使われているそうです

システムの精度を高めるためには、データのフォーマットを合わせ、精度を上げて、予測結果が不安定になるのを防ぐという目的のために、データの加工(前処理)も必要です。

たとえば画像データならば、同じデータからも、たくさんのパターンを作り出します。

f:id:itstaffing:20181212141322j:plain
▲画像データの例。ちょっとした光の具合で見え方が変わるので、同じデータからも、いろいろなパターンを作っておく。

さらに学習結果の評価も必要になります。評価の方法も、ここでは紹介しきれないほど、たくさん教えてくださいました。

開発フェーズで気を付けること

本橋さんは「人工知能システムの開発は、普通のシステムの10倍ミスしやすい」と注意を促します。そこで要件定義の段階でデータを分析することを推奨しているそうです。

データの精度の確認、データ量の決定、学習期間のほか、モデル更新の頻度も実験しておくべきで、モデルを放置したらどうなるか、どれぐらいデータを貯めたら当たるようになるかも実験して決めておくのだそうです。

f:id:itstaffing:20181212141326j:plain
▲放置したらどうなるかを確認しておくことで、モデル更新頻度を決定する。

また、データ量が少ないときにどうするかという問題もあります。情報システム側では、(当たらないので)結果を表示しないのが情報システムの在り方なのですが、それでは困るという場合は、代替データを使うという方法を検討しておきます。

運用・保守フェーズで気を付けること

AIシステムは、開発した後も、常に賢くあるように運用フェーズの間も「育てていく」必要があるという点も、他のシステムとの大きな違いです。

たとえば、過去にはなかった要因が新たに加わった場合。近くに競合店舗が出店したりすると、データの傾向ががらりと変わり、システムの精度が劣化するので、再学習させる必要があります。また、お得意様の大型注文が年に数回発生するといったパターンは、定常的なデータではなく、異常データとして扱う必要があります。

f:id:itstaffing:20181212141329j:plain
▲AIシステムを育てるには再学習が欠かせない。

再学習では「過去のデータを忘れさせる」必要があるのですが、そういうときのためにデータを捨てるというようにシステムを組んでおかなければなりません。

以上、1時間半の短い時間の中で、かなり濃密なお話を聞かせていただいたのですが、短いレポートの字数ではすべてをお伝えできず、ごく一部しかご紹介できませんでした。
本橋さんがイベントの最後に語ってくださった「AIシステムは、お客さんの業務に詳しくならなければ賢くさせることはできない」という言葉が印象的でした。また、人工知能のシステム開発は、従来型と大きく異なる部分があることもよくわかりました。2つを照らし合わせながら、人工知能について学んでみるのもよさそうです。

増井敏克の「情報のキャッチアップが足りない」ときに読むコラム 第2回 書店や勉強会などリアルな場を活用しよう

第2回 書店や勉強会などリアルな場を活用しよう

f:id:itstaffing:20181127123931j:plain

エンジニアにとって、大切だけどなかなか教えてもらえない、情報をキャッチアップする技術。前回、ITSTAFFINGのイベントでおなじみの増井敏克さんに、インターネットを活用した情報収集法についてレクチャーいただきました。インターネットで済ましがちですが、情報収集においてやはり侮れないのは、書店や勉強会などリアルな場。足を運んでいるものの、いまひとつ活用できていない方や、書籍の選び方がわからない方は、ぜひ最後まで読んでみてください。

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

▼第1回のコラムをまだ読まれていない方はこちら
https://www.r-staffing.co.jp/engineer/entry/20181116_1

情報収集のスタンダードである「書籍」を書店で見る

新しい技術を学ぶとき、最近ではインターネットで調べることも少なくありませんが、体系的に学ぶときには、書籍は有効なメディアです。個人が書いたブログ記事などと比べ、編集者が入っていることで正確さや読みやすさが格段に違います。

最近では電子書籍も増えていますが、その量を考えるとまだまだ紙の書籍を使う人が多いでしょう。ただ、街の書店ではなくオンライン書店での購入が増えているのは少し残念な部分もあります。ここでは、書店でコンピュータ書を選ぶことで得られるメリットについて考えてみましょう。

前提として、「コンピュータ書」には様々な種類があります。WindowsやWord、Excelなどの使い方を解説した一般向けの本から、プログラミングやネットワーク、データベースといったエンジニア向けの本、Webデザインや画像の加工といったクリエイター向けの本、各種資格試験を受ける人のための対策本など様々です。

これらの本は書店の中で棚を分けて販売されていることが一般的で、例えば、セキュリティについて知りたい場合は、一般の人が読むウイルス対策などの本と、エンジニアが読むセキュリティの本、セキュリティに関する資格についての本はそれぞれ別の棚にあります。

実際に書店に行くと、周囲にある本を手に取ることで新たな発見がある場合もあるでしょう。もちろんオンライン書店でも、興味を持った本以外にもオススメされる場合がありますが、書店ではまったく異なるジャンルの本が目に入ることがあり、情報収集の視野が広がることが期待できます。

書店によって並ぶ本は大きく違う

小説や新書であれば、住んでいる場所の近くの書店に同じような本があっても、専門書となると地元の書店では売っていないものです。ただ、専門書だからといって、とりあえず大きな書店に行こうと考えるのは早計です。

書店は、その周囲の環境によって訪れる客層が異なるため、置かれている本も異なります。例えば、住宅街にある書店では一般向けの本が多く並ぶのに対し、ビジネス街にある書店では中級者向けやエンジニア向けの本が多く並びます。大学などにある書店では、資格に関する本や専門書が多く並びます。

つまり、一箇所の書店を見るだけでは、欲しい本を見つけられなくても、ほかの書店を巡ってみると、新たな発見があるかもしれません。これは書店に限った話ではありません。

先日開催された「技術書典5」では同人誌を頒布しているサークルが470を超え、参加者数は1万人を突破しました。このように、一般の書店だけを見るのではなく、イベントや電子書籍にも注目が必要です。同人誌が電子化するケースも増えており、誰でも出版できるようになりつつあるため、電子書籍も目を離せません。

書籍を選ぶ

書店で書籍を選ぶとき、私は大きく分けて3種類の本を手に取るようにしています。まず、新たに学ぶ技術については入門書を読みます。タイトルに「はじめての」や「入門」などが付いている本が多く、図が多い本だとイメージしやすいでしょう。

ある程度知識が付いた段階では、詳しい内容まで書かれた本を読みます。ページ数も多く、高価な本が多いものの、細かな部分まで漏れなく書かれているため、常に手元に置いておきたい本です。

さらに、実務的な観点では「逆引き」と呼ばれる本も読みます。逆引き本は、やりたいことを実現する方法が書かれているため、作りたい機能など目的がはっきりしている場合にオススメです。例えば、PHPをこれから学ぶなら、以下のようなラインナップになるかもしれません。

f:id:itstaffing:20181127123934j:plain

書店での売り方に注目する方法もあります。例えば、書店では平積みされている本や表紙が見えるように陳列されている本があります。新刊や長く売れているベストセラーの本が多く、これらを参考にするのも良いでしょう。

書店で本を見るときは、まず「はじめに」を読んでみたいところです。作者がその本を書こうと思った背景や想定している読者層、その本の構成などが書かれています。また、目次には目を通し、読みたい内容が書かれているか確認します。

欲しい本が売れているかどうかは、本の最後のページにある「発売日」や「刷り数」を見ます。ITに関する本は古いと役に立たない場合があるため、発売日は重要です。また、刷り数を見ると、その本が売れているかどうか知る基準にもなります。もちろん、オンライン書店のランキングを見るのも一つの方法でしょう。

新刊情報を得るには、配信してくれるサービスを使用する方法もあります。タイトルや著者、出版社やキーワードを登録しておくと、該当する新刊が発売されるときにメールで通知してくれます。

f:id:itstaffing:20181127123937j:plain

個人的には、書店で書店員さんと仲良くなる方法がオススメです。何度も書店に足を運んで、好きな本などについて話していると、訪問するたびにこちらの興味がありそうな新刊などを教えてもらえる場合があります。

勉強会を活用する

一人で勉強していると、わからないことがあるとそのままになってしまう場合がありますが、勉強会に参加すると、その疑問を解消できる場合があります。勉強会の情報はATNDなど、各種勉強会情報のサイトを使うことで収集できます。

このとき、自分から探さなくてもいいように、新しいイベントがあると自動的に通知されるようにRSSを使って情報を受信するなどの環境をつくることが大切です(詳しくは前回のコラムをご覧ください)。

また、イベントに参加するときには、単純に受講者として参加するだけでなく、LTなどがあれば発表することをオススメします。情報を発信すると、その後の懇親会などでも話題が豊富になり、多くの情報が集まることがあります。このように、情報は発信する人に集まる傾向があります。発信しないと、その人がどのような技術に興味があるのかわからないため、なかなか情報が集まらないものです。

勉強会は発信者からの情報を聞きにいくだけでなく、自分から聞きたいことを持って行くのも一つの方法です。勉強会の中には参加者が自由に質問できる環境や、もくもく会のようにそれぞれが学びたい内容を持ち込んで勉強する場もあります。

リアルな場を使った情報収集法、いかがでしょうか。インターネット上の情報を収集するだけでなく、書店や勉強会などリアルの場を活用することで、さらに情報に幅がでてきます。日々進歩する技術を上手にキャッチアップし、エンジニアとしてのキャリアを積むために、情報収集法をたまに見直してみるのもいいでしょう。

日々情報をキャッチアップしても、イマイチ理解できないこと、皆さんが疑問に思うことって、出てくるかもしれません。本コラムでは、自分だけではキャッチアップできないテーマを、増井さんがレクチャーします。次回は、最近よく聞くAIについて。人間の仕事がなくなると言われているけれど、本当なのでしょうか。AIにできること、できないことを解説します。どうぞ、お楽しみに。

増井敏克の「情報のキャッチアップが足りない」ときに読むコラム 第1回 インターネットをとことん活用しよう

第1回 インターネットをとことん活用しよう

f:id:itstaffing:20181114131933j:plain

エンジニアのキャリアについて話をするとき、よく使われるのが「T型」や「π型」という言葉です。成長していく中で、できるだけ幅広い知識を身につけるとともに、得意分野や専門分野をできるだけ深掘りすることが求められます。また、その専門分野を増やしていくことで、複数の柱を持つことができ、他の人との差別化や社会の変化にも対応できるようになるでしょう。

ただし、上記を習得するための具体的な方法は、我流であることが多く、知らぬうちに情報が偏っていることも。上手に情報をキャッチアップするために、エンジニアの情報収集法について、ITSTAFFINGで度々登壇いただいている増井敏克さんに、レクチャーいただきます。実践的な内容をお届けしますので、日々の勉強にお役立てください。

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

専門分野を増やすためには専門書を読み、自分で研究していくしかありません。興味を持った分野をとことん突き詰めていくことが必要でしょう。一方、幅広い知識を身につけるときにはそれほど深い知識は求められません。ただ、興味がない分野でもある程度アンテナを張っておく必要があります。

最近はインターネットで情報収集する人が増えていますが、検索するには自分でキーワードを選ばなければなりません。そして、欲しい情報だけを探して満足してしまう場合があります。これでは幅広い知識を得ることが難しくなります。

そこで考えなければならないのは、「待っていれば情報が向こうからやってくる状態を作る」ということです。電源を入れておけば次々とニュースやバラエティなどを放送しているテレビやラジオのように、インターネットを使って、ネットワークに接続していれば勝手に情報が降ってくる状態をどうやって作るのか、という方法をまずは紹介します。

RSSで情報が「降ってくる」状態を作る

Webサイトやブログなどの更新情報を自動的に取得する方法として、昔から使われている技術として「RSS」があります。1990年代に登場し、すでに20年以上も使われている技術ですが、まだまだ情報収集のツールとして有効です。

RDFなどのフォーマットで作成された要約情報を配置しているWebサイトに対し、RSSリーダーと呼ばれるソフトウェアが自動的に巡回してチェックし、更新されていると収集してくれます。RSSを使うことで、ニュースサイトなどを毎回チェックすることなく、更新があったときだけその概要を収集できます。記事のタイトルや要約の内容を見て、気になるコンテンツだけをチェックできます。

IT系でも多くのニュースサイトが対応しているため、これらのサイトをRSSリーダーに登録しておくと、最新のニュースをもれなくチェックできます。また、官公庁でもRSSに対応しているサイトがありますので、例えばIPAやJPCERT/CCのセキュリティ情報を収集するように設定しておくと、脆弱性情報などを速やかに収集できます。このエンジニアスタイルのサイトも対応していますので、ぜひチェックしてみてください。

例えば、RSSリーダーとしてFeedly(https://feedly.com)がよく使われています。Webブラウザでアクセスすることもできますし、スマートフォンアプリもありますので、ぜひ使ってみてください。Feedlyにアクセスすると、「GET STARTED FOR FREE」というボタンがあり、ここから会員登録するとログインできます。

f:id:itstaffing:20181114131945j:plain

パソコンでログインすると、画面左下にある「+ ADD CONTENT」から収集したいサイトを登録できます。URLを入力すると、対象のRSSをフォローするか確認されますので、「FOLLOW」ボタンを押すと購読できます。あとはサイトが更新されると、自動的に収集されます。

f:id:itstaffing:20181114131948j:plain

RSS以外でも情報が「降ってくる」状態を作る

企業のWebサイトや個人が作っているようなページでは、RSSに対応していないサイトが存在します。また、これまで訪れたことがないサイトではRSSでは取得できません。このような場合、キーワードで収集できるサービスを使用する方法があります。

例えば、Googleアラート(https://www.google.co.jp/alerts)で気になるキーワードを登録しておく方法があります。登録しているキーワードに合致するニュースやブログが登場すると、メールやRSSで配信してくれます。

f:id:itstaffing:20181114131951j:plain

また、NewsPicks(https://newspicks.com)のようなサービスを使うと、登録したキーワードに合致したニュースがあれば通知してくれます。まずは登録してみて、欲しい情報の量や質から、メインで使うものを判断するのもよいかもしれません。

f:id:itstaffing:20181114131954j:plain

便利なサービスを使って情報を集める

リアルタイムに情報を収集するには、TwitterやInstagramなどを使う方法もあります。新製品や障害情報、セミナー参加者の感想などを知りたい場合はSNSなどの検索機能を使うと効率的です。アカウントを持っていなくても、Yahoo!のリアルタイム検索を使うことで、簡単に情報を収集できます。

f:id:itstaffing:20181114131957j:plain

テレビやラジオと同じように情報を収集する方法として、Podcastがあります。最近はIT系のエンジニアの中にもPodcastで配信する人が増えており、ブームのようになっています。聞きたいPodcastを購読しておくと、更新されるたびに配信されます。最新のニュースや世の中のエンジニアが考えていることなどを発信されていますので、聞いているだけで様々な情報を得ることに繋がります。

キュレーションサイトも同様です。ログインして閲覧しているうちに、利用者が興味を持ちそうな情報が最適化されて表示されます。便利な一方で、興味がある情報だけが配信されるというのは、「幅広い情報収集」には繋がらないかもしれませんが、欲しい情報が得られやすいと言えます。

検索エンジンをうまく使う

Googleなどの検索エンジンは単純にキーワードを入れて検索するだけでなく、様々な検索オプションが存在します。これらを使いこなすことで、欲しい情報をうまく見つけられます。例えば、Google検索する場合には日付での絞り込みや、ファイルタイプでの検索、ドメインでの絞り込みなども可能です。

f:id:itstaffing:20181114132000j:plain

また、GoogleトレンドやGoogle画像検索といった機能を活用することもできます。Googleトレンドでは、複数のキーワードを指定して、それぞれのキーワードの検索トレンドの推移を調べられます。最新技術がどれくらい注目されているのか、他のキーワードと比べることで、新しい技術を学ぶときの判断基準にもなります。

f:id:itstaffing:20181114132003j:plain

検索エンジン以外の検索方法を使いこなす

検索に使えるのは検索エンジンだけではありません。サービスを提供しているサイトでは、そのサイト内での検索など便利な機能を用意しています。例えば、書籍を探す場合にはGoogleなどを使うよりもAmazonの検索機能を使う方が効率よく探せるでしょう。また、カーリル(https://calil.jp)といった図書館情報の検索サイトは、現在地の位置情報を使って近くにある図書館で読みたい本の在庫があるか調べる、といった使い方もできます。

f:id:itstaffing:20181114132009j:plain

商品検索にはAmazonのスマートフォンアプリを使う、といった方法もあります。手元にある商品と同じものが欲しい、といった場合はAmazonアプリにあるカメラ機能を使うと、その商品を簡単に検索できます。書籍のカバーを撮影するのはもちろんのこと、ペットボトルの飲み物や台所用品など、ラベルを撮影するだけで簡単に注文できます。

複数のツールを連携する

このように、情報収集には様々なツールを組み合わせて使うことが必要です。また、自動化できる部分はできるだけ自動化し、手作業をなくすことを考えましょう。自動化すると抜けや漏れもなくなるだけでなく、欲しい情報を一箇所に集めることで情報のバックアップを取得することにもなります。一箇所にあると検索も簡単です。

連携するツールとして、よく使われているものに「IFTTT」があります。IFTTTを使うと、複数のWebサービスを連携し、取得した情報をほかのサービスにまとめられます。例えば、TwitterやRSS、InstagramやGmailなどで集めた情報をSlackにまとめる、といった使い方ができます。

f:id:itstaffing:20181114132012j:plain

インターネットを使った情報収集法、いかがでしょうか。ひと工夫するだけで、自分の欲しい情報だけにとどまらず、幅広い知識を得るために、インターネットはかなり頼もしいツールになることがわかっていただけると嬉しいです。次回はリアルな場として、書店や勉強会の活用法について紹介します。お楽しみに。

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

株式会社リクルートスタッフィングが運営する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回から復習してみてくださいね。