give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

伊藤さんの2022年の振り返り(というか1年分の近況報告?)

はじめに

いやあ、気付いたら2022年もあっというまに年末ですね。
今年も公私共に非常に忙しい一年でした…。

2022年は今のところ43本(このエントリを含めると44本)のブログを書いたようです。

とはいえ、実は「あれも書きたい、これも書きたい」と思いながら、書くタイミングを逃して何も書けなかったエピソードがいくつかあります。

今回はそんな「2022年に書きそびれたエピソードたち」をざっくりまとめていきます。

数日前に撮った、本文とは無関係な朝焼けの写真です

【もくじ】

いくつかのコミュニティ活動を休止して、新しいコミュニティ活動を始めた

近年は新型コロナ影響でオフラインで開催する勉強会を開催しにくくなってしまいました。
この半年ぐらいで徐々にオフライン勉強会が復活しつつありますが、個人的には感染のリスクを考えると「うーん」という気持ちになってしまいます。

少なくとも自分が運営しているコミュニティ活動については、この2〜3年全然動けていなかった(し、この先もちょっと不透明)なので、ここでいったん区切りを付けようと思いました。

一方で、会社の有志で新しい勉強会コミュニティを作ったりもしました。

西脇.rbの活動を休止した

2013年からやっていた西脇.rbの活動をいったん休止することにしました。
2018年と2019年は「年一回だけでも集まろう」ということでプログラミング合宿を開催していたのですが、新型コロナとの相性が悪すぎるのでこれも開催できなくなってしまいました。

最後に開催したのは2019年に松江で開催したプログラミング合宿です。
いやあ、あれはめちゃくちゃ楽しかったなあ。新型コロナがなかったらぜひまたやりたいんだけど。

とはいえ、再開の目処が立たないので、いったん「休止」という選択肢を採りました。

Rubyist Connectというwebサービスをクローズした

Rubyist Connectというのは前述の西脇.rbの勉強会で開発&利用していたRailsアプリで、勉強会参加者のプロフィールを掲載することができました。
しかし、勉強会が開けなくなったので利用する機会がほとんどなくなったのと、Heroku有料化の煽りを受けて「使ってないのに維持費だけかかってしまう」という状況になってしまったので、残念ながらクローズすることにしました。(長年お世話になりました🙏)


TokyoGirls.rbを休止してプール金を日本Rubyの会に寄付した

TokyoGirls.rbは「女性も参加しやすい(でも女性限定ではない)Rubyコミュニティ」というポリシーで活動していたRubyコミュニティです。
こちらもやはり「コロナ禍ではイベントを開催しにくい」という理由で2019年12月のイベントを最後に活動が止まってしまいました。
西脇.rbと同様に再開の目処が立たないので、いったん「休止」としました。

ちなみにコミュニティのプール金が少し余っていたので、日本Rubyの会に1万円寄付させてもらいました。

コミュニティの活動は止まってしまいましたが、このコミュニティで作った「自由に再利用&改変可能(CC BY)なアンチハラスメントポリシー」は意外とあちこちのコミュニティで「参考文献」としてリンクを載せてもらっているので、そういうのを見かけると短い活動期間ながらも多少意義はあったかな、と思ったりします。

また、TokyoGirls.rbでは無料で託児室を提供したりしました。

こういった子育て世代へ配慮した勉強会という点でもTokyoGirls.rbは良い実績を残せたんじゃないかと思っています。

Hotwire.loveという勉強会コミュニティを作った

いきなりちょっと寂しい話題が続いてしまいましたが、前向きな活動もあります!
弊社ソニックガーデンの面々と一緒に、Hotwire.loveというHotwireに特化した勉強会コミュニティを今年立ち上げました。

毎月第2・第4木曜日の18時からオンラインで勉強会を開催しています。
ちなみに次回は2023年1月26日に開催する予定です。

勉強会といっても、あまり難しいことは考えず、Hotwireについてワイワイガヤガヤみんなで楽しく話しましょう、というコンセプトでやっているゆるい勉強会です。

初心者でも上級者でも誰でも参加OKなので、「Hotwire、チョットキニナル」という方はふらっと遊びに来てみてください!

