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

PRODUCED BY RECRUIT

特別編集 システム開発

f:id:itstaffing:20200728101559j:plain

使えるシステムのカギとなる、システム開発。今回の特別編集では、現場で役立つシステム設計の原則や、システム開発に必要なプロジェクトの見積り知識、裁判事例から読み解く“成功するシステム開発に必要なエンジニア”など、さまざまな視点から『システム開発』について学ぶことができる記事をまとめました。直接携わらない方も、知っておいて損はないものばかりなので、空いた時間にぜひご一読ください。

Pickup

1:ソフトウェアの変更・修正が劇的に楽になる!「現場で役立つシステム設計の原則」
【講師】増田 亨さん
有限会社システム設計 代表。ギルドワークス株式会社 取締役。業務アプリケーションのアーキテクト。日本最大級の60万件以上の求人情報キャリア「イーキャリアJobSearch」の主任設計者。著書に『現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法』(技術評論社)がある。

2:『カイゼン・ジャーニー』から学ぶ、アジャイル開発とカイゼンの手法
【講師】新井 剛さん
株式会社ヴァル研究所 SoR Dept.部長、株式会社エナジャイル取締役COO、Codezine Academy Scrum Boot Camp Premiumチューター、CSP(認定スクラムプロフェッショナル)、CSM(認定スクラムマスター)、CSPO(認定プロダクトオーナー)。Javaコンポーネントのプロダクトマネージャー、緊急地震速報アプリケーション開発、駅すぱあとミドルエンジン開発、駅すぱあとエンジンの部門長などを経て、カイゼン・エバンジェリストとして全社組織をカイゼン中。

3:裁判から学ぶ!成功するシステム開発に必要な人材になるには
【講師】細川 義洋さん
NECソフト、日本アイ・ビー・エムでエンジニアやコンサルタントとして活躍した後、日本国内にも数十名しかいない「IT事件担当の民事調停委員」に推薦され着任。著書に『成功するシステム開発は裁判で学べ!』(技術評論社)などがある。

4:なぜ要件定義がうまくいっても、使えないシステムができてしまうのか?
【講師】中川 充さん
システムコンサルタント・公認会計士。公認会計士中川充事務所代表。システム・業務・会計を統合し、企業経営のしくみを改革することを得意とする。上場会社、中堅企業、ベンチャーへのシステム開発や業務改革のコンサルティング実績は全国50社以上。そのほか、システム選定委員やパッケージ製品の開発助言なども行う。

5:イマドキなシステム開発には、見積りの知識を身につけよう
【講師】佐藤 大輔さん
大手SIerでプログラマー、SEを経験し、2003年にSI事業と自社サービスを行う企業「株式会社オープントーン」を創業。現在、同社代表取締役社長。
【講師】渡邉 一夫さん
Java ServeletなどサーバサイドJavaの登場初期からJavaに精通し、数々のエンタープライズシステムの開発を手掛けてきた実績を持つエンジニア。
【講師】畑中 貴之さん
エンジニア、個人事業主として数々のビッグプロジェクトをマネジメントしてきた経験を持ち、現在はオープントーンにて取締役兼観光ビッグデータ事業部長を務める。

 

特別編集 Python入門編

f:id:itstaffing:20200717133931j:plain

構文がシンプルながらもWebアプリケーションの開発や人工知能の分野まで活用される、プログラミング言語『Python』。便利なライブラリやフレームワークが充実していることから、これから触れてみたいという方にも、理解のしやすい言語といわれています。そこで今回は、これまでエンジニアスタイルで扱った『Python 入門編』の記事をひとつにまとめました。初心者の方はもちろん、改めて勉強し直したいといった方も、ぜひご活用ください。

Pickup

1:今こそ、Pythonや人工知能の基礎知識を学ぼう
【講師】森 巧尚さん
WebコンテンツやiPhoneアプリなどの受託開発を行うフリープログラマ。プログラミング書籍の執筆業、関西学院大学非常勤講師なども務める。著書に『Python 1年生』(翔泳社)などがある。

2:プログラミング未経験でもOK!Pythonで体験するAI(ディープラーニング)と独学でプログラミングをマスターする方法
【講師】松浦 健一郎さん
研究所や大学や企業からの依頼で、ソフトウェア開発や研究支援の業務を行い、書籍を執筆する傍ら、企業や学校でプログラミングを教える。著書に『わかるPython[決定版]』(SBクリエイティブ)などがある。

3:Pythonでデータ処理と機械学習を始めよう
【講師】早川 敦士さん
株式会社FORCAS、株式会社ホクソエムに所属。国内最大級のR言語コミュニティであるJapan.Rを主催。著書に『Pythonによるはじめての機械学習プログラミング』(技術評論社)などがある。

4:Pythonでアルゴリズムの考え方を学ぶ
【著者】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。著書に『Pythonではじめるアルゴリズム入門』(翔泳社)などがある。

5:人工知能(AI)、機械学習のための数学入門-Pythonのコードを書きながら学ぶ人工知能/深層学習に必要な数学
【講師】我妻 幸長さん
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。AI関連の教育と研究開発に従事。著書に『はじめてのディープラーニング』(SBクリエイティブ)などがある。

6:AI向けの数学とPythonを基礎から学ぼう!
【講師】我妻 幸長さん

7:(動画)AI向けの数学とPythonを基礎から学ぼう!
【講師】我妻 幸長さん

 

第14話 リモートリポジトリを追加・削除しよう【連載】マンガでわかるGit ~コマンド編~

f:id:itstaffing:20200707142716j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

前回の第13話では、どのコミットでバグが混入したかを調べられる「git blame(ブレーム)」について学びました。

・各行にコミットした人の名前と日時を表示する

$ git blame [ファイル名]

今回の第14話では、リモートリポジトリを追加・削除できる「git remote(リモート)」の使い方を学びます。このマンガを通して、わかばちゃんと一緒にGitの知識を身につけていきましょう!

★リモートリポジトリとは、インターネット上や社内ネットワーク上などに置かれている「データの貯蔵庫」のことです。たとえば私が用意した「練習用のGitHubリポジトリ」も、リモートリポジトリのひとつです

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

リモートリポジトリを追加するには?

f:id:itstaffing:20200707142719j:plain
f:id:itstaffing:20200707142722j:plain
f:id:itstaffing:20200707142725j:plain

基本のコマンド

・リモートリポジトリを追加する

$ git remote add [リモートリポジトリの呼び名] [リモートリポジトリのURL]

このときに、リモートリポジトリの呼び名を設定することができます。

・リモートリポジトリを削除する

$ git remote rm [リモートリポジトリの呼び名]

実際にやってみよう

まずは漫画の中のわかばちゃんの状態と同じにします。

こちらのGitHubリポジトリをGitHub上でフォークしましょう。そのあとクローンして、ローカルにリポジトリをコピーします。

$ git clone https: ⁄ ⁄ github.com/[あなたのGitHub ID]/pull-request-practice.git

ローカルにクローンできましたか?それでは本流のリポジトリ(エルマスさんのリポジトリ)を「git remote コマンド」で追加しましょう。

$ git remote add upstream https: ⁄ ⁄ github.com/elmas3/pull-request-practice.git

これだけでリモートリポジトリの追加が完了しました!ちゃんと追加できたのか「-v オプション」で確認してみましょう。

・登録されているリモートリポジトリ一覧を表示

$ git remote -v

・リモートリポジトリを削除

$ git remote rm upstream


f:id:itstaffing:20190617145541j:plain
ちなみに「git remote rm」は、ローカルリポジトリ側からの連携を解除するだけで、GitHub上にあるリポジトリは消えないから安心したまえ。

まとめ

リモートリポジトリを追加・削除できる「git remote」について学びました。

・リモートリポジトリを追加する(このとき呼び名を設定できる)

$ git remote add [リモートリポジトリの呼び名] [リモートリポジトリのURL]

・リモートリポジトリを削除する

$ git remote rm [リモートリポジトリの呼び名]

・リモートリポジトリ一覧を表示する

$ git remote -v

Gitにはまだまだたくさんのコマンドがあります。
次回は、Gitの設定を変更できる「git config(コンフィグ)」でエイリアスを設定し、コマンドを省略形で打った場合でも実行できるよう練習してみましょう!とても効率が良くなります。


▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」

【コラム】自宅でできる!IT系の情報収集のポイントとは?

情報を収集するとき、人によっていろいろな方法があります。書店で本を探したり、セミナーやイベントに参加したりする人もいるでしょう。もちろん、今はインターネットで収集することが一般的だと思います。ただ、インターネットで情報を収集する場合も、少し工夫するだけで効率よく情報を手に入れられるようになります。今回は、「自宅で」「一人で」できる情報収集のポイントを紹介します。

【講師プロフィール】
増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『IT用語図鑑』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『プログラマのためのディープラーニングのしくみがわかる数学入門』『プログラミング言語図鑑』(以上、ソシム)、『基礎からのプログラミングリテラシー』(技術評論社)などがある。

情報収集は「質」と「量」のどちらが大切か

結論からいうと、可能なら質も量も追い求めないといけません。しかし、時間は有限なので、両方を追い求めるのは無理でしょう。そこで、バランスを考えます。質が悪い情報がたくさんあっても意味がありませんし、そもそも量がないと情報収集できていない状態だといえます。

まずは、情報収集の目的について考えてみます。

・知識の幅を広げたい
・専門の分野でより深い情報を知りたい

これらを判断する1つの基準として、自分のスキルのレベルが挙げられます。

初心者
最初は知らないことばかりです。この段階では、「聞いたことがない」状態をなくすことが大事です。細かいことを突き詰めるのではなく、幅広い情報を手に入れることで、自分が興味を持てる分野を見つけることから始めます。

中級者から上級者
ある程度詳しくなってくると、その内容について深く知っておく必要があります。専門的な内容を収集するだけでなく、他の人に説明できるように工夫しておきます。

ここで、収集する媒体について考えてみます。例えば、横方向にスピード感、縦方向に専門性を取ってみると、図のような分布が考えられます。

f:id:itstaffing:20200617134410j:plain

初心者
まず左下を中心に学ぶことから始めます。入門書から入って、ニュースを見たり専門書を読んだりして、徐々に右上に向けて視野を広げていきます。

専門家
右上に近い部分を中心に情報を得ています。

人によって求められる幅や深さ、速度は異なりますので、見る媒体も異なることがわかります。当然、広く浅く、狭く深く、のどちらが重要を考えると、その人のスキルによって違いますし、質も量も重要です。そこで、質と量を確保する具体的な方法について紹介します。

情報の質を確保する

入門書や専門書といった書籍の場合、編集者がチェックし、校正や校閲が行われていますので、その内容は比較的信頼できます。一方で、インターネット上の情報には、個人がブログで発信している記事も含まれているため、利用者がその内容をチェックする必要があります。そこで、質の高い情報を得る方法をいくつか紹介します。

1.公式の情報を見る
ニュースサイトやブログの情報を鵜呑みにするのではなく、その元情報(1次情報)をどこの誰がいつ発信したのかを見る方法です。以下は、官公庁のサイトを見る、プログラミング言語やライブラリの公式サイトを見る、公式アカウントがTwitterで発信している情報を見る、という方法です。
・検索する際にドメインを絞り込んで検索
例)総務省が出している資料を探す場合は、キーワードに続けて「site:soumu.go.jp」という指定を追加→総務省が出した資料を検索できる。

2.信頼できる人を見つける
業界の第一人者や大学の先生など、「その人が発言した内容であればある程度の信頼がおける」という人を探します。これにより、ある程度間違いが少ない情報を得られます。

3.情報が発信された日付を見る
IT業界では、数ヶ月前の情報はすでに変わってしまって役に立たないことは珍しくありません。もし記事が公開されてから1年以上経っているような場合は、それよりも新しい記事がないか探すことも必要でしょう。
・新しい情報だけを検索
検索エンジンでキーワードを指定するだけでなく、期間を指定。Googleの場合、「ツール」というボタンを押して期間を指定する。

4.実際に試してみる
プログラミングのように、自分で動かして試せる内容であれば、自分で実行してみて結果を確認します。ソースコードが公開されていれば、それを入力して実行することで、記事の内容が正しいか確認できます。

5.複数の情報源を調べる
Twitterなどで情報が流れてきた場合、それを信じるのではなく、他の媒体を調べてみます。インターネットで検索するだけでなく、新聞やテレビなど他の媒体を使うのも一つの方法です。複数の投稿や記事があっても、同じ人が複数のアカウントで投稿している場合もあるので、注意が必要です。

6.他の人の意見を聞いてみる
自分で判断できない場合、友人や知人、専門家などに聞いてみるといいでしょう。この時、違う意見の人がいると、より知識も深くなります。

質よりも量を集める

検索エンジンは便利な一方で、キーワードを利用者が入力する必要があり、指定したキーワードに関連がある情報しか得られません。このため、情報収集として幅広い知識を得ることは難しいという問題があります。

そこで、「待っていれば情報が向こうからやってくる状態を作る」ことを考えます。例えば、新聞を購読していれば、朝と夕方に自宅に配達されてきます。テレビやラジオをつければ、何らかの番組が配信されています。緊急地震速報のように、災害が起きれば通知されるしくみもあります。

Webサイトやブログでも同じように、新しい情報が公開されたときに、それを相手から届けてもらうしくみを構築することを考えます。例えば、インターネットでニュースを得ることを考えます。

RSS
世の中には多くのニュースサイトがありますが、これを毎日1つずつ開いて、どこまで自分が読んだかな、と思い出しながらチェックするのは大変です。RSSを使うと、登録されているサイトを定期的に巡回し、Webサイトが更新された場合に自動的に取得できます。

RSSで情報を収集するには、RSSリーダーと呼ばれるソフトウェアを使用します。最近ではスマートフォンアプリも提供されていることが多く、既読・未読の状態を同期してくれるので、自宅での情報収集だけでなく移動中にも情報収集できます。収集されるのは記事のタイトルと要約だけですが、新聞の見出しを見て記事を読むか判断するように、気になるコンテンツだけをチェックできます。

Podcast
RSSは文章だけですが、Podcastはテレビやラジオのように音声や動画を購読できます。購読しておいたものが更新されると、自動的に配信されるしくみです。

多くのジャンルで配信されていますが、最近はIT系のエンジニアが配信するコンテンツが増えており、ブームになっています。MacやiPhone、iPadには標準アプリがあり、AndroidでもいくつかのPodcastアプリがありますので、気軽に聴けるのも便利なところです。

情報を発信する
情報が向こうから来る状態を作る方法に、情報を発信するという方法があります。発信しないと、その人がどのような技術に興味があるのかわからないため、なかなか情報が集まらないものです。情報を発信することで、それを見ていた人がフィードバックをくれることがあるのです。

発信する方法はTwitterでもブログでも構いませんし、IT系の内容ではQiitaを使っている人も多くいます。最近は技術書典などのイベントもあるため、同人誌を書くのも一つの方法です。

情報収集に役立つ便利なサービス

上記を踏まえて、質の良い情報をより多く収集する方法として、便利なサービスやツールを紹介します。

1.Twitter
幅広い情報収集の手段として、多くのエンジニアがあげているのがTwitterです。多くの情報が発信されており、便利な一方でその内容は玉石混交なので工夫が必要になります。例えば、一次情報を発信しているアカウントだけをリストに登録し、TweetDeckの設定でリツイートを除外して、本人の投稿だけを見る、といった工夫をすることで、ある程度の品質を保つことは可能です。

2.Techfeed / Techfeed Pro
ニュースを選んで配信してくれる便利なサービスで、スマホアプリも提供されており、設定すれば1日3回朝、昼、晩に通知してくれます。過去に閲覧したニュースから自動的に学習して、自分にあったニュースが配信されてきます。3月から「Techfeed Pro」というサービスも登場し、より便利になりました。エキスパートがツイートした内容などがジャンル別に表示されるサービスで、自分の興味があるジャンルをフォローしておくと、ジャンル別に内容が表示されます。有名な方がたくさん参加していますし、私もエキスパートとして参加しています。

3.NewsPics / ITnews
上記と同じように、他の人が注目しているニュースに気づく方法として、「NewsPicks」や「ITnews」があります。NewsPicksはビジネス系のニュースが中心ですが、キーワードを登録しておくと、そのキーワードに関するニュースが届いたときに一覧にしてくれます。ITnewsはITに関するものに特化しているのが特徴です。NewsPicksと同様に、他の人がPickしたニュースが表示されるだけでなく、Pickするときにコメント付きで表示されるため、他の人がどう感じているのか、ということがわかります。

4.はてなブックマーク
ソーシャルブックマークと呼ばれていますが、記事をブックマークして、他の人と共有できるサービスです。他の人がブックマークした、という意味ではトレンドを知るには便利ですが、匿名の人が多く、コメントも荒れていることが多いことから、参考程度に使うといいでしょう。ここでも、テクノロジーのタブを見ると、IT関連の技術情報が出てきます。

5.IFTTT / Google Alert
IFTTTは複数のWebサービスを連携できるツールで、ツイートされたときにスマホに通知する、Slackに投稿する、など情報が更新されたときにリアルタイムで通知することが可能になります。自分の興味のあるキーワードを登録しておくと、新しいツイートをかなり早いタイミングで気づけます。同じように、ブログなどに投稿されたことに気づくには、Google Alertを使う方法もあります。キーワードを入力してアラートを作成するだけで、メールなどで通知できます。

6.コミュニティに入る
SlackやDiscordなどオンラインで活動しているコミュニティがあります。いろいろな人が質問したり、情報共有したりしており、活発に議論されていることもあります。SlackではPHPやRuby、情シス担当者向けの他、Kaggleのコミュニティなど多くのコミュニティが存在します。DiscordではPythonやインフラ勉強会などが有名です。

これらに共通するのは、いずれも自分がアクションを起こさなくても、情報が降ってくるということです。もちろん、アプリやWebページを開く必要はありますが、それだけで、世の中で起こっていること、注目されているニュースが手に入る、ということです。

いろいろな方法がありますが、質と量のバランスを考えながら、正確な情報をできるだけ早く収集できるようにしてみてください。

▼このコラムの内容は動画でも公開しています。ぜひこちらからご視聴ください
https://www.r-staffing.co.jp/engineer/entry/20200529_1

第13話 どのコミットでバグが入ったかgit blameで調べてみよう【連載】マンガでわかるGit ~コマンド編~

f:id:itstaffing:20200617134342j:plain

Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。

前回の第12話では、リポジトリ内の検索ができる「git grep(グレップ)」について学びました。

・特定の文字列を含む箇所を検索する(大文字、小文字を区別する)

$ git grep “検索したい文字列”

・コミットやブランチを指定して検索する

$ git grep “検索したい文字列” コミット識別子

・ファイル名のみ表示する

$ git grep -l “検索したい文字列”

今回の第13話では、どのコミットでバグが入ったかを調べられる「git blame(ブレーム)」の使い方を学びます。このマンガを通して、わかばちゃんと一緒にGitの知識を身につけていきましょう!

【筆者】湊川 あいさん
【筆者】湊川 あいさん
フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかりやすく伝えることが好き。 著書『わかばちゃんと学ぶ Git使い方入門』『わかばちゃんと学ぶ Googleアナリティクス』『わかばちゃんと学ぶ Webサイト制作の基本』『運用ちゃんと学ぶ システム運用の基本』が発売中のほか、マンガでわかるGit・マンガでわかるDocker・マンガでわかるRuby・マンガでわかるScrapbox・マンガでわかるLINE Clova開発・マンガでわかる衛星データ活用といった分野横断的なコンテンツを展開している。

・Amazon著者ページ
・Twitterアカウント

この行を変更したのはだれ?git blameで一発確認!

f:id:itstaffing:20200617134345j:plain
f:id:itstaffing:20200617134349j:plain

git blameの使い方

次のコマンドで、いつ誰のコミットでその行が変更されたのかを調べられます。

$ git blame [ファイル名]

・Gitリポジトリ直下にあるファイルを調べたい場合

例)リポジトリ直下にある「config.yml」というファイルを調べる
$ git blame config.yml

・階層がある場合

例)appフォルダの中にある「app.component.ts」というファイルを調べる
$ git blame src/app/app.component.ts

このコマンドを実行してみると、次のように表示されました。5行目の変更をしたのは、5月11日12時20分の魔王教授(mao-kyojyu)ということがわかります。

f:id:itstaffing:20200619144452j:plain

f:id:itstaffing:20190617145538j:plain
わざわざコミットをさかのぼらなくても、コマンド一発でわかるから便利だね!
f:id:itstaffing:20190617145541j:plain
ちなみに、コミットIDの先頭についている「^」マークは、そのコミットがイニシャルコミット(最初のコミット)ということを表しているぞ。

まとめ

リポジトリ内の検索ができる「git blame」について学びました。

・各行にコミットした人の名前と日時を表示する

$ git blame [ファイル名]

Gitにはまだまだたくさんのコマンドがあります。
次回は、リモートリポジトリを追加するコマンド「git remote」を学びましょう。


▼登場キャラクター紹介
f:id:itstaffing:20200122103525j:plain

▼わかばちゃんが登場する書籍

▼ これまでの「マンガでわかるGit」

【イベントレポート】AI向けの数学とPythonを基礎から学ぼう!

この記事では2020年3月24日に開催した、オンライン動画配信イベント「人工知能(AI)、機械学習のための数学の基礎-Pythonのコードと共に学ぶ人工知能/深層学習に必要な数学-」をレポートします。

昨年11月のイベントで「どのように数学を機械学習で活用するか」についてお話しいただいた、我妻幸長さん。今回のイベントでは、前回よりも一つレベルアップをした内容で、人工知能に必要な数学を我妻さんにご解説いただきました。

■今回のイベントのポイント
・人工知能の学習に必要な数学知識は、主に線形代数、微分、確率/統計
・特に線形代数と微分が大事
・Pythonには、AI向けの数学用ライブラリが用意されている

【講師プロフィール】
我妻 幸長さん
「ヒトとAIの共生」がミッションの会社、SAI-Lab株式会社の代表取締役。AI関連の教育と研究開発に従事。東北大学大学院理学研究科修了。理学博士(物理学)。興味の対象は、人工知能(AI)、脳科学、シンギュラリティなど。オンライン教育プラットフォームUdemyで、3.5万人以上にAIを教える人気講師。著書に、「はじめてのディープラーニング」「はじめてのディープラーニング2」(SBクリエイティブ)、「Pythonで動かして学ぶ!あたらしい数学の教科書 機械学習・深層学習に必要な基礎知識」(翔泳社)。共著に「No.1スクール講師陣による 世界一受けたいiPhoneアプリ開発の授業」(技術評論社)。

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

人工知能(AI)の定義は人によりさまざまですが、我妻さんによれば、次のような3つの大きな捉え方があるそうです。

・自ら考える力が備わっているコンピュータのプログラム
・コンピュータによる知的な情報処理システム
・生物の知能、もしくはその延長線上にあるものを再現する技術

また、AIには「強いAI」と「弱いAI」があるそうです。強いAIとは、テレビや映画に登場するロボットのようなものを指しますが、これらの共通点は、残念ながらまだ実現していないところだそうです。

一方で、ニュースなどでよく耳にする人間を打ち負かすようなチェスのプログラムは弱いAIに分類されるそうです。身近な存在としては、スマートフォンの操作を代わりに行ってくれるアシスタント機能のようなものも弱いAIに分類されます。

現在は第三次AIブームであると言われていますが、その主役はこうした弱いAIを指しています。もちろん、一口に「AI」と言っても、そのカテゴリは多岐にわたっているそうです。

「AI=機械学習」のイメージを持たれる方も多いかと思いますが、それ以外にも、アルゴリズムが交配して突然変異なども起こす「遺伝的アルゴリズム」、シロアリや鳥の群れのふるまいを再現する群知能といったものもAIのカテゴリに入るとのことでした。

f:id:itstaffing:20200605141101j:plain
▲人工知能は、流行りの機械学習だけではなく、分野は多岐にわたる

もちろん、今回のテーマは機械学習。機械学習の実現にも、強化学習、決定木、ニューラルネットワークなど、さまざまなアルゴリズムがありますが、今回紹介してくださったのは「ニューラルネットワーク」です。

これは脳の神経細胞をモデル化し、それらを多階層で結合したものです。

f:id:itstaffing:20200605141104j:plain
▲脳の神経細胞が層を形成して接続されたニューラルネットワークのモデル図。人によって見解は違うものの、一般には4層以上あるものがディープラーニングと呼ばれているとのこと

さらにニューラルネットワークにおいてもアルゴリズムがいくつかあり、たとえば、画像認識には「畳み込みニューラルネットワーク(CNN)」、画像生成には「敵対的生成ネットワーク(GAN)」、自然言語処理には「再帰型ニューラルネットワーク(RNN)」といったアルゴリズムが使われているそうです。

今回扱うのは、とてもシンプルなニューラルネットワークのモデルだそうです。

人工知能と数学

人工知能の学習に必要な数学知識には主に線形代数、微分、確率・統計という3つの分野があり、特に線形代数と微分が大事とのことで、今回は、そのうちの線形代数にフォーカスし、行列について、実際にプログラミングを交えながら解説してくださいました。

数式からコードへの変換は、数式という「言語」をプログラミング言語に変換していくこと。プログラミング言語のコード化をすることで、数式にさまざまな値を代入し、試行錯誤することができるようになります。しかもPythonには、そうしたAI向けの数学用ライブラリが用意されているため、AIの勉強に最適なのだそうです。

今回解説してくださったのは行列積と転置について。

行列積とは行列同士の掛け算のことですが、そもそもAIの学習で、なぜ行列積を求めるのでしょうか。実はAIの学習において積の総和を扱うことが多いのだそうです。

たとえば先ほど登場した脳の神経細胞であるニューロンでは、つながっている複数の神経細胞それぞれからの入力を基に、次の神経細胞に対して値を出力していきますが、このとき、それぞれの値の総和を求める必要があります。

そして積の総和を簡潔に記述できるのが行列積です。

f:id:itstaffing:20200605141107j:plain
▲行列積の考え方と計算方法

たとえば次のような行列式を考えます。

f:id:itstaffing:20200605141110j:plain
▲単純な行列式の例。行列aと行列bの行列積は、Pythonではnp.dot(a, b)で求められる

ただし、行列積で掛け算を行う際は、前の行列の行と、次の行列の列の要素数が一致していなければなりません。たとえば上図のような4行3列の行列と3行4列の行列の行列積は求められますが、4行3列同士の行列積は求めることができません。

そこで登場するのが転置です。転置とは、その名の通り、行列の行と列を置き換えます。

f:id:itstaffing:20200605141113j:plain
▲転置の例。行列bの転置は、Pythonではb.Tで求められる

ニューラルネットワークを数式で表す

最後に、簡単なニューラルネットワークのモデルを数式で表し、それをプログラムで実装・実行してくださいました。

ここで紹介しているディープラーニングでは、脳の神経細胞であるニューロンの動作を次の図のようなものと捉えます。

f:id:itstaffing:20200605141117j:plain
▲ニューロンへの入力に重み付けをし、バイアスをかけたあと、活性化関数で処理した結果を出力する。各入力は、そのままではなく重み付けされた上で処理される。バイアスとは、ニューロンの感度を調整するためのもので、後述する逆伝播でダイナミックに調整される。また、活性化関数は、このニューロンが興奮するかしないかを導き出すものとのこと

このとき、ニューロンへの入力をx、重みをwとすると、重み付けされた入力はxwとなり、k個の入力があるとすると、k個分のxwの総和を求め、そこにバイアス値bを加えたものをuとし、活性化関数をf(u)とすると、数式は上図のようになります。

活性化関数にはシグモイド関数というものを使用します。これはyが0のときはニューロンが興奮していない状態、yが1のときは興奮している状態を表します。

f:id:itstaffing:20200605141119j:plain
▲ここでは処理を簡潔にするため、シグモイド関数もシンプルなものを使用

一通りの流れを説明したあと、これらの処理をPythonのコードにしたものを実行してくださいました。

f:id:itstaffing:20200605141122j:plain
▲複雑な部分を可能な限りシンプルなものとし、動作の仕組みを理解できる形のプログラムで示してくださった

実際には、入力から各階層のニューロンへの順伝播が行われたあと、得られた結果を基に、バックプロパゲーションと呼ばれる逆伝播を行って各ニューロンのバイアス調整などを行っていく必要があるそうですが、そのためには偏微分など、さらなる高等数学の理解が必要になるそうです。

イベントにご参加いただいた方からは、「デモがあったので理解しやすかった。本を読むだけで手を動かして学んでいなかったのですが、実際に簡単なコードから書いてみようと思えました」という声や、「コードを一から書いてみたい」などの声をいただきました。

我妻さんによれば「コードを書くのはスポーツと一緒。練習で素振りをするように、何かを作ってみる。数式に落とし込んで、Pythonで書いていくことに慣れることが大切です」とのこと。そして、いきなり複雑で難しい4×4のルービックキューブよりも、2×2のルービックキューブから始めるのが簡単なように、プログラミングも、まずはシンプルな課題を解いていくことが、楽しむ秘訣だそうです。

▼本イベントは動画でも公開しています。ぜひこちらからご視聴ください
https://www.r-staffing.co.jp/engineer/entry/20200522_1

株式会社リクルートスタッフィングでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するこのようなイベントを、定期的に開催しています。皆さまのご参加をお待ちしております。

【イベントレポート】目で見て体感する、ブロックチェーンのインパクト

この記事では2020年3月6日に開催した、オンライン動画配信イベント「目で見て体感する、ブロックチェーンのインパクト」をレポートします。

仮想通貨でおなじみのブロックチェーン技術とは一体どのようなものなのか、その仕組みに迫ります。講師には、FLOCブロックチェーン大学校講師で、ブロックチェーンエンジニアである赤澤直樹さんをお招きし、概要やデータ構造、そして最新動向まで解説いただきました。

■今回のイベントのポイント
・ブロックチェーンは、「誰の管理にもよらず、正しいデータをみんなでつかえるようにしたこと」を成し遂げた
・ブロックチェーンの本質は、タイムスタンプの再発明

【講師プロフィール】
赤澤 直樹さん
FLOCブロックチェーン大学校講師(ベーシック、エンジニア)。専門分野はToken Engineering、データサイエンスなど。大学院在籍中から独学でAIやデータ解析、ブロックチェーンを学び、専門家として多数仕事を請け負う。執筆協力に書籍『Pythonで動かして学ぶ!あたらしいブロックチェーンの教科書』(翔泳社)がある。

ブロックチェーンの概要

ブロックチェーンと聞いて何を思い浮かべるかは、それぞれのバックグラウンドによって異なるそうです。「仮想通貨」や「分散処理」、「データを改ざんされないための技術」など、さまざまな答えが返ってくるかもしれませんが、実はこれらは表面的な特長に過ぎないのだそうです。

では、ブロックチェーンの本質とは、どのようなものでしょうか。それは、タイムスタンプの再発明なのだそうです。

そもそもブロックチェーン登場以前にも、ある程度のことはできていました。たとえば取引(トランザクション)は電子署名で改ざんされていないことが保証されていましたし、親になるトランザクションから継承して参照していくという信頼性の担保も、ブロックチェーン以前から提案されていたそうです。

f:id:itstaffing:20200514131655j:plain
▲今までは「TX#3'」と「TX#3"」はどちらが先に作られたのかということが証明できなかった。その難しいテーマの解決を突き詰めていき、たどりついたのがブロックチェーンという技術

しかも、ブロックチェーンに使われている一つひとつの技術は昔からある「枯れた技術」で、それらを組み合わせて難題を解決しているそうです。

f:id:itstaffing:20200514131658j:plain
▲サトシナカモトはブロックチェーンを論文発表した謎の人物。コピペできず「このデータは確実に私のものです」と言えるため、仮想通貨だけでなく、医療データから電力使用量の請求まで、あらゆる分野での応用が期待されている

ブロックチェーンを構成する技術は大きく次の3つだそうです。

f:id:itstaffing:20200514131702j:plain
▲コンセンサスアルゴリズムというのはあまり耳慣れないものの、暗号化やP2Pはいろいろなシーンでよく耳にする

ブロックチェーンのデータ構造

ブロックチェーンに使われている技術の1つにハッシュ関数があります。ハッシュ関数は入力したデータを一定の長さのデータに変換する関数で、出力値(ハッシュ値)から入力値(元のデータ)を逆算できない一方向関数で、同じデータを入力すると同じハッシュ値が得られます。

f:id:itstaffing:20200514131705j:plain
▲入力元のデータの量によらず結果の長さが同じになる。Webアプリでもユーザー認証で利用するパスワードの安全な保管に使われている

仮想通貨ビットコインでは数千、数万といったトランザクションを処理しますが、これをブロックヘッダに入れなければなりません。そこで、ハッシュ関数を利用したマークルツリーというデータ構造を使っています。

f:id:itstaffing:20200514131708j:plain
▲マークルツリーは、二分木やハッシュツリーの一種。隣り合うデータを合体させハッシュ値を求め、それが1つになるまで繰り返していく。最終的に1つになったハッシュ値をマークルルートと呼ぶ

もし、マークルツリーのどこかの値を変えてしまうと、マークルルートの値も変わってしまいます。またハッシュ関数は一方向関数であるため、マークルルートから元のデータを復元することもできません。そのためトランザクションの履歴が改ざんされていないかどうかが、すぐに分かります。

次に、ブロックチェーンで使われているもう1つの技術要素であるハッシュチェーンについてです。ハッシュチェーンとは、その名の通り、ハッシュ値を用いてデータの連鎖を作り上げていくものだそうです。

f:id:itstaffing:20200514131711j:plain
▲ハッシュチェーンでは、直前のデータのハッシュ値に、新しいトランザクションデータを加えて、そのハッシュ値を求めるということを繰り返していく

上図のようにハッシュチェーンを構築することで、途中のデータを改ざんすると以降のハッシュ値が異なってしまうため、すぐに改ざんを検知できるようになり、「しなやかなセキュリティの強さ」を実現しています。

ハッシュチェーンは、ブロックチェーンにおける「マイニング」というプロセスの中で利用されているそうです。

f:id:itstaffing:20200514131713j:plain
▲ハッシュチェーンを作成するには、Nonceの値を変えながら、ハッシュ値の先頭に0がいくつ並ぶかという条件に当てはまる値を計算で求めていく。この計算を何度も繰り返すため、マイニングはCPUリソースを大量に消費する

今回のイベントでは、赤澤さんが要所要所で実際のプログラムを実行して、どのような結果が出力されるのかをデモンストレーションしてくださいました。

f:id:itstaffing:20200514131716j:plain
▲マークルルートの計算やマイニングの様子などを、実際のプログラムで示してくれた

プログラムの目的はブロックチェーンの動作を知るためということで、計算時間を短くするためにハッシュ値の条件(先頭の0の数)を緩めるなどしているそうです。マイニングの結果も1~2秒ほどで表示されていました。条件をやや厳しくして実行すると、確かに、より時間がかかっていました。ビットコインのマイニングでは、より条件が厳しいため、さらに多くの時間がかかるとのことでした。

プロトコルとしてのブロックチェーンの強みと弱み

ところで、ブロックチェーンには強みだけでなく弱みもあるそうです。

強みは、基本的に一度決まったことは翻らないという耐改ざん性や、複数主体で同じデータを持ちあえるという分散性です。誰かに「このデータは本当に正しいか?」と尋ねなくても、正しいかどうかが分かるそうです。

一方、弱みは、今のところ処理能力がイマイチでスケーラビリティに問題があることです。

赤澤さんによれば、VISAカードのシステムでは1秒間に約4000トランザクションを処理しているそうですが、ビットコインではせいぜい5~7トランザクションほどだそうで、処理データが増えると処理しきれないといいます。

また、マイニングは計算競争のようにとらえられています。これはプルーフオブワーク(PoW)と呼ばれるコンセンサスアルゴリズムを利用しているためで、適切なNonceをいち早く見つけた人、つまり計算能力の高いコンピュータを所有する人に優先的に承認する権利(報酬を受け取る権利)が与えられるという仕組みだからとのこと。その権利を得るため世界中でマイニングにCPUパワーが注ぎ込まれていて、エネルギー問題を懸念する声もあるそうです。

ブロックチェーンの最新動向

最後にブロックチェーンの最新動向を紹介してくださいました。

先ほどのスケーラビリティの問題については、ブロックサイズを拡大したり、中身のデータを小さくし効率化するといった方法が研究されていたり、ブロックチェーンの外側で取引の一部を行い、スケーラビリティの問題を解決する取組み「Layer2技術」などの研究も進められているそうです。

f:id:itstaffing:20200514131719j:plain
▲Layer2技術にはいくつかあり、それぞれサービスに応じた技術の採用を検討、あるいは実施しているという

たとえばコンセンサスアルゴリズムとしてPoWではなく、プルーフオブステーク(PoS)を採用するというのも問題解決の一つだそうです。PoSは、現時点での通貨保有量が多いコンピュータの持ち主に優先的に承認する権利を与えるというものだそうで、ビットコインと並ぶ有名な仮想通貨イーサリアムでは、将来的にPoSを採用していくことが計画されているとのことでした。

イベントにご参加いただいた方からは、「理論に寄った講義かと思っていたら技術よりで大変面白かったし、ビットコインを身近に感じた」という声や、「実際のコードを見せていただけると、面白さも理解のしやすさも全く違うなと思いました。出席できて本当に良かった」などの声をいただきました。また、オンライン動画配信であったため、周囲を気にせずリラックスしながら受講できた方も多かったのではないでしょうか。

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