転職活動をしていた(あるいはアラフォー近くのソフトウェアエンジニア転職のメモ)
有給フルバースト35連休です。よろしくお願いします。
— 焼きそばパン (@sugamasao) 2020年3月27日
このようにTwitterでは退職の匂わせ発言などをしていたわけですが、実はここ半年ほど転職活動をしていました。 その時の活動記録です。
2020/4までの会社には10年チョット在籍していて、リーマンショックの頃に入社し、新コロナ禍での退社となりました。
何をやっているんでしたっけ?
2020/3まではRuby/RailsのWebサービスの開発・運用・保守をやっていました*1。
サービス立ち上げ以来9年くらい携わっており、Railsは3.0?くらいの頃に rails new
したものをメンテし続けて今は6.0.2です。
担当業務はシステム構成の設計やデプロイフローの策定、アプリケーションの設計や仕様の検討から実装、テストまで。 なおオンプレ時代はMySQLのパラメーター設計とかも多少はやったものの、RDS時代になってしまったので全て忘れたもよう。
まー同じサービスを長いこと触っていると技術領域に偏りが出るし、飽きたというのがわかりやすいですかね。
転職するにあたりどんなことをやっていたか
- 2019/8
- 転職しようと思い立つ
- 転職ドラフトに登録してみようと思ったが時期を逃したので次回まで待つ
- 2019/10
- 2019/11
- 個人的に気になっていた企業に対して直接コンタクトを取る
- カジュアル面談を対応して頂いた皆さんありがとうございました
- 個人的に気になっていた企業に対して直接コンタクトを取る
- 2019/12
- 合いそうな会社に対して採用面接を実施し始める
- 2020/1
- 採用面接を受けたところから内定が出始める
- 内定をもらった会社の中でどの会社を選ぶかにあたり、どのように情報を集めるかが焦点になる
- 2020/2
- 2020/1から引き続き、会食をセッティングしてもらったり、オフィスに伺わせてもらったりして各社の知見を貯める
- 新コロナ禍の影響でスケジュールにリスケがあり、各社に待ってもらう期間を延長してもらうためジャンピング土下座
- 2020/3
- 2020/3末、最終的に入社する会社を決めて、各社に連絡
- 2020/4
- イマココ
だいたい11月〜12月はカジュアル面談や採用面接をしていたので、クッソ忙しかったですね。 終業後に対応していただいたので、19:30〜20:30+αくらいを週2〜3件あったりという感じになってしまったのだった。。。コミュ障にはあまりにキツい。
翌年の1月にだいたい最終面接を実施したり内定頂いたあとに会食を開いてもらったりなど「どの会社に入社するか」を決めるための時間を少し頂いた感じで*2、正味の転職活動としては3〜4ヶ月くらいという感じでした。
どういう観点で考えていたの
自分のキャリアとしてRuby/Railsを使ったサーバーサイドアプリケーションの開発をしてきたので、基本的にはその延長で幅を広げられるような体験ができそうな仕事を考えていました。
絶対Ruby/Railsを使いたいというこだわりがあったわけではないのですが、如何せん同じ仕事を長い間やってきたので、そこを手放してまともなパフォーマンスが出せるのか……という不安があり、結果としてはRuby/Railsをメインで扱っている会社を中心に受けた感じです。
採用プロセスをスムーズに運べたという点では新コロナ禍の本格化前に決まったので良かったものの、新コロナ禍の対応を見れたらそれはそれで各社を検討する上では良かったのかもしれません*3。
業態にはあまりこだわりはなくて、絶対toCが良いとかそういうわけではなかったです。あくどい商売しているようなイメージのところでなければw あとは実際に話を聞いてフィーリングが合えば👌みたいなノリでした。
一応、簡単に転職時に意識したポイントをあげるとこんな感じ(自分が自覚的だったところ)
- 待遇(そりゃそうだ)
- 事業的に成長してそうなところ(そりゃそうだ)
- 勤務体系
- フルリモートが良いとかではなく、どういうポリシーを敷いているかという観点ですね
- 基本は出社、たまにリモート勤務ができるくらいが良いですね〜と各社との面談などで話していましたが、結果としては初手からフルリモートになってしまった(ゴクリ)
- Ruby/Railsのバージョン
- 古いからダメというわけではなく、どういう開発ポリシーを持っているかの目安として
- とはいえ、「古いし古いままで良いです」というところはさすがにね😇
- 古いからダメというわけではなく、どういう開発ポリシーを持っているかの目安として
- チーム内のプロダクトのリリースサイクル(5/1追記)
- 良し悪しはなくて、どういう感じで開発をしているかを聞くため
- まあ半年に一度のビッグバンリリースです、だったらちょっといやかなとかはありますね……
- チームでの開発をしているところ
- 少人数で「いい感じにやっていく」の開発が長かったので、チーム開発の何らかのプラクティスを体験したいという思いがある
- 社員に(インターネットで)怖い人がいない(と思われる)こと*4
- 会えば良い人ですよって言われてもインターネットで発言見ちゃってメンタルに影響受けたくないですしおすし(嫌なら見なきゃ良いんですが、「なんか言われてるかも」とか「それ、私のこと?」とかあると疲れるジャン」)
- 会社があんまりウェイウェイしてないところ(パリピ怖いお)
他にはどういうポイントがあるのかなあ。皆さんどういうところを見て決めてるんですかね……?
で、どこに入社したの?
それはまあ試用期間を無事に乗り越えられたら、ですかね(普通に不採用になったら面白すぎるので)。
銀座Rails#20でオンライン登壇してきました
銀座Rails#18改め銀座Rails#20
当初は銀座Rails#18での登壇依頼ということでお話をいただいていたのですが、昨今のコロナ事情で延期 -> #20でオンライン登壇という形になりました(ZOOMの準備などありがとうございました)。
何を話したか
昨年秋に執筆した「Ruby on Rails 6 エンジニア養成読本」からRails 6.0の新機能についていくつかピックアップして話しました。
今時Rails 6.0の新機能なんてみんな知っとるやろ……みたいな気持ちもありましたが、ご参考になれば幸いです。
ちなみに、複数DBのレプリケーション構成を試してみたい時は以下のDockerイメージを使うと便利です。 sugamasao.hatenablog.com
合わせて読みたい
かんたんに検証用のMySQLレプリケーション環境を作る
docker-composeで動かすくんです
一年で363日くらいはMySQLのレプリケーション環境欲しくなるからdocker-composeで立ち上がるようにしておいた https://t.co/mZ8cQaCpXU
— sugamasao (@sugamasao) 2020年2月9日
DockerでMySQLを使うのも、レプリケーションの設定をするのも個別には難しくないのですが、Docker MySQLの環境変数を毎回調べるのが面倒、レプリケーションするときのposition取得が面倒などがあり、シュッと立ち上がる環境を作っておきたくなったのでした。
設定を見てもらえればわかると思いますが、検証目的のテキトー設定なので間違ってもプロダクション環境で利用しないでくださいね
Ruby on Rails 6 エンジニア 養成読本という本を共著で執筆しました
まずはじめに
- 10/26 発売
電子版は同日か少し遅れて発売予定10/19追記 : 技術評論社の電子書籍サイトから購入可能になりました- @netwillnet さんと共著です
- Rails 6.0対応の書籍としてはそれなりに早いタイミングでの出版だと思います
- 執筆しているときは最速で出したいという思いがありましたが、実際のところ最速なのかはわからないです😅
どのような本ですか?
目次はこんな感じです
巻頭特集 ようこそRuby on Railsの世界へ~ここが変わった! Rails 6の新機能~ - Action Textによるリッチテキスト機能の追加 - 複数の DB へ接続を行う機能の追加 - Action Mailboxによるメール受信機能の追加 特集1 Rails 6ではじめるRuby on Rails再入門 - 第1章 RubyとRailsの基礎知識 - 第2章 Railsコマンドの基本 - 第3章 Rails の開発を体験しよう - 第4章 Rails アプリケーションを公開しよう 特集2 Rails 6からのイマドキ フロントエンド開発 - 第1章 webpack へ変わったJavaScriptの管理 - 第2章 SprocketsによるCSSの管理 - 第3章 Railsに標準で組み込まれているJavaScript - 第4章 控えめなJSフレームワークStimulus 特集3 Rails新時代の組み込みテスト - 第1章 Railsに標準で組み込まれているテストの種類と並列テスト - 第2章 ユニットテストでテストを書こう - 第3章 システムテストでアプリケーション全体の動作を確認する 一般記事 押さえておきたい! Rails 6で改善された機能一覧 - Active Storageによるファイルアップロード - credentials による秘密情報の管理 - Early HintsやCSPへの対応
どのような人が対象ですか?
各特集・記事ごとに対象読者レベルは多少異なりますが大きく分けると以下のような感じです。
普段Railsを使っているが6.0についてはあんまりキャッチアップできてない……という人
- 巻頭特集・特集2・一般記事
- 主に、6.0になって変更になった部分に主眼を置いた解説になっています
- 新しく追加された
Action Text
や 改善されたcredentials
の解説があるので、どこらへんが変わったのか手軽にキャッチアップしたい人にオススメです - 特集2ではJavaScript周りをWebpackerで扱う方法などを解説しています
Railsを使うことになったがよくわからんのだよな・・・(あるいは、久しぶりにRails触って見るか!)という人
- 特集1・特集2・特集3
個人的なオススメ内容
一部はruby-jpというコミュニティ*1でも話した内容ですが・・・
- credentialsの解説は、今までの機密情報の扱い方の経緯を振り返り、6.0ではどうなっているの?ということを解説しています。この機能は紆余曲折あって色々変わっているので、きちんと流れを追って最新の形をスッと知ることができるのは便利かなと思います
- あとは単純に複数DBとかデフォルトになったWebpackerあたりの解説があるのは便利ジャンという感じがあります
謝辞
この書籍を執筆するにあたって、@y_yagiさん、@madogiwa_boyさんにレビューしていただけました。 しょうもないミスから説明不足な点など、第三者の目で見ていただけたことでグッとクオリティをあげることができました。本当にありがとうございます 🙇♂️
ご購入は
gihyoさんやAmazonなどで購入できます(なんかamazonのリンクだとプレビューがうまく表示されないのでリンクだけ・・・)
https://www.amazon.co.jp/o/ASIN/4297108690/
繰り返しになりますが、電子版も近いうちに発売する予定ですのでそちらをご所望の方はもうしばしお待ちください
以下のサイトから電子書籍版を購入することが可能です(10/19追記)。
それはそれとして、私が執筆に関わった書籍はこれで5冊目になりました(パーフェクトRubyの改定作業をカウントすると6冊)。褒めてくれて良いんですよ??? https://www.amazon.co.jp/-/e/B00EEQ6M1M
*1:詳しくはここら辺をご確認ください https://pocke.hatenablog.com/entry/2019/08/02/181140
令和の時代、hirbに変わるツールはあるのか問題
表形式の方がパッとみたときに分かりやすい反面、カラムが多いと表形式じゃない方が見やすいとかもあるのでケースバイケースなのですが、まあ敢えて剥がすほどでもないかなと思って使い続けて数年。
開発が活発ではないので、そろそろ次世代的なものが出てきているのか、あるいは人類は表形式じゃなくてもやっていけるのか。
hirb is 何
こんな感じに表示されるActiveRecordのオブジェクトに対して
irb(main):002:0> Blog.all Blog Load (0.4ms) SELECT "blogs".* FROM "blogs" LIMIT ? [["LIMIT", 11]] => #<ActiveRecord::Relation [#<Blog id: 1, title: "cool title", body: "cool text", created_at: "2019-10-07 06:37:13", updated_at: "2019-10-07 06:37:13">]>
Gemfileにhirbを追加してbundle installすると
irb(main):002:0> Hirb.enable => true irb(main):003:0> Blog.all Blog Load (0.2ms) SELECT "blogs".* FROM "blogs" +----+------------+-----------+-------------------------+-------------------------+ | id | title | body | created_at | updated_at | +----+------------+-----------+-------------------------+-------------------------+ | 1 | cool title | cool text | 2019-10-07 06:37:13 UTC | 2019-10-07 06:37:13 UTC | +----+------------+-----------+-------------------------+-------------------------+ 1 row in set
こんな感じしてくれる君です。ただ、このままだと日本語などでカラムの幅がずれてしまう。
そのため、hirbを使うときは同時にhirb-unicodeも利用するとシュッと表示されるようと思いきやメンテされてない問題があってforkしたhrib-unicode-steakknifeを使う*1。こっちは動く程度にはメンテされているので、シュッと動きます。
というのがhirb関連の動きなわけですが
そもそも世の中の人は使ってるんですか???という疑問をアンケートにしてみました。
令和になったので改めて知りたいんですが、Railsでテーブルのデータをシュッと見たいときにhirbって使ってますか?(coolな代替gemがあれば教えてください)
— sugamasao (@sugamasao) 2019年9月30日
結果を見ると、hirbを利用している割合と同じくらいの人が(!!!)「代替gemを使っている」という選択をしてくれました。 しかし、残念なことにリプライは無かったので具体的に何を使っているかは不明です。
リプ見たくて to:sugamasao で検索したけど、げんきだしてbotしか居ねぇ
— Takafumi ONAKA (@onk) 2019年9月30日
悲しいですね😇
とちぎRuby会議08「Rubyを説明するのは難しい(仮)」という内容で登壇してきました
はじめてのとちぎRubyコミュニティ
とちぎのRubyコミュニティ、もちろん前から知っている存在だったのですが、なんというか非常に練度の高い場所というイメージがあって、ちょっと怖いけど*1いつか行ってみたいな〜と思っていた存在でした*2。
今回、主催しているtoRubyのよねざわさんから「参加しませんかー」とお誘いいただき、これは良い機会だと思ってホイホイ参加することにしました。
発表もどうですか?と誘っていただいたものの、前述の通り練度高い場というイメージがあって「よく考えたら自分には無理では、、」と及び腰になっていたのですが、色々と励ましてもらったおかげで登壇する運びとなりました*3。
なんだかすごいところに来てしまったぞ pic.twitter.com/1sse6ZummO
— パーフェクトだったりかんたんだったりする (@sugamasao) 2019年6月29日
話してきた内容
昨年、かんたんRubyという入門書を書いた経験をベースに、「どう説明するのが良いのかなあ」というお悩み相談みたいな感じで話の骨格を作りました。 Rubyのイベントだし、Rubyの本なのでRubyが主体ですが、本質的にはプログラミングの入門書全般で言えることかな〜というのは登壇した後に思ったりしました。あんまりRubyは良くない!みたいに思わないでね;;
◆◇◆ 閑話休題 ◆◇◆
予定では本編25分 + 余った時用のスライド + 質疑応答で30分くらいみたいなイメージだったのですが、思ったより早く進行してしまい、余った時用のスライドを使っても22〜3分?くらいで終わっちゃったのは反省点です*4。
ですが、結果としては質問してくださった皆さんのおかげでより深く「どう説明すれば良いか」を考えるきっかけを得られたので、とても良かったです。
特に、発表後に @yhara さんや @youchan さんに自分の本ではこういう説明したよとかこういう流れだと良いよねなんて話をできたのはとても嬉しかったです。ウッウッ発表して良かった!
youchanさんからはマンガでわかるRubyをいただいたので、これを気にRubyをわかっていきたいと思います!(こういう、動かしてみてプログラミングが楽しい!みたいな流れを「かんたんRuby」ではうまく表現できていないと思うので、今後に生かしたい気持ちもあります)
上げるの忘れてた! @youchan さんからマンガでわかるRubyをいただきました。ありがとうございます😊 #toruby pic.twitter.com/66g8w5vgrY
— パーフェクトだったりかんたんだったりする (@sugamasao) June 29, 2019
その他
- toRubyの雰囲気がすごくやわらかくて、とても発表しやすくて良かった(とって喰われるんじゃあないかとビビってたw)
- オブジェクト指向について sumim さんの話を聞けて大変勉強になりました
- 久しぶりに角谷さんのトークが聞けたの良かった
- @june29と@mamipekoのトークは我が家でも参考になりそう
- というかタイムキープ力がすごすぎてスゴい
- 大和田家を支える技術 令和元年版 / our life supported by technologies and skills - Speaker Deck
- なんやかんやあって懇親会で全員がちょっとLTするみたいな異常な展開になってて楽しかった
- かくたにさんがめちゃくちゃ煽ってたw というのもあるけど、多分toRubyの皆さんのホスピタリティの高さというか、心理的安全性があるというか、雰囲気がすごく良かったというのもあると思う
個人的な話
登壇で緊張していたというのもあるけれどかなり人見知りを発揮してしまって、もうちょっとしっかりしなさいよ、という反省点があります
ふと客観的に自分を見ると、だいぶムチついてますね・・・。やせよう
「ジャイロっていう兄ちゃんがいて」 #toruby pic.twitter.com/ZbhV2iXBvO
— 大和田純と申します (@june29) June 29, 2019
- 今回、発表することができてとても良かった。このような機会を得られたこと、そして過ごしやすいイベントを開催していただいたこと、toRubyの皆さん、本当にありがとうございました!
いちおう宣伝
ほーん良さそうな事書いてるジャン?と思ったらこちらをポチッとお願いします。
- 作者: すがわらまさのり
- 出版社/メーカー: 技術評論社
- 発売日: 2018/06/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
これからプログラミングに入門するぞ!度合いはこちらの方が高い感じになっておりますので、Ruby超入門もあわせてよろしくお願いします。
- 作者: 五十嵐邦明,松岡浩平
- 出版社/メーカー: 技術評論社
- 発売日: 2018/11/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Rails 6のコマンド周りで変わる細かい点(rc1調べ)
ブログを書くリハビリ
Rails 6.0で変わるであろうと思われる点のメモ
rails6rc1を舐めるようにみていた結果、bin/setupとbin/updateが統合されたことを知る
— ルビー・カンタン・太郎 (@sugamasao) April 25, 2019
これのもうちょっと正確な説明ですが、bin/rails update
とbin/rails setup
の話の前に bin/rails db:prepare
の説明が必要なんです。
rails db:prepare
タスクの追加
PRはこちら https://github.com/rails/rails/pull/35768
タスク名より実装を見たほうがわかりやすいですが、DBが作成されていれば migrate
を、そうでなければ setup
を実行するタスクです。migrateとsetupの使い分けをしなくて良い便利タスクですね。
# PRのFiles Changedから抜粋 task prepare: :load_config do ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).each do |db_config| ActiveRecord::Base.establish_connection(db_config.config) db_namespace["migrate"].invoke rescue ActiveRecord::NoDatabaseError db_namespace["setup"].invoke end end
bin/rails update
と bin/rails setup
が bin/rails setup
に統合
こちらが本題ですが、実装がほとんど同じジャン?ということでupdateはsetupを実行する形に変更されました。上記で追加された db:prepare
を使うことで、動作的にもupdateとsetupを使い分けずとも同じ挙動になったわけですね。
これもPRを見たほうがわかりやすいでしょう https://github.com/rails/rails/pull/33139
そのうちupdateは無くなるんですかね。