らんぼーのエンジニア日記

不定期にサクッと更新していきます

Docker環境でLINE botとYoutubeAPI使って動画検索サービスを作ってみた。

対象者

  • Dockerでアプリケーションを作りたい人
  • 外部APIを使って簡単に何かアプリケーションを作りたい人
  • LINE BOT or YoutubeAPIに興味がある人

完成イメージ

Docker

まずはRailsの環境構築をDockerで行います。

docker docsに記載されている、Railsの環境構築マニュアルを元に作成いたします。

何箇所か自分で変更した部分もあり、コメントを残しています。

Dockerfile

FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
# 文字化けしないように
ENV LANG=C.UTF-8
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

Dockerfileのコマンドを簡単に説明すると、

  • FROMはDockerfileで使用するイメージを指定します。
  • RUNは実行してほしい命令になります。
  • WORKDIRはディレクトリの指定
  • ENVは環境変数の設定
  • COPYは左辺にあるを右辺にコピー。(COPY Gemfile /myapp/Gemfileだったら、ローカルのGemfileをコンテナ上のmyapp/Gemfileにコピー)

他にもコマンドが気になる方は、下記記事が参考になります。

Dockerfileのコマンド - Qiita

Gemfile

source 'https://rubygems.org'
gem 'rails', '~>5'

GemfileをDockerfileと同じディレクトリに作成してください。

また、touch Gemfile.lockで一緒にGemfile.lockを作ってください(中身は空で大丈夫です)

次にdocker-compose.yamlを作ってください。ファイルの中身は以下のようになります。

docker-compose.yaml

version: '3'
# buildし直すのがめんどいので、bundleをvolumeで繋ぐ
volumes:
  bundle:
services:
  db:
    image: postgres # postgresのイメージを使ってDBを作成
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
  app:
    build: . # 同じディレクトリに存在するDockerfileのイメージを使う
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

次に、以下のコマンドでRailsの新規プロジェクトを作成してください!

docker-compose run app rails new . --force --no-deps --database=postgresql

rails newをしたことでGemfileが変わったので、imageを作り直します!

先程、作成したGemfileとは中身が変わっているはずです。

docker-compose build

Railslocalhostで動いていますが、DBのコンテナを使用しているのでconfig/database.ymlを以下のように修正します。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

変更したら、下記コマンドを実行してください。

docker-compose up
docker-compose run app rake db:create

これで、localhost:3000にアクセスしてみてください!

ちなみにopen http://localhost:3000とターミナル上で打てば、localhost:3000にアクセスしてくれます。

f:id:ramboo:20191222151604p:plain

LINE BOTYoutube API

まず、Gemfileにdotenv-railsline-bot-apiを追加します。

Gemfile

 # frozen_string_literal: true

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.7'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.4'
# Use postgresql as the database for Active Record
gem 'pg', '>= 0.18', '< 2.0'
# Use Puma as the app server
gem 'puma', '~> 3.11'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

gem 'rubocop', '~> 0.77.0', require: false

# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use ActiveStorage variant
# gem 'mini_magick', '~> 4.8'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.1.0', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: %i[mri mingw x64_mingw]
  gem 'pry-byebug'
  gem 'pry-doc'
  gem 'pry-rails'
end

group :development do
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'web-console', '>= 3.3.0'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of chromedriver to run system tests with Chrome
  gem 'chromedriver-helper'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: %i[mingw mswin x64_mingw jruby]
#----------------------追加---------------------------------
gem 'dotenv-rails', require: 'dotenv/rails-now' 
gem 'google-api-client', '~> 0.34'
gem 'line-bot-api'
#----------------------追加---------------------------------

この時、必ずdotenv-railsline-bot-apiより上になるようにGemfileに書いてください。 dotenv-rails環境変数をセットするGemより前に置かないと(line-bot-apigoogle-api-client)、環境変数を上手くセットできないからです。

routes.rbを作ってください

 Rails.application.routes.draw do
  post '/callback' => 'linebot#callback'
end

次にlinebot用のcontrollerを作ってください。

ザックリした流れとしては、line-botでテキストを受け取って、そのテキストでYoutubeAPIを叩き(そのテキストでYoutube内を検索し)、該当するYoutubeの動画をレスポンスで返すと言うのが流れです。

