転職ドラフトに参加してみた

噂に聞いていた転職ドラフトに1ヶ月だけ参戦してみた。簡単に説明すると、自分が開発してきたことの詳細をレジュメに記載して、それを見た参加企業がこいつ欲しいと思ったら年収提示付きで指名してくれるってサービス。つまりレジュメ勝負のサービスだね。シンプルに自分の市場価値がどんなもんか知りたかったのといいオファーがあれば行こうかなくらいの気持ちで参加してみたので、興味ある人の参考になればと思い書いていくよ。

自分のスペック

参加当時はエンジニア4.5年。ざっとこんな感じ。

  • 小売基幹システムをJavaで3年。設計〜運用保守まで。バックエンド中心。
  • AI系自社サービスをPythonで開発。1.5年くらい。クラウドインフラとバックエンド中心。割とモダンなAWSアーキテクチャで作ってた。機械学習モデルは作れない。
  • 大学院で統計学勉強してた。

レジュメどうやって書いたか

ネットで良さげなレジュメ見つけて、それをテンプレートにして書いた。これやってれば多分審査は通るし、そんなに大外しすることもないと思う。技術的なことは割と細かめに書いて、あとは文章としてわかりやすければ問題なさそうな気はした。

結果

とある1ヶ月だけ参加して13件指名いただきました〜。感謝!100〜200万upの提示がほとんどでホッとした。年収の提示額としては平均付近っぽい。
評価いただけたポイントとしては、クラウドとバックエンドを触れる幅の広さ、統計学機械学習が多少わかることらしい。機械学習モデルが作れたり、大量のデータ捌いた経験があったりしたら、もうちょっといけそうな感じはあったなぁ。
で、指名後のフローは、13件の指名→5社とカジュアル面談→2社選考に進む→1社内定 だった。指名もらえたからって受かるわけではなく、1社は普通に落とされた😂

メリット・デメリット

メリット

現在の年収に縛られずに年収提示してくれる
これが一番かな。雇われの身である限り、年収って能力よりどこに所属しているかで大きく差が出るから、もらえない会社にいる人ほどこのサービスはうれしいと思う。

スキルのミスマッチが発生しづらい
レジュメは結構読んでくれているっぽいからミスマッチは起きにくそうだった。

デメリット

参加企業に偏りがありそう
自社開発系企業が中心で、参加していない有名企業もそれなりにあると思う。もっと広範囲で自分に合った会社を探したい場合はエージェント使った方がよさそう。

指名されたら行きたくなっちゃう
これは自分だけかもだけど本来そこまで興味なくても指名されたら行きたくなっちゃうので、自分の軸がブレブレになりがち。当たり前だけど、自分の転職軸は忘れないようにしておくべき。

感想

ということで転職ドラフトでとあるメガベンチャー から内定いただけた。その会社はなんとなく好きじゃなかったけど、技術的に面白そうでフィーリングも良かったから多分行く。自分で転職活動してたら受けてなかっただろうなぁ。学歴、会社名に左右されずに経験で評価してもらえるから非常にいいサービスだと思った。ただ、全部オンラインで完結するとはいえやっぱ転職活動ってダルい…。疲れた…。とりあえず内定もらえたからご褒美にswitch買ってマリオカートやるぞ〜。

ベンチャーに転職して1年たった

去年の4月に一部上場IT企業から設立数年のベンチャーに転職して丸一年たった。大きい会社もベンチャーも経験した人ってどれくらいいるのかな。そんなに多くはない気がする。自分としては規模の違う2社経験して結構な気づきを得たし、いい選択をしたなと思った。この一年間で感じたことを自分の語りたいトピックで書いていく。

大きい会社の良さに気づけた

失って初めて気づく的なあれです。大きい会社なら大差ないと思うけど、前職ではあらゆることが仕組み化されていた。設計はこのフォーマットで、開発はこの社内フレームワークを使って、テストはこの社内ツールを使うみたいな会社独自のやり方が確立されていた。俺この仕組みの中じゃなきゃ何もできないじゃんっていうのが当時はすごい嫌だった。
いざベンチャーに来てみると予想通り仕組みなんてものはなかった。全部自分で決められるし、世の中ではどういうやり方がされているのか調べるのも楽しい。大きい会社じゃあんま体験できないと思う。一方でどうすればベターな選択なのか自分の知識じゃよくわからんこともある。その時に前職で不満を垂れていたあの仕組みも、こういう良さがあったんだなってことに気づけた。また大企業に戻ることがあるかもしれないけど、その時は前とは違う視点で見れるはず。どうせならいいところを見て働きたいよね。

漠然と自信がついた

これって転職あるあるなのかな?わからんけど規模の違う2社で自分の力が通用したことで漠然とした自信がついてきた。前職では特別秀でてはいなかったけど普通に評価はしてもらっていた。でも自分の中では仕組み化された中で one of them としてこなせるだけだなぁと思ってた。実際わからないことがあったら先輩に頼りまくってたし。これはこれで大事な力だろうけど、自分で乗り越えられる個の力を持っている先輩に憧れまくってた。
まぁそんな感じで個の力が欲しくてベンチャーに来たわけだけど、一年たって結構ついたと思う。大体1人もしくは少人数での開発かつフルリモートで、問題が起きても人に頼らず自分でなんとかしなきゃいけなかった。これでエンジニアに必要な心折れずに完遂する力が鍛えられたと思う。
一企業の1人のエンジニアとしてだったら、レベルの高い会社でも地道にやってたらそこそこ活躍できるんじゃないかと思えてきた。自惚れているだけかもだけどいつか挑戦してみたい。

やりたいことが増えてきた

ビジネス系YouTuberが「人生を変えたいなら転職しろ」的なことを言っているのをちょいちょい見る。それを見て転職したわけではないけど、実体験からしてたぶんガチだなぁと思った。周りからしたらただ転職しただけなんだろうけど、自分の中では考え方が変わってやりたいことが増えてきた。
数年前まではただただなんとなく生きていた。川にぼーっと浮かんで流されるまま進んできた感じ。転職を通して、自分が行動すれば見える景色を変えられることに気づいた。たぶん留学とかいく活発な人は大学生の時点でそういうのわかってたんだろうな。もしかしたらこれが転職の一番の収穫かもしれない。

さいごに

前職で順調に行っていたと考えると正直年収はかなり下がったので悪い面もあるけど、それをひっくるめてもベンチャーに来てよかった。幸いIT業界は実力さえあればいくらでも巻き返せるしね。次の目標が見えてきたのでいつまでお世話になるかわからんけど、引き続きがんばるぞ。ではまた!

10年ぶりにセンター英語解いた

高校生にとっては受験シーズン真っ只中、自分にとっては10年前の話。自分と同い年で阪大卒の「はなおでんがん」ていうチャンネルが好きなんだけど、最近の動画で共通テストを解くって企画やってて自分もやりたくなったからやってみた。
というものの実際に解いたのは共通テストではなく、自分が10年前に受けた2011年のセンター試験。英語のみ。英語力はあの頃がピークだと思っているんだけど、実際今とどれくらい差があるのか試してみたくて当時のものにした。当時どれくらいの点数だったかというと、筆記が170点前半、リスニングが8割ぐらいだった気がする。さすがに勝てることはないと思うけど、いざ勝負!

今の英語学習状況

去年あたりからちょいちょい英語の勉強は始めている。具体的にはこんな感じ。

  • 風呂で毎日ポッドキャストシャドーイング(2ヶ月くらい)
  • English Grammar in Use をざっと流し読み済み
  • 日本語記事がない時に英語のドキュメント読む(IT関連)
  • たまに海外エンジニアのYouTubeみる

自分の感覚としては最低6割、7割とれたらいいなぁと思っていた。

結果

