Talks
Ruby製テキストエディタでの生活
私は2016年から自作のテキストエディタでコードを書いたり、メールやその他の文章を書いたりしています。近年Rubyに静的型の導入を求められることが多くなっていますが、静的型のメリットや関数/メソッドの型から先に考えるプログラミングの気持ちよさも理解しているものの、Rubyの魅力の一つは思いついたコードをすぐに動かして試せることにあると考えています。この発表では、Ruby製テキストエディタ上での生活を通じて、動いているオブジェクトの振る舞いを動的に変えていく楽しさについてお話したいと思います。
前田 修吾
全てが同期する! Railsとフロントエンドのシームレスな連携の再考
チャットなどのように画面に変更をリアルタイムに反映させたい時、どのように作りますか?
チャット以外のコラボレーションツールを作る場合はどうでしょう。もっと多くのカラムやモデルでも変更をリアルタイムに反映させたいとしたらどのように設計しますか? 今後さらにカラムやモデルが増えた時、その設計は複雑さが爆発して破綻しませんか?
実は、このような一見複雑に見えるWebアプリケーションでは、設計を破綻させずにRailsとReactをかなりシンプルに連携できます。このトークでは、どのような設計をすれば良いか複数の方法について解説します。
ぺん!
functionalなアプローチで動的要素を排除する
Rubyには動的な処理に必要な機能がたくさん盛り込まれており、しかもそれが他言語にはない魅力であり強力な武器でもあります。しかしデメリットとして可読性の低下や処理の見通しを低下させることになることがあります。Rubyでは強い力には責任が伴うという言葉の元、使う側にも必要な能力を求めている実情もあると思います。
しかし場合によりRubyで実装する機能に関数型プログラミングのアプローチを取り入れることにより、前述したデメリットを減らせるのではないかと考え実際に機能開発に盛り込んだ経験についてお話しします。
更にこのセッションでは実例も交えて、動的なアプローチの場合との対比を行い、どのような場面で有効かを考えるきっかけにしたいと思っています。
ryopeko
ゼロからの、2Dレトロゲームエンジンの作り方
現在 Processing をベースとした CRuby 用の 2Dレトロゲームエンジンを作っています。
本発表では、OpenGL を抽象化した自作描画エンジンと、各 OS のネイティブ API を使って作られた自作 GUI ツールキットを使って、どのようにゲームエンジンを作っているかを紹介いたします。
tokujiros
Ruby×AWSで作る動画変換システム
動画変換システムというと、既存のSaaSを使うか、低レイヤーな実装に踏み込むかの二択と思われがちです。しかし、RubyのエコシステムとAWSの各種サービスを活用することで、より手軽に独自の動画変換システムを構築できます。
本セッションでは、ハンドメイドECサービス「minne」における動画変換システムの実装方法をご紹介します。
動画変換の核となるFFmpegをRubyから扱う方法、変換処理を担うShoryuken workerの実装、そして実運用に耐えうる設計の作り方まで、具体的なコードを交えながら解説します。開発環境はDockerで簡単に構築でき、ローカルでの開発から本番展開まで、スムーズに進められる構成をお見せします。
yumu
simple組み合わせ村から大都会Railsにやってきた俺は
Ruby on Railsといえばご存知フルスタックフレームワークであり、昨今ではThe One Person Frameworkでおなじみとなっています。
発表者が本格的にRailsアプリを触りはじめたのは去年からです。それまではPerlやGoなどの上でミニマルなフレームワークを用いてwebアプリケーションを開発、あるいは各プロジェクトごとにシンプルなコンポーネントを組み合わせることで専用のフレームワークを作ってその上でアプリケーションを開発していました。
一方Railsはなんでも持っているフルスタックフレームワークであり、いわゆる “easy” 寄りのフレームワークとされている認識です。
つまりこれは巷でよく対比として用いられる “Simple vs Easy” の構図であると捉えられると思います。もちろんsimpleにもeasyにも双方にpros/consがあり一概にどちらが良いと断じることができるものではありませんが、easy寄りのRailsに触れ親しむことでなんとなくその利点について実感を持てるようになってきました。
一方、Webアプリ開発はそういったSimpleとEasyのみで二分し判断できるものではないと考えています。本発表では様々な対比観点からフルスタック/ミニマルの双方を検討し、Webアプリケーション開発に及ぼす影響について考察したいと考えています。
moznion
Writing PDFs in Ruby DSL
Portable Document Format (PDF) は、広く使われているドキュメント交換のためのファイル形式です。PDF を日常的に利用している人でも、自分で1から PDF を作成したことがある人は少ないのではないでしょうか?
この発表では、そんな身近でありながら謎めいた PDF を出力する簡単なプログラムを実装する流れを紹介します。レギュレーションは次の通り:
- 出力した PDF が Adobe Acrobat Reader で開ける
- 消費メモリが書くドキュメントの大きさに依存しない(ストリーミング)
- Ruby DSL を使う
PDF の構造について簡単に解説しながら、まずは PDF の内部構造を反映した低レベルな DSL を構築します。DSL による適度な抽象化は PDF の構造の理解を助けるでしょう。そして、もちろん Ruby は DSL の構築にぴったりですが、今回のようにデータ形式のストリーミング生成を行う場合は特に相性が良いのです。その後、低レベル DSL の上に抽象度を高めた DSL を構築し、よりわかりやすく使いやすい API を模索します。
発表を通して、Ruby DSL によるデータ構造を介さない抽象化のたのしみを共有します。きっとあなたも日常の抽象化に Ruby DSL を取り入れたくなるでしょう。
Hiromi Ogawa
mrubyでワンバイナリーなテキストフィルタツールを作った
mrubyを用いたワンバイナリーアプリケーションの実装手法に焦点を当て、テキスト処理ツールの開発を例に、シンプルなアプリケーションの作成方法について解説します。一般的なRubyアプリケーションはスクリプト言語としての性質からRubyの実行環境が必要ですが、mrubyを活用することで単体で実行できるバイナリ形式のツールを実現できます。
この発表では、実際に私がOSSとして公開しているテキストフィルタツールを題材に、mrubyによるビルドプロセス、ワンバイナリー化における設計上の工夫や実装手法、クロスプラットフォーム対応や配布手順の最適化について紹介します。
buty4649
混沌とした例外処理とエラー監視に秩序をもたらす
アプリケーション開発において例外処理は重要です。一方で複数人でアプリケーション開発を行う際に、例外処理のコンセンサスが意外と取れておらず、結果としてアプリケーションの監視において苦労することがこれまでの経験上でありました。
いつの間にか全て握りつぶされた例外処理、誰も監視していないログに密かに送り続けられていたエラーログ、長年そのアプリケーション開発に携わる人のみぞ知る「このエラーは無視して良いエラーです」という伝承された知識。
誰もが一度はこのような経験をしたことがあるのではないでしょうか?
この発表では例外処理について整理し、アプリケーション開発において持続的なエラー監視をするための考え方や、混沌としてしまったエラー監視にある程度の秩序をもたらし、楽しくRubyと暮らすべく私が工夫した点についてお話しします。
morihirok
Ruby meets secure DNS and modern Internet protocols
DNSは1980年代に発明された名前解決システムながら,その通信プロトコルは開発当初とほぼ変わらない形で今日までインターネットを支えつづけています.一方で,かつて平和だったインターネットには多くのならず者が出没するようになりました.インターネットの根幹であるDNSも盗聴や改竄などの攻撃を受けています.
これらの想定されていなかった脅威に対抗すべく,DNSにはさまざまなセキュリティ拡張が提案されてきました.この数年では,伝統的な平文のプロトコルから暗号化に対応した新しいプロトコルへアップグレードをする枠組みもIETFで文書化され,DNSは漸進的により安全なプロトコルへ移行してゆくと期待されています.
本発表では,DNSのプライバシーを改善する近年のプロトコル拡張について解説し,発表者が運用するRubyKaigiのネットワークに展開した事例を紹介します.また,これらの新たなプロトコルをRubyから使えるようにするためのDNSライブラリの拡張や,QUICやHTTP/3といった現在のRubyのエコシステムに不足している下位プロトコルの実装について議論します.
Kasumi Hanazuki
Regional.rb and the Tokyo Metropolis
東京圏の地域.rbオーガナイザーが集結!
Regional.rb Organizers
Ruby と Rust と私 (仮)
クックパッドの SRE。開発者の生産性向上に興味がある。Ruby と Rust が好き。
Kohei Suzuki
Keynote
John is a Ruby Committer and a Rails Core member, and a Staff Engineer at GitHub focusing on performance and scalability. He’s based in Victoria, Canada.
John Hawthorn
クリエイティブコーディングワークショップ
chobishiba
Alba: Why, How and What's So Interesting
AlbaというJSONシリアライザのgemを作成・保守しています。Rubyで開発をしているとユーザーの使い勝手について考えることが多くなりますね。ここでの使い勝手というのは例えばブロックを使うことで柔軟になるAPIなどを含みますが、全体的な「良さ」、使っていて何か気持ちが良い、という感覚も含んだものです。 AlbaはRubyプログラマにとってなるべく使いやすく直感的であるように設計されており、そのための工夫を多数含んでいます。この発表ではAlbaが生まれた経緯を振り返りつつ、Rubyistにとって興味深いであろう実装上のおもしろポイントをご紹介します。また、自作のライブラリを広く使ってもらうために行ったことなどもご紹介できればと思います。
おおくらまさふみ
ゆるゆるMastodon 鯖缶生活
2017年からRubyとMastodonとともに暮らしている一人の鯖缶(Mastodonのサーバー管理者)の暮らしぶりをお話しします。
Railsを触りはじめたばかりの頃に登場したMastodonを軽率にはじめ、運用していく中でRubyやRailsを学び、やらかしに対応し、Rubyの開発版(masterブランチ)とMastodonの開発版(mainブランチ)でMastodonを運用するに至ったり、いかにしてRubyやMastodon にパッチを投げるようになったのかの歴史をお話ししたいと思います。
またゆるゆると鯖缶業を続けていくなかでどうスキルアップしていったのかや、エンジニアとして新しい技術を素振りできる砂場を持つことの楽しさについてもお話しします。
S.H.
超入門WebAssembly ~Rubyのコードを眺めて完全に理解しよう~
WebAssemblyはブラウザを飛び越えた大きな可能性を持つ技術で、Rubyをはじめ様々な言語でWebAssemblyバイナリを出力可能にする対応が進んでいます。その一方、WebAssemblyを動かすランタイム自体も様々なものがあり、Goのwazero、SwiftのWasmKitといった純粋に特定の言語で実装されたものも増えてきました。
ところで、筆者は”Wardite”という名前の、Rubyに組み込み可能なWebAssemblyのランタイムを作っています。Warditeは以下のコンセプトで絶賛開発中です。
- Pure Rubyで、外部GemやC拡張の依存なしで実装
- Fully RBS Annotated
- WASI preview 1 対応
- 利用上十分なパフォーマンス
このトークでは、Warditeの内部のRubyのコードを通して、WebAssembly Coreにはどのような仕様があるのか、WASI(WebAssembly System Interface)とは何であるのかについて理解が深まる話をします。そして言語ランタイム、具体的にはWebAssemblyのVMを作るためにどのような実装を行ってきたかを解説します。
また、Warditeの現在の開発状況や課題、将来のゴールなどを、デモも交えながらお話しします。
Uchio Kondo
Discord bot ふ〇っしーとの出会いと別れ
2010年代前半はChatOps全盛期でした。いまでもチャットボットは開発されていますか?
10年前に比べて私たちが働く環境は大きく変わりました。チャットツールでのやり取りがメインになり、リモートワークで働く人が増え、エンジニア以外も複数のSaaSを利用するようになりました。この変化を組織の成長に変えるため、2024年に新たにチャットボットのフレームワークを開発しました。
本セッションでは discordrb というgemをベースにしたチャットボットフレームワークの作成時に考慮したこととその設計を紹介します。そして使っているうちに生まれた設計の歪みと新しい設計への移行、そして使われなくなっていった機能を紹介します。
わこー
Git scrapingで始める継続的なデータ追跡
Webサイトから得られる情報はアクセス時点のスナップショットに過ぎませんが、時間とともに変化する情報を継続的に追跡したり、新たな情報を検知して認知したいシーンがあります。
時間とともに変化するそのようなデータを追跡するための効果的なアプローチとしてSimon Willison氏が2020年に提案したのがGit scrapingと呼ばれるスクレイピング手法です。定期的なWebスクレイピングにより収集した情報をGitによるバージョン管理することで、時系列に沿ってデータを簡易に記録できるようになります。また、GitHub ActionsなどのCI/CDシステムを組み合わせることで定期実行も行えるうえ、ATOMでのRSS配信を行うこともできます。
本セッションではこのシンプルな手法を通じて、Rubyで生活を便利にする第一歩を提案します。
Masato Ohba
PicoRubyと暮らす、シェアハウスハック
2024年8月にWiFi対応を果たしたPicoRubyを活用し、シェアハウスの生活を便利にするIoTデバイスを開発しました。スマートロック、洗濯機・乾燥機の稼働チェッカー、トイレットペーパー購入ボタンなど、日常の小さな不便を解消するアイデアとその実装方法を紹介します。PicoRubyと共に、シェアハウス生活をより快適にするハックをお届けします。
ryosk7
An OptCarrot Retrospective
東京Ruby会議11で発表されたRubyのベンチマークプログラムOptCarrotを振り返ります。OptCarrotは、Rubyを高速化する開発者を駆り立てるためのエサとして作られ、狙い通りに多くのプログラム最適化マニアに愛され、Rubyの最適化を牽引しました。OptCarrotに釣られてできた成果を駆け足で紹介し、OptCarrotの評価・功罪を議論します。
Yusuke Endoh
Rubyでつくるパケットキャプチャツール
皆さんは、日々のシステム開発の中で「ソケットを扱う」ということを意識したことがあるでしょうか?
ネットワークプログラミングやソケットプログラミングは、ネットワークの基礎を理解する上で重要な要素です。
このセッションでは、Rubyを使ってネットワークパケットキャプチャツールを自作する過程をご紹介します。
libpcapなどの既存ライブラリには頼らず、純粋にRubyのみでパケットキャプチャツールを実装することで、ネットワークデータの流れを低レベルから体感できるようなお話をしたいと思います。
「Working with TCP Sockets」の翻訳版である「なるほどTCPソケット Rubyで学ぶソケットプログラミングの基礎」が今年9月に公開され、ソケットプログラミングやネットワークプログラミングに興味を持たれた方も多いのではないでしょうか。
このセッションを通じて、ソケットプログラミングやネットワークプログラミングの基礎を学び、Web技術を支える要素技術への理解を深める一助になれば幸いです。
Yudai Takada (ydah)
Thinking about a map for Rails applications
Rails アプリケーションではモデルで概念を表します。この概念はいくつくらいあるのでしょうか。
話者が勤務する会社の rails stats ではモデルは 1,345 クラスあります(2024 年 11 月現在)。人間が全てを理解するにはつらい数ですが、全てのモデルを理解してから開発を始めるという人は多くないでしょう。
わたしたちはまずアプリケーションの中心となる重要な概念を理解し、そうでない概念は後追いで理解していくからです。
ところで、日本には多くの市があります。政府統計によると 2024 年時点で 792 の市があります1。
ここで Google マップを開いてみましょう。数度ズームアウトすると日本の全体像が現れます。「東京」「大阪」「札幌」という都市が表示され、これらが重要な都市として扱われていることがわかります。ズームインすると次に重要な都市と幹線道路が現れます。
Google マップのようにズームイン・ズームアウトで重要なモデルとリレーション(つまり ER 図ですね)を見られるとそれは Rails アプリケーションの「地図」になるのではないでしょうか。そんな Gem を作っている話をします。
[1]: https://www.e-stat.go.jp/municipalities/number-of-municipalities
makicamel
Rubyと暮らし、OSSに貢献し、登壇する ── 半年間続けた「OSSやっていきの集い」の成果と学び
あなたの所属するエンジニア組織では、日々のOSS活動が賞賛され、外部登壇やプロポーザル提出に対して先輩登壇者やプロの編集者からサポートを受けられるような環境は整っていますか?
SmartHRでは、Rubyの会社として長年Rubyコミュニティへのスポンサー活動やOSSへの貢献を行ってきましたが、これまでは会社全体で活動をサポートする環境は十分に整備されておらず、各エンジニアの自主的な努力に委ねられていました。
そこで、約半年前に有志のプロジェクト「OSSやっていきの集い」が立ち上がり、社内のエンジニアがOSS貢献をより積極的に行い、社外への発信をサポートする仕組みが生まれました。
このトークでは、「OSSやっていきの集い」の立ち上げから半年間で得られた成果や学びについてお話しします。