linebot_controller.rb

 # frozen_string_literal: true

class LinebotsController < ApplicationController
  # linebotを使うためにrequire
  require 'line/bot'
  # youtube apiを使うためにrequire
  require 'google/apis/youtube_v3'
  require 'active_support/all'

  # callbackアクションのCSRFトークン認証を無効
  protect_from_forgery except: [:callback]

  def callback
    body = request.body.read
    signature = request.env['HTTP_X_LINE_SIGNATURE']

    unless client.validate_signature(body, signature)
      halt 400, { 'Content-Type' => 'text/plain' }, 'Bad Request'
    end

    events = client.parse_events_from(body)
    events.each do |event|
      # 定数は下記参照
      # https://github.com/line/line-bot-sdk-ruby/blob/8963a4c277259b225a766269e9e53040e414b90f/lib/line/bot/event/message.rb#L18
      case event
      when Line::Bot::Event::Message
        case event.type
        # テキストが送られてきたケース
        when Line::Bot::Event::MessageType::Text
        # event.message['text']にユーザーが入力したテキストが入っている
          item_ids = find_videos(event.message['text'])
          start_word = {
            type: 'text',
            text: message_first_text(item_ids, event)
          }
          message = item_ids.map do |id|
            {
              type: 'text',
              # 動画のidを元にYoutubeの動画のリンクを作る
              text: "https://www.youtube.com/embed/#{id.video_id}"
            }
          end

          # 破壊的変更
          message.unshift(start_word)

        # 画像が送られてきたケース
        when Line::Bot::Event::MessageType::Image
          message = {
            type: 'text',
            text: '画像は送れません'
          }
        # スタンプが送られてきたケース
        when Line::Bot::Event::MessageType::Sticker
          message = {
            type: 'text',
            text: 'スタンプは対応していません'
          }
        # その他のケース
        else
          message = {
            type: 'text',
            text: 'テキストを入力してください'
          }
        end
        client.reply_message(event['replyToken'], message)
      end
    end

    'OK'
  end

  private

  # 送られてきたテキストがkeyword
  def find_videos(keyword)
    service = Google::Apis::YoutubeV3::YouTubeService.new
    service.key = ENV['API_KEY'] # 環境変数をセット
    opt = {
      q: keyword,
      type: 'video',
      max_results: 4 # 表示する動画の最大数
    }
    
    # そのkeywordでYoutubeの動画を検索
    results = service.list_searches(:snippet, opt)

    # 検索にヒットした動画のidを配列で返却
    results.items.map(&:id)
  end

  # ヒットしたものがあるかないかでメッセージを変更する
  def message_first_text(item_ids, event)
    if item_ids.blank? # 動画が見つからなかったケース
      "#{event.message['text']}」という検索ワードにヒットした動画は見つかりませんでした"
    else # 動画が見つかったケース
      "#{event.message['text']}」という検索ワードにヒットした動画が#{item_ids.count}件ありました!"
    end
  end

  # 呼ばれる度にインスタンスを生成しないようにメモ化
  def client
    @client ||= Line::Bot::Client.new do |config|
      config.channel_secret = ENV['LINE_CHANNEL_SECRET'] # 環境変数をセット
      config.channel_token = ENV['LINE_CHANNEL_TOKEN'] # 環境変数をセット
    end
  end
end

linebotのアクセスkeyの発行方法

【Rails】1時間ぐらいで簡単にLINEのBot開発をしよう-アンケート集計Bot基礎-【画像付き】 - Qiita

記事が凄く参考になったので、この記事に従ってLINE Developerにアクセスしてアカウントを作ってください。

記事どうり、Webhook送信: 利用するに変更です。

YoutubeAPIのアクセスkeyの発行方法

アクセスkeyは下記の記事どうりにやれば問題ないかなと思います!

qiita.com

harokuにデプロイ

heroku config:set LINE_CHANNEL_SECRET=ここに先程メモしたChannel Secretを貼り付ける
heroku config:set LINE_CHANNEL_TOKEN=ここに先程メモしたアクセストークンを貼り付ける
heroku config:set API_KEY=ここに先程はメモしたAPI_KEY(YoutubeAPI)を貼り付ける