筆記:170点、リスニング:34点
意外とできてしまった。もしかしたら思ってるほど現役時代と差がないのかも。2011年のセンター筆記は大問が6つあって、大問1は発音、大問2は語彙と文法、大問3以降は文章の読解系になっている。失点のほとんどが大問の1と2で、3以降は解き忘れを除いて1ミスだった。語彙と文法は覚えているはずがないのでまぁしゃあなしかな。読解できたのはシャドーイングのおかげなのかな。割とこれで英語脳は戻ってきた気がする。だとしたらリスニングもっと欲しかったなぁ。

これからの英語学習

今年はオンライン英会話をやりつつ、TOEICで高得点を狙っていくことにした。正直試験の類は英語習得の最短ルートではないし、英語を必要とする環境にぶっこむのが一番なんだけど、現状用意できそうにないので今年はこの目標にした。TOEICが一番簡単でゲーム感覚でモチベーション保てそうだから。3月までにITの勉強を落ち着かせて、今年は英語をがんばることをここに宣言しておく。ではまた!

2020勉強したこと

もうすぐ2020年が終わってしまうので、今年やった勉強を振り返っていこうかと。IT業界4年目だけど、1年目のスーパーやる気むき出しモードの時と同じくらい勉強した気がする。今年の4月に転職したからまた当時のやる気が復活した感ある。いろんな分野を勉強しようと思っていたけど、基本的にはエンジニア関係のことしか勉強してないっす。勉強したことブログでアウトプットしていくつもりだったけど、Notionに出会ってからそこにまとめてたのでアップしなくなっちゃった。実はこんなこと勉強してましたの発表ということで、れっつらごー


1月〜2月

全く勉強せず。前職最後の仕事が自分のスキル的にちょっときついものがあり、やる余裕がなかったっす。

3月

会社辞めて有給消化期間だったけどコロナ襲来により旅に出ることができず、家で勉強してた。くそぉぉ。2019年にOS自作入門って本を読んで、CPUとか低レイヤのことが気になっていたので時間がある隙に以下の本を読んだ。

作って学ぶのが一番やろってことで作った。今テック界隈ではM1チップが熱いけど、実は俺もCPUつくったことあんだぜっていう優越感にひたれる。わりとポップにCPUの仕組み学べるのでおすすめ。実際に作ったやつ載せておく。(汚ねぇ) f:id:fourthgrd:20201219214041j:plain:w300

有名な本だね。CPU、VMコンパイラらへんをざっと実装しながら学べる。本来全部実装するとかなり力になると思うが、そこまで時間かけていられなかったので半分くらい実装して、残りは他の人のコードを見て理解した。

4月

半分くらいは上の本をやっていて、残りはAWSとPyhonの勉強をした。この月に転職したのでそこで使う技術のキャッチアップ。PythonはUdemyのコースでやったんだけど、Udemy最高だね。この後Udemy多用した。

5月

GWに前職同期と遊びでiOSアプリの開発をした。2人でやったんだけど、どちらもiOS初心者で勉強しつつだった。ネイティブアプリの作り方を学べたってのは良かったが、あんまり好きじゃないかなぁ。
会社関連で入門監視 も読んだ。他にもなんかやってた気がするけど忘れた。

6月

新卒の研修ぶりくらいにフロントエンド開発をすることになったので、その辺の復習とvue.jsのキャッチアップ中心だった。これもUdemyでやったかな。

7月

この辺で引っ越したのでそんなに勉強してなかったはず。なんか動画編集とか勉強してた気がする。忘れた。

8月

今の会社の自分が引き継いだコードがしっかりオブジェクト指向設計されたコードで、この辺を勉強したくて読んだ。いい本ではあったが、この辺は経験で学んでいくところが大きいかなって感じ。
他は仕事関係で画像処理パッケージのopencv、Amplify、serverlessFW、circleciとかその辺の勉強をしていた気がする。

9月

なぜか進撃の巨人にはまりあまり勉強してなかった気がする。さすがになんかやっていたはずだが忘れた。

10月

普段ずっと一人で開発をしていて知識のアップデートがなくなってきたので、プロのコードを読みたくてUdemyでpythonでのブロックチェーン開発コースを受講。シリコンバレーエンジニアの酒井潤さんのYouTubeを好きでよく見ているが、その方のコース。ブロックチェーンの仕組みもコーディングしながら学べて面白かった。
あとはAmazonがお薦めしてきたLinuxで動かしながら学ぶTCP/IPネットワーク入門 がとても気になったので読んでみた。TCP/IPの本は読んだことあるけど、実際に手を動かせるのでこの本が読んだ中で一番よかったかな。

11月

訳あって機械学習エンジニアを目指し始めたので以下の本でキャッチアップ。前の記事にも書いたがkaggleのやる気が出ず、いったん機械学習の勉強はやめることにした😂
読んだ本はどれもよかった!

12月

酒井さんのUdemyのアルゴリズムコースもちょっと見つつ、基本的にはtwitterで話題だったこの本 を中心にやった。競プロは興味ないけどエンジニアとして基本くらいはやってみようと思って読んでみた。AtCoderとかの問題が章末問題にあったから解いたけど、普通にむずかった。再帰処理とか普段あまり書かないコードを実装できたのがおもしろかった。読み終わって達成感あったけどめちゃめちゃ頭疲れるし、コーディング面接でもない限りアルゴリズムはもういいかなって感じ。

  • DNSとセキュリティ関連

会社でDNSとかTLS周りで問題が発生して、その辺ちゃんと勉強したことなかったので周辺知識をキャッチアップ。DNSをはじめようSSLをはじめよう を読んだ。読んでたらセキュリティ周りもうちょっと深くやりたくなって暗号技術入門 とUdemyのホワイトハッカー系のコースを購入。今着手中なので今年中に終わらす予定。

まとめ

必要性 or 好奇心駆動で勉強する分野を選んできたけど、なんだかんだで学部レベルのコンピュータサイエンスはだいぶ抑えたんじゃないかな。母校の情報学科のカリキュラムを見てみたけど、大体やったことありそうだったし。まぁ他の国ではCS卒業生がエンジニアをやるものなので、やっと最低知識が身についたって感じなのかな。
社会人4年目にしてやっとお金の使い方を見直して、無駄遣いをしないようにしている。けど学習に使う金はケチらないようにしていて、ちょっとでも興味あった本とかUdemyは即購入した。ちょっとやっただけみたいなのもあるけど、総じて後悔はしていないので今後もケチらず使っていく。
1日1日にフォーカスするとこんなもんしか進まんのかって思うけど、一年振り返ると割とやったなって思う。ということで、合格点はあげられる年だったかなー。ではまた!

【英語学習】とりあえず自己紹介してみる

前回の記事に書きましたが、英語学習を始めました。少し前から始めていて今はやり方を試行錯誤中ですが、アウトプットの初めの一歩として自己紹介してみます。
普通に自己紹介しても面白くないので、僕の好きなYouTuberを紹介したのちに英語で自己紹介していきます。Let's get started🤓

英語学習おすすめYouTuber

英語学習系のYouTuberについてそんなに調べたことすらないですがおすすめを紹介させてください。「Kevin's English Room」というチャンネルです。中学生までアメリカで育ったケビン君と日本人2人の計3人のチャンネルです。ちょうど今週登録者10万人いってましたね👏🏼
どんな感じのチャンネルかというと、ネイティブでは実際にどう英語が使われているかを日本人的疑問をぶつけながら紐解いていく企画が多いです。とてもわかりやすいですし、見ていて面白いです。正しい文法を解説するのではなく、カルチャーイングリッシュを教えてくれる感じです。僕は英語勉強というより3人の人柄が好きで見ているのですが、勉強になる部分も結構あります。
Kevin's English Roomに自己紹介のテンプレートを作ろうという動画があります。これに沿って自分なりの自己紹介をしてみます。

www.youtube.com

いざ自己紹介

Hi, everyone.
Glad to be here.
I’m Shoyo.
I’m from Japan.
I really like watching comedy show.
But I know only Japanese comedians.
If you know comedians who speak English, please let me know.
The one thing I can’t leave without is comedy.
No comedy, no life.
I’m a software engineer.
I like reading books about Information Technology.
Mac Book is my friend.
Ask me anything.
Really excited meet you all, thanks!

Serverless Frameworkをcircleciで自動デプロイさせる

Serverless Frameworkを使ってサーバレス環境を構築し、circleciでテスト、デプロイの自動化をしていきます。サンプルとしてLamda + APIGatewayのシンプルなサーバレス環境を構築します。Node.js、Serverless Frameworkはインストール済み、AWS CLIも設定済みという前提で進めていきます。ではいきましょう!

Serverless Framework側の構築
サービスの作成

severlessのプロジェクトを作成します。テンプレートとして今回はpython3を使います。他テンプレートがいい場合は公式ドキュメントを参照ください。

$ serverless create --template aws-python3 --path sls-circle-sample
severless.ymlの編集

今回はLamda + APIGatewayのシンプルな環境を構築します。オプションとしてstageを受け取って環境ごとにスタックを作成させます。

service: sls-circle-sample

provider: name: aws runtime: python3.7 region: ap-northeast-1 stage: ${self:custom.env} stackName: stack-${self:service}-${self:custom.env} apiName: api-${self:service}-${self:custom.env} timeout: 30

custom: env: ${opt:stage, 'dev'}

functions: mainfunction: handler: handler.hello name: function-${self:service}-${self:custom.env} events: - http: path: sample method: get integration: lambda-proxy cors: true

これでserverless側の設定は終わりです。この状態でsls deployをすればデプロイされますが、今回はこれを自動化していきます。

テストコードの作成

circleci側の設定をする前にちゃちゃっとテストコードを書いておきます。testsディレクトリを作成して、その中にテストコードを書いていきます。

import unittest

import handler

class TestHandler(unittest.TestCase): def test_hello(self): event = {} result = handler.hello(event, None) self.assertEqual(result['statusCode'], 200)

testsディレクトリ内のテストコードを全て実行させるコマンドを打つため、__init__.pyも作成しておいてください。

circleciの設定

severless.ymlでstageごとにスタックを分けるようにしました。今回のcircleci側の設定として、developブランチの場合はdevという環境を、masterブランチの場合はprodという環境を作るようにしました。

version: 2.1

orbs: aws-cli: circleci/aws-cli@1.3.0 serverless: circleci/serverless-framework@1.0.1

workflows: version: 2 test-and-deploy: jobs: - test - deploy: requires: - test

jobs: test: docker: - image: circleci/python:3.7.8 steps: - checkout - restore_cache: key: deps1-{{ .Branch }}-{{ checksum "requirements.txt" }} - run: name: install dependencies command: | python3 -m venv venv . venv/bin/activate pip install -r requirements.txt - save_cache: key: deps1-{{ .Branch }}-{{ checksum "requirements.txt" }} paths: - "venv" - run: command: | . venv/bin/activate python -m unittest discover -p 'test_*.py' -v deploy: executor: serverless/default steps: - checkout - aws-cli/setup - serverless/setup - run: command: | if [[ "${CIRCLE_BRANCH}" == "develop" ]]; then serverless deploy --stage dev -v fi if [[ "${CIRCLE_BRANCH}" == "master" ]]; then serverless deploy --stage prod -v fi

requirements.txtの中身をインストールさせようとしていますが、今回はインストール不要なので空ファイルです。
orbsとしてcircleci/aws-clicircleci/serverless-frameworkを使用しました。1行でセットアップしてくれるので大変便利です。アクセスキーなどの接続情報をcircleciの画面から環境変数で定義しておけば自動で読み取ってくれます。詳しくは公式ドキュメントを参照ください。

さいごに

ファイル構成としてはこんな感じです。

.
├── .circleci
│   └── config.yml
├── handler.py
├── requirements.txt
├── serverless.yml
└── tests
    ├── init.py
    └── test_handler.py
githubにあげてcircleciと連携させたら完了です。githubにpushした時点でテスト&デプロイ処理が走ります。楽ちんですね。ではまた!

Amplify+Nuxt.js+Cognitoで認証機能を実装する

AmplifyのAuthentication機能を用いて認証機能を実装していきます。Nuxt.js、Amplifyともに初めてなので、備忘録としてできるだけ詳しく書いていきます。
前回の記事でNuxt.jsの初期画面を表示させるところまでできているので、そこに認証機能を追加していきます。

fourthgrd.hatenablog.com

いざコーディング

amplify auth の追加
$ amplify add auth
$ amplify push

このコマンドを打つことでcloudformationのスタックによってCognitoが設定されます。またaws-exports.jsにCognitoの接続情報が追記されます。

ライブラリのインストール
$ npm install aws-amplify @aws-amplify/ui-vue

aws-amplify」はamplifyのコアライブラリ、「@aws-amplify/ui-vue」はamplifyのvue用UIコンポーネントライブラリです。

プラグインの設定

先ほどインストールしたライブラリをプラグインとして読み込ませます。

import Vue from 'vue'
import Amplify from 'aws-amplify'
import '@aws-amplify/ui-vue'
import awsExports from '@/aws-exports'

Amplify.configure(awsExports)
Vue.use(Amplify)

※nuxt.config.jsへの追記はあとでまとめて記述します。

ミドルウェアの設定

サインイン画面についてindex.vueで一緒に記述することもできますが、今回はrouterを用いて別ページとして実装していきます。そのためミドルウェアでrouterの設定を記述します。

import { Auth } from 'aws-amplify'

export default async ({ route, redirect }) => { const userInfo = await Auth.currentUserInfo() if(route.path == '/signin') { if(userInfo){ redirect('/') } return } if(!userInfo){ redirect('/signin') } }

認証済ならルートにリダイレクト、未認証ならサインインページにリダイレクトさせています。

vueファイルの作成

まずはサインインページの実装

<template>
  <amplify-authenticator>
  </amplify-authenticator>
</template>

<script> import { Hub } from 'aws-amplify'

export default { created() { Hub.listen('auth', this.listener) }, destroyed() { Hub.remove('auth', this.listener) }, methods: { listener(data){ if(data.payload.event == 'signIn') { this.$router.push('/') } } } } </script>

aws-amplifyにはHubというイベントをハンドリングしてくれるものが用意されています。Hub.listen('auth',callback関数)とすることで、authに関するイベントが発生した際、callback関数を呼んでくれます。詳しくは公式ドキュメントを参照してください。
index.vueでは同様にサインアウトボタンを記述します。元のコードに以下を追記します。
<template>
〜
<amplify-sign-out></amplify-sign-out>
〜
</template>
<script>
import { Hub } from 'aws-amplify'

export default { created() { Hub.listen('auth', this.listener) }, destroyed() { Hub.remove('auth', this.listener) }, methods: { listener(data){ if(data.payload.event == 'signOut') { this.$router.push('/signin') } } } } </script> 〜

nuxt.config.jsの設定

プラグインミドルウェアの設定を反映させます。以下を追記します。

  plugins: [{ src: '~/plugins/amplify.js', ssr: false }],
  router: {
    middleware: ['auth'],
  },

動作確認

コーディングが完了したので動作確認してみましょう。ローカルホストに接続すると以下画面が表示されます。
f:id:fourthgrd:20200829162513p:plain
アカウント作成も行えます。
f:id:fourthgrd:20200829162551p:plain
サインインした結果がこちらです。
f:id:fourthgrd:20200829162624p:plain
storeを用いたログイン状態の管理などもできますが、今回はなるべくシンプルな形で実装してみました。フロント、バックともにこんな簡単に実装できることに感動です。さすがAWSですね。ではまた!