Kaigi on Rails 2021 をスポンサーとして応援して論理ブース出展しました

技術顧問の五十嵐(igaiga)です。Kaigi on Rails 2021 が10月22日, 23日にオンライン開催されました。

 

弊社クルーバーもスポンサーとしてKaigi on Railsを応援するとともに、メンバーが業務の一環として参加して講演を聞きました。

 

kaigionrails.org

 

講演はどれも興味深く勉強になりました。特に基調講演で話されたkamipoさんと
Rafaelさんはお二方ともキャリアとモチベーションの話をされていて、聞いていると私もモチベーションを得られました。基調講演は良いものだと感じる良い基調講演でした。

 

クルーバーから参加したメンバーに感想を書いてもらいました。

 

kim 「会社で進めているプロジェクトにマッチする話(システムテストなど)がいくつかあったので参考になりました。また、reBakoというオンラインイベント会場のツールを初めて使いましたが、今後、社内のイベントなどで導入できれば良い刺激になって面白いのではないかと思いました。」

 

Ryo言語に限らずシステム開発で意識すべき課題や、開発中に当たった壁など、実体験を元にした話が多く、共感出来る部分が非常に多かったです。

また、著名な外部のエンジニアの方と会話でき、率直に楽しかったです。今後より建設的な議論をするためにも、スキルを上げなきゃ……といい刺激になりました。

 

また、今回のイベントの特色として、論理空間上でのスポンサーブース出展がありました。先ほどの感想でも出てきたツール reBako をつかって、論理空間上にスポンサーブースをつくってそこで参加者さんを待ちます。机と椅子が用意されていて、椅子に着席すると動画や音声で通話できる仕組みです。実際に話しているときの様子はこのような感じです。

 

f:id:iga_k:20211026142700p:plain

reBako

左の3人が弊社のエンジニアで、そこへkinoppydさん(RubyKaigi Takeout 2021 感想戦@仮想三重でご登壇)、yasulabさん(今回のKaigi on Railsにて『学習者に聴く!Ruby on Rails 学習者の「今」』でご登壇、また後述のプレイベントにもご登壇)、hasumikinさん(RubyKaigi takeout 2021にて『PRK Firmware: Keyboard is Essentially Ruby』でご登壇)が弊社ブースへ遊びにきてくれたときのスクリーンショットです。みんなでワイワイ話すのは、物理開催されていたころのテックイベントを思い出す、良い体験でした。

 

みんなreBakoを初めて使うのでいろいろと未知な点もありましたが、1日目でわかった「着席しづらい」という問題を2日目は「近くに来た方へDMで声かけする」「テーブル招待機能をつかう」といった手段が公開され全社で解決を試みるなど、みんながツールを使うことに慣れていくたのしさもありました。

 

reBakoはとてもよくできたツールで、物理スポンサーブースに一歩近づいた感がありました。つかってみて気づいた機能要望としては、近くを歩いている人とかんたんなテキストコミュニケーションをできたら嬉しいなと思いました。音声だと敷居が高いですが、テキストや絵文字であれば普段つかっているので気軽に複数人でお喋りができて楽しいかもと思いました。

 

また、本会に先立ち10/10にはプレイベントとして Kaigi on Rails _2021_ new が開催されました。

オーガナイザーである大倉さんの「初学者からベテランまでみんなが楽しめるイベントにしたい」という想いの1つの実装として、主に初学者へ向けたイベントとして開催され180人の登録者を集めました。

私もチェリー本の著者の伊藤さん、RailsチュートリアルRailsガイドの日本語翻訳版を運営する安川さんと共に座談会でお話ししました。

kaigionrails.doorkeeper.jp

 

gihyo.jp

railstutorial.jp

 

座談会は次のテーマで話されました。

 

  • 書籍やスクールで学べることと、現場でエンジニアとして働く(採用される)ことの一番のギャップは何だと思いますか?それを埋めるにはどうしたらよいでしょうか。
  • もし今初学者としてWeb(Rails)エンジニアを目指すとしたら、何をどのような順序で学んでいきますか?
  • おおよそ3年目くらいまでに身につけておきたい知識とそのレベル感とは?
  • 「一人前」とはどういう状態なのか、それに近づくにはどうすればよいと思いますか?

 

三者三様の意見がでてきて、参加している私にとってもとても楽しい時間でした。興味を持った方はイベントページから録画された動画へのリンクがありますので、ぜひ見てみてください。

 

どれも良いお題ですが、私は特に「もし今初学者としてWeb(Rails)エンジニアを目指すとしたら、何をどのような順序で学んでいきますか?」が面白い問いだと感じました。理由は私がたどってきた道と、これから学習していくみなさんとでは背景や状況が違うので、私の経験からだけでは答えが出ないからです。

 

私が初めて学んだRailsはバージョン2.3でしたが、当時はWebアプリ開発にみんなそこまで慣れているわけでもなく、JavaScriptも素朴であり、アセットパイプラインもなく、Bundlerもなく、GitもGitHubも知らない、そんな時代でした。環境が整備されていないが、技術を1つ1つ登場のタイミングで学んでいく時代です。また、他の言語を学んだ人がRailsにやってくることが多く、Rubyの書籍の多くもそれを前提にしていたような気がします。

一方で現在はあらゆる環境が揃っていて、それを一度に学ぶ必要があります。効率は良くなりましたが、学ぶ対象が増え、しかもそれらが一度に押し寄せるのが難しい点です。とはいえ、学ぶときは一歩ずつという基本は同じだと思うので、私なりの答えを書いてみます。

 

最初に「ゼロからわかる Ruby超入門」「Railsの教科書」で基礎を学んで、「Railsガイド」の前半分ほどを読んでRailsの機能やメソッドを把握します。そのあとは「現場Rails」「独習Rails」「Rails6実践ガイド」などの入門書から1冊もしくは複数冊選んで学んでいきます。ここでRailsのレシピ本(逆引き本)があるとすごく良いのですが、現在は無いのが残念なので、誰か書いてください。次はフロントエンドを学んでいって、そこでRailsかフロントエンドか、どちらをメインでやっていきたいかを決めるのではないかなと思います。

 

また、開発環境構築も難しい問題で、最初にやる作業なのにこれがとても難しいという課題があります。GitHub CodespacesVisual Studio Code for the Web が扱いやすくなればブラウザだけでRails開発環境構築ができるので、ここはすごく期待しています。「Railsチュートリアル」でもWeb上で動作するAWS Cloud9をつかった環境構築を説明しています。理想的にはこれらがさらに一歩進んで、アカウント登録不要で、かつ、無料枠である程度の学習ができる状況になるといいなと願っています。

 

Railsエンジニアを目指すみなさんの学習の旅路が楽しいものになりますよう応援しています!

 

そしてクルーバーでは一緒に開発するメンバーを大募集しています!

 https://www.zerotoone.co.jp/recruit/ 

 

www.zerotoone.co.jp

 

アップガレージ店舗で利用する入庫商品登録機能リニューアル

Crooooberの宮川です。アップガレージの店舗に導入されている基幹システムの開発・運用を担当しています。

 

アップガレージではタイヤ、ホイール、カーオーディオ、カーナビなどの車のパーツをお客様から買い取りをしています。今回は、店員さんが商品を買い取ってアップガレージの在庫商品として登録する機能をリニューアルしました。

 

入庫商品登録機能

いままではデジカメで写真を撮影して、PCへ転送してから登録が必要でした。今回の機能開発によってスマートフォンから商品登録が可能になりました。スマフォで撮影した写真を転送せずにそのままブラウザから登録できるので、転送する作業が不要になり、店舗の業務改善に一役買っています。

 

f:id:iga_k:20210813183918p:plain

f:id:iga_k:20210813183922p:plain

 

f:id:iga_k:20210813183932p:plain

利用技術と課題

技術スタックとしては他のサービスと同様にフロントエンドにNuxt.js、バックエンドにRailsをつかって開発しています。開発が難しかったところとしては、Crooooberのシステム全体が古いシステムと新しいシステムが共存している過渡期で、新旧システムでデータ同期が必要なことがあります。今回新しく実装した範囲でも古いシステムを一部考慮しなくてはならないので、その整合性を考える部分で難易度が高くなっている部分もありました。

 

今後の展望

