RegionalRubyKaigi レポート (80) 福岡 Rubyist 会議 03

RegionalRubyKaigi レポート (80) 福岡 Rubyist 会議 02

書いた人: @m-nishijima

はじめに

福岡で毎週オンラインで開催されている Fukuoka.rb と、株式会社 Ruby 開発 の主催で 6 年ぶりの福岡 Rubyist 会議が開催されました。

講演

Opening Talk

まず、はじめに主催の甚六さんから諸注意、スポンサーの紹介、会場に設営された八女茶のブースの紹介から福岡 Rubyist 会議ははじまりました。

Rubyist のためのカンタン動画制作

yasukawa.jpg

YassLab (株) の安川さんによる講演です。実際に iPad でこの講演の生配信を行いながら、配信や動画作成をカンタンに行う方法を講演されました。

安川さんの講演では、一般に難しいと考えている配信はハードやアプリの進化によってほぼ iPad だけで一人だけで配信を行うことが可能であることを紹介されていました。講演などの配信で大事なのは音とのことで、iPad に無線でマイクを繋ぎ講演されていました。逆に画は程々にとのことで文字が読める程度に抑えるつまり iPad やスマホ内蔵のカメラで撮影することで機材を抑え配信の負担を減らしていました。 ソフトウェアの面では、iPad のブラウザだけで配信を完結させられることや、配信を動画化する際に行なう音量調整が動画ファイルをドラッグして 1 ボタン押すだけで完結できることなどを紹介されていました。 また、編集についても音の差し替えや音量の調整程度のカンタンな編集を行ない、人気がでた動画に字幕を起したりするところから編集ははじめれば良いとのことでした。

Ruby のリリースを爆速にするための方法

shibata.jpg

ANDPAD の柴田さんによる講演です。 はじめに、バックポート・パッケージ・パッケージング・リリースなど各種リリース用語の解説が行なわれました。次に、ドキュメントの粒度やリリース体制・リリースサイクルなどを Ruby と他のプログラミング言語の比較を説明されました。

その後、Ruby のリリースの自動化の経緯としてリリース中のパッケージの破損が起きていたこと、GitHub Actions を使ってパッケージの作成が行なわれるようになったことが説明されました。しかし、無事に自動化でき、めでたしめでたしとなったわけではなかったそうです。手動で行っているであればログにより気づけたエラーを Actions がスルーしてパッケージングに失敗したり、また Makefile などビルドに直接関係するファイルの編集や依存パッケージの配布の終了・ Ubuntu のアップデートなど様々な要因で問題が起きたとのことでした。特にセキュリティリリースが大変とのことで、パッチの共有に制限があることで、手動でセキュリティリスク×サポートが続いている Ruby のバージョン分手動で対応する必要があるそうです。

RubyKaigi のはなし

soraha.jpg

Cookpad のそらはさんによる基調講演です。 RubyKaigi の配信や翻訳を行なうアプリを実際に動作させながら講演されていました。

はじめにそらはさんの RubyKaigi への向き合い方の話があり、「あまりがんばり過ぎない方針」という内容を話されました。これは RubyKaigi が「スタッフが主役ではない」という考えなどからこのような方針で RubyKagi へ望んでいるそうです。 次に RubyKaigi のために内製された Rails 等を利用して作られたソフトについて話されました。その中で印象的だったのは翻訳のための文字起こしを AWS を利用して機械化したことで、専門用語の読み取り精度があがったという話です。これは、事前に辞書登録で技術用語などを設定しておくことで、(分野を限定した場合) 人間の通訳以上の文字起こしができたそうです。 また、昔はソフトのコントロールを会場で Rails console で行っていたことや、最新でも Web 上でテンプレートは存在するものの細かな操作は json で書く仕様になっているなど、エンジニア・ Rubyist に特化した操作性をしているそうです。 最後に RubyKagi のために構築しているネットワーク環境について話されました。LAN ケーブルを 2358m 買って 1900m 程敷設したことや、自家 ISP (AS) まで冗長化したトンネルで繋いでいること、会場へは物理回線を 2 回線引いていたが一時的に 8Mbit しか出なくなるなど、普通では聞けない話でした。

mruby on IoT devices.

okazaki.jpg

株式会社 Fusic の岡崎さんによる講演です。 esp32 というマイコンを mruby で動かしたことについて講演されました。

はじめは、実機を見せつつ esp32 というマイコンの説明や組み込み向けの Ruby の処理系の mruby について紹介され、簡単に動作させる手順について話されました。 そこで、esp32 を mruby で動かす mruby-esp32 が ESP-IDF (esp32 のフレームワーク) の最新バージョンに対応させる開発をおこなったことや、HTTP 通信より軽量な MQTT 通信のクライアントを開発し公開された話をされました。 最新バージョンへの追従では、ビルドシステムが Make から cmake になりそもそもビルドできない問題や、サポートされなくなった loop 関数を置き換えたこと、C 言語のバージョンが C99 から C17 へ変更されたことによって多発したエラーへの対応、ROM のパーティションの容量を調整したことなどを話されました。 MQTT 通信のクライアントについては、コールバックを多用しないという考えのもと mruby-mqtt ではなく、ruby-mqtt をベースに開発されたことなどを話されました。

Factorybot 改善ツール作成失敗と学び

hachi.jpg

freee 株式会社の hachi さんによる講演です。 freee 株式会社の開発合宿で作成されたテスト高速化のために開発された Factorybot 効率化ツールについて講演されました。

はじめに FactoryBot を使った RSpec が遅くなる原因の紹介として、不必要な FactoryBot.create で DB に書き込みと、同じレコードを何度も書き込んでいることが挙げられました。前者は、DB 書き込みが発生しないので高速な FactoryBot.Build で十分な箇所で create しているということでした。これを SELECT, UPDATE, DALETE などが実行されないレコードを検知することで警告するツールを作成されたそうです。また、後者は、context の before などで各 it 毎に同一のレコードを生成していることを上げられました。その対策として TestProf の before_all の使用を進められ、そのために UPDATE されないレコードを検知し警告するツールを制作されたそうです。 そして、そのツールを使い改善ポイントの検出ができたそうですが、前者では偽陽性で、後者は偽陰性が多発するそうです。その理由として、前者では検索されないレコードを検出していますが、テストの内容として検索されないことをテストする場合などで本来検知しなくて良い箇所で検知される場合があったそうです。後者では、そもそもレコードの ID は異なっているので、どれが同じレコードか機械的に判断することが難しいという問題があるそうです。 最後にこれらの仮説・ツール作成を通した学びとして、素早い仮説検証によって失敗した際のダメージが少ないこと、偽陽性が発生することなど実装前に深く考慮すべきことなどを上げられました。(なお、後者に関しては実装してみることは大事で得られるものも多いとのことでした。)

⁠外部コマンド実行入門

pocke.jpg

株式会社マネーフォワードの Pocke (ぽっけ) さんによる講演です。 Ruby の外部コマンド実行の各種説明と、フローチャートで状況に応じた適切なコマンドについて紹介されました。

はじめに外部コマンドとはなにかについて説明されました。外部コマンドとはパス下にある ls, rm, git, ruby のようなコマンドで、Ruby 上で実行するにはバッククオートで囲み記述する、system メソッドなど方法があることを説明されました。 次に外部コマンド事項におけるセキュリティでコードインジェクションについて話されました。たとえば、”Hello; reboot”のような文字列を外部コマンドに入れると場合によっては reboot コマンドが実行されてしまうとのことでした。これは、外部コマンドが Shell を経由した場合に発生するそうです。また、必然性がない外部コマンドを使用しない、コマンドと引数を分けて実行するなどの対策を紹介されました。 そして、エラー処理の有無や標準出力やエラー出力をどう取り扱いたいかなど、各状況に併せて最適な外部コマンドを実行するメソッドについてフローチャードで紹介されました。IO, Kernel, Open3 など様々なクラスの多用な外部コマンド実行用のメソッドについて紹介されていました。

FjordBootCamp スポンサーセッション①

komagata.jpg

FjordBootCamp の komagata さんによるスポンサーセッションです。

月額課金方式のプログラミングスクールの FjordBootCamp について説明されました。月額なのでいつでもはじめられ、いつやめてもよいそうです。「全人類がプログラマーに向いているわけではない」とのことでした。ハードなカリキュラムで、1000 時間程度かかることや実サービスを開発するカリキュラムで、ポートフォリオ作成がガチなど、就職までサポートされているそうです。また、OSS コミュニティーへの参加を激しく押しているそうです。

株式会社ヤマップ スポンサーセッション②

kirchner.jpg

株式会社ヤマップの Armin Kirchner さんによるスポンサーセッションです。

Rails で Vector tiles な地図の作成について話されました。国土交通省の情報を PostGIS で DB に保存し Rails から扱うという内容で、拡大縮小ができる地図のデモを行なわれました。どのような SQL を発行することで、地図の表示に必要なデータを取得し、JSON でどのように渡すかなど、ベクターな地図データという特徴的なデータの取り扱いについて説明されました。

株式会社マネーフォワード スポンサーセッション③

eto.jpg

株式会社マネーフォワードの yusuke-eto さんによるスポンサーセッションです。

「お金を前へ。 人生をもっと前へ。」という会社の理念や U ターンや I ターン先としてのマネーフォワードの福岡拠点の紹介をされました。またこれからを切り拓こうという FukuokaRubyistKaigi03 のテーマに沿って、マネーフォワードの技術的負債の解消として全サービスで利用されていた共通 DB を分離する話などをされました。

Rubyist Magazine Reboot

nishiyama.jpg

株式会社 Ruby 開発の西山さんによる講演です。 Rubyist Magazine の現状と将来への希望について講演されました。

はじめに、Ruby のドキュメントが不足していたことや日本 Ruby の会の発足など、Rubyist Magazine の創刊の経緯などが話されました。次に、発行ペースの推移について話され、発行停滞の原因として人手不足などを上げられていました。そのため Rubyist Magazine へ関わりをメリットを交えて話されました。編集部は公開前の記事を一早く読める。執筆者は編集者にチェックしてもらえることや記事が長く残ること。読者に良い記事を広めることなど。 その他に Rubyist Magazine のソフトウェア構成や記事の記法の遷移、各種 Github リポジトリ、コミュニケーションの取り方など Rubyist Magazine へ貢献するために必要な情報を説明されました。

この講演の質疑応答では会場の Rubyist たちから、Rubyist Magazine への熱い思いが多数出ていました。

なお、本記事が掲載されている RubyistMagazine62 号も、この講演がきっかけで復活となりました。

Keynote: メンテできないコードをメンテする技術

pen.jpg

株式会社コードタクトのペン!さんによる基調講演です。 TRICK (超絶技巧 Ruby 意味不明コンテスト) に提出されたコードの説明とそのメンテナンス方法について講演されました。

はじめに TRICK の理念の一つである「メンテナンス不能だが価値あるコードを世に放つことで Ruby の使用を安定化する」というものに対して、ペン!さんが提出したコードは数ヶ月かけて作成されたもので、本当にメンテナンス不能というわけではないと説明されました。 次に槽 (aquarium)、鼓動 (heartbeat)、変化 (localver) の 3 つの TRICK 入賞された Animetion Quine についてコードやメンテナンス方法を説明されました。Animetion Quine とは、アニメーションの各フレームがコードでアスキーアートのように構成されており、なおかつ現在のフレームのコードが次のフレームのコードを呼び出すことでアニメーションが進行する Quine を Animetion Quine と読んでいるそうです。水槽 (aquarium) については、謝り訂正符号を使用することで、全フレームをアスキーアートとして利用できるようにしたことや、楕円の集合のみで魚や海藻を表現していること、泡によってフレーム数を表現していること、2 種類のテストを用意したことなどを説明されました。鼓動 (heartbeat) については、%w() 記法の有無によって作品が単色・色鮮やかになることや、Syntax OK の確認に Ripper を使っていることなどを説明されました。変化 (localver) では、コードの対称性や、上下逆順での実行、読みにくい Syntax の利用などその設計理念などを説明されました。 そして、TRICK へのアプローチの仕方と、メンテナンス可能にするためのジェネレーターやテストコードなどを整備することの大切さなどを話されました。 発表の随所で Animetion Quine の実演され、最後には今回の福岡 Rubyist 会議のために作成された Animetion Quine を見せて講演をしめらました。

Closing Talk

主催の甚六さんから継続することは簡単でできることをやればいいこと、相手がいなくなり恩返しはできなくなることがあるが恩送りはできること、これからを切り開くためにアウトプットをすべきことなどを話され、福岡 Rubyist 会議 03 は終了しました。また、会場の全 Rubyist から拍手が起きるなど、とても熱い Closing Talk でした。

主催者コメント

福岡 Rubyist 会議 03 主催の甚六です。2020 年に開催予定でしたが時代に阻まれ、3 年越しの開催となりました。無事開催でき、胸をなでおろしています。

さて、当地域 Ruby 会議ですが、名称が Ruby ist 会議となっていることが気になって夜も眠れない方が多いのではないかと思います。名称を変更した経緯についてコメントを残しておきます。

「何か熱い思いが込められているのではないか?」と期待させているかもしれませんが、実は違います。福岡で地域 Ruby 会議を開催することを嫁六に話した際、

「で、三重や松本でやってるやつと何が違うの?」

と質問され「インターナショナルカンファレンスの RubyKaigi とリージョナルカンファレンスの Ruby 会議があってだな……」。と説明しましたが、いまいち腑に落ちていないようでした。

全く異なるものなんだよ、と伝えているものの、耳から入る音は「るびーかいぎ」なので違いが分からないようでした。どうしたら上手く腑に落とせるか悩んでいたところに、地域 Ruby 会議名の命名規約を変更 (緩和) したいという Issue が作成されました。全く異なるカンファレンスということで思い切って名称を変更しました。

なお、名称は PHPerKaigi にインスパイアされました。これを機に各地域の方もオリジナリティに溢れる名称にしてみてはいかがでしょうか。

著者について

Ruby 歴 1 年の新米 Rubyist です。 学生時代は電気電子工学を専攻していたが、C 言語でプログラミングの面白さに触れそこから Ruby プログラマーへ。最近は分散型 SNS 熱が再燃し、お一人様サーバーを運用しています。