本記事では、2022年 1月25日にオンライン開催された、銀座RailsというRailsに関する技術知識交換イベントの#41に聴講側として参加した話をします。
目次
目次
はじめに
初めまして。2020年4月にグリー株式会社にエンジニアとして新卒入社したセキヤです。その後はアウモ株式会社にサーバーサイドとして配属され、2020年6月にwfs株式会社にゲームクライアントとして配属、2021年12月にアウモ株式会社に再配属となり、再度アウモでの仕事をスタートしました。
アウモでは、amp開発やFAQスニペットやデータ更新rakeタスクなどのweb記事周りを中心としたタスクを行いつつ業務理解を深めています。直近の大きなタスクとしては、先日リリースしたカテゴリ実装も担当させていただきました。他にも様々なタスクを担当して幅広い経験を積ませていただいています。
今回、そんな私がRailsの知見を深めるために銀座Railsというイベントに参加しました。
銀座Railsとは、Railsについての知識を交換し、日々の開発に役立てていこうという人々の集まるコミュニティで、月1回Railsの技術知識交換のための登壇/発表イベントが行われています。
2022年 1月25日にオンライン開催された銀座Rails#41に参加してきましたので、そこで行われた講演やLTからいくつかピックアップして内容と感想をお伝えします。
銀座Rails#41の内容と感想
銀座Rails#41の講演は、RailsでのPDF出力の業種・用途に応じた注意点や苦労話に関する講演から始まり、Railsガイドの中の人がRails7リリース後一週間でRails7ガイドをリリースした話とその裏側についての講演や、初心者が自分のシステム開発を進める上であったらいいなと思ったGemを食わず嫌いしていた技術領域含め開発していった話など、面白い話ばかりでした。
その中で今回は、rails newの実装と動作の話、点字メーカープログラムの話、オンライン懇親会での話をお伝えします。
rails newの実装と動作
LTのTalkerが、新年にhappy new yearとコマンドラインに打ち、command not found: happy と言われ、「は?Happyは作れる」と、happyにrailsのaliasを引くところから始まる面白いLTです。
そこからrails newコマンドに興味を持ち実装を探っていく様子を見ることができ、ためになるのでぜひ一度じっくり資料を読んでみてください。
Rails::Command.invoke へのコマンドライン引数がpluginか否かによるnamespaceの渡し分けや、そのinvokeでnamespaceに応じたcommandを検索しperformを実行して、そのperformの中でRails::Generators::AppGenerator.startとジェネレータを走らせアプリを作成するという一連の流れなどを見ることができました。
ここで、rails newというコマンドは、実はジェネレータを走らせているということも驚きでした。
さらに、このAppGeneratorにて、handle_invalid_command!というメソッドで、コマンドライン引数がnewでない場合は–helpにすりかえて実行する処理が書かれていて、ただのエラーで突き返さない、優しい受付対応の人間のあたたかみのようなものを感じほっこりとしました。
点字メーカープログラム
メインセッションとして、応募された点字メーカープログラムのコードを公開レビューするという講演があり、面白かったので紹介します。
まず、点字の仕組みを軽く説明します。
点字は3行2列の6つの点からなり、左から下に1〜6の番号が振られています。
母音の「あいうえお」については上2行を使って表現され、下2行の残った点を使って「かさたな」などの子音が表現されます。
「やゆよわん」は例外となり、母音の位置をずらして子音の点を打ったり、決め打ちで管理しなくてはなりません。
(詳しくは、講演資料の6p〜16pをご覧ください。2分で点字について完全に理解した()と呟いてしまうこと間違いなしな程にわかりやすくまとまっています。)
次に点字メーカープログラムの作成の流れについては、
ローマ字入力に対して点字を出力するという問題を解決するプログラムを作成するのですが、入力と出力の雛形は作られていて、ローマ字を点字に変換するロジックを組むところが課題になります。
今回応募されたコードの中で一作品がレビューされる形式で、一番コードファイルの容量が少ない応募作品が選ばれました。
選ばれた応募作品のコードはローマ字を母音と子音に分け、ローマ字をhashに母音と子音それぞれの点字の位置を割り当て、その後その二つの点を合わせて一つの点字を作るというものでした。例外文字については別途割り当てられるものでしたが、とても単純で綺麗なわかりやすいコードでした。
その後紹介された、過去応募の中での最優秀作品は、そのhashのロジックをさらに少なくしたもので驚きました。
例外文字も母音と子音のhashを通れば割り当てられるようになっていて、拡張性は薄いですが美しいの一言でした。
出題者の模範解答は、Tenjiクラスを作成しています。
bit演算で扱いやすくなるように点字の番号振りについて左から下ではなく左から右に変更されていますが、クラスとなっているため拡張や応用もできる作りになっていて、将来性があるコードだと感じました。
オンライン懇親会
講演とLTが全て終わった後、オンライン懇親会にも参加しました。
懇親会では、講演やLTの感想や仕事の苦労話などが話し合われました。(PDFは印刷崩れ意識しないといけなくて大変……わかりづらいコードについて前任者に聞けるかは離職率が鍵……手順の継承は手順書より動画でやってる……などなど)
手順の継承方法については、手順を授ける側と授けられる側の二つの視点があることを学びました。
動画を撮る場合、いつも通りの手順で仕事をしつつ、録画を回しておけば良いので、授ける側はとても楽です。授けられる側も、実際の画面全体の流れを見つつ進められるので、スムーズで不足もないように感じます。
私はこれまで手順書などの文書による継承方法が良いと考えて育ってきました。用途パターン別の手順があることや、操作要素の変化も加味すれば、部分ごとにパターン別の記載ができたり更新がしやすい方が良いと感じていたためです。
これからは、手順を授ける側、授けられる側の手間や理解のしやすさ、手順の変化も念頭に入れて、手順の継承方法を模索していこうと感じました。
点字メーカープログラムの話題の中で、各人各社のRailsのコーディングルールや美しい書き方の話になりました。
「3項演算子はrailsだとpreset? ?のように?が二つ並んでしまう」という話は確かにと感じ面白かったです。
それぞれの事例の話題で会話がされる中で、毎回「ロボコップ」という単語が出てきました。
ロボコップとは、静的コード解析ツール「RuboCop(ルボコップ)」の俗称です。aumoの開発環境にはまだ導入されてないもので、私が今まで関わった仕事でも触れたことのないものでしたが、コードの一貫性を綺麗さを保つ上で業界では欠かせないものとしてインプットになりました。
おわりに
ここまで私の銀座Rails#41聴講レポートを読んでいただきありがとうございました。
日々何気なく使っているコマンドを追求したり、仕事を効率よく進めるために世界にシェアできるパッケージを作るなど、プログラムやものづくりを始めた頃の初心を忘れぬよう、また事業や仕事としての貢献や成果の意識も忘れぬようにしようと感じました。
RuboCopを弊社にも導入する話が進んでいて、銀座Railsで話に出ていたこともあり、高揚している自分を感じます。
このようなイベントに参加して、改めて他の技術者の話を聞くのは大切だと感じました。
今後もインプットを行い、自身の中で Try & Error のPDCAを回し、事業やチームに貢献してアウトプットも視野に入れて精進していきます。