そしてデプロイです。

デバッグ

LINEBOTは一回一回本番へデプロイしないと動作確認ができないです。

でも、それだと大変めんどくさいですよね?

ですので、Ngrokと言うオープンソースを使うといいです!

qiita.com

Ngrokの公式に行っていただいて、無料の会員登録をしてインストールして下さい。

./ngrok http -host-header="0.0.0.0:3000" 3000

でlocalhost3000にアクセスできるようにngrokを起動して、

あとは、上記のQiita記事のようにWebhookのURLを変更してあげれば大丈夫です!

ActiveRecord frist,take,limitの違い

今回はfirst,take,limitの挙動の違いに躓きましたのでまとめました。

間違いなどありましたら、ご教示頂けますと幸いです。

first

前提としてUserクラスが存在するとします。

クエリを見てみると・・・

pry(main)> user = User.first
  User Load (0.7ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1  [["LIMIT", 1]]

orderされています!!!

pry(main)> User.pluck(:id,:name)
=> [[2, "田中"], [1, "佐藤"]]
pry(main)> user.first.id
=> 1
pry(main)> user.first.name
=> '佐藤'

ですので、レコードのIDが昇順になっていなくてもorderしてくれるので最もidが若いものを取得できています。

take

pry(main)> user = User.take 
 User Load (0.7ms)  SELECT  "users".* FROM "users" LIMIT $1  [["LIMIT", 1]]

firstのようにorderはされていません。

pry(main)> User.pluck(:id,:name)
=> [[2, "田中"], [1, "佐藤"]]
pry(main)> user.first.id
=> 2
pry(main)> user.first.name
=> '田中'

ですので、DBの先頭に保存されているレコードがそのまま取得されてしまいます。

limit

pry(main)> user = User.limit(1)
=>  User Load (0.4ms)  SELECT  "users".* FROM "users" LIMIT $1  [["LIMIT", 1]]

limitは引数を指定しないと使えません。

pry(main)> User.pluck(:id,:name)
=> [[2, "田中"], [1, "佐藤"]]
pry(main)> user.first.id
=> 2
pry(main)> user.first.name
=> '田中'

また、limittakeと同じようにorderはしてくれません

pry(main)> User.limit(1).class
=> User::ActiveRecord_Relation

ただfirsttakeと異なるのがlimitは、返り値がActiveRecord_Relationになります。

scopeなどでメソッドチェーンをしたいときは、limitの方がいいかもしれません。

参考資料

http://at284km.hatenablog.com/entry/2016/06/22/025824

ProtocolBuffersでのwrappers.protoの使い方

今回はProtocolBuffersを使用していてデフォルト値に関して苦しんだので、解決方法をシェアしたいと思います。

ProtocolBuffersのデフォルト値

前提としてProtocolBuffersにはデフォルト値が存在します。

文字列 空文字列
バイト列 空バイト列
ブーリアン false(偽)
数値型 ゼロ
列挙型(enum) 定義の最初の値(数値は0)

proto2まではoptionalを使用してデフォルト値を設定していたようですが、proto3からはデフォルトでoptionalが適用されているそうで、何もしなければデフォルト値が入ってしまうということです。

では、protoにデフォルト値を入れたくない場合はどうすればいいのか・・・?

調べたらwrappers.protoを使用する方法に辿り着きました!

wrappers.proto

使い方としては、

  • wrappers.protoをimport
  • 型をProtocolbufのwrappers.proto内で定義されているものにする
import "google/protobuf/wrappers.proto";
 
message  Detailparam {
  google.protobuf.StringValue name = 1; //名前
  google.protobuf.StringValue adress = 3; //住所
  google.protobuf.Int32Value sex = 3; //性別
}

int32,int64,string,boolなど以下で定義されているので使いたい型に指定してあげてください!

https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto

ちなみにgoogle.protobufはpackage名です。

その次はコンパイル!wrappers.protoでラッピングされていればok!

Rubyでの使い方

実装で使用する際には、wrappers.protoのmessageでnewしてあげればok!

User::V1::Detailparam.new(
        name: Google::Protobuf::StringValue.new(value: 'taro'),
        adress: Google::Protobuf::StringValue.new(value: 'tokyo'),
        sex: Google::Protobuf::Int32Value.new(value: 1)
}

nilをいれたいときは

User::V1::Detailparam.new(
        name: nil,
        adress: nil,
        sex: nil
)

にすればデフォルト値が入らず、ちゃんとnilが入ってくれます!

参考記事

Proto2 vs Proto3 - Qiita protobuf typeに値が入っているか確認するにはgoogle/protobuf/wrappers.protoをつかうとよい - 平日インプット週末アウトプットぶろぐ spring5-kotlin-application/task.proto at 970974cbc5c6116178a0088d4c651a9b9aeaf290 · soushin/spring5-kotlin-application · GitHub protobuf/wrappers.proto at master · protocolbuffers/protobuf · GitHub

Ruby Silver合格記を書いたよ

こんにちは、らんぼーです。

 

5月中盤にRuby Silverを受験し、88/100点で合格しましたので

 

今回は合格記的なものを書きたいと思います。

 

Ruby Silverの受験を考えているような人に参考になるような内容になればと思います!

 

 

どれくらい勉強したか

Ruby Silver自体の学習は1ヶ月半ほどやりました。

学習時間的には20〜30時間くらいですかね。

 

当時、仕事が忙しくてRuby silverの方に学習時間をあまり裂けませんでした。(言い訳)

やったこと(本、サイト)

 

基本的には問題を解く→解説を見る→ググる→問題を解く

のサイクルで勉強をしていました。

Ruby技術者認定試験合格教本

 

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応) Ruby公式資格教科書

 

