paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

知識ゼロでもすぐにプログラミング習得できる!初心者向け3つの学習法

f:id:paiza:20180116141221j:plain
Photo by ThoroughlyReviewed
f:id:paiza:20140916135428p:plainこんにちは。谷口です。

「プログラミングの勉強を始めたい」という初心者の方は多いですよね。

paizaでも学習サービスを運営していますが、最近は「興味があるので趣味で勉強したい」という方だけでなく、

  • 開発業務の経験はないが、Webサービスやアプリケーションを開発するエンジニアになりたいので学びたい
  • Web担当や開発を発注する側(プロデューサー・ディレクター・デザイナー・営業など)になったが、エンジニアと話がかみ合わないので学びたい

といった方も目立つようになってきました。

そこで今回は、こうした知識ゼロからプログラミング入門したい人向けの、プログラミング学習方法を3種類ご紹介します。

■知識ゼロからプログラミングを学ぶには

◆プログラミング学習サイトを使って学ぶ

コスト:★★★
手軽さ:★★★
質問のしやすさ:★

プログラミング学習サイトはかなり充実しています。ただ解説文を載せるだけでなく、動画やスライド、ブラウザ上の実行環境を使って、自分で実際にプログラミングをしながら学べるサイトが増えてきました。(プログラミングを学習するには、この「手を動かす」ということがとても重要です。いくら解説を読んでも、自分で実際に動くものを作らないことには習得できません)

【メリット】

  • ブラウザでコードを実行できるサイトなら、開発環境の構築などをしなくてもプログラミングを学べる
  • サービスによっては無料でかなりの範囲を学べる(※途中から課金が必要となる場合もある)
  • 自分の好きな時間に好きなだけ学べる

【デメリット】

  • わからない部分は自分で調べる必要がある
  • 質問可能なサービスでも、講師が常についてくれているわけではないので、答えが来るまでに時間がかかる
paizaラーニング


paizaラーニングは一回3分程度の動画を見ながらブラウザ上で演習問題を解き、すぐに実行して結果を見ることができます。未経験者でもブラウザさえあれば、環境構築不要で手を動かしながらプログラミングの基礎を習得できます

特に、今月から今まで有料だった「Python入門編」と「ITエンジニアの就活準備編」は、今月から【全編無料】となりました。

Progate


スライドによるレッスンで基礎を学び、オンラインエディタでコーディングをして実行結果を見ることができます。コーディングの際は、エディタやプレビュー画面と一緒にお手本となる見本画面や解説もあります。

ドットインストール


動画でプログラミングの書き方、環境構築方法などが学べます。

◆プログラミングスクールに通って学ぶ

コスト:★
手軽さ:★
質問のしやすさ:★★★

独学で勉強を進めていく場合、ネックになってくるのが「わからないことを解決するのに時間がかかる」ことです。

もちろん自分で調べて解決できれば、そのぶん知識は増えます。ただ、初心者すぎて調べ方がわからない・調べて出てきたドキュメントを読んでも理解できない・自分が書いたコード以外(PCの環境など)の部分に問題がある…といったケースもありますし、解決できずに挫折してしまっては元も子もありません。プログラミングに詳しくて質問できる人が周りにいればいいですが、「そんな人いない」という人も多いですよね。

「多少のコストがかかってもいいから効率よく学びたい」「周りに詳しい人はいないし、本当に知識ゼロなので独学じゃ無理…」という人は、プログラミングスクールなどで短期間に一通り学んでしまうというのも一つの手です。最近は夜間や土日に対応しているスクールも多く、社会人でも通いやすいところが増えています。

【メリット】

  • 目的に合った学習カリキュラムが用意されているので、効率よく学べる
  • わからないところはすぐに講師へ質問できる
  • 強制的に勉強する時間を確保できる

【デメリット】

  • 独学で学ぶよりも費用がかかる
  • 受講できる時間が決まっているため、忙しい人はスケジュールを調整する必要がある
Web担当向け:開発者と話ができるようになる!知識ゼロからの1ケ月Webサービス開発プログラミング入門