ちなみに下の写真は前回(vol.8)に撮った記念写真です(2022年の最後の勉強会なので、"Good-bye 22!"のダブルピース)。


OSS活動

僕はどちらかというとあまりOSS活動が活発でないエンジニアなんですが、今年は例年と違って小粒なコントリビュートをいくつかやったりしていました。

FirestoreをActiveRecordっぽく操作できるgemを作った

ActAsFireRecordBetaというFirestoreをActiveRecordっぽく操作できるgemを作りました。
お遊びでないちゃんとしたgemを作ったのはこれが初めてかもしれません(とはいえ、自分以外の人の利用に耐えられるかどうかは確信がありませんが……)。

こんな感じでFirestoreが操作できるようになります。

# Create
book = Book.new(title: 'An Awesome Book', published_on: '2022-12-01'.to_date, page: 200)
book.save
bool.id #=> IdG0ZWT0I5DucEQuRgoP

# Read
id = 'IdG0ZWT0I5DucEQuRgoP'
book = Book.find(id)

# Update
book.update(page: 210)

# Delete
book.destroy

詳しくはこちらのQiita記事をご覧ください〜。


Ransackで大きな数値を渡されてもエラーが出ないようにした

User.ransack(age_eq: 123456789012345678901)のように非常に大きな数値を渡すとActiveModel::RangeErrorが発生していたのですが、以下のPRでこのエラーが発生しないように修正しました。

ただし、PR自体は6月にマージされたんですが、まだリリースされていません😭

.rspecファイルで # を使った行コメントに対応した

RSpecの設定ファイルである .rspec ファイルは # を使ってもコメントアウトされず、# だけが無視されてその行の設定が有効になってしまいます。たとえば以下のような .rspec ファイルは "--format d" がそのまま適用されてしまいます。

# --format d

この挙動が感覚的ではないので、以下のPRで # を使った行コメントに対応させました。

が、こちらもPR自体は12月10日にマージされたんですが、まだリリースされていません😭

ARGV.getopts でハッシュのキーをシンボルで返せるようにした

Rubyのoptparseライブラリで ARGV.getopts メソッドを使うと必ずハッシュのキーが文字列になってしまうのですが、ハッシュのキーはシンボルにしたいケースが多いので、オプションを指定してシンボルのキーが返るようにしました。

# デフォルトのキーは文字列
options = ARGV.getopts('l', 'w', 'c')
#=> {"l" => true, "w" => false, "c" => true}

# symbolize_namesオプションを渡すとキーがシンボルになる(このオプションを追加した)
options = ARGV.getopts('l', 'w', 'c', symbolize_names: true)
#=> {:l => true, :w => false, :c => true}

Ruby 3.2に取り込まれたら嬉しかったんですが、あと一歩のところで間に合いませんでした😭
optparse gemの次のリリースか、Ruby 3.3で使えるようになると思います。

Ruby 3.2.0のリリースノートにあったサンプルコードのミスを修正した

これはドキュメントの修正なのですが、Ruby 3.2.0のリリースノートに載っていたサンプルコードが間違っていたので、これを修正するPRを送ってマージされました。

# 誤 "\1"はバックスラッシュ記法と解釈されて\x01になる
Regexp.new("^a*b?a*()\1$")
#=> /^a*b?a*()\x01$/

# 正 '\1'なら意図した通りの正規表現になる
Regexp.new('^a*b?a*()\1$')
#=> /^a*b?a*()\1$/

ちなみにPRをマージしてくれたのはMatzさんです!

こちらは無事に反映されています😄


RuboCopの警告メッセージを少し修正した(2022.12.31追記)

RuboCopには未使用のメソッド引数を警告するLint/UnusedMethodArgumentというCopがあります。この警告はRuboCopによって自動修正可能なのですが、その修正内容は「未使用の引数にはアンダーバーを付けるだけ」です。

# 自動修正前
def double(number, other)
  number * 2
end

# 自動修正後(other が _other になった)
def double(number, _other)
  number * 2
end