Ruby技術者認定試験(Ruby Silver/Gold)に対応している唯一の教材です。

 

僕はまず問題を解いて、間違えた箇所に関してはこのテキストで復習をしてまいました。

 

このテキストの問題が大体9割くらい解けるようになるまで、繰り返し問題を解いていましたね。

 

REx Ruby Examination

f:id:ramboo:20190518144220p:plain



https://rex.libertyfish.co.jp/exam_histories

 

オンライン上で予想問題を実際に解くことができるサイトです。

 

このサイトが一番多く使いました!

 

ミニツク

f:id:ramboo:20190518144404p:plain

ここも問題が解くことができます。

 

Github上に上がっている問題

f:id:ramboo:20190518144232p:plain


 

https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0

テストに出たこと

 破壊的メソッドか非破壊的メソッドか?

基本的には!が付いていると破壊的メソッドだと思うのですが、試験では!が付いていない破壊的メソッドに関して問われることが多いです。

 

shift
unshift
pop
push
Hash#clear
Hash#update
 

Fileクラス

"a","a+","r","r+","w","w+"の違いをちゃんと理解しているかなど問われました。

 

“r”  読み込みモード
“w”  書き込みモード
“a”  追記モード(addみたいなイメージ)
“r+”  読み書きモード
“w+”  “r+”と同じだが、既存ファイルの場合はファイルの中身が空になる
“a+”  読み書きモード。書き込み位置は常に末尾になる。
 

同じ動きをするメソッド

mapとcollect

selectとfind_all

findとdetect

delete_ifとreject!

 

正規表現

 

正規表現に関しては以下のQiita記事がわかりやすかったです!

 

 https://qiita.com/shizuma/items/4279104026964f1efca6

https://qiita.com/jnchito/items/893c887fbf19e17d3ff9

 

最後に

問題を解いていると、傾向がだいたい掴めるかなと思います。

 

実際に本番の試験でも、今まで解いたことがあるような問題が8割ほど出題されました!

 

なので、沢山問題をこなし傾向を把握し

 

わからない箇所に関しては都度調べていくのが合格への近道かなと思います!

 

後は、他の方の合格記を読むのもオススメです!

以前は課題10が卒業ライン?ポテパンキャンプ卒業生にインタビューしてみた。

先日、会社の先輩でポテパンキャンプ卒業生の方がいるので

 

ランチしながらインタビューしてみたところ、興味深いことが聞けたので記事としてシェアさせて頂きます。

 

今回はその時の記事になります。

 

割とザックリ書いているので許してください笑

 

 

 

自己紹介

インタビューしたAさんの簡単なプロフィールになります。

 

 ・現在28歳

・前職は大手商社でマーケティング

・現在は自社開発企業でRailsエンジニア

・去年の9月にポテパンキャンプを卒業

 

 

エンジニアを目指した理由は・・・? 

Aさん)エンジニアを目指したのは、もともとアメリカのシリコンバレーにいて

 

エンジニアを間近に見ていて、エンジニアのステータスが高くて、なんでも自分のアイデアを形にできるのを見て、かっこいいなって思ったんですよね。

 

自分も将来はサービス作って企業とかできたらなと思っていたので

 

ITがもともと好きだったこともあって、ITのアイデアは浮かぶけど作れないというジレンマがあって

 

エンジニアを雇おうかなと思ったけど、まずエンジニアにならないとエンジニアの気持ちもわからないなと思って

 

まずは自分がエンジニアになろうと思いました。

 

 

ポテパンキャンプを選んだ理由は?

 

・安かったから
Railsを学べて自社開発企業への斡旋があること

・斡旋で転職するとキャッシュバックがあるから

 

 

学んだことは?

 

Aさん)いうて企業もスクールに対して、そんなに期待していないと感じました。

 

それよりも個人で学んで、ポテンシャルや人間性を評価されたと思います。

 

だから個人的にはポテパンに行こうが、テックアカデミーに行こうが、どこ行こうが

 

企業からの評価は一緒。

 

だからこそ値段が他スクールに比べて安価なポテパンキャンプはオススメだと思いますね。

 

どうせプログラミングスクールに行くなら、安いほうがいい。

 

30万に値上げしたけど、他のスクールも値上げしているからまだマシかな・・・

 

良かった点

 

 ・オンラインで受講可能

・他スクールに比べて安価

 

 

悪かった点

 

 ・講師の数と生徒の数があってないためにレビューをされるのが大分遅かった。
・生徒の質が落ちている

 

Aさん)もともと僕の時代はポテパンの課題10まで終了していないと斡旋してもらえなかったんですよね。

 

今は課題4で斡旋。

 

だからこそ、生徒の質が落ちていると思いますね。

 

ポテパンが優秀だったと言われるのは昔の時代のポテパンキャンプ生で、今のポテパンキャンプ生は昔の生徒に比べて、かなり質が悪いと思う。

 

インタビューを通してのまとめ

僕が受講を始めた頃(9月頃)は課題4まで終えれば、斡旋を受けられることになっており、1月頃には課題2を終えてさえいれば、斡旋を受けることが可能となっていました。

 

しかし、今回インタビューしてみて、

 

ポテパンキャンプは以前は課題10で卒業だったということを聞いてビックリしました。

 

Aさんもおっしゃていましたが、

 

たまにポテパンキャンプの卒業生が優秀だと言われるのも、課題10までこなしていた卒業生達が優秀だったということですね。

 

まあ、それでもポテパンキャンプは値上げをしてしまいましたが、

 

他スクールに比べると安価ですよね。

 

個人的にはスクールはどこも一緒で、自分次第だと思っているので、スクールに通いたい人にはオススメのスクールだと思いますね。

 

キャッシュバック制度があるのも嬉しいですしね!

 

↓無料面談に参加してみる↓

お仕事決まれば全額キャッシュバック!転職特化型Ruby実践研修【ポテパンキャンプ】

 

 

  note.mu    

ポテパンキャンプを受講したガチの感想を語る

こんにちは、らんぼーです。

簡単に僕の経歴を紹介すると、

新卒で入社したブラック会社を2ヶ月で退職。
2018年9月 ポテパンキャンプ入校(ビギナーコース)
2019年1月 ポテパンキャンプ卒業
2019年1月 Rails自社開発複数社から内定


といったように4月間に渡り、ポテパンキャンプで沢山のことを学ばせて頂きました。

そのこともあり、転職活動では自社開発企業複数社から内定を頂くことが出来ました。

f:id:ramboo:20190403211833p:plain

ネット上では、プログラミングスクールの情報を調べてもアフィリエイターの記事が殆どです。受講者の感想は埋まってしまっています。

また、特にポテパンキャンプの受講生による評判は見たことがありませんでした。

なので、1個人として正直にポテパンキャンプを受講した感想をご紹介したいと思っています。

ポテパンキャンプを受講するかどうか悩んでいる人の参考になれば幸いです。

ポテパンキャンプを選んだ理由

・ポテパンキャンプ
・侍エンジニア
・テックエキスパート


当時は、どのスクールに入校をするか悩んでいました。

これらのスクールの中で決め手になったのは、

・価格の安さ ・斡旋先が自社開発企業



の2点の理由から選びました。

侍エンジニアもテックエキスパートも、値段は高額。

f:id:ramboo:20190403211745p:plain

ポテパンキャンプHPより)

対してポテパンキャンプはスクールの中でもかなり安価な15万円という金額でした。

早期離職をしてしまった僕はお金がなかったので、価格は大きな検討材料となりました。

※現在は値上げしてしまい、キャリアコース25万、ビギナーコース30万円になりました。

ポテパンキャンプで学んだこと

Rails Tutorial(動画)
・インスタクローンアプリの作成
・Solidusを使用したECサイトの構築(本課題)



インスタクローンアプリはRails Tutorialで学んだことを活かして0→1の作成。

ECサイトの構築に関しては、既存のECサイトがあり、

そのECサイトに対して機能の追加やテストの実装をしていくものになります。

既存のECサイトが、どのように動いているのか?仕様を理解しないといけないので、コードを読み取ることが重要になってくる課題でした。

また、実装後には現役Railsエンジニアが厳しくコードレビューをしてくれるので、大変勉強になりました(LGTMを2人以上から貰えないと次に進めない)

実務においても、0→1ベースの開発より既存のサービスに、機能の追加や修正をしていくことが多いので、ポテパンキャンプの本課題はより実務向きであったと言えます。

ただ実務向きである一方、個人的には難しく感じました。

選考について

  • 書類選考

  • 面談

の二つがあります。

よく面談で何を聞かれましたか?と聞かれるので

参考までに、僕が聞かれたことを載せます。

・なんでエンジニアになりたいのか?
・どんなエンジニアになりたいのか?
・なんでポテパンキャンプなのか?
・現在の学習状況
・1日どれくらい勉強時間を確保できるか?



といったように意欲を確かめるような質問が殆どでした。

人によって異なるとは思いますが、僕が面談に行った際には15分前後で終わり、絶対落ちたと思いました笑

良かった点

・現役Railsエンジニアの方から厳しいコードレビューをして貰えた
・意識が高い仲間達に出会えた
・自走力がついた
・コードを読み取る力がついた



現役Railsエンジニアの方から厳しいコードレビューをして貰えた

現役Railsエンジニアの方から現場基準のコードレビューをしてもらえるのはポテパンキャンプの最大の強みだと思います。

コードレビューはとても厳しいので、中々LGTMを貰えずに進まなかったりしましたが、大変勉強になりました。

意識が高い仲間達に出会えた

スクールという環境を買うことで、転職を共に目指す仲間達に出会うことができました。

仲間がいることはモチベーションの維持に繋がりましたし、今思い返しても出会えてなかったら、ここまでやり遂げられたかというと不安なものがあります笑

自走力がついた

ポテパンキャンプは、手取り足取りを教えてくれるプログラミングスクールではないので、エラーに躓いた際も、わからないことがあるときも

まずは自力で解決することを求められます。

(勿論、その上でわからないことの質問はウェルカムです)

なので、考える力やググる力が非常に身に付いたと思っています。

悪かった点

・挫折する人が多い
・2月から完全オンラインになった
・斡旋先が思ったよりも少なかった



挫折する人が多い

カリキュラムが難しいこと、ある程度の自走力を入校時点から求められるため、挫折してしまう人は多いです。

コードレビューをしてもらうSlackがあるのですが、プルリクエストを送るのは大体同じ人だったり、「もっと人数いたよね?」と思うことが多々ありました。

僕と入校のタイミングが近く、仲良くしていた方で音沙汰なくなってしまった人は何人もいます。

2月から完全オンラインになった

今までは週に1回、オフラインの質問会があったのですが、2月から廃止されてしまいました。

僕はオフラインの質問会で色んな方と出会い、一緒に勉強をしたり、わからないことは質問し合いながら、カリキュラムを進めていたので、正直残念でした。

完全オンラインだと僕は、完走できたか不安ですね・・・

ただ、質問はSlack上でし放題ではあるので、

わからないことがある場合には、何がわからないのか?何をしたのか?どうしたいのか?どの記事を参考にしたのか?を明確にして質問を投げれば、講師の方が答えてくれます。

qiita.com

(質問の仕方に関しての参考になる記事です)

斡旋先が思ったよりも少なかった

僕が受講後に選考に進める企業は30社前後しかありませんでした。

正直、もっと斡旋企業はあると思っていたので残念でした。

ただ、ポテパンキャンプでの斡旋以外にも個人で応募することも可能なので、

ポテパンキャンプでの斡旋にそこまで期待しないほうがいいのかもしれません。

向いてる人/向いてない人

向いている人
・向上心が高い人
・自走力がある人
・安価で転職したい人


向いてない人
・手取り足取り教えて貰いたい人
・オフラインがいい人


要するに、他人に育ててもらうようなマインドを持っている方には、厳しいスクールだと言えます。

ただ、そのような方はエンジニアになるのも難しいと思いますね。

まとめ

ポテパンキャンプに入校して、得たものは

・自走力
・仲間達


だと思っています。

手取り足取りを教えてくれないスクールだからこそ、エンジニアとして働く上で大事なスキルを磨くことが出来ました。

また、ポテパンキャンプのカリキュラムをやり遂げられば、大幅に力はつくと思います。

実際にポテパンキャンプで学んできたことは転職活動で評価させることが多かったです。

何が何でもRailsエンジニアに転職してやるという人にはオススメのスクールだと思います!

質問などございましたら、Twiiterにて気軽にDM下さると幸いです。

↓無料面談に参加してみる↓

お仕事決まれば全額キャッシュバック!転職特化型Ruby実践研修【ポテパンキャンプ】

Twitterアカウント
https://twitter.com/rambolog

note.mu

Webエンジニアに転職したいなら読むべき4冊まとめ

こんにちは、らんぼーです。

 

今回は、未経験からWebエンジニアになるまでに学習した参考書の中でも

 

個人的に学びの多かった本の共有をしたいと思います。

 

Webエンジニアへの転職を目指している人には、参考になる内容となっています!

 

 

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発デバッグ技法まで

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)

 

俗に言うチェリー本です。

 

基本的なRubyの文法から、オブジェクト知識、テストまでと幅広い内容が紹介されている良書です。

 

解説も詳しく、Ruby初心者の方にも理解できるように丁寧に書かれている、とても優しい本だなと思いました。

 

因みに、僕はRails Tutorialを終えた後にチェリー本を学習しました!

 

オススメ:Progate、Rails Tutorialを終えたくらいの人

 

現場で支える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド

 

テンプレートエンジンにSlimを使用していたり、テストはRspecと実務的であると思う一方で、完全初心者には難しいかなと思います。

 

ただ、Railsでアプリケーションを作るにあたっての必要な知識がしっかり詰められている本であることは間違いないです。

 

僕個人としても、かなり勉強になりました。


レベル感的には、Rails Tutoralを終えた人だと理解しやすいと思います!


被っている内容も多いので良い復習にもなるはずです!


オススメ:Rails Tutorailを終えた人

 

Webを支える技術

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

 

Webシステムの実装に必要な基本知識をまとめて紹介している本です。

 

・Webとは何か?

・REST

URI

・HTTP

JSON

RDF

 

といったことが書かれています。

 

Webアプリケーションの作成において重要な知識ですし、実務では必ず必要とされる知識なので絶対読んでおいたほうがいい一冊です!

 

オススメ:Webエンジニアに転職したい人

 

Web技術の基本

イラスト図解式 この一冊で全部わかるWeb技術の基本

 

WebアプリやWebサービスを開発する上で、必要な基本的な技術要素を広く浅く学ぶことができる本です。

 

見開きの右側のページが全て、絵や図で技術を説明するコーナーになっているので、初心者の方でも理解できやすい内容になっています!

 

「Webを支える技術」を読んでみて、ちょっと内容が難しいなって思った人は、是非この本がオススメです。

 

僕自身もこの本は概要を掴むのに、とても分かりやすく重宝しています!

 

オススメ:分かりやすくWebの基本知識を学びたい人

 

 

note.mu