paizaでは、1/20(土)から未経験からエンジニアを目指したい方向けの「【エンジニア転向希望者向け】知識ゼロからの1ヶ月Webプログラミング講座」、Web担当者・発注者(プロデューサー、ディレクター、営業など)の方向けの「開発者と話ができるようになる!知識ゼロからの1ヶ月Webサービス開発入門」を開催いたします。

動画の学習教材をもとに、実践を通してプログラミングが学べます。また、演習課題を解いて、ステップごとに理解を深めながら学習を進められます。分からないところはその場ですぐに講師へ質問でき、個別指導を受けることができます。一斉指導型のスクールではないため、自分のスピードに合わせた学習が可能です。

詳しくはこちら
peatix.com
peatix.com

TECH::CAMP

f:id:paiza:20180116133152j:plain
TECH::CAMPでは、オリジナルのカリキュラムを使って自分のペースで学習を進めていくテクノロジースクールです。わからないことがあった場合は、教室にてメンターに直接質問ができます。

WebCamp

f:id:paiza:20180116133722j:plain
WebCampでは、自分だけのカリキュラムをもとに、講義形式ではなく個別指導による完全習得型学習でサポートを受けられるWebスキルのパーソナルジムです。

◆書籍を使って学ぶ

コスト:★★
手軽さ:★★
質問のしやすさ:★

よく「プログラミング学習のためにどんな書籍を買ったらいいんでしょうか」と聞かれることがあります。最近は、初心者でも始めやすいプログラミング学習サイトが充実しているので、書籍を買わなくても勉強を始めることは可能です。そのため、書籍だけで勉強するよりも、書籍と学習サイトやオンライン実行サイト等を組み合わせて学習するという方法がいいかと思います。

プログラミング初心者向けの書籍は、開発言語ごとにたくさん発行されていますので、学びたい言語に合わせて選ぶ必要があります。ただ、プログラミングは書籍を読んだだけで身につくことではありません。読んだ後、もしくは読みながら、実際に手を動かして自分でプログラミングをする必要があります。

【メリット】

  • 初心者向けの書籍はAmazonや書店ですぐ手に入る
  • 自分のペースで進められる
  • ネットと比較すると情報の精度が高いことが多く、体系的にまとめられている

【デメリット】

  • わからないところは、自分でさらに他の書籍やサイトを使って調べなければならない
  • どの書籍を買えばよいのか初心者には判別しづらい


Ruby

◇たのしいRuby

たのしいRuby 第5版

たのしいRuby 第5版

Python

◇いちばんやさしい Python入門教室

いちばんやさしい Python入門教室

いちばんやさしい Python入門教室

Java

◇スッキリわかるJava入門

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

■まとめ

プログラミングは、どんなに授業を受けたり本を読んだりしても、実際に自分で手を動かしてコードを書かないと習得できないスキルです。

ただ、学習方法については「独学で自分のペースで進めたい」「スクールで講師に教わりたい」「コストをかけたくない」「コストをかけても効率的にやりたい」など、人によって合う・合わないがあります。目的も、「未経験からエンジニアとして実務で通用するレベルになりたい」「作りたいモノがある」「趣味としてちょっと触ってみたい」など、人それぞれです。どれが正しい、正しくないというものではありません。

自分の目的とペースに合った学習方法を見つけて、ぜひプログラミングの第一歩を踏み出してみてください!





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのスキルチェック

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza

Rubyを使ったSlackボットが5分で作れた!PaizaCloudならサーバ構築不要

f:id:paiza:20180115170315p:plain
(English article is here)

f:id:paiza:20151217152725j:plainこんにちは、吉岡(@)です。

皆さんはチャットツールのSlackを使っていますか?

今や社内やグループでのコミュニケーションに欠かせないSlackですが、ボット(Bot)というプログラムを作ると、自動的に会話をさせることができます。

Slackボットは文字列だけを取り扱うので、比較的簡単にプログラミングして開発することができます。また、一緒にSlackチャットを使っている社内やグループ内のユーザー達にもすぐに使ってもらえます。自分が作ったものをすぐに使ってもらって、フィードバックがもらえるのは楽しいものです。Slackボット作りは、プログラミング初心者が初めて作って公開するモノとしても最適です。

