ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

RubyWorld Conference 2024 に参加できないけどチームのみんなに良さを伝えた

ふーが です。こんにちは。
この記事は ESM Advent Calendar 2024 の 5 日目の記事です!

世間は RubyWorld Conference 2024 一色な今日この頃。僕は個人的な都合で今年は参加できず大変悔しい想いをしております。

そんななか、今いるチームのほとんどの方が RubyWorld Conference(以下「RWC」と記載) に参加したことがないという話を聞きました。「これは布教するしかない!」と思い立ち、チーム内での勉強会の時間をいただいて布教活動をしてきました。

ここに活動報告をさせていただきます。

RubyWorld Conference 2024 直前 SP

と銘打って、RWC がいかに楽しいかや思い出について、僕が小一時間喋り倒す会を昨日 12/4 に開催しました。
チームメンバーは複数の会社から集まっており、今年初めて RWC にスポンサーとして協賛する会社があり、弊社含め毎年協賛している会社もあり、それぞれ縁のあるカンファレンスです。

そんなわけで自分たちの会社が協賛しているのはどんなカンファレンスなのか、参加したらどのように楽しめるのかを知っていただけたらというのが目的です。

アジェンダ

全体的には以下のような流れで話しました。

  • RWC とは
  • スポンサー企業一覧を眺める
  • タイムテーブルを眺める
  • RubyPrize, Ruby biz Grand prix について
  • 宍道湖湖畔で lake(rake) task
  • 松江の街の見どころ(食事、お酒編)
  • 松江の街の見どころ(観光編)

特に、「松江の街の見どころ」では、チーム内の島根在住メンバー(なんと3人もいます!)からもいろいろなおすすめ情報を教えてもらえて僕自身も勉強になりました。

結果

参加いただいたチームメンバーからは、 「来年はぜひ参加したい!」「Ruby で作られたサービスを利用する側の人のトークを聞けるのが楽しそう」「カニ食べたい」などの前向きなフィードバックをいただきました。きっと来年の参加者増に貢献したものと自負しております。

来年は自分自身もまた参加できるといいなというのと、今のチームメンバーと松江でお会いできたらより楽しい会期を過ごせそうだなと、今年の会期が始まる前から来年に想いを馳せるなどしていました。

おわりに

推しカンファレンスである RWC や松江の良さをチームメンバーに伝える機会をいただけてよかったです。

松江にいる皆さん、今年も楽しい会期をお過ごしください!
今日のお昼には「ESM スーパーライトニングトーカーズによる ESM スーパーライトニングトーク vol.2」がありますのでそちらもぜひご笑覧ください!

blog.agile.esm.co.jp


株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

Mastodon meets Prism

ESM Advent Calendar 2024の4日目の記事です。

こんにちは、構文解析器研究部員のS.H.です。

皆さんご存じかもしれませんが、最近RubyのデフォルトのパーサーとしてPrismが導入されましたね。

bugs.ruby-lang.org

デフォルトのパーサーが変更されたことにより、RailsなどのWebアプリケーションで影響が出るのかなどが気になりました。 そこでそこそこ大きいWebアプリケーションであるMastodonで利用できないかを試してみた記事になります。

環境

最新のMastodonのバージョンであるv4.3.1で試しました。

MastodonではDev Containerで開発ができるように環境が整備されています そのためVS CodeからMastodonのソースコードを開き、Dev Containerを使ってMastodonを動かすことにしました。

github.com

またRubyのバージョンとしてはPrismがデフォルトのパーサーになっている3.4.0-preview2を使用しました。

ソースコードのcloneと最新バージョンへの切り替え

まずはMastodonのソースコードをcloneします。

git clone git@github.com:mastodon/mastodon.git

次に、リポジトリへ移動し、最新のリリースタグであるv4.3.1に切り替えます。

cd mastodon
git switch -d v4.3.1

VS Codeでディレクトリを開く

VS Codeでディレクトリを開くと以下のようにと確認ダイアログがでるので「コンテナーで再度開く」を押します。

その後、ローカル環境かGitHub Codespacesでコンテナを開くかを確認されます。

今回はローカル環境で動かしたいので「Mastodon on local machine」を選択します。 選択後、Dev Containerのセットアップが実行されます。

Ruby 3.4.0-preview2のインストールとbundle install

Mastodon ではDev Container用のコンテナは以下のイメージを利用しています。

github.com

このイメージではrvmを使っており、そちらで利用するRubyのバージョンを切り替えることができます。

rvm経由でRuby 3.4.0-preview2をインストールし、それを使うように変更します。

rvm install 3.4.0-preview2
rvm use 3.4.0-preview2

念のためRubyのバージョンが切り変わっているかを確認しましょう。

ruby -v
# => ruby 3.4.0preview2 (2024-10-07 master 32c733f57b) +PRISM [x86_64-linux]

最後にbundle installで必要なgemをインストールします。

bundle install

Mastodonのアカウントの作成

次に、動作確認用のMastodonのアカウントを作成します。 アカウント名とメールアドレスを指定して、アカウントの作成を行います。

bin/tootctl account create <アカウント名> --email=<メールアドレス> --confirmed --role=Owner 

コマンドでアカウント作成が完了した後以下のように初期パスワードが発行されますので、そちらをメモしておいてください。

New password: <パスワード>

最後に、作成したアカウントを承認します。 Mastodonではスパム対策として作成されたばかりのアカウントにはできることが制限されています。 管理者が承認しない場合は制限されたままで、タイムラインへの投稿などはできないのでここでアカウントの承認を行います。

bin/tootctl account modify <アカウント名> --approve 

Mastodonを動かす

最後にMastodonをDev Container内で動かします。 開発環境向けにbin/devコマンドが提供されているのでそちらを実行します。

bin/dev

コマンド実行後、localhost:3000にアクセスすると以下のようにMastodonの画面が表示されます。

ログイン画面からメールアドレスとパスワードを入力してログインします。

ログイン後、以下の画面にリダイレクトされます。

最後に、画面左側の投稿フォームからつぶやきを投稿できればOKです。

まとめ

Prismがデフォルトのパーサーになったことで実際のWebアプリケーションで利用できるのかを確認してみました。 無事、ローカル環境では動作することが確認できました。

ただMastodonの場合はActivityPubでの投稿の配送や外部のサーバのアカウントのフォローなど外部連携が必要な部分も多くあります。 そのため実際にサーバを建ててみて、問題ないかをテストするほうがより確実かもしれません。

実際のRailsなどのWebアプリケーションで確認する場合は本番環境同等のステージング環境などを用意し、そこで動作確認も行うと安心できそうです。

余談1

僕が管理しているMastodonサーバではRubyのmasterブランチをビルドして動かしています。 その関係で一時的にPrismをデフォルトのパーサーとして動かしていた時期があり、問題なく動くこと自体は検証できていたりします。

余談2

現状ではMastodon自体は動きますが、まだRSpecでのテストは動かなかったりします。