今回の新機能でスマフォで業務できる範囲が増え、重要な作業である商品買い取りの業務改善を一歩進めることができました。今後、蓄積されたデータを分析したり、分析データによって業務作業をアシストするなど、より便利に業務を進められるような改善を続けていきます。

 

クルーバーでは一緒に技術的な課題を解決していく仲間を募集中です!

www.zerotoone.co.jp

RubyKaigi Takeout 2021 をスポンサーとして応援しました

技術顧問の五十嵐(igaiga)です。RubyKaigi Takeout 2021 が9月9日〜11日の3日間で開催されました。

 

rubykaigi.org

 

弊社クルーバーもスポンサーとしてRubyKaigiを応援するとともに、何人かのメンバーが業務の一環として参加して講演を聞きました。オンラインでの開催で、世界中から多くの開発者さんが興味深い話をしてくださいました。

JITに関連する話はRuby本体に入っているMJITがついにRailsを数%高速化した話をk0kubunさんが行ったほか、Maximeさんが話すYJITは実戦投入されていて、Railsも10%程高速化し、開発者も10人程の大人数でやっていることが驚きでした。加えて、2日目の基調講演でChrisさんがShapeというインスタンス変数のデータの持たせ方についての提案を行ったり、ブラッドさんがつくっているMIRについてk0kubunさんが言及されたりと、JITに関連した多くの話題が提供されました。話された話題の中でRuby3.1や今後のRubyに入る機能があるかもしれないのは楽しみです。

開発環境改善の話題では型定義ファイルrbsがRuby3.0で入ったあとに進化を遂げていて、mameさんの基調講演ではVSCodeで型を表示するコメントやメソッド補完、ko1さんの講演ではデバッガであるdebug gemが動いていたりと一気に進化していました。WindowsでもMacでも動くVSCodeでいろいろな機能が使えることは教育現場の観点からもありがたいです。

参加メンバーの一言感想

hotoolong

Railsをメインに活動しているフリーランスのhotoolongです。

今回のRubyKaigi2021 takeout ではIDE連携、JITなどの高速化、Ractor、型定義などの話題がメインでした。

静的型付け言語が最近の主流ですが、LSPによる入力補完が強化されることにより速くコードが書けそうですし、JITやRactorとの連携でいままで遅いと言われているRubyがより速く動ごき更にはメモリ消費が少なく動く未来が近づいているのではないかと希望が持てました。

Ruby3.0よりも更に三倍はやくするという話も出ていたので遅いと言われるRubyの進化が今後も楽しみです。

しゅう

講演「TypeProf for IDE: Enrich Dev-Experience without Annotations」

静的型付けが好きな一番の理由は、まさにRubyKaigiで紹介された様にIDEからのサポートがとにかく強力で書きやすく、型チェックの安心感もあることです。Rubyの様な柔軟な言語に強力なIDEサポートが加わるのがとても楽しみで、待ち遠しいですね。

igaiga

ko1さんのdebug gemはVSCodeで変数の中身が見えたりブレークポイントを作成したりとIDEとの統合が進んでいて便利に感じました。Ruby3.1に標準添付されると、Gemをインストールする必要もないので、初学者向けの書籍でも説明しやすいのが助かります。

どの講演も興味深かったですが、「Parsing Ruby」はRubyの文法とパースの歴史が調査解説されていてすごくおもしろかったです。

そのほかにも

ほかにも、はすみさんのキーボード上でRubyを動かす話や、mrknさんのグラフをRubyから簡単に描けるChartyをJupyter Notebookと組み合わせて便利に使えるデモは興味深かったです。

しおいさんのプロトコル自作にima1zumiさんのエンコーディング自作、udzuraさんのバイナリ組み立てにosyoさんのAST黒魔術、tagomorisさんとunasukeさんのRactorの話など、作ってみた系の話も本当にすごいなと楽しみながら観させていただきました。

たのしさにあふれた3日間でした!

スポンサー

また、弊社クルーバーはRubyKaigi Takeout 2021をスポンサーとして応援しました。素晴らしいイベントを運営してくれたスタッフのみなさんに感謝します。

 
f:id:iga_k:20210921145050p:plain

 

クルーバーでは一緒に開発するメンバーを大募集しています!

 https://www.zerotoone.co.jp/recruit/ 

www.zerotoone.co.jp