ただ、実際にSlackボットを作って動かすには、開発環境やサーバの設定が必要です。プログラミング自体は簡単でも、実際に作って動かすところまで持っていくのはなかなか面倒な作業も伴います。

そこで、今回はPaizaCloudを利用してみます。

PaizaCloudは、クラウド上で動く開発環境です。PaizaCloudでは、面倒なインストールや環境設定をすることなく、Web開発やアプリケーション開発を簡単・手軽に始められます。

PaizaCloudでは、Slackボットの開発に適した環境も用意されているので、ブラウザさえあれば、すぐにSlackボットをプログラミングして開発することができます。

開発環境がクラウド上で動作しているので、自分でサーバなどを用意しなくても、作ったボットはその場ですぐに動かせます!

ここでは、実際にPaizaCloud上で、Rubyを使ってSlackボットを作ってみます。

手順に沿っていけば、誰でも5分程度でSlackボットを作り、その場で動かしてみることができます。

PaizaCloud Cloud IDEを使う

それでは、始めていきましょう。まずは、PaizaCloudにログインします。

PaizaCloud Cloud IDEのサイトはこちらです。

https://paiza.cloud/

メールアドレスなどを入力して登録すると、登録確認メールが送られてきます。GitHubGoogle(Gmail)ログインを利用すると、ボタン一つで登録することもできます。

サーバを作る

次は、開発環境となるサーバを作ります。

f:id:paiza:20171213234155p:plain

「新規サーバ作成」ボタンを押して、サーバ作成画面を開きます。

f:id:paiza:20171218232242p:plain

特に何も変更せずに、もう一度「新規サーバ作成」ボタンを押すと、3秒程度でSlackボットの開発環境がブラウザ上にできあがります。

f:id:paiza:20180115174407p:plain

Slackアプリケーションを作る

SlackボットはSlackアプリケーションとして作りますので、Slackアプリケーションページを開きます。

https://api.slack.com/apps

f:id:paiza:20180115170344p:plain

サインアップしていない場合は、「sign in to your Slack account」リンクをクリックしてサインアップし、再度 https://api.slack.com/apps を開きます。

f:id:paiza:20180115170402p:plain

アプリケーション一覧が表示されます。アプリケーションを作るので、「Create New App」ボタンをクリックします。

f:id:paiza:20180115170417p:plain

アプリケーション作成ダイアログが表示されるので、アプリケーション名を入力し、Slackワークスペースを選択します。

ここでは、アプリケーション名は"MyBot"としています。設定したら、「Create App」ボタンをクリックしてアプリケーションを作成します。

アプリケーションが作成されました。以下のようなアプリケーションページが表示されます。

f:id:paiza:20180115170432p:plain

Slackコマンドを作る

まずは、Slackコマンドを作ってみましょう。Slackコマンドはスラッシュで始まるコマンドです。例えばチャネルで"/who"とメッセージを入れると、チャネルのユーザ一覧が表示されます。

ここでは、日時を表示する、/time コマンドを作ってみます。

アプリケーションページの"Add features and functionality"の、"Slash Commands"をクリックします。

f:id:paiza:20180115170456p:plain

"Create New Command"ボタンをクリックします。

f:id:paiza:20180115170919p:plain

コマンド作成ページが表示されるので、Commandにはコマンド名「/time」を入れます。

Request URLには、PaizaCloudで作成するサーバプログラムのURLを入れます。

PaizaCloudで動かすサーバのホスト名は「サーバ名.paiza-user.cloud」になります。

また、Sinatraで作成する場合ポート番号は4567番になります。PaizaCloudで立ち上げたサーバは自動的にSSLを利用できますので、プロトコルはHTTPではなく、HTTPSにします。結果、 URLは https://サーバ名.paiza-user.cloud:4567/ となります。(「サーバ名」は、作成したサーバの名前に 置き換えてください)

Short Descriptionにはプログラムの説明を、Usage Hintにはコマンドの利用方法をそれぞれ適当に書いておきます。

設定ができたら「Save」ボタンで保存します。

コマンドが作成されて、コマンド一覧が表示されました。

f:id:paiza:20180115170938p:plain

作成したSlackアプリケーションは利用できるようにSlackのワークスペースにインストールします。

メニューから、"Install App"を選択します。

インストール画面が表示されるので、"Install App to Workspace"ボタンを押します。

f:id:paiza:20180115173815p:plain

認証画面が表示されるので、"Authorize"ボタンを押して認証します。

f:id:paiza:20180115173829p:plain

今度は、コマンドが入力されたときに実行されるプログラムを書いていきます。

PaizaCloudでは、ブラウザ上でファイルの作成・編集ができます。

PaizaCloudの画面左側の「新規ファイル」アイコンをクリックしてみましょう。

f:id:paiza:20171218232330p:plain

ファイル名を入力する画面がでてくるので、ファイル名を"command.rb"として、「作成」ボタンを押します。

f:id:paiza:20180115171000p:plain

ファイルが作成されました!

まずは簡単なコマンドを作ってみます。

以下のようにプログラムを作成してみましょう。

ここでは、RubySinatraを使っています。

command.rb:

require 'sinatra'
require 'sinatra/reloader'
require 'sinatra/json'

post '/slack/command' do
    text = params['text']
    return json({
        text: "コマンドを実行しました! パラメータは#{text}です。",
        response_type: 'in_channel',
    })
end

get '/' do
  return "Hello World"
end

f:id:paiza:20180115171842p:plain

作成できたら、「保存」ボタンで保存します。

このプログラムでは、"post '/slack/command'"ブロックで、/slack/commandへのPOSTメソッドのリクエストを処理します。リクエストのパラメータはparamsでアクセスできます。

メッセージで、コマンドの後に続く、パラメータテキストを params['text']として取得します。このブロックが返すオブジェクトが、/slack/command リクエストへの応答となります。JSON形式で返すので、jsonメソッドを利用します。textフィールドに表示するメッセージを入れます。response_typeを'in_channel'にすると、他の人にもメッセージが表示されるようになります。

ここでは、"コマンドを実行しました!"と、コマンドのパラメータを表示するようにします。

また、必要はありませんが、確認のためGET "/"に"Hello World"と応答するようにしておきます。

それでは、このプログラムを実行して動かしてみましょう。

実行するには、"ruby ./command.rb -o 0"のようにコマンドを実行します。sinatraはデフォルトではlocalhostのみで待ち受けて外部から接続できません。そこで、このように、"-o 0"(又は"-o 0.0.0.0")オプションを追加してグローバルアドレスで待ち受けて外部から接続できるようにします。

PaizaCloudでは、ブラウザ上で、コマンドを入力するための「ターミナル」を使うことができます。

画面左側の、「ターミナル」のボタンをクリックします。

f:id:paiza:20171213234317p:plain

ターミナルが起動しますので、"ruby ./command.rb -o 0"と、実行するコマンドを入れて改行キー(エンターキー)を押します。

$ ruby ./command.rb -o 0

f:id:paiza:20180115171054p:plain

コマンドが実行されました。"tcp://0:4567"と表示されており、ポート番号4567でサーバが動作していることがわかります。

また、画面の左側に、"4567"と書かれたボタンが追加されています。

f:id:paiza:20180115171204p:plain

Sinatraの開発環境では、4567番ポートでサーバが起動します。

PaizaCloudでは、この4567番ポートに対応したブラウザ起動ボタンを自動で追加しています。

ボタンをクリックすると、ブラウザ(PaizaCloudの中で動くブラウザ)が起動して、"Hello World"と表示されました!

f:id:paiza:20180115171236p:plain

今度はSlackでコマンドを送ってみましょう。

ここでは、「/time てすとてすと」と入れてみました。

コマンドへの返事が返ってきました!Slackコマンドが動いています!

f:id:paiza:20180115171927p:plain

今度は日時を返すようにしてみましょう。

先ほどのプログラムを以下のように変更します。

command.rb:

require 'sinatra'
require 'sinatra/reloader'
require 'sinatra/json'

ENV['TZ'] = 'JST-9' # Timezone