既存メソッドをオーバーライドしたりする場合はこの対応でいいのですが、未使用というよりも単に不要な引数だった場合はそもそもその引数をなくすべきです。

# 不要な引数はなくしてしまうのが本来正しい対応のはず
def double(number)
  number * 2
end

「どちらの対応が正しいのか、静的解析では判断できない以上、自動修正はしない方が良いのでは」というのが、僕の個人的な考えなのですが、どうも歴史的な経緯等もあってそういう変更はできないようなので、警告メッセージだけを修正するプルリクエストを送りました。具体的には下線部の一文「もしその引数が不要なら削除してください」を追加する、というものです。

Unused method argument - some_arg. If it's necessary, use _ or _some_arg as an argument name to indicate that it won't be used. If it's unnecessary, remove it.

このプルリクエストがちょうど2022年の大晦日にマージされました🎉

github.com

アウトプット活動

2022年アウトプット活動はこんな実績になりました。

ブログ執筆は44本、うち4本がランクイン

ブログの執筆は前述のとおり今年は44本書きました。

そのうち以下の4本が「今週のはてなブログランキング」にランクインしました。


Qiita記事の執筆は34本、2022年もなんとかユーザーランキング1位

Qiitaから送られてきた「2022年 振り返りレポート」の内容をシェアします。


  • Contribution = 6,309
  • 書いた記事数 = 34
  • 読まれた数 = 1,454,005
  • いいねされた数 = 4,653
  • ストックされた数 = 3,258

いいねの多かった記事ベスト3

あと、2022年もユーザーランキング1位をキープできました。

とはいえ、じわじわと2位との差が詰まってきているので、来年の今頃はどうなってるやら??

登壇活動等は全部で7件

自分のブログとQiita以外のアウトプットとしては次のような7件の活動がありました。
今年はあまり登壇活動はやってなかったような気がしましたが、こうやって振り返ると意外とやってましたね〜。

  • Qiita Advent Calendar Online Meetup(オンライン登壇)
  • 銀座Rails#41(オンライン登壇)
  • 電脳会議 Vol.212(記事寄稿)
  • なぜエンジニアは、惜しみなく知見をシェアするのか?(NewsPicks 対談記事)
  • エンジニアストーリー by Qiita(ポッドキャスト出演)
  • VeriServe Test Automation Talks No.3(オンライン登壇)
  • DevRel Meetup in Tokyo #78 〜商業技術書出版を学ぼう〜(オンライン登壇)

具体的な活動内容は以下のエントリにまとめてあります。

あと、あまり公にはしておりませんが、今年からMENTAで有料相談を受けられるようにもしてみました。
「RSpecの書き方を知りたい」「RubyやRailsに関する技術相談」「アウトプットのコツ」「キャリア相談」等々、僕に個人的に聞いてみたい内容があればMENTAを検索してみてください。

その他:息子が21世紀枠で来年春のセンバツで甲子園に行けるかもしれない

これは僕自身の話ではなく子どもの話です。
息子は小学校の頃から野球をやってるんですが、その息子が所属している兵庫県立小野高校野球部がセンバツ21世紀枠候補の近畿代表に選出されました。

小野がセンバツ21世紀枠候補の近畿代表に選出 創部100年で初聖地出場なるか(デイリースポーツ) - Yahoo!ニュース

野球に興味がない人はあまり知らないと思うんですが(というか僕も知らなかった💦)、春のセンバツでは各都道府県の代表とは別に「21世紀枠」という特別枠があり、そこに全国から3つの高校が出場できるようになっているんです。

このブログの執筆時点ではその候補が9校まで絞り込まれていて、そのうちの一校が息子が所属している小野高校です。
ということは?3分の1の確率で?息子が甲子園に行けるかもしれない!?

21世紀枠で甲子園に行ける3校は来年の1月27日に発表されるそうです。
いったいどういう結果になるかわかりませんが、息子は毎日頑張って練習しているので甲子園に行けたら嬉しいなと密かに思っています。

でも、運動嫌いで根っからの文化系人間だった僕の息子が、どうして野球部という超ハードな体育会系の部活をやってるんでしょうか??僕はいまだに不思議でなりません😅

まとめ