レガシーなシステムをピカピカに磨くための新アーキテクチャ

クルーバー技術顧問の五十嵐(igaiga)です。今年の3月から技術顧問として勤務しています。クルーバーではカー用品・バイク用品に関する複数のECサービスを開発して運用しています。

 

今日はクルーバーが行っているレガシーとの闘い、大規模な設計変更についてお話しします。

旧設計とそのつらいところ

f:id:iga_k:20210813115321p:plain

旧システム概要
旧システムをざっと表現するとこのような構成になっていました。ほとんどぼかしをいれてしまっているので、よくわからないかもですが、ごちゃごちゃしていることは伝わるのではないでしょうか。保守コストが高いところがたくさんあり、また使われている技術領域もバラバラで人の移動にも大きなコストがかかっていました。

 

移行前に困っていた点としては次のようなものが挙げられます。

データが点在していた

たとえば在庫データなどが各サービスなどに散らばって保管されていたため、各サービス間でやりとりが多く発生していました。また、そのやりとりもCSVファイルでエクスポートしてファイルを転送してインポートするなど、レガシーな方法で行われていました。

レガシーなミドルウェアに依存していた

廃れてしまった旧世代の技術をつかったミドルウェアで書かれたサービスがあり、継続が困難な上に、技術の習得も難しく、人の交替もままならない状況でした。

ほかにもいろいろと挙げられますが、レガシーな領域が多く、それらを使い続けたまま存続させることはとても困難な状況となっていました。

新しい設計

これに対応すべく、新システムとして新しいアークテクチャを設計して対応することにしました。具体的には、次のようなマイクロサービス構成で設計しています。

 

f:id:iga_k:20210813115412p:plain

アーキテクチャ

Rails + GraphQL API を基本構成とする複数の基盤サービスで構築しています。ユーザーが利用するWebサービス部分はNuxt.js + Railsで構築し、必要に応じて基盤サービスを利用します。利用技術を揃えて、1人のエンジニアが複数のサービスに渡って新機能を実装しやすくしています。

 

前述した「データが散らばっていた」は既に「在庫基盤」として改善がなされた新設計で稼働をはじめています。図の右下に書かれている旧DBから左上に書かれた新DBへデータを同期する仕組みが稼働し、新DB側へデータが集まるようになりました。旧DBの古いしがらみは捨てて新DBはスキーマも新たな設計を採用し、しかも旧DBから新DBへサービス群を止めずになめらかに移行する仕組みを実装して稼働している状況です。ただし、規模も大きく全ての移行を一発で終わらせるには難しいため、まだ旧DBを見ていたり、旧DB時代のしがらみを解消する途上の箇所もまだまだあります。

 

共通で利用される「基盤サービス」としては前述の「在庫基盤」のほか「ユーザ基盤」「検索基盤」「帳票基盤」などが実装されて、部分的に、または機能全体が稼働しています。

現在と今後の課題

レガシーな旧システムを新設計によって改善を進めています。まだ基盤部分も実装途上の部分、足りない部分の方が多いですし、旧システムの上で動くサービス群は大半がこれから移行となります。

 

また、マイクロサービスやGraphQLなどのアーキテクチャを導入したため、新たな課題も生まれました。サービスを横断してトランザクション処理が必要な場合にどのように解決するのか。リポジトリを横断して開発をするためにDockerプロセスを多数起動しているが、開発環境をシンプルにつくるのにはどうすれば良いのか。運用コストを下げるために監視などをどのように改良していけば良いのか。GraphQLをつかって良いAPIを設計するためにどうすれば良いのか。

 

ここまでの新設計とその改善は私が入った3月時点で既にできていました。現在、私は同僚と一緒にこの新設計への移行を進めています。また、この機会からRailsをつかって開発するようになったメンバーもいるので、「パーフェクトRails」をつかった読書会を実施するなどして学習の仕組みも整えています。

 

まだまだやることも課題も山積みですが、より良いシステムへ進化させていくため、私たちと一緒に設計してコードを書いてくれるメンバーを大募集しています。マイクロサービスで運用される基盤群やサービス群を設計実装したり、GraphQLをつかってAPIを設計実装したりと、考え甲斐のある技術課題を解決したい方の応募をお待ちしています!

 

www.zerotoone.co.jp