post '/slack/command' do
    text = params['text']
    if text =~ /何時/
        now = Time.now
        responseText = "今は#{now.hour}#{now.min}#{now.sec}秒です。"
    elsif text =~ /今日/
        today = Time.now
        responseText = "今日は#{today.year}#{today.month}#{today.day}日です。"
    elsif text =~ /明日/
        tomorrow = Time.now + (60*60*24)
        responseText = "明日は#{tomorrow.year}#{tomorrow.month}#{tomorrow.day}日です。"
    else
        responseText = "例: 何時 / 今日 / 明日"
    end
    json({
        text: responseText,
        response_type: 'in_channel',
    })
end

get '/' do
  return "Hello World"
end

このコードでは、メッセージに含まれる文字列(何時/今日/明日)を正規表現で確認し返事をしています。

コマンド("ruby ./command.rb -o 0")をCtrl-Cキーで一度終了し、再度実行します。

確認してみましょう。以下のようなコマンドを入れてみます。

/time 今は何時?
/time 今日は何日?
/time 明日は何日?

返事がきました! 日時を返すSlackコマンドの完成です!

f:id:paiza:20180115172001p:plain

Slackボットの作成

Slackコマンドでも自動的に応答できますが、特定のコマンドを入れる必要があります。

より自然な会話に近くなるよう、特定のコマンドを入れなくても発言するには、Slackボットを作成します。