root ➜ /workspaces/mastodon (9adb96f3a) $ RAILS_ENV=test bin/rspec
/usr/local/rvm/gems/ruby-3.4.0-preview2/gems/activesupport-7.1.4.1/lib/active_support/core_ext/benchmark.rb:3: warning: /usr/local/rvm/rubies/ruby-3.4.0-preview2/lib/ruby/3.4.0+0/benchmark.rb was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.
You can add benchmark to your Gemfile or gemspec to silence this warning.
ruby: prism/util/pm_newline_list.c:93: pm_newline_list_line_column: Assertion `cursor >= list->start' failed.
Aborted (core dumped)

ちなみにRubyのmasterブランチだと修正されているのかテストが動くようになっていたりします。

参考

github.com

docs.joinmastodon.org


永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発と構文解析器の研究を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

JRuby と SQL Server を利用した Rails の開発環境を作る

この記事は、永和システムマネジメントのアドベントカレンダー ESM Advent Calendar 2024 の 3 日目の記事です。

はじめに

@wai-doi です。自分が以前アサインされていた Rails アプリケーションは、古い JRuby と Rails に SQL Server を組み合わせた構成のアプリケーションでした。

最近の Rails で JRuby と SQL Server を使った構成で開発をしようとする場合、どのように環境構築できるのか気になったため調べてみました。

方針

なるべく個人の環境に依存しないように Docker を利用して構築します。また、Rails 7.2 から rails new で作成できるようになった Dev Container を利用してみることにしました。

目標は、ローカル環境で Scaffold を生成して CRUD 操作ができるようになるまでとしました。

実行環境

  • Apple M3 Pro
  • macOS Sonoma 14.4
  • Docker Desktop 4.32.0

利用した Docker Image

JRuby

JRuby の公式のイメージを利用しました。

https://hub.docker.com/_/jruby

JRuby のバージョンは 9.4.8.0、Java のバージョンは 11 の jruby:9.4.8.0-jdk11 のイメージを利用しました。 11 を利用した理由は後述します。

SQL Server

SQL Server には Microsoft の公式が出しているイメージを利用しました。

https://hub.docker.com/r/microsoft/mssql-server

最新の mcr.microsoft.com/mssql/server:2022-latest のイメージを利用しました。

docker-compose.yml

docker-compose.yml は以下のようになりました。

version: '3'

services:
  app:
    image: jruby:9.4.8.0-jdk11
    command: sleep infinity
    environment:
      DB_USER: sa
      DB_PASSWORD: Passw0rd!
    volumes:
      - ..:/workspace:cached
      - bundle:/usr/local/bundle
    network_mode: service:db

  db:
    platform: linux/amd64
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      ACCEPT_EULA: Y
      MSSQL_SA_PASSWORD: Passw0rd!
    volumes:
      - mssql-data:/var/opt/mssql

volumes:
  bundle:
  mssql-data:

JRuby で動作する Rails の app サービスと、SQL Server の db サービスの構成です。

db の environment にある ACCEPT_EULA: Y は Microsoft のライセンスに承諾するために必要です。MSSQL_SA_PASSWORD には任意のパスワードが必要です。このパスワードと同じものを app から sa ユーザーで接続するときに必要になるため、後で database.yml で利用できるよう environment に書いています。

devcontainer.json

Dev Container で開発できるように devcontainer.json を作成し、以下のようになりました。

{
  "name": "jruby_mssql_rails_app",
  "dockerComposeFile": "docker-compose.yml",
  "service": "app",
  "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
  "features": {
    "ghcr.io/devcontainers/features/common-utils:2": {
      "username": "vscode"
    }
  },
  "remoteUser": "vscode"
}

dockerComposeFile に先ほどの docker-compose.yml を指定して、service に JRuby コンテナのサービス名の app を入れます。

features の common-utils は今回は関係ないですが、開発をするための便利なコマンドを使えるにするために入れています。 vscode という一般ユーザーを作っています。

利用した gem

Railsで JRuby と SQL Server を利用できるようにするための gem を紹介します。

activerecord-jdbc-alt-adapter

https://rubygems.org/gems/activerecord-jdbc-alt-adapter

activerecord-jdbc-alt-adapter は JRuby 対応の ActiveRecord と SQL Server の Adapter 用の gemです。今回調べた中では、比較的メンテナンスされている gem でした。

安定版で最新の 70.2 を使います。そのため、対応している Rails は 7.0 系になります。

※ 類似の gem として activerecord-jdbcsqlserver-adapter がありましたが、Rails 5.2 系への対応からメンテナンスが止まってしまっているようなので、今回は利用しませんでした。

jdbc-mssql

jdbc-mssqlactiverecord-jdbc-alt-adapter の README の Usage に書かれていた gem でしたので利用します。JDBC Driver が同梱されているようです。

https://bundler.rubygems.org/gems/jdbc-mssql

安定版で最新は 12.2.0 でしたが、DB 接続時に ActiveRecord::JDBCError: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. のエラーが発生してしまいました。

jdbc-mssql が 0.9.0、Java が 11 の組み合わせでうまく行きましたので、jdbc-mssql は 0.9.0 を利用しました。

Gemfile

Gemfile の一部抜粋は以下のようになりました。

gem "rails", "7.0.8.6"

platforms :jruby do
  gem "activerecord-jdbc-alt-adapter", "70.2.0"
  gem "jdbc-mssql", "0.9.0"
end

# 以下省略

Rails は 7.0 系で最新の 7.0.8.6 を利用しました。 前述した gem は platforms :jruby のブロックの中に追加します。

database.yml

config/database.yml は以下のようになりました。

default: &default
  adapter: sqlserver
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV['DB_USER'] %>
  password: <%= ENV['DB_PASSWORD'] %>

development:
  <<: *default
  database: jruby_mssql_rails_app_development

adapter には sqlserver を指定します。 username と password には docker-compose.yml で設定した環境変数を用いています。

おわりに

以上の環境構築を行なって、Scaffold で簡単に動作確認できることを確認できました。 今回環境構築したコードは https://github.com/wai-doi/jruby-mssql-rails-app へ上げていますのでご参照ください。

今回のようなマイナーな構成では利用できる gem の調査に苦労しましたが、いろんな構成を経験することで知見が広がり、よい取り組みになりました。


株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

Rails 8 を語る会を開催しました

こんにちは。福井で働く taiju です。

この記事は ESM Advent Calendar 2024 の 1 日目の記事です。

先日、アジャイル事業部内で「Rails 8 を語る会」というイベントを開催しました!Rails 8 の新機能や変更点について、みんなで知見を共有しながらディスカッションしたこのイベントは、学びも多く、盛り上がりました。この記事では、その内容をレポートします。

Rails 8 を語る会とは

2024 年 11 月 8 日、Rails 8 がリリースされました。今回のリリースでは、#NOBUILD、#NOPAAS という新たな標語が掲げられ、それに関連する機能が多数追加されています。

「Rails 8 を語る会」は、これらの新機能を把握し、それを実務にどう活かしていくかを考える場として開催されました。

なぜ Rails 8 を語る会をやろうと思ったのか

私は他事業部から異動してきたこともあり、アジャイル事業部内では Rails 歴が浅く、Rails 7 から本格的に Rails に触れています。

歴史の長いプロダクトは、機能が増えるにつれて便利になる反面、複雑さが増していくイメージを持っていました。しかし、Rails はバージョンを重ねるごとに「シンプルさ」と「簡単さ」を追求し続けているように感じています。これは、Rails 7 から触れ始めた私にとっても新鮮な驚きでした。

そんな中、私が所属するプロジェクト内で「Rails 7.2 で rails new してみる会」を開催したことがありました。この会では、メンバー同士で新機能について話し合いながら試してみることで、自然と新しい知見が得られたり、議論が盛り上がったりする楽しい時間を過ごすことができました。この体験から、「事業部全体のメンバーともこういった形で知識を共有できれば面白いだろうな」と感じるようになりました。

さらに、今回の Rails 8 には、Rails の運用そのものを見直すきっかけになりそうな新機能や変更点が数多く盛り込まれています。これらを目にしたとき、Rails 歴の長い先輩メンバー達がどのように受け止めているのか、純粋に興味を持ちました。

こうした背景から、プロジェクト内での良い体験を事業部全体に広げる形で「Rails 8 を語る会」を開催しようと決めました。

会の進行

そんなこんなで、Rails 8 を語る会を開催したいという趣旨の提案をしたところ、多くのメンバーから賛同をいただいて、先日、無事に開催に漕ぎ着けました。

会は Slack のハドルで開催し、事前に esa 上に作成した下記の文書 (会の開催前後に加筆した部分含む) を元に進行しました。以下はその文書の内容です。


トピック

Rails 8 のリリース記事やリリースノートを眺めてみる

関連資料
参考: Rails 7.0 - 7.2.2
参考: Rails 8.1

Rails 8 についての感想

Let's have a discussion!

実務での Rails 8 の新規導入・アップグレード

Let's have a discussion.

RailsDiff を眺めてみる

RailsDiff - 7.2.2 → 8.0.0


参加者から提供された話題

Rails 8 のリリース内容をひとりで追うだけでは得られない知見が、今回の会を通じて得られました。進行役として「私は○○がよくわかっていないのですが、説明できる方いらっしゃいますか?」と話を振る形で進めましたが、先輩メンバーが歴史的経緯や実例を交えて解説してくれたので、理解を深めることができました。

中でも以下のような話題が参加者から提供されました。

  • ONCE プロダクトについて
  • パーソナルプロジェクトで Kamal を使ってデプロイをしているメンバーから、Kamal を実際使ってみての感想や使えそうなシーン、用途について
  • Solid Trifecta などと比べて記事上では目立たない (私も気付いてなかった) が、普段使いの API としては ActionController::Parameters#expect が目玉機能になるのではという話
  • 実プロジェクトでどのように Rails 8 にアップグレードしたか、アップグレードで採用した新機能 (または計画) について
  • SQLite をプロダクション環境で運用することの是非について

まとめ

今回の「Rails 8 を語る会」では、個々のプロジェクトに閉じがちな知識を持ち寄り、みんなで Rails 8 のリリース内容とその感想を共有できたのは、とても有意義でした。

アジャイル事業部では、いくつもの社内勉強会を通じてプロジェクト横断的な知識共有を行っていますが、Rails の実務といった具体的なトピックを深掘りする場は意外と少ないので、今回のようなスポット的なイベントを開催することは意義があるということを再確認しました。

社内で採用しているコア技術のメジャーアップデートがあった時や、何か大きなパラダイムシフトがあった時 (アジャイル事業部でも ChatGPT の勉強会などを実施した) などは、スポットイベントを開催するのにちょうど良いタイミングなのかもしれません。

今後も今回のようなスポットイベントを定期的に開催していきたいと思います!


株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

RubyWorld Conference 2024に登壇、協賛します

2024年12月5日(木) から 6 日(金) にかけて松江で開催される、RubyWorld Conference 2024に koic が登壇、永和システムマネジメントは Platinum スポンサーとして協賛します。

本編登壇: 12月5日(木) 14:50-15:05

koic が『Rubyプログラミングスクールからの採用と育成』というタイトルで登壇します。

2024.rubyworld-conf.org

講演については登壇者のブログを参照してください。

koic.hatenablog.com

ショートプレゼンテーション: 12月5日(木) 12:00-12:10

『ESM スーパーライトニングトークス Vol.2』を引っ提げて、今年も ESM スーパーライトニングトーカーズが松江にやってきます。今回は junk0612, nsgc, koic, S.H, maimu, m_pixy, haruguchi という顔ぶれでの出演です。7名で10分の持ち時間を瞬く稲光タイムをお楽しみください。

ランチタイムの1F大展示場に響き渡る銅鑼の音が目印です。Don't miss it!

2024.rubyworld-conf.org

出張 Rails/OSS パッチ会、構文解析器研究部

普段はオンラインで開催している Rails/OSS パッチ会、ならびに社内で開催している構文解析器研究部をあわせて現地開催します。

スポンサーブース

永和システムマネジメントは Platinum スポンサーとしてブースを出展します。お気軽にお立ち寄りください。

それでは松江でお会いしましょう!


株式会社永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

Rails / OSS パッチ会 2024年11月のお知らせ

2024年11月の Rails / OSS パッチ会を 11月25日(月)に Discord でオンライン開催します。

この会をひとことでいうと、日頃のお仕事で使っている Rails をはじめとする OSS について、upstream にパッチを送る会です。

会には Ruby と Rails のコミッターである顧問の a_matsuda もいますので、例えば Rails に送るパッチのネタがあるけれど、パッチを送るに適しているかの判断やパッチを送る流れが悩ましいときなど a_matsuda に相談して足がかりにするなどできます。

開催時間は 17:00-19:00 となりますがご都合のあう方はぜひご参加下さい。

Discord の Rails/OSS パッチ会サーバーへの招待 URL は以下です。

discord.gg

これからパッチ会に参加してみたいという方、OSS 開発者間の会話に興味があるので聞いてみたいという方もお気軽にどうぞ。


永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp

Rails / OSS パッチ会 2024年10月のお知らせ

2024年10月の Rails / OSS パッチ会を 10月30日(水)に Discord でオンライン開催します。

この会をひとことでいうと、日頃のお仕事で使っている Rails をはじめとする OSS について、upstream にパッチを送る会です。

会には Ruby と Rails のコミッターである顧問の a_matsuda もいますので、例えば Rails に送るパッチのネタがあるけれど、パッチを送るに適しているかの判断やパッチを送る流れが悩ましいときなど a_matsuda に相談して足がかりにするなどできます。

開催時間は 17:00-19:00 となりますがご都合のあう方はぜひご参加下さい。

Discord の Rails/OSS パッチ会サーバーへの招待 URL は以下です。

discord.gg

先週末に開催された Kaigi on Rails 2024 について話題にしながらの開催になると思います。

kaigionrails.org

これからパッチ会に参加してみたいという方、OSS 開発者間の会話に興味があるので聞いてみたいという方もお気軽にどうぞ。


永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp