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

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

オンライン技術顧問サービスはじめました

永和システムマネジメント アジャイル事業部として『オンライン技術顧問サービス』をはじめました。ひとことでいうと、私 (@koic) による技術顧問サービスです。

どんなサービス?

アドバイザーという位置付けで参画する形での有料サービスです。基本的な動きとしては、まず GitHub リポジトリに招待していただくことになります。すでに本サービス相当の入り方をしている実績としては、招待していただいたリポジトリは OSS リポジトリと同じように私の方で巡回して見ていくことになります。その過程で、Pull Request のレビューコメントを行ったり、RuboCop のアップグレードなどの困りごとの相談に乗ったりしています。また、Ruby/Rails を軸としたコミュニティ横断的な足まわりに関する Pull Request を送ることがあります。

やらないこと

お客様によって対応を変えるということをしないため、オンラインのみの対応としており GitHub でのやりとりがベースとなります。とはいえ定期的に何か口頭で話したいといったご要望など、そちらは応相談という形になります。また、開発案件としていつまでにどこまで何を行うかといった機能開発は行いません。

どうして始めたの?

私は、アジャイルソフトウェア開発を軸に、Ruby on Rails のお仕事は Rails 初期から行っており、近年は OSS まわりでも日常的に開発を続けています。生涯で見ることのできるプロジェクトの数は限られていることもあり、これまでとこれからのノウハウをひとつでも多くのプロジェクトに届ける機会として、今回のサービスを始めてみました。

ちなみに企業として OSS に関わってみたいけれど、OSS への関わり方がわからないという Ruby/Rails を活用の企業様にもオススメです。どういうことかというと、まず私は対象リポジトリを RuboCop で実行してみるため、そこで見つかった RuboCop のバグは RuboCop 本体に取り込みます。そのように OSS 開発者がコードベースに触れることで OSS を改善してくという流れもありますので、このような視点もあわせてぜひご検討ください。

お問い合わせ先

そのほかの概略は以下のサービスページに記載しております。気になったり、後日に思い出した折りは、こちらまでお問い合わせください。

agile.esm.co.jp


アジャイル事業部のRubyアジャイル受託開発は、アジャイル開発を10年以上続けて培った、決して手法や方法論ではまとめきれない、実践知や価値観、それを届ける人で構成されています。Ruby とアジャイルソフトウェア開発を通じてコミュニティと共感していけるお客様とエンジニアを絶賛募集しています。

agile.esm.co.jp

Rails / OSS パッチ会オンライン 2024年1月のお知らせ

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

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

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

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

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

discord.gg

先月リリースされた Ruby 3.3 などに関する話題があるかもしれません。

RubyKaigi 2024 CFP の締切が今月末ということもあり、CFP へのプロポーザルに向けた OSS 活動を進めたい方や、これからパッチ会に参加してみたいという方、OSS 開発者間の会話に興味があるので聞いてみたいという方もお気軽にどうぞ。


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

agile.esm.co.jp

RubyKaigi 2024 に ESM メンバーが11人現地参加予定です

2024年5月15日 (水) から 5月17日 (金) にかけて、沖縄県の那覇市で開催される RubyKaigi 2024 に弊社 ESM メンバーが 11 人現地参加する予定です。

rubykaigi.org

現在2023年12月時点の参加予定メンバーは以下です。

今年も何名かのメンバーは CFP プロポーザルを考え始めたり、RubyKaigi スポンサーとして何か企画できないかアイデアを出し始めているところです。

RubyKaigi 2024 まで残り5ヶ月を切りました。オープンなコードを書いていきましょう。


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

agile.esm.co.jp

RubyConf Taiwan 2023 で発表してきました

こんにちは。@junk0612です。

この記事は ESM アドベントカレンダーとは特に関係のないカンファレンス参加記事ですが、せっかくここを見に来たのならぜひついでに覗いていってください。アジャイル事業部メンバーに限らず、面白い記事がたくさん書かれています。

さて、12/15 と 12/16 に行われた RubyConf Taiwan に永和から @koic, @ima1zumi, @fugakkbn と4名で参加してきました。また、個人的には4回目にして初めてスピーカーとしての参加でした。いつもながら、旅費は全員会社負担です。そのため、今回はスピーカースポンサーとして会社ロゴが掲載できました。 今回はその裏側の部分を書いてみようと思います。

発表することにした経緯

8月下旬、RubyConf Taiwan チーフオーガナイザーの @ryudoawaru さんが仕事で日本に来るとのことで、個人的に交流があったので声がかかり、@koic と3人でご飯を食べに行きました。その場で、RubyConf Taiwan をオンサイトで開催する方向で動いていることを聞き、「プロポーザル出しませんか?」と誘っていただきました (@koic は隣でニヤニヤしてました)。たしかその場では、明確な発表のイメージができなかったので「いや〜ちょっと考えてみます〜」みたいな歯切れの悪い返事をした気がします。

ですがその後、大阪 Ruby 会議での発表を経て「この発表の英語版を発表すればいいかもしれない」と思いました。初めての英語かつ海外での発表なのでいくつか不安があったのですが、どれも解消できたからです。

  • 内容を考えてから英語にするのは大変→内容は決まっているし日本語スライドもあるので、英語化だけに専念できる
  • 発表時間が見積もりづらい→日本語で30分の発表だったので、英語化によるバッファが10分あると考えての40分とするのは妥当そうに思える
  • 新しいネタを考えるのが難しい→聴衆がほとんど被っていないので、同じネタでも面白がってくれる

そんなわけで、プロポーザルを出すことにしました。内容が決まっていたので、わりとすんなり書けました。

書いてる途中にオーガナイザー自ら「進捗どうですか?」してきてくれて若干ビビりました

発表まで

11月頭に発表者が公表されましたが、その時期は RubyWorld Conference に向けて準備中の時期でした。これが終わってからでも発表まで1ヶ月あることや、あまり大きなことはしていませんが一応スポンサー系の旗振り役をやっていたこともあり、RubyWorld Conference が終わるまではいったんそちらに注力することにしました。@ryudoawaru さんも参加していたほか台湾での日本人スピーカーが多く集まっていたので、集まって写真を撮りました。

毎晩飲み歩いたのが災いしたか、松江から帰ってきた日に重い風邪を引いて1週間寝込んでしまっていきなり暗雲が立ち込めましたが、ChatGPT による自然な英文への翻訳のおかげで (会社補助には本当に感謝しています)、無事スライドの英訳とトークスクリプトの作成を終わらせて台湾に向かいました。

到着後ホテルへのチェックインを済ませ、スライドの最初に仕込むネタのために永和区1に写真を撮りに行きました。翌朝永和豆漿大王2でも写真を撮って、準備を整えました。

発表

発表に使用したスライドはこちらです。

当初の予定通り、大阪Ruby会議での発表とほぼ同内容になりました。違いとしては、Lrama 独自の機能として Parameterizing rules を紹介したこと (@ydah_ さんお疲れ様でした)、Future Work が内部パーサーの Racc 化から IELR パーサーの生成に変わったことくらいで、あとは文章の配置や図のリファインメント程度です。

たった10分で文脈自由文法を解説している @junk0612

始まるまでは、トーク内容がニッチなのと裏番組が中国語の発表だったため、あまり聴衆は多くないのではと思っていましたが、実際にはたくさんの参加者に聞いてもらえてとてもありがたかったです。また、質疑応答では聴衆にいた @hsbt さん、@yui-knk さんにそれぞれ補足してもらったり代わりに回答してもらったりというありがたいことも起こりました。この場を借りてお礼申し上げます。

発表以外のこと

RubyWorld Conference で一度痛い目を見ておきながら、今回も四日四晩飲み歩いてしまいました。ただ、少ない日本人参加者同士でつるんで飲んでいたため、RubyKaigi などでは意外と味わえない「特定少数と密度の濃い話を毎晩する」という経験ができたのは面白かったです。おかげさまでまたパーサーに詳しくなれました。

コロナ禍を挟みましたが、台湾は相変わらずリーズナブルで美味しいご飯がたくさんあるところでした。今年は久しぶりだったのもありあまり冒険はせず定番のものを食べたりお土産にしたりしましたが、次はいろいろ開拓していきたいなと思いました。

今回もとても楽しかったです。昔から通っていただけに、またオンサイトで開催されたこと、そしてそこで発表できたということも良かったなと思います。特にチーフオーガナイザーの @ryudoawaru さん、お疲れ様でした && 次回も楽しみにしています!

では、またどこかのカンファレンスでお会いしましょう。


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

agile.esm.co.jp


  1. 台北市の南にある新北市の区の一つで、台北市と隣接している。
  2. おそらく永和区の地名から取られている台湾の豆乳屋さん。朝早くから開いており、台湾では豆乳屋やお粥屋で朝ごはんを外食するのが普通の文化らしい。

Clean Code 読書会のすすめ

ESM アドベントカレンダー2023の17日目の記事です。

adventar.org

こんにちは haruguchiです。

この記事では社内で行なっている Clean Code 読書会の紹介と1年以上継続して良かったことを書きたいと思います。

Clean Codeについて

ボブおじさん(uncle bob)ことRobert C. Martinの著書で、クリーンで洗練されたコードを書くための手がかりをいろんな観点で示してくれる本です。

手がかりと書いたのはこの本の序論には以下のような文章があるからです。

クリーンコードを書くことを身につけるには努力が必要です。原則とかパターンといった知識を身につけるだけではだめなのです。実際に汗をかかなければならないのです。自分自身で実践してみて、そして失敗してみなければならないのです。また、他の人が実践しているのを、また失敗しているのを見なければならないのです。彼らがつまづき、やり直すのを観察しなければならないのです。彼らが判断に苦しむのを見て、間違った判断の結果として、彼らが支払うはめになった代償を見なければならないのです。 (序論より)

このように知識として知っていれば良いだけでなく自分で考え、または人と議論しクリーンなコードを書く訓練をする本なので読書会でディスカッションするのには最適だと考えています。

読書会の概要と進め方

この読書会は週1回1時間という枠でプロジェクトを横断して参加できるようになっています。また、特定の主催者をたてていないので、誰かが欠席しても人が集まれば自動的に開催されます。暗黙的なルールとして3人以上集まれば開催されることが多いです。

進め方は以下の通りです。

  1. 司会をたてる
  2. 読むところを決め黙読
  3. 読んだセクションの感想、意見、質問なんでも声に出す(ディスカッションパート)
  4. 時間の限り 2. 3.を繰り返す
  5. クロージング
  6. 終わった後はesaに感想を(任意)

司会の仕事はesaのページを作成するのと、1回の読書で読む範囲を決めることくらいなので誰でも気軽にできます。esaのページには見出しとして「参加メンバー一覧」、「読んだところ」、「次回読むことろ」などがありシンプルな作りになっています。

各自読み終わったらslackのスタンプで報告します。メンバー全員が読み終わったらディスカッションパートへ移行します。

ディスカッションといっても、そのセクションに対しての感想からわからなかったことまで気軽に発言していきみんなで理解を深めていきます。サンプルコードがJavaで書かれているということもあって、Java特有の知識に関してはJava経験者に教えてもらうことが多いです。

終わった後は各自任意でesaのコメント欄に感想を記入します。

esa記事のコメント欄に感想を記入している
読書会後の感想記入

読書会に1年以上参加して

Clean Code 読書会に参加して良かったことは次の3つです。

ディスカッションすることでメンバーの書いたコードへの理解が深まった

たとえば、クラスの中にメソッドをどの順番で定義するのか?という話題があります。本書では新聞の見出しのように抽象度の高いものから順に定義していく方法と、呼び出される順番に定義していく方法の2通りが出てきました。

# 新聞の見出しのように定義
class Foo
  def main
    method_a
    method_b
  end

  def method_a = method_c

  def method_b = method_d

  def method_c; end

  def method_d; end
end


# 呼び出す順に定義
class Foo
  def main
    method_a
    method_b
  end

  def method_a = method_c

  def method_c; end

  def method_b = method_d

  def method_d; end
end

このことでディスカッションした結果、「こういう時はこっちの方が良いんじゃないかな」「僕は今までこの方法でやってましたね」「プロジェクトでは〜」「一貫して順番が決まってることが大事だよね」といった議論をすることで、コードが意図を持って書かれているということを意識するようになりました。

Ruby や JavaScript 以外の言語の本を読むことへの抵抗感がなくなった

本書はサンプルコードはJavaなのでRubyとJavaScriptしか理解していない私にとって最初はかなりとっつきにくいものでした。読書会では同じようなメンバーもたくさんいますがみんな工夫してエッセンスを抽出して理解していることに気づきました。サンプルコードはあくまでも、そのセクションで主張したいことに説得力を持たせるための例になっていることが多いので細かいコードを追うのではなく、どんなことをしているコードなのか全体像を掴むことが大切だと感じました。

他にもChat GPTにコードを解説させたり、リファレンスを読んだりと未知なる言語の本を読む知見がたまったのもこの読書会のおかげだと思っています。

興味関心の枝葉が広がった

Clean Codeの目次を見るとわかるように扱っている題材が広範に及びます。そのため、読書会の後、復習として気になるキーワードを拾っていくだけでも大変勉強になりました。 たとえば、デザインパターンの章ではGoFのデザインパターンが紹介されますが、あまり詳しく知らなかったこともあって結城浩さんのJava言語で学ぶデザインパターン入門第3版という本を購入し学習するきっかけとなりました。

www.hyuki.com

他にも、並列処理やアスペクト志向プログラミングなど以前の自分に馴染みのなかった分野に対して興味を持てたことが収穫でした。

最後に

私たちは日々クリーンなコードとは何か考えてプロジェクトと向き合っています。弊社の読書会が何らかの参考になれば幸いです。


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

agile.esm.co.jp

Railsのsystem testにおいて実行行ごとにhookを追加するgemを作った

この記事は ESM アドベントカレンダー 2023 の9日目です。

こんにちは @color_boxです。

今回は system_test_step_hook というgemを作ったので、それについて書きます。

rubygems.org

こちらのgemはRailsアプリのsystem testで動作します。 テストコードの各行に対して、RSpecのbefore/after hookのように、何らかの処理の追加を可能にします。

使い方は簡単で、このgemをインストールして

SystemTestStepHook.before do
  pp 'this is before hook'
end

SystemTestStepHook.after do
  pp 'this is after hook'
end

のように追記すると、systemテストの各行に対して、before/after hookのようなタイミングで追記したコードが実行されます。

本記事では、こちらのgemを仕組みについて軽く解説できればと思います。

仕組み

そもそもsystem testにおいて、コード一行ずつの実行を検知するような仕組みはありません。

ですので、動的にテストコードを書き換えて実現します。

  1. system test実行時にテストコードが書かれたブロックを取り出す
  2. 取り出したコードブロックをParserで分解し、各行の前後で渡されたブロックを実行するコードを挿入
  3. 編集したコードをevalで実行し、結果を得る

という流れになります。

取り出したコードブロックを実際に編集している箇所が下記で https://github.com/colorbox/system_test_step_hook/blob/main/lib/system_test_step_hook.rb#L17-L35

編集したコードブロックをevalで実行して結果を得ているのが下記です。 https://github.com/colorbox/system_test_step_hook/blob/main/lib/system_test_step_hook.rb#L37-L68

Minitest::Testモジュールにモンキーパッチを当てて対応しています。

SystemTestStepHookのモジュール内で編集したコードをevalしてしまうと、編集前のコードと実行コンテキストが変わってしまうため、eval自体をMinitestのコンテキストで呼び出すようにしています。

目的

なぜこのようなgemを作ったかについてですが、それは下記のgemに組み込むための部品とするためです。

github.com

こちらのgemは、system testを実行するとスクリーンショットとテストコードを組み合わせてHTMLを作成し、それを仕様書として使えるようにするというgemです。 元々system testの行ごとに何らかの処理を行うという挙動はこちらのgemのものだったのですが、そのhookの部分のみを抽出した形になります。 単機能で切り出せばその分応用も効きますし、保守性が上がるというわけですね。


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

agile.esm.co.jp

Rails / OSS パッチ会オンライン 2023年12月のお知らせ

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

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

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

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

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

discord.gg

今月リリース予定の Ruby 3.3 などに関する話題があるかもしれません。

弊社の構文解析器研究部に関心がある方や、これからパッチ会に参加してみたいという方、OSS 開発者間の会話に興味があるので聞いてみたいという方もお気軽にどうぞ。


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

agile.esm.co.jp