というわけで、今回は2022年の近況報告をぐわっとまとめてあれこれ書いてみました。
ちなみに、Twitterのフォロワー数やブログの購読者数はこんな感じになってます(2022年12月29日時点)。

  • Twitterのフォロワー数 = 11,868
  • このブログの購読者数 = 2,226
  • Qiitaのフォロワー数 = 5,330

フォロワー・ブログ購読者のみなさん、いつもありがとうございます!
来年もみなさんのお役に立つアウトプットができたらと思っていますので、引き続きよろしくお願いします。

まだフォロー or 購読されてない方はこのタイミングでポチッとフォロー・購読ボタンを押してもらえるとありがたいです❤️

さて、2023年はいったいどんな一年になるんでしょうか?
息子と娘が二人同時に高校受験&中学受験なので、プライベートがかなり忙しくなりそうな予感……。

2023年は僕個人がどうこういうよりも、コロナだとか戦争だとか、暗いニュースがちょっとでも減って、平和で健康な世界が戻ってきてくれたらいいのになあ、と思う今日この頃です。

僕自身も健康に気を付けながら頑張っていこうと思います。(そのためにはちゃんと運動しなきゃ💦)
それではみなさん、良いお年を!

MacBook USキーボード+Boot Camp or VirtualBox+Windows 10で左右コマンドキーを使ってIMEを切り替える方法

はじめに

僕はMacユーザーです。さらにUSキーボードユーザーです。

MacのJISキーボードではスペースバーの左右に「英数」キーと「かな」キーがあり、これでIMEを切り替えることができます(英数でIME-オフ、かなでIME-オン)。
しかし、USキーボードの場合、スペースバーの左右にはコマンドキーが配置されており、「英数」と「かな」はありません。
そこで僕はKarabiner-Elementsを使って左右のコマンドキーにそれぞれ「英数」と「かな」を割り当てています。

さらに、頻度はそこまで多くありませんが、たまにMac上でWindowsを使う場合があります。
Windowsを起動するのはBoot CampでOSごと切り替えてしまう場合と、VirtualBoxを使ってmacOS内でWindowsを立ち上げる場合の2パターンがあります。

Mac環境と同じように、Windowsでも左右のコマンドキーでIMEを切り替えたいな〜と思ったので方法を調べてみました。

左右コマンドキーでWindows IMEを切り替える方法

PowerToysの設定

Windows上でPowerToysというツールをインストールします。

learn.microsoft.com

PowerToysを起動し、左サイドメニューの「Keyboard Manager」を選択、それから「キーの再マップ」を選択します。
プラス(+)ボタンをクリックし、以下の設定を追加します(VirtualBoxの場合は注意点があるので後述します)。

  • Win (Left) → IME Non-Convert
  • Win (Right) → IME Convert
  • Caps Lock → Win (Left)

設定が完了すると次のようになります。

なお、「Caps Lock → Win (Left)」はWindowsキーに相当するものがなくなってしまうので、ふだん使わないCaps LockキーにWindowsキーを割り当てただけです。この設定は任意です。

Windows IMEの設定

次に、画面右下のIMEアイコンを右クリックし、設定を開きます(注:僕が使っているIMEはWindows標準のIMEです。Google 日本語入力ではありません)。

「キーとタッチのカスタマイズ」をクリックします。

「キーの割り当て」で以下のように設定します。

  • 各キーに好みの機能を割り当てる = オン
  • 無変換キー = IME-オフ
  • 変換キー = IME-オン

これでWindows環境でも左右コマンドキーを使ってIMEが切り替えられるようになるはずです。

VirtualBoxの場合の注意点

VirtualBox上でWindowsを動かしている場合は、デフォルトで左コマンドキーがHost Keyに割り当てられていると思います。
そのため、左コマンドキーを押してもIMEが切り替わりません。
そこで(ふだんHost Keyを使っていないことが前提ですが)左コマンドキーのHost Key設定を解除します。

Virtual Boxの画面左下にある⬇️ボタンをクリックします。

Host Key Combination欄にある消しゴムマーク(?)をクリックします。

"None"に変わったらOKボタンをクリックして変更を確定します。