Slackボットを作成するには、Slackのアプリケーションページ(https://api.slack.com/apps)からアプリケーションを選択し、メニューからBasic informationを選択します。

f:id:paiza:20180115174145p:plain

"Add features and functionality"をクリックし、表示される一覧から"Bots"を選んでクリックします。

f:id:paiza:20180115172052p:plain

"Add a Bot User"をクリックすると、ボットユーザ作成画面が表示されるので、"Add Bot User"ボタンをクリックします。

f:id:paiza:20180115172103p:plain

パーミッションの変更が必要と表示されたら、"Click Here"と選択し、変更画面で"Authorize"をクリックして、変更を許可します。

f:id:paiza:20180115172119p:plain f:id:paiza:20180115172129p:plain

Slackボットのプログラムを作成するには、Bot User OAuth Access Tokenが必要です。

アプリケーションページのメニューから"Features"の"Auth & Permission"を選択し、 "Bot User OAuth Access Token"の部分に表示される"xoxb-"ではじまる文字列をメモしておきます。

f:id:paiza:20180115172349p:plain

Slackアプリケーションの設定ができたので、ボットのプログラムを作成しましょう。

Slackボットの作成にはWebSocketを利用します。ここでは、"faye-websocket"というRubyのgemライブラリを利用します。

"faye-websocket" gemをインストールするため、PaizaCloudのターミナルから以下のコマンドを入力します。

$ sudo gem install faye-websocket

f:id:paiza:20180115172448p:plain

bot.rbというファイルを作成して、以下のようにコードを入力します。

slackコマンドの時と同じく、日時を返すプログラムです。

ここで、"OAUTH-TOKEN"は、先ほど取得した"xoxb-"ではじまるBot User OAuth Access Tokenに置き換えます。

bot.rb:

require 'http'
require 'json'
require 'eventmachine'
require 'faye/websocket'

TOKEN='***OAUTH-TOKEN***'

ENV['TZ'] = 'JST-9' # Timezone

response = HTTP.get("https://slack.com/api/rtm.connect", params: {token: TOKEN})
resposeObj = JSON.parse(response.body)

url = resposeObj['url']

EM.run do
  puts "Connecting to #{url}..."
  ws = Faye::WebSocket::Client.new(url)

  ws.on :open do |event|
    p [:open]
  end

  ws.on :message do |event|
    msg = JSON.parse(event.data)
    p [:message, JSON.parse(event.data)]
    
    if msg["type"] != 'message'
        next
    end
    text = msg["text"]

    if text =~ /何時/
        now = Time.now
        responseText = "今は#{now.hour}#{now.min}#{now.sec}秒です。"
    elsif text =~ /今日/
        today = Time.now
        responseText = "今日は#{today.year}#{today.month}#{today.day}日です。"
    elsif text =~ /明日/
        tomorrow = Time.now + (60*60*24)
        responseText = "明日は#{tomorrow.year}#{tomorrow.month}#{tomorrow.day}日です。"
    else
        responseText = "例: 何時 / 今日 / 明日"
    end
    
    reply = {
        type: 'message',
        text: responseText,
        channel: msg['channel'],
    }
    puts "Replying: #{reply}"
    ws.send(reply.to_json)
  end

  ws.on :close do |event|
    p [:close, event.code, event.reason]
    ws = nil
    EM.stop
  end

end

このプログラムでは、"https://slack.com/api/rtm.connect"にTOKENをパラメータとしてアクセスし、ウェブソケットのURLをurl変数に取得します。eventmachine(EM)とfaye-weboskcket(Faye::WebSocket::Client)を利用して、このウェブソケットURLに接続します。

"ws.on"ではウェブソケットのメッセージに応答します。チャネル上で流れたメッセージは"ws.on :message"で受け取ります。メッセージは、typeが'message'なので、それ以外の場合は処理しません。

msg["text"]でメッセージテキストを取得し、メッセージに含まれる文字列(何時/今日/明日)を正規表現で確認し、"ws.send"メソッドで応答します。応答では、typeに'message'を、textに応答するメッセージのテキストを、channelには応答するチャネル(ここではメッセージを受け取ったチャネル)を指定します。

それでは、ボットを動かしてみましょう。"ruby ./bot.rb"コマンドをPaizaCloudのターミナルで実行します。

$ ruby ./bot.rb

ボットが取得できるメッセージは、ボットが参加しているチャネルだけですので、ボットを利用するチャネルに招待します。

メッセージを送ってみましょう!

f:id:paiza:20180115172515p:plain

返事がもらえました!完成です!

なお、PaizaCloudの無料プランでは、一定時間が経つとサーバは停止します。継続的にbotを動かしたい場合は、ベーシックプランへアップデートしてください。 詳しくはこちら https://paiza.cloud

まとめ

PaizaCloudで、Rubyを使ってSlackボットを作りその場で実際に動かしてみました。

Slackボットは簡単に作れてすぐに動かせますし、改造するのも簡単です。どんなメッセージにどう応答するかを考えながら作ったり、使いながら改良したりするのは楽しいですね。興味のある方は、ぜひ作ってみてください!

(botを作ってみたらpaiza(@paiza_official)まで教えてくれるとうれしいです!)

 


  「PaizaCloud」では、環境構築に悩まされることなく、ブラウザだけで簡単にウェブサービスやサーバアプリケーションの開発や公開ができます。 https://paiza.cloud

 


  paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

詳しくはこちら

paizaのスキルチェック

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza

未経験者から機械学習エンジニアになるために必要な知識と勉強法

f:id:paiza:20180116141028j:plain
Photo by Strelka Institute for Media, Architecture and Design
秋山です。

最近、機械学習の勉強をしている人や、機械学習に関連した研究開発の求人を探す人がすごく増えてきましたね。弊社のエンジニアにも機械学習を勉強中の人達が何人かいます。

ただ、「機械学習を勉強したいけど、難しすぎて何から手を付けたらいいのかよくわからない」という人も多いです。それなりに開発経験のあるエンジニアでもそうなので、経験の浅い人だと、なおさらかと思います。

機械学習と一言で言っても、実践するのに必要な知識の分野は多岐に渡ります。

そこで今回は、未経験者が機械学習エンジニアとして転職するにはどういった知識や勉強が必要なのかを書いていきます。

■最低限必要な知識

◆プログラミングスキルとライブラリを使える知識

Pythonには、Tensorflowやscikit-learnなど、機械学習に適したライブラリが多くそろっていて、それらがよく使われています。最低限、各種ライブラリを使いながらのプログラミングが滞りなくできる知識は必要です。

また、ライブラリが使えても「ライブラリの中で何が起こっているのかはよく知らない・わからない」という状態では意味がありません。どんな開発でもそうですが、「結果が想定と異なる」とか「問題が起きた」というときに、ブラックボックスな状態だと改善や原因追求のしようがないので…。

機械学習では、内部でどんな処理が行われているのかの解析が必要な場面も多くあります。よく使われているPythonライブラリの中身はC言語C++で書かれていることが多いので、C言語C++についても、コードを読めるぐらいの知識は必要だと思います。

◆数学の知識

機械学習では、前提として数学の知識が必要となります。

絶対に必要なのが微分積分、あとは線形代数と行列暗算、統計などに関する知識はあったほうがいいでしょう。あとは機械学習で何がしたいかによって必要な分野は変わってきます。とりあえずは高校数学レベルの知識は網羅する必要があります。(実践していくと高校数学レベルじゃ足りなくなってきて大学数学も勉強する必要が出てくるかと思いますが、まずは高校数学を固めておかないとその先に進めないので…)

機械学習の概念やアルゴリズムに関する知識

当然、機械学習で使われるアルゴリズムなどの知識も前提として必要です。教師データあり・なし学習にはどんな手法があるとか、ニューラルネットワークがあって、ディープラーニングがあるとか、回帰によって分類する手法の中にはどんな手法があるかとか…。

◆データベース・データモデリングの知識

データモデリングとは、超簡単にざっくり言うとデータにおける相関や固有ベクトルといったパターンや構造を見つけたり、分類、異常検出などの予測、解析、検証などを行う過程のことで、データを正しく学習させるには必須の知識です。

あと、そもそもデータベースが操作できないといけないので、SQLR言語の知識も必要となります。


全ての分野を網羅的に書くとキリがない・やりたいことによってさらに必要な知識は異なる・実務で機械学習やるならこんなもんじゃ全然足りない……のですが、機械学習入門スタートラインの手前に立つには、上記のような知識は最低限必須かと思います。

■レベル別学習方法

◆数学の知識が足りない人

数学の知識が怪しい人は、まずはこのあたりの書籍で高校・大学レベルの数学をおさらいしましょう。

◇長岡先生の授業が聞ける高校数学の教科書

長岡先生の授業が聞ける高校数学の教科書数学 (考える大人の学び直しシリーズ)

長岡先生の授業が聞ける高校数学の教科書数学 (考える大人の学び直しシリーズ)

高校数学レベルから学び直したい人向け。ちょっと高いんですけど、数学I~Ⅲ、数~Cがこの一冊(DVD-ROMつき)で学べると思えば、むしろ安いはず…。

◇スバラシク実力がつくと評判シリーズ

マセマ出版のこのシリーズもわかりやすいですが、内容が大学数学レベルなので、高校数学から怪しい人は先にそちらを固めてからがいいかも。

統計学のための数学入門30講

統計学のための数学入門30講 (科学のことばとしての数学)

統計学のための数学入門30講 (科学のことばとしての数学)

統計学に必要な数学の知識が一通りまとまっています。

◆プログラミング・ライブラリの知識が足りない人

Python使ったことないな、ライブラリよく知らないな、という人は、自分で実際に手を動かしながら、コードの書き方とかライブラリの使い方を学ぶのがいいと思います。

paizaラーニングのPython入門

paizaラーニング
paizaでは、プログラミング未経験者・初心者向け学習サービス「paizaラーニングを公開しています。

paizaラーニング」では、今まで有料だった「Python入門編」が、今月から【全編無料】となりました。Pythonを学びたい人はぜひ使ってみてください。

C言語JavaScriptSQL、HTML/CSSPythonJavaPHPRubyなど、ほかにもプログラミング初心者でも動画で学べる入門レッスンが多数あります。

Pythonの公式ドキュメント

Pythonは公式のチュートリアルも充実しているのでやっておくといいですね。あと、前述もしましたがブラックボックスじゃ意味がないので、Pythonの使い方でわからないことが出てきたらドキュメントをあたってみましょう。
www.python.org

◇各ライブラリのチュートリアル

PythonのWebフレームワークDjangoや、数値計算ライブラリのNumPyは当然として、データ分析に便利なpandasとか、scikit-learn、TensorFlow、matplotlib、Theanoなどなど(ほかにもたくさんあります)、機械学習によく使われているライブラリは公式チュートリアルなどをやってみて、何ができるか、どんな場面で使うと便利なのかを知っておいたほうがいいでしょう。

Home | djangoproject.jp

NumPy — NumPy

Python Data Analysis Library — pandas: Python Data Analysis Library

scikit-learn: machine learning in Python — scikit-learn 0.19.1 documentation

TensorFlow

Matplotlib: Python plotting — Matplotlib 2.1.1 documentation

Welcome — Theano 1.0.0 documentation


ちなみに、Pythonの環境構築やNumPyのチュートリアルについては以前このブログでも書いたので、興味のある方はご覧ください。
paiza.hatenablog.com

paiza.hatenablog.com

◆データベース・データマイニングの知識が足りない人

データマイニングについては、NumPy、pandas、matoplotlibなどを使って、実際に自分でやってみるのが一番です。

人口分布など一般的なオープンデータを拾ってきたり、ライブラリに用意されているサンプルデータや自分の興味のあるデータを使ってみるといいでしょう。以前書いたこちらの記事では、paizaのユーザーがスキルチェック問題を解いた際のデータ(っぽく作ったダミーデータ)を分析してみましたし、
paiza.hatenablog.com

こちらの記事では(グラフ描画して可視化するためのFacetsを使った記事ですが)、身近なところで都内の放置自転車数のデータを使っています。
paiza.hatenablog.com


あとSQLが苦手な人は、勉強しましょう。「paizaラーニング」には「SQL入門」もあります。
paizaラーニング

機械学習の基礎知識が足りない人

初心者が機械学習の基礎知識について学ぶには、このあたりのサイトやスライド、書籍がいいでしょう。

CourseraのMachine Learningコース

www.coursera.org
Courseraというオンライン講座でスタンフォード大学の先生によるMachine Learningコースが無料受講できます。

◇書籍

ゼロからというタイトルですが、Pythonの知識がある人向けのディープラーニング入門書です。

はじめてのパターン認識

はじめてのパターン認識

はじパタは線形代数や統計など数学の知識がある人向けのパターン認識入門書…という感じかと思います。

パターン認識と機械学習 上

パターン認識と機械学習 上

統計的学習の基礎 ―データマイニング・推論・予測―

統計的学習の基礎 ―データマイニング・推論・予測―

  • 作者: Trevor Hastie,Robert Tibshirani,Jerome Friedman,杉山将,井手剛,神嶌敏弘,栗田多喜夫,前田英作,井尻善久,岩田具治,金森敬文,兼村厚範,烏山昌幸,河原吉伸,木村昭悟,小西嘉典,酒井智弥,鈴木大慈,竹内一郎,玉木徹,出口大輔,冨岡亮太,波部斉,前田新一,持橋大地,山田誠
  • 出版社/メーカー: 共立出版
  • 発売日: 2014/06/25
  • メディア: 単行本
  • この商品を含むブログ (5件) を見る
いわゆる黄色い本とカステラ本です。どちらも機械学習分野の定番として有名な書籍ですが、全く初心者向けではないので、読んで理解するにはそれなりの前提知識が必要になってきます。

内容が網羅されているぶん、ぶ厚くて値段も高いので、ここまで書いてきたような分野の勉強が一通り終わって、紹介してきた書籍も理解できて、「さらに詳しい内容を勉強したい」とか「実務で機械学習やることになったので本腰入れて学びたい」という段階にきたときに手を出すくらいでいいでしょう。それでも読んでいて「わからない…」というところは出てくると思うので、そんなときは立ち戻って復習しながらコツコツ進めていきましょう…。

Kaggle

Kaggle: Your Home for Data Science
Kaggleは、ざっくり言うと機械学習競技プログラミングサイト…みたいな感じです。データと課題(例えば「この人口データを正しく分類してください」みたいな…)が投稿されて、参加者はその課題に合った最適モデル構築を目指して競い合います。

チュートリアルなどをいろいろやってみて、機械学習に慣れてきたらチャレンジしてみると勉強になると思います。

■まとめ

機械学習はハードルが高いと思われがちですが、数学とPythonの知識を固めつつ、チュートリアル的なところから進めていくとイメージも掴みやすいと思います。逆に、自分でコードを書いて実行して結果を見ないことには、いつまでたっても理解できないと思うので、まずは手を動かしてみましょう。

私もときどき勉強がてら、たまにこのブログでPython機械学習に関する記事を書いているので、興味のある方はごらんください。
paiza.hatenablog.com

paiza.hatenablog.com





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

そして、paizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。

スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。

paizaのスキルチェック

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza