20代後半の冴えないエンジニアが転職活動でそれなりの成果を出すためにやったこと
これといって特徴がなく冴えないエンジニアの私ですが、自分の軸に合致した企業に年収アップで転職を決めることができたので、転職活動で考えてたこととか行ったことについて共有して、万に一つ少しでもどなたかの参考になったら本望なエントリです。
職探し
LinkedInとWantedlyを利用しました。前者は基本的にリクルータとの窓口で、後者は企業の採用担当者(スカウト)との窓口として利用しました。
Wantedlyは多いときは日に何通もスカウトが来て有頂天になることができましたが、自分の軸に合っていそうな企業からのスカウトにのみ反応しました。結果的には1社のみ採用フローに進み内定をいただくところまで行きました(諸事情により辞退しましたが)。
LinkedInも毎日毎日様々な企業のリクルータからメッセージとコンタクト申請が来ますが、私はどうせならと英語の練習をかねて日本人じゃないリクルータ4名ほどに転職活動をお手伝いしてもらいました。電話する時は毎回緊張したけど、英語を話す良い機会になったし今では良い思い出です。リクルータの数4名と言うのはちょっと多いかもしれないですが、メリットデメリットあるかなと思います。
メリット
- 他社が知らないユニークな求人がもらえたりする(L社とかの大手の求人は大体どこもかぶる)
- 英語を話す機会を増やせる(これは私個人に限る)
デメリット
- 時間と手間がかかる
- 面接日程の調整が難しい(内定承諾の期限ために他社の面接を辞退せざるを得なかった)
あと今回、リクルータ経由と直接企業へ応募するフローを両方とも経験しましたが、リクルータ経由の大きなメリットとして「不採用の理由を聞くことができる」というのがあることを知りました。直接応募の場合も会社によっては教えてくれるかもしれませんが、理由については公開できない的な記載がメールにあったりします。私が今回直接応募して不採用だった企業はどこも理由を教えてはくれませんでした。
職務経歴書
以前海外の企業に応募した際に英語のレジュメを作成していたので今回も英語のものを利用しました。日本語の経歴書も欲しいと言う企業があったのはダルかったですが、いまどきのイケてるIT企業なら外資系じゃなくても英語のレジュメを受け取ってくれるので大丈夫です。
上記のエントリを書いた時は正直良い結果が得られなかったので、今回は以下のサイトを参考にして以前のレジュメをブラッシュアップしました。
LifeClever ;-)Give your résumé a face lift
レジュメは内容が一番大事なのはもちろん言うまでもないんですが、上記のサイトではレジュメの「見た目」についての考察とアドバイスが述べられてます。「まずは」毎日多くのレジュメを見てる採用担当者の目に止まることが大事ということですね。こちらを元に作成したレジュメのテンプレがこちらです。
Resume Template - Google ドキュメント
あの誰もが知るグローバル大企業G社のレジュメスクリーニングを通過することができましたし、他にもこのレジュメでスクリーニングに落ちることはほぼなかったので、ある程度信ぴょう性のあるレジュメなんじゃないかなと思います。
試験・面接対策
大学でコンピュータサイエンスを専攻していなかったためまずは基本的な勉強から行うために本屋で吟味して以下の著書を購入しました。今回は転職活動の試験・面接対策が趣旨のため経営などのトピックはスキップして技術的な知識のみを勉強しました。既にCSの知識がある人は全く無用です。この本で基本を掴んだのちに次の著書でより試験対策にフォーカスしました。
平成30年度 イメージ&クレバー方式でよくわかる栢木先生の基本情報技術者教室 (情報処理技術者試験)
- 作者: 栢木厚
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
データ構造とアルゴリズム問題の対策として利用したのは言わずと知れた?以下の著書。Cracking the Coding Interviewという米国ではおそらく相当有名な(ベイエリアのYoutuberの動画でよく見る)著書の日本語訳版です。2017年の年初に1社だけ筆記試験を受けた際にこの類の問題がボロボロだった経験から対策が必要と思いこの著書を購入して勉強しました。とても分厚い内容で前半の方しかやる事ができませんでしたが、その後筆記試験でもそれなりに回答する事ができるようになりました。
世界で闘うプログラミング力を鍛える本 ~コーディング面接189問とその解法~
- 作者: Gayle Laakmann McDowell,岡田佑一,小林啓倫
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/02/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (6件) を見る
その他のTips
面接前はカフェインを摂取する
カフェインを摂取すると頭が良く回ることが科学的に?立証されてるらしいです。30分程度で効果が表れるみたいです。私も面談の前はコーヒーを飲んでから臨むようにしてました。
面接は可能ならば午前中に入れる
たまたまかもしれませんが午前中に受けた面接は総じて結果が良く、夜受けたものは良くありませんでした。仕事後だと疲れが顔に出るんでしょうか?w
一部上場の大手ソーシャルゲーム会社を退職しました。
この度、約6年間勤めた一部上場の大手ソーシャルゲーム会社を退職しました。
といってもこの会社で実際に働いたのはおよそ3年間で、後半の3年間は子会社に出向していました。
思い返せば2012年の新卒採用で未経験の私を採用していただき、様々なチームで色々なプロジェクトに携わらせていただきました。
まさにエンジニア人生はここから始まったという意味では、大変ありがたい6年間だったなと思います。
入社当時の飛ぶ鳥を落とす勢いの雰囲気を肌で感じる事ができたこと、また盛者必衰を内部の人間として見る事ができたことはとても貴重な経験でした。
両社ともに居心地が良く可能ならばずっと勤めたいくらいでしたが、
年齢ももう若くない頃になってしまったのでそろそろコンフォートゾーンから抜け出すべく転職を決めました。
転職活動の詳細については色々と書きたい事があるので別エントリーにしようかなと思います。
2017年振り返り、2018年目標
2017年の目標振り返り
2017年の目標は以下の3つだった。
- お金の勉強をする
- 海外の企業に応募してみる
- 体脂肪率9.9%
お金の勉強をする
未達成。最近話題のビットコインにすら完全に乗り遅れた。コインチェックが六本木ヒルズに大々的に広告出したり出川がCMやったりと、世の中的にすごい流れが来てる雰囲気はびしびし感じる今日この頃、世間から置いてかれてる感ハンパない。ビットコインに限った話ではないけど、来年はこういう話が周りから聞こえてきた時点ですぐにとりあえずやってみる精神で生きていきたい。
海外の企業に応募してみる
達成。ブログに書いた通り、成果は何も出なかったけど、これを契機にキャリアについてより考えるようになったのはよかった。キャリアは定常的に考える必要があると思った。12月から本格的に開始した転職活動にも影響した。転職についてはまた別の機会に書こうと思う。
体脂肪率9.9%
未達成。西麻布に住んでた頃は仕事終わりに気が向いたらジムに行くという感じで習慣化ができておらず、体型もどんどん弛んでいく一方だったけど、10月に引っ越してから、ちゃんと習慣化したほうがいいよなということで、火曜と木曜と土日のどちらかで週に3回ジムに行く習慣をつけることができた。習慣化されるとあとは続けるだけで、体型も次第に絞られてきて、最近は痩せたと言われるようにもなった。以下メモ:
12/31時点
- 体重 75.5
- 体脂肪 15.5
- 筋肉量 60.0
メニュー
- ランニング 10min
- マシンチェストプレス 42kg 16回 x3
- マシンフライ 36kg 16回 x3
- ラットプルダウン 50kg 16回 x3
- レッグレイズ 35回 + 20回
- トーソローテーション 50kg 16回 x3
- ランニング 30min
2018年の目標
コンピュータサイエンスの基礎を修了する
海外就職には必須と感じているコンピュータサイエンスの学士相当の資格を取得するために、海外でも通用しそうなオンライン講座でコンピュータサイエンスの基礎を修了する。 Udacityを考えてるけど、一応他とも比較検討してみてどのコースを受講するか決める。
ブログを12回以上書く
2017年は9記事しか書けなかったので、2018年は最低でも1ヶ月に1記事くらいは書く。
構想中のサービスをリリースする
転職活動に入る直前に構想ができてからまだ開発に入れてないので、来年は開発してリリースする。 このサービスが完成したら、けっこうアッと世を言わせるものになると思ってワクワクしてる。
体脂肪率9.9%
週3日の朝ジムは継続しつつ、有酸素運動足りてないと思うので、自宅からお台場とかまでのランニングをメニューを加える。
総括
2017年は総じて自分のキャリアについて考えさせられる年になった。今の会社で6年間一生懸命働いてきたつもりだったけど、いざ転職を考えた時に自分の特徴や売りみたいなものがパッとしないということを痛感させられた。そういう働き方をしていたんだということが悲しくなった。一番大事な20台半ばのこの時間はもう戻ってこないんだという虚無感のような感情さえ湧いた。もう28歳になり決して若くない年になってしまったので、とにかくなるべく早く手遅れになる前に今のコンフォートゾーンを抜け出してアクションを起こす。2018年は人生で一番激動の一年にしたい。
Rails 5でAPIをさくっと作る方法
Rails 5のAPI専用モードでAPIのベースをさくっと作ってみたので備忘録として。
Rails開発環境の構築
Railsの最新バージョン(5.1.4)
$ gem install rails
...
12 gems installed
APIアプリケーション作成
$ rails new scribbles_api --api ... RubyDep: WARNING: Your Ruby is outdated/buggy. RubyDep: WARNING: Your Ruby is: 2.3.0 (buggy). Recommendation: upgrade to 2.3.1.
rubyのバージョンアップ
$ rbenv install 2.3.1 Downloading ruby-2.3.1.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.bz2 Installing ruby-2.3.1... BUILD FAILED (OS X 10.12.6 using ruby-build 20160602) Inspect or clean up the working tree at /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497 Results logged to /var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497.log Last 10 log lines: Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./miniruby Expected in: /usr/lib/libSystem.B.dylib dyld: Symbol not found: _utimensat Referenced from: /private/var/folders/tz/_ldn35g52dl43l019mrzqfq00000gn/T/ruby-build.20171014151748.9497/ruby-2.3.1/./minir uby Expected in: /usr/lib/libSystem.B.dylib make: *** [.rbconfig.time] Abort trap: 6 make: *** Waiting for unfinished jobs.... encdb.h updated
https://github.com/rvm/rvm/issues/3744
再度インストール
$ xcode-select --install $ rbenv install 2.3.1 ... Installed ruby-2.3.1 $ rbenv local 2.3.1 $ rbenv rehash $ gem install bundler ... 1 gem installed $ bundle install ... Bundle complete! 8 Gemfile dependencies, 49 gems now installed.
API作成
scaffoldでモデル・コントローラ作成
$ rails g scaffold User field1:type field2:type
ダミーデータ作成
以下の記事を参考にさせていただきました
Gemfile
# seeds gem 'enumerize' gem 'activerecord-import' group :development, :test do gem 'faker' gem 'gimei' end
lib/tasks/seed.rake
Pathname.glob(Rails.root.join('db/seeds/*.rb')) do |path| desc "Load the seed data from db/seeds/#{path.basename}." task "db:seed:#{path.basename(".*")}" => :environment do load(path) end end
db/seeds/user.rb
# coding: utf-8 # Create dummy users # Male users = [] 50.times do |no| gimei = Gimei.male users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.male.value, ) end # Female 50.times do |no| gimei = Gimei.female users << User.new( user_hash: SecureRandom.uuid, nickname: gimei.katakana, email: Faker::Internet.email, password: Faker::Lorem.characters(45), gender: User.gender.female.value, ) end # Bulk insert User.import users
ここまでやるとrakeのseedタスクがこんな感じ
rake -T db:seed rake db:seed # Loads the seed data from db/seeds.rb rake db:seed:user # Load the seed data from db/seeds/user.rb
あとは実際に実行してUserのダミーデータを作成
$ rake db:migrate $ rake db:seed:user
rails routes確認
$ rails routes Prefix Verb URI Pattern Controller#Action users GET /users(.:format) users#index POST /users(.:format) users#create user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
ローカルサーバ起動
$ rails server => Booting Puma => Rails 5.1.4 application starting in development => Run `rails server -h` for more startup options Puma starting in single mode... * Version 3.10.0 (ruby 2.3.1-p112), codename: Russell's Teapot * Min threads: 5, max threads: 5 * Environment: development * Listening on tcp://0.0.0.0:3000
curlで動作確認OK
$ curl "http://localhost:3000/users/1" {"id":1,"user_hash":"3c929a28-3583-45a8-a71d-82295a2a6a3a","nickname":"タムラ コウタロウ","email":"vada@borerherman.com","password":"0pm8iatqkbk3n7x7vnxofwskk0aws5oyfvvj62r5y7nop","gender":"male","created_at":null,"updated_at":null}
iOS 11からNSLocaleの仕様が変更されたらしい
使用言語の設定が日本語のデバイスでしか利用できないサービスで、iOS 11にアップデートしたら動作しなくなったという問い合わせが届いたので調べてみたら、どうやらiOS 11からNSLocaleの仕様が変更されたらしいことが分かった。
NSLocale.current.identifier
iOS 10以前はjp_JP
で取得されていたものが、iOS 11ではen_JP
で返ってくるケースがある。
ググってもあんまり盛り上がってないのがちょっと不思議なんだが、唯一見つけた内容がこちら。
抜粋すると
- iOS 10以前は
[NSLocale currentLocale]
はアプリのローカライズは関係なく端末の言語設定を直接参照していた - iOS 11において
[NSLocale currentLocale]
はアプリのローカライズしてる言語しか返さなくなった - もしアプリが英語しかローカライズしてない場合(デフォルト)は、端末でどんな言語を設定しても
currentLocale
は英語しか返さない
実際に手元で検証した結果もまとめてみた。
iPhoneの使用言語設定 | アプリのローカライズ | NSLocaleLanguageCode |
---|---|---|
1. 日本語, 2. 英語 | English | en |
1. 日本語, 2. 英語 | English, Japanese | ja |
1. 日本語, 2. 中国語 | English | en |
1. 日本語, 2. 中国語 | English, Japanese | ja |
1. 日本語 | English | ja |
stackoverflowで指摘されてる通りの結果になったことが分かる。
公式のリンクはまだ見つかってないようだが、検証結果から見てもどうやら本当ぽい。
実際の検証結果から見ると、iPhoneの使用言語が1つしか選択されてない場合はローカライズされてなくてもその言語が返ってくるぽい。紛らわしい。
つまり端末の設定言語をロジックで利用するようなアプリは、ロジックの対象にしてる言語がアプリでローカライズされているかをiOS 11からは注意する必要ある。
今更ぽいけどJenkinsのPipelineの環境構築してみた
仕事でiOS SDKのテスト・ビルドをJenkinsでGithub Pull Request BuilderとかBitbucket Pull Request Builderとかのプラグイン使いながらなんとか構築した途端にJenkins Pipelineの存在を知ってしまったので軽く落胆しながらもローカルのMac PCで動かすまでの環境構築をしてみました
Jenkinsインストール
Homebrewでインストールしてみる
$ brew search jenkins homebrew/versions/jenkins-lts jenkins jenkins-job-builder Caskroom/cask/jenkins-menu $ brew install jenkins ==> Using the sandbox ==> Downloading http://mirrors.jenkins-ci.org/war/2.54/jenkins.war ==> Downloading from http://ftp.yz.yamagata-u.ac.jp/pub/misc/jenkins/war/2.54/jenkins.war ######################################################################## 100.0% ==> jar xvf jenkins.war ==> Caveats Note: When using launchctl the port will be 8080. To have launchd start jenkins now and restart at login: brew services start jenkins Or, if you don't want/need a background service you can just run: jenkins ==> Summary 🍺 /usr/local/Cellar/jenkins/2.54: 7 files, 69.9MB, built in 16 seconds
Jenkins起動
とりあえず動作確認したいだけなのでjenkinsコマンドで起動してみる
$ jenkins [~] Running from: /usr/local/Cellar/jenkins/2.54/libexec/jenkins.war webroot: $user.home/.jenkins ************************************************************* ************************************************************* ************************************************************* Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: ******************************** This may also be found at: /Users/toru.furuya/.jenkins/secrets/initialAdminPassword ************************************************************* ************************************************************* *************************************************************
ブラウザでlocalhost:8080にアクセスして推奨プラグインをインストールする
Jenkins Job作成
新規ジョブ作成からGithub Organizationsを選択してジョブ作成する
Scan credentialsは追加ボタンからGithubのusername/passwordを入力して新規作成する。 Credentialが不正だとInvalid的なメッセージが出てくるので分かりやすい
Jenkinsfile作成
2通りの文法があるらしい。今回はとりあえず最近追加された方のDeclarative方式にしといた。詳細はリンクを参照
https://jenkins.io/doc/book/pipeline/jenkinsfile/
pipeline { agent any stages { stage('Build') { steps { echo 'Building..' } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { steps { echo 'Deploying....' } } } }
githubにサンプル用のレポジトリ作成してJenkinsfileをcommit
https://github.com/torufuruya/pipeline-sample
Scan実行
Scanログ見てるとこんな感じのがずらーっと流れてくる。どうやらサンプル用のレポジトリを見つけてくれたぽい
Proposing pipeline-sample Looking up torufuruya/pipeline-sample Getting remote pull requests... 0 pull requests were processed Getting remote branches... Checking branch master ‘Jenkinsfile’ found Met criteria 0 branches were processed (query completed) Done examining torufuruya/pipeline-sample
Scanが終わるとこんな感じでJenkinsファイルを配置したレポジトリが管理できるようになった。超簡単
Github Enterpriseでの利用
Jenkinsの管理 > システムの設定 > GitHub Enterprise Servers を追加する。Nameは任意のものでOkay
Job作成は最初と全く同じ手順で行うけど、Jenkinsのシステム設定を変更したことによりここでProjectsにAPI endpoint
の項目が追加される。でさっき作成したGithub Enterprise用のものを選択して再度Credentialsを作成して完了
Github EnterpriseのレポジトリにJenkinsfile配置してScan実行
Proposing pipeline-sample Looking up toru-furuya/pipeline-sample Getting remote pull requests... 0 pull requests were processed Getting remote branches... Checking branch master ‘Jenkinsfile’ found Met criteria 0 branches were processed (query completed) Done examining toru-furuya/pipeline-sample
後記
めちゃくちゃ簡単。恐ろしく簡単。今までJenkinsのWEB UIでぽちぽちしながらメンテしてたジョブたちがコードで管理されると思うと嬉しさしかない。はやくテストとか実行したい。わくわく
以下のサイトを参考にさせていただきました