これでVirtualBox上でも左コマンドキーでIME-オフが実現できます。

確認環境(Boot Camp)

  • MacBook Pro 13-inch, 2017
  • Windows 10 Home
    • バージョン 22H2
    • OS ビルド 19045.2311
    • エクスペリエンス Windows Feature Experience Pack 120.2212.4190.0
  • PowerToys v0.65.0

確認環境(VirtuaBox)

  • MacBook Pro 13-inch, 2017
  • macOS Ventura 13.0.1
  • VirtualBox 7.0.4 r154605 (Qt5.15.2)
  • Windows 10 Home
    • バージョン 21H2
    • OS ビルド 19044.1645
    • エクスペリエンス Windows Feature Experience Pack 120.2212.4170.0
  • PowerToys v0.65.0

【お悩み相談】未経験者はIT業界に転職しても使いっぱしり止まりでキャリアアップできないんでしょうか?

はじめに

先日、Twitter DMで以下のような相談を受けました。

突然のご連絡申し訳ございません。
僕は現在未経験でIT業界を目指そうか悩んでいるものです。
エンジニアについて調べていく中で伊藤さんの記事を読ませていただきました。

僕は高卒→飲食業勤務の24歳です。現在ITの学習は全くしておりません。
ですがIT業界に転職をしたいと思い、調べていくなかで未経験で入っても使いっぱしりのような形にされてしまってキャリアアップは狙えない、という記事を読んだりして怖くなってしまっている状況です。

もし可能でしたら実際に業界で活躍されてる伊藤さんに、本当の実態をお伺いできればと思い連絡させていただきました。

もし可能でしたら教えていただけるとありがたいです。

今回のエントリではこの相談のやりとりを質問者ご本人の許可を得た上で公開したいと思います。

僕の回答:身につけたスキルと選んだ会社によります

未経験で入っても使いっぱしり止まりでキャリアアップできないのか?という質問に対しては、質問者さんが身につけたスキルと入った会社のホワイトさ・ブラックさによる、という感じでしょうか。

「新人だけどすごくスキルがある」かつ「評判のいい会社に入った」なら、新人でも悪い扱いはされないはずです。

逆に「大してスキルがつかないままエンジニアになった」かつ「ブラックな会社に入った(そういう会社にしか入れなかった)」なら、あまり幸せではない働き方になると思います。

また、まったくの未経験(つまりスキルゼロ)でエンジニア転職を目指すと、評判のいい会社に入れる可能性がほぼゼロなってしまう(=使いっぱしりにされる可能性が非常に高い)ので、個人的にはオススメしません。

ちなみに、僕自身は20年前に完全未経験でややブラックなIT企業に転職してなんとかここまで生き延びましたが、完全に生存バイアスだと思っています😅

なので、しっかりしたスキルを身につけることと、(誰かの意見に盲目的に従うのではなく)自分でいい会社を調べて見つけることが大事になるんじゃないかなと思います。

質問者さんからの返信:資格を取ったり、スクールに通ったりすれば「しっかりしたスキル」が身に付きますか?

急なご相談にもかかわらず、親身になって教えていただきほんとうにありがとうございます。
どのように進路を進めばいいのか、不安でしょうがなかったので心が救われました。

ところで、「しっかりしたスキル」を身につける方法ですが、僕は「進みたい道に対する資格を取得する」だったり「プログラミングスクールに通う」だと思うのですが、この認識で問題ないでしょうか?

僕の回答:「しっかりしたスキル」とは自走力であり、プラスの戦力になることです

資格は持ってて損はない(プラスに評価されることは間違いない)ですが、それだけでは「しっかりしたスキル」が身に付いたとは言えません。
また、「スクールに通う」というのはただの手段なので、「スクールに通う=スキルが身に付く」というわけでもありません。

そもそも、「しっかりしたスキル」の「スキル」とは何なのかを明確にしておく必要がありますね。
僕が考える、未経験エンジニア転職で必要なスキルはいったい何なのかというと、この業界でよく耳にする「自走力」だと考えています。

「自走力=多少時間がかかっても自分で調べて(もしくは勉強して)自力で問題を解決する能力」

みたいな感じです。

僕がメンターをやっているフィヨルドブートキャンプでは「プラスの戦力」と呼んだりもします。

僕の考える、Railsエンジニアとして就職できる最低レベルは、

「少しでもプラスの戦力として計算できる」

というものです。

「Issueを一人でこなせる」

といっても良いかもしれません。

(中略)

「多少の教育コストはかかるけど、レビューをしっかりやればトータルで見れば助かる」

このレベルがプラス戦力です。

Railsエンジニアとして就職できるレベルとは - komagataのブログ

つまり、

「しっかりしたスキルがある人=仕事のやり方やコードの書き方を1から10まで教えなくても、2か3ぐらい手助けすれば残りは自分でやってくれる人」

みたいなイメージですね。

こういったスキルを自力で身に付けれるならスクールに通う必要はありません。
反対に、スクールに通ってもこういうスキルが身に付かないなら、「使いっぱしり」になってしまうリスクがあります。

僕はフィヨルドブートキャンプの関係者なので手前味噌になってしまう部分もありますが、たとえば下のブログ記事を書かれた方の場合はフィヨルドブートキャンプで自走力を身につけたので、すんなり転職できて、そのあとも楽しく働けている一例だと思います。

blog.hirovodka.com

ちなみに自走力はあくまで未経験エンジニア転職でいい会社に入るために必要な、最低限のスキルです。熟練者の場合は自走力はあって当然で、もっと高い技術スキルが求められます。

まとめ

質問者の方とはこんな感じでやりとりさせてもらいました。
完全未経験でエンジニア転職を目指している方は、もしかすると同じような悩みを抱えている人も多いのではないでしょうか?
僕の回答がみなさんの参考になれば幸いです。

なお、やりとりの最後には質問者さんからこんなにお礼の言葉をいただきました。

重ね重ねの質問でしたが、とても丁寧に教えてくださり誠にありがとうございます。

どのような能力を身につければいいか分かっていなかったのですが、具体的に必要な能力を教えてくださり視界を明確にすることができました。ありがとうございます。

たくさん教えてくださったことを考え、自分の道を決めようと思います。
なにも知らない業界で困っていたのですが、とても親切に教えてくださり、ほんとうにありがとうございます。

「わかりました、じゃあ今日からエンジニアを目指して頑張ります!」ではなく、いったん深く考えてから自分の道を決める、というところがいいですね。
ぜひ、良い決断をしてほしいと思います!

余談:僕への相談は「知見を独り占めにしない」が原則です

たまーにTwitter DM等で質問や相談を受けることがあるのですが、僕は原則として質問や相談はオープンにしてもらう(=ネット上に公開する)ことを原則としています。
なぜなら、DMのやりとりだけで終わってしまうと、僕の知見を質問者さんだけが独り占めしてしまうことになるからです。

この話は以下のエントリに詳しく書いています。

blog.jnito.com

「伊藤さんに質問したり、相談したりしたいことがあるんだけど、やりとりはどうしても非公開にしたい」という場合は、有料で対応させてもらっています。興味がある方はMENTAを検索してみてください。

安定のPR:こんな学習環境もあるよ

上のやりとりでもお知らせしたとおり、僕自身がメンターをやっているプログラミングスクールとしてフィヨルドブートキャンプがあります。
このスクールを卒業できれば(注:「通えば」ではない)、間違いなく「プラスの戦力」になれます!(そして僕への質問や相談も追加料金なしでできますw)
bootcamp.fjord.jp

また、参加条件あり&期間限定ですが、チーム開発が無料で体験できるソニックガーデンキャンプというオンラインプログラミング合宿もあります。
未経験だけど、エンジニア職に興味があるという方はこちらもぜひチェックしてみてください。
camp.sonicgarden.jp

あわせて読みたい

未経験からのエンジニア転職に関しては以下のエントリでも僕自身の考えを詳しく書いているので、こちらもぜひ読んでみてください!
blog.jnito.com

すでに勉強は始めていて、そろそろ就職活動を始めようと思っている、という方はこちらのエントリをどうぞ。
blog.jnito.com