[{"data":1,"prerenderedAt":328},["ShallowReactive",2],{"recruit-jobs":3,"recruit-articles-all-1":157,"recruit-articles-categories":265,"recruit-article-entry-314":277},{"list":4,"categories":146},[5,13,18,23,28,33,41,46,51,56,61,66,71,76,81,86,91,96,101,106,111,116,121,126,131,136,141],{"topics_id":6,"contents_type":7,"contents_type_nm":8,"name":9,"text":10,"url":11,"is_top":12},64,18,"新卒","WEBエンジニア職","事業・サービス・社内業務効率化に関わるプロダクト開発、システム開発、アプリ開発などDX推進を担当。","https://public.n-ats.hrmos.co/rizapgroup/jobs/2126894917723471872",true,{"topics_id":14,"contents_type":7,"contents_type_nm":8,"name":15,"text":16,"url":17,"is_top":12},65,"データサイエンティスト職","事業・サービスに関わるビッグデータに対して、横断的にデータ分析基盤を構築し、新しい提供価値を創造。","https://public.n-ats.hrmos.co/rizapgroup/jobs/2171814626636591104",{"topics_id":19,"contents_type":7,"contents_type_nm":8,"name":20,"text":21,"url":22,"is_top":12},66,"業務自動化エンジニア職","様々な業態・業務プロセスにおける、自動化や仕組み化の導入・開発を推進。","https://public.n-ats.hrmos.co/rizapgroup/jobs/2126896559415881728",{"topics_id":24,"contents_type":7,"contents_type_nm":8,"name":25,"text":26,"url":27,"is_top":12},67,"IoTエンジニア職","IoT事業の拡大に向け、ハード・ソフト両軸で新しい体験価値を創造。","https://public.n-ats.hrmos.co/rizapgroup/jobs/2156228450968444928",{"topics_id":29,"contents_type":7,"contents_type_nm":8,"name":30,"text":31,"url":32,"is_top":12},68,"セキュリティエンジニア職","従業員の働きやすさを支える、業務システムとITインフラの構築・管理。","https://public.n-ats.hrmos.co/rizapgroup/jobs/2179029856766332928",{"topics_id":34,"contents_type":35,"contents_type_nm":36,"name":37,"text":38,"url":39,"is_top":40},69,21,"中途","開発PM","Webサービスやモバイルアプリの要件定義・設計から開発チームのマネジメント、進捗・品質管理、定量定性分析による改善を担う。","https://hrmos.co/pages/rizapgroup/jobs/000003",false,{"topics_id":42,"contents_type":35,"contents_type_nm":36,"name":43,"text":44,"url":45,"is_top":40},70,"Webディレクター","WebページのディレクションからCMS運用、KPI設計・ABテスト・PDCAサイクルによるサイトグロースまで、幅広くWeb制作の進行を担う。","https://hrmos.co/pages/rizapgroup/jobs/000007",{"topics_id":47,"contents_type":35,"contents_type_nm":36,"name":48,"text":49,"url":50,"is_top":12},71,"シニアプロダクトマネージャー","アプリ・店舗IoT・タブレット等の複数プロダクト戦略策定から要件定義・UX設計・効果検証まで、経営層と連携しながら一貫してプロダクト開発を主導。","https://hrmos.co/pages/rizapgroup/jobs/000010",{"topics_id":52,"contents_type":35,"contents_type_nm":36,"name":53,"text":54,"url":55,"is_top":12},72,"IoTサーバーエンジニア(オープンポジション)","店舗デバイスのデータ収集・遠隔制御基盤からアルゴリズム、外部ベンダー管理まで幅広く担当。既存システム連携や新価値提案を通じ、デバイス活用の仕組み作りを担う。","https://hrmos.co/pages/rizapgroup/jobs/000015",{"topics_id":57,"contents_type":35,"contents_type_nm":36,"name":58,"text":59,"url":60,"is_top":40},73,"店舗IoT／ハードウェア企画・プロダクトマネージャー","グループ独自のサービスやシステムの企画、要件定義、開発管理を担う。PoCによる仮説検証を行うほか、外部ベンダー管理を含むプロジェクト全体の推進を行う。","https://hrmos.co/pages/rizapgroup/jobs/000019",{"topics_id":62,"contents_type":35,"contents_type_nm":36,"name":63,"text":64,"url":65,"is_top":40},74,"モバイルアプリエンジニア(Android)","Kotlinを用いたAndroidアプリの企画・設計・開発・運用を担当。PdM・デザイナー・バックエンドエンジニアと連携したチーム開発でサービス品質向上を推進する。","https://hrmos.co/pages/rizapgroup/jobs/000025",{"topics_id":67,"contents_type":35,"contents_type_nm":36,"name":68,"text":69,"url":70,"is_top":40},75,"データアナリスト","SQLや機械学習を活用し、サービスの新規開発・改善を支援する。KPI定義・可視化・データ分析基盤の構築を担当。","https://hrmos.co/pages/rizapgroup/jobs/000042",{"topics_id":72,"contents_type":35,"contents_type_nm":36,"name":73,"text":74,"url":75,"is_top":40},76,"Webデザイナー","WebサービスやアプリのUI/UXからLP・バナー等の広告クリエイティブ制作など、デジタル+リアルの顧客接点を意識したデザイン業務を担う。","https://hrmos.co/pages/rizapgroup/jobs/000061",{"topics_id":77,"contents_type":35,"contents_type_nm":36,"name":78,"text":79,"url":80,"is_top":40},77,"プロジェクトマネージャー・プロジェクトリーダー","RIZAPグループ全社のDX推進として、清掃管理システムやCTI/CRMリプレイス等のシステム導入プロジェクトを要件定義からリリースまで一貫してマネジメントする。","https://hrmos.co/pages/rizapgroup/jobs/100008",{"topics_id":82,"contents_type":35,"contents_type_nm":36,"name":83,"text":84,"url":85,"is_top":40},78,"Webディレクター（マネージャー候補）","WebディレクションやサイトグロースのPDCA推進に加え、ディレクター育成・目標設定・評価・アーキテクチャ選定など組織マネジメント全般を担うリーダー職。","https://hrmos.co/pages/rizapgroup/jobs/1971790520045400071",{"topics_id":87,"contents_type":35,"contents_type_nm":36,"name":88,"text":89,"url":90,"is_top":40},79,"開発PM（マネージャー候補）","Webサービス・モバイルアプリの開発方針策定からPMチームの育成・評価・組織運営まで担い、経営層・外部パートナーと連携しながらプロダクト開発を統括する。","https://hrmos.co/pages/rizapgroup/jobs/1971790520045400072",{"topics_id":92,"contents_type":35,"contents_type_nm":36,"name":93,"text":94,"url":95,"is_top":40},80,"DX戦略推進マネージャー","経営・事業戦略フェーズから参画し、AI/RPA活用を前提とした業務プロセス改革・システム要件定義・開発ディレクション・ステークホルダー調整を横断的に主導。","https://hrmos.co/pages/rizapgroup/jobs/1971790520045400083",{"topics_id":97,"contents_type":35,"contents_type_nm":36,"name":98,"text":99,"url":100,"is_top":40},81,"PL／PM","システム構築プロジェクトにおいて、進捗・課題・コスト管理から外部ベンダー交渉・社内調整まで幅広くプロジェクトのマネジメントを担う。","https://hrmos.co/pages/rizapgroup/jobs/1971790520045400102",{"topics_id":102,"contents_type":35,"contents_type_nm":36,"name":103,"text":104,"url":105,"is_top":40},82,"社内SE／インフラ・ネットワークアーキテクト","社内インフラ・ネットワークの要件定義・設計・リリースから基幹システムのリプレイス検討・保守運用改善まで、グループ全体の社内ITを包括的に担当。","https://hrmos.co/pages/rizapgroup/jobs/1971790520045400103",{"topics_id":107,"contents_type":35,"contents_type_nm":36,"name":108,"text":109,"url":110,"is_top":40},83,"電気エンジニア(オープンポジション)","店舗設置IoT機器の回路・基板設計・試作・評価・検証を行い、パートナーとの生産立ち上げや外部開発ベンダーのマネジメントまで手掛けるハードウェア開発職。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341962",{"topics_id":112,"contents_type":35,"contents_type_nm":36,"name":113,"text":114,"url":115,"is_top":40},84,"業務アプリケーション開発エンジニア・アーキテクト","クラウドを活用したRIZAPグループ各社の社内業務アプリを内製開発・運用し、現場ヒアリングから要件定義・自動化・効率化の実装まで一貫して担う。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341966",{"topics_id":117,"contents_type":35,"contents_type_nm":36,"name":118,"text":119,"url":120,"is_top":40},85,"組み込みエンジニア(オープンポジション)","センサーや無線通信を用いたIoT機器のファームウェア設計・実装・検証とセンサーデータ分析・制御アルゴリズム開発を担い、外部ベンダー共同開発も管理する。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341969",{"topics_id":122,"contents_type":35,"contents_type_nm":36,"name":123,"text":124,"url":125,"is_top":40},86,"機構エンジニア(オープンポジション)","店舗設置機器の機構部PoC・設計・試作・評価から樹脂成型・板金部品の量産化まで担い、生産パートナーと協力して製造立ち上げを主導するエンジニア職。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341970",{"topics_id":127,"contents_type":35,"contents_type_nm":36,"name":128,"text":129,"url":130,"is_top":40},87,"ハードウェア品質管理","既存マシンの品質課題解析や対策立案から、新デバイスの性能・信頼性評価、品質データ分析・工程管理まで一貫して担い、ハードウェアの品質保証と改善提案をリードする。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341973",{"topics_id":132,"contents_type":35,"contents_type_nm":36,"name":133,"text":134,"url":135,"is_top":40},88,"AI・データユニット（20代の第二新卒～ミドルクラス）","多角的な事業から得られる膨大なデータを活用し、ビジネスインパクトを最大化するためのデータ基盤構築およびAIソリューションの開発を担う。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341987",{"topics_id":137,"contents_type":35,"contents_type_nm":36,"name":138,"text":139,"url":140,"is_top":40},89,"修理工程プロセスエンジニア・現場監督","新規修理工程の立ち上げ・レイアウト設計・設備選定からSOP作成・進捗/品質/コスト管理・現場作業員の安全衛生監督まで一貫して担う製造現場リーダー職。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341990",{"topics_id":142,"contents_type":35,"contents_type_nm":36,"name":143,"text":144,"url":145,"is_top":40},90,"修理現場リーダー・作業員監督","新規修理工程にて、現場の労務・シフト管理や技術指導、進捗管理を一貫して担当。現場の課題を吸い上げ、プロセス改善や品質向上に向けた提案までを担う。","https://hrmos.co/pages/rizapgroup/jobs/2110665929241341991",[147,151,154],{"label":148,"value":149,"to":150},"すべて","all","/recruit/jobs",{"label":8,"value":152,"to":153},"18","/recruit/jobs/categories/18",{"label":36,"value":155,"to":156},"21","/recruit/jobs/categories/21",{"articles":158,"totalPageCnt":264},[159,170,180,187,197,202,210,216,222,228,233,238,243,253,258],{"to":160,"image":161,"date":162,"label":163,"title":164,"tags":165},"/recruit/articles/entries/199","https://rizap-tech.g.kuroco-img.app/v=1775010931/files/user/recruit/contents/thumbnail/n5cfaf3e31c72_73e97bd445fe0dfcbf6bbcdef8acc1f4.png","2026.02.05","技術・カンファレンス","AIエージェント時代を見据えた認証認可の未来 ─ Authlete Meetup 2025 参加レポート",[166,167,168,169],"イベントレポート","カンファレンス","Authlete","エンジニア",{"to":171,"image":172,"date":173,"label":174,"title":175,"tags":176},"/recruit/articles/entries/200","https://rizap-tech.g.kuroco-img.app/v=1775010935/files/user/recruit/contents/thumbnail/n9a33f80f8704_7728e1500e7c81f2e18fbd5accede9a9.jpeg","2026.01.19","インターン・採用","【RIZAPテクノロジーズ】27年卒向け　第9回3Daysエンジニアインターンを開催しました！",[169,177,178,179],"開発","新卒採用","インターン",{"to":181,"image":182,"date":183,"label":163,"title":184,"tags":185},"/recruit/articles/entries/201","https://rizap-tech.g.kuroco-img.app/v=1775010937/files/user/recruit/contents/thumbnail/n24f5b9c49390_6873514f9cb987e31f21d908e7882fc4.png","2026.01.08","RIZAPオフィスでProgateハッカソンを開催しました！",[178,186],"ハッカソン",{"to":188,"image":189,"date":190,"label":191,"title":192,"tags":193},"/recruit/articles/entries/203","https://rizap-tech.g.kuroco-img.app/v=1775010930/files/user/recruit/contents/thumbnail/n2f795844f152_90197213ae57cefa5c5b5bbfb90cc914.png","2025.12.26","インタビュー","内定者が聞く、RIZAPテクノロジーズ IoT統括部のリアル【後編】",[194,195,196],"社員インタビュー","IoT","仕事のリアル",{"to":198,"image":199,"date":190,"label":191,"title":200,"tags":201},"/recruit/articles/entries/202","https://rizap-tech.g.kuroco-img.app/v=1775010933/files/user/recruit/contents/thumbnail/n8a11235fd931_b14a9ca709c1ead3e54b9d46c46b3d4f.png","内定者が聞く、RIZAPテクノロジーズ IoT統括部のリアル【前編】",[194,195,196],{"to":203,"image":204,"date":205,"label":163,"title":206,"tags":207},"/recruit/articles/entries/204","https://rizap-tech.g.kuroco-img.app/v=1775010959/files/user/recruit/contents/thumbnail/ne6d110c0bec0_9577421efba8a564c17a6f9862c51c48.jpeg","2025.12.23","YAPC::Fukuoka 2025カンファレンスレポート【各講演の学び】",[166,167,169,208,209],"SRE","YAPC",{"to":211,"image":212,"date":213,"label":174,"title":214,"tags":215},"/recruit/articles/entries/205","https://rizap-tech.g.kuroco-img.app/v=1775010934/files/user/recruit/contents/thumbnail/n8ba7168ba394_0aa90eced3923259150a7e78b770d871.jpeg","2025.12.19","【RIZAPテクノロジーズ】27年卒向け　第8回3Daysエンジニアインターンを開催しました！",[169,177,178,179],{"to":217,"image":218,"date":219,"label":163,"title":220,"tags":221},"/recruit/articles/entries/206","https://rizap-tech.g.kuroco-img.app/v=1775010948/files/user/recruit/contents/thumbnail/n1843939c3a3c_8f61cafb8ad4218a615ec0751333945e.jpeg","2025.12.11","58ハッカソンにメンターとして参加しました！",[169,186,166],{"to":223,"image":224,"date":225,"label":191,"title":226,"tags":227},"/recruit/articles/entries/210","https://rizap-tech.g.kuroco-img.app/v=1775010930/files/user/recruit/contents/thumbnail/n3d479ba02fcc_c19c70a9c2415f376a3d6b83fce5a8b3.png","2025.12.04","未経験からバックエンドエンジニアに！　若手社員が語る、個人のスキルだけではいけない理由",[194,178,169,177],{"to":229,"image":230,"date":225,"label":191,"title":231,"tags":232},"/recruit/articles/entries/209","https://rizap-tech.g.kuroco-img.app/v=1775010952/files/user/recruit/contents/thumbnail/nb1b9e76e120b_df4b3f13b243d61bc3d303a0491524b7.png","エンジニアの力で社内の業務を自動化！　“to 社内向け”の仕事とは？",[194,169,178,196],{"to":234,"image":235,"date":225,"label":191,"title":236,"tags":237},"/recruit/articles/entries/208","https://rizap-tech.g.kuroco-img.app/v=1775010949/files/user/recruit/contents/thumbnail/n310208834a85_5857b502c7e40d1ce19340d831671b68.png","データアナリストとして成長途中のRIZAPを支える！　データを使った影響力のあるしごと",[194,178,196],{"to":239,"image":240,"date":225,"label":191,"title":241,"tags":242},"/recruit/articles/entries/207","https://rizap-tech.g.kuroco-img.app/v=1775010943/files/user/recruit/contents/thumbnail/n588feaae4af0_2ebd47200eaaa8ae0324c4b5d50428fe.png","デジタル化に留まらないDXを。 “攻め” の情報システム部とは？【内定者が若手社員に聞く！】",[194,178,196],{"to":244,"image":245,"date":246,"label":163,"title":247,"tags":248},"/recruit/articles/entries/213","https://rizap-tech.g.kuroco-img.app/v=1775010957/files/user/recruit/contents/thumbnail/ndbe0ad4c3c3b_881fecd27c29077dd8e3601cce3d06fc.jpeg","2025.12.03","Vue Fes Japan 2025 に登壇しました！",[166,167,249,250,251,169,252],"vue","nuxt","chocoZAP","登壇",{"to":254,"image":255,"date":246,"label":163,"title":256,"tags":257},"/recruit/articles/entries/212","https://rizap-tech.g.kuroco-img.app/v=1775010954/files/user/recruit/contents/thumbnail/nc0b63b0ba413_80f5027c4e0c8dc5adcdb46227fef03d.jpeg","Vue Fes Japan 2025  参加レポート",[166,167,249,250,169],{"to":259,"image":260,"date":246,"label":163,"title":261,"tags":262},"/recruit/articles/entries/211","https://rizap-tech.g.kuroco-img.app/v=1775010932/files/user/recruit/contents/thumbnail/n05f3262fccc7_bbdfb906499373c3a143a2b88638f2dd.jpeg","chocoZAPがRuby biz Grand prix 2025 大賞を受賞",[166,263,169,251,252],"Ruby",10,[266,268,271,274],{"label":148,"value":149,"to":267},"/recruit/articles",{"label":163,"value":269,"to":270},"32","/recruit/articles/categories/32",{"label":174,"value":272,"to":273},"33","/recruit/articles/categories/33",{"label":191,"value":275,"to":276},"31","/recruit/articles/categories/31",{"article":278,"relatedJobs":288,"relatedArticles":291},{"date":279,"publishedAt":280,"categoryName":163,"title":281,"heroImage":282,"body":283,"metaDescription":284,"tags":285},"2023.05.19","2023-05-19T00:00:00+09:00","RIZAP がRubyKaigi 2023に初参戦！【各講演のレポート集】","https://rizap-tech.g.kuroco-img.app/v=1775010945/files/user/recruit/contents/thumbnail/n26074a076529_1754bb628b5488c0788c38cd2a7109a4.jpeg","\u003Cp name=\"841c17cc-625d-492e-a05b-95e6209aae98\" id=\"841c17cc-625d-492e-a05b-95e6209aae98\">＞＞＞＞関連記事\u003Cbr>\u003Ca href=\"https://www.rizap-tech.co.jp/recruit/articles/entries/313\">\u003Cstrong>RIZAP がRubyKaigi 2023に初参戦！【新卒メンバー現場レポート】はこちら\u003C/strong>\u003C/a>\u003Cstrong>\u003Cbr>\u003C/strong>\u003C/p>\u003Chr>\u003Ch2 name=\"1ccb3c67-02ea-4c0c-a9f2-d8b7501c549b\" id=\"1ccb3c67-02ea-4c0c-a9f2-d8b7501c549b\">入社４年目／梅田智大の感想まとめ\u003C/h2>\u003Cfigure name=\"58db2a15-1841-4219-ad8d-40032bd8ffce\" id=\"58db2a15-1841-4219-ad8d-40032bd8ffce\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684469146850-BcEYJ6Y74v.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>Matzさんと２ショット。うれしいです！\u003C/figcaption>\u003C/figure>\u003Cp name=\"9ece6b02-b89c-4b6b-8fa2-2e7ba017941f\" id=\"9ece6b02-b89c-4b6b-8fa2-2e7ba017941f\">&nbsp;入社４年目、現在フロントエンドエンジニアをしています、梅田智大です。\u003Cbr>（＞＞＞梅田さんが登場する記事は\u003Ca href=\"https://www.rizap-tech.co.jp/recruit/articles/entries/315\">こちら\u003C/a>）\u003Cbr>自分は会期中、８本の講演を聴いてきました。いずれも刺激的な内容でした…！\u003C/p>\u003Ch3 name=\"d896a2e0-fcad-47d0-bac1-9e5003d3daa2\" id=\"d896a2e0-fcad-47d0-bac1-9e5003d3daa2\">①\u003Ca href=\"https://rubykaigi.org/2023/presentations/m_seki.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">Learn Ractor&nbsp;（Masatoshi SEKI）\u003C/a>\u003C/h3>\u003Cp name=\"fbc59052-e897-4ca3-9e31-d50eef32c76a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/m_seki.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/m_seki.html#day2\u003C/a>\u003C/p>\u003Cp name=\"6b2061d2-3528-4219-9d9f-ff65886648c1\" id=\"6b2061d2-3528-4219-9d9f-ff65886648c1\">アプリケーションの速度を向上させるRactorについての機能、実装法、利点などについて包括的にお話をいただきました。\u003Cbr>Ractorは、Rubyプログラミング言語の並行性モデルであり、Ruby 3.0から導入された新しい機能です。Ractorは、並行プログラミングをシンプルかつ安全に実現するために設計されています。&nbsp;\u003Cbr>従来のRubyにおける並行処理は、スレッドを使用して実現されていましたが、スレッドの使用は複雑さや競合状態のリスクを伴います。Ractorは、これらの問題を解決するために導入されました。\u003C/p>\u003Cp name=\"b184c950-eed7-4859-8356-1b07a9967a2e\" id=\"b184c950-eed7-4859-8356-1b07a9967a2e\">講義の中でも、Ractorはデータが変更されるまでは共有されたデータを参照することでコピーのオーバーヘッドを最小限に抑えるのでメモリの観点で有利であること、単純なケースではスレッドのように書けることが利点であるとお話されていました。\u003Cbr>ただ、Ractorは比較的新しい機能であり、すべてのケースで有効に働くわけではありません。\u003Cbr>次のケースのように、１万回ループさせるといった処理にRactorを使うとより有効に働くようです。\u003C/p>\u003Cfigure name=\"fb4f45b5-63b2-4f5a-9a4f-8e534843a29d\" id=\"fb4f45b5-63b2-4f5a-9a4f-8e534843a29d\">\u003Cblockquote>\u003Cp name=\"f642378d-88e7-49ce-b356-e8691134b46e\" id=\"f642378d-88e7-49ce-b356-e8691134b46e\">`int main(int argc, char *argv[]) { int i; #pragma omp parallel for for (i = 0; i &lt; 10000; ++i) { /*...*/ } return 0; }`&nbsp;\u003C/p>\u003C/blockquote>\u003Cfigcaption>&nbsp;\u003C/figcaption>\u003C/figure>\u003Cp name=\"b0f1a866-1f0f-40c2-8230-920fee2a7eab\" id=\"b0f1a866-1f0f-40c2-8230-920fee2a7eab\">&nbsp;\u003Cstrong>所感\u003C/strong>\u003Cbr>「Concurrency is everywhere」&nbsp;\u003Cbr>この言葉が非常に印象に残りました。普段プログラミングをしていると、一つ一つの処理が順番に実行されている、つまり逐次実行されていると考えがちです。しかし、逐次実行は特殊なケースであるということを強調してお話しされていました。Ractorのような並列実行の活用により、処理速度を何倍も早くできるケースは少なくありません。\u003Cbr>\u003Cbr>しかし、逐次実行のイメージに固執していると、並列実行が可能なケースでも見落としてしまい、サービスの品質を低下させる可能性があります。\u003Cbr>本講義の最後に、登壇者が自作のポケモンカードの検索エンジンにRactorを導入するケーススタディーがありました。１週間ごとに使われたデッキ構成を分析する機能を追加した際に、１週間単位でRactorを作成し、並列に分析が走るようにしたとのことです。\u003Cbr>\u003Cbr>何も考えていなければ、１週間ごとに順番に分析を実行していくところですが、並列処理を前提にしていれば、このような発想が生まれます。また、１週間ごとにデッキ数にバラつきがあるため、並列処理をしても１番デッキ数が多い週に影響して処理速度が遅くなる可能性があるため、この点をどう解消するかという次の発想につなげられます。\u003Cbr>エンジニアとしての視点をかなり高めていただけた講義でした。\u003C/p>\u003Cp name=\"02248656-ce2e-4183-a6c7-152799e27678\" id=\"02248656-ce2e-4183-a6c7-152799e27678\">&nbsp;\u003C/p>\u003Ch3 name=\"a180ed6f-0b60-45c9-9e02-289c88d428b0\" id=\"a180ed6f-0b60-45c9-9e02-289c88d428b0\">②\u003Ca href=\"https://rubykaigi.org/2023/presentations/coe401_.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">Implementing \"++\" operator, stepping into parse.y&nbsp;（Misaki Shioi）\u003C/a>\u003C/h3>\u003Cp name=\"b0f70b82-cd8d-46bb-be34-b44c86d481cd\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/coe401_.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/coe401_.html#day2\u003C/a>\u003C/p>\u003Cp name=\"69705160-fc53-44e7-8d86-9efeb7e8eb99\" id=\"69705160-fc53-44e7-8d86-9efeb7e8eb99\">Rubyでインクリメント演算子を使えるようにするための試行錯誤についての話でした。\u003Cbr>&nbsp;Rubyでは、+は単項演算子として解析されます。+の後には数字が続くことが期待されているため、インクリメント演算子++の２回目の+が\u003Cbr>読み込まれると構文エラーとなります。&nbsp;\u003Cbr>構文エラーを回避し、++をインクリメント演算子として機能させるために、以下の試行が行われました。\u003C/p>\u003Cp name=\"c06465a8-e8b5-4579-8ec4-c3cc4c70e054\" id=\"c06465a8-e8b5-4579-8ec4-c3cc4c70e054\">試行１：++を解析できるようにする。+の後に+が続いた場合に条件分岐を行い、++をメソッドとして扱えるようにする。 &nbsp;\u003Cbr>→ 問題として、i = 0とした場合、i++を実行すると最後のiが1ではなく0となる。&nbsp;\u003C/p>\u003Cp name=\"99b22468-cbd7-4304-a625-0f94141c3ca1\" id=\"99b22468-cbd7-4304-a625-0f94141c3ca1\">&nbsp;試行２：__plusplus__メソッドを定義し、i++の場合には内部的にi.__plusplus__が呼び出されるようにする。 &nbsp;\u003Cbr>→ レシーバは変数であることが期待されているため、変数以外のケース（例: 1++）ではうまく動作しない。&nbsp;\u003C/p>\u003Cp name=\"e525e26e-cffd-45c2-9104-86851cb207bf\" id=\"e525e26e-cffd-45c2-9104-86851cb207bf\">&nbsp;試行３：シンプルに考えると、+=1ができれば良いため、i++の場合にはi += 1と全く同じ動作をするようにする。一つ目の+で+=を返し、二つ目の+で整数値の1を返すことで、+= 1と同じ挙動とする。&nbsp;\u003Cbr>→++の後に他の演算子が続くケース(例: i++ * 2)で、演算子の優先度の影響で期待された値が得られない。&nbsp;\u003C/p>\u003Cp name=\"4e386b0f-089e-4f14-ad5a-c97881323cbd\" id=\"4e386b0f-089e-4f14-ad5a-c97881323cbd\">&nbsp;試行４：++を+= 1に置き換える。i++という構文を許可し、i++の場合にはi += 1の構文と同じアクションが行われるように定義する。&nbsp;\u003Cbr>→ i ++ 1のように予期しない場合に構文エラーとなるため、Rubyで++をどのように扱うかの定義が必要。&nbsp;\u003C/p>\u003Cp name=\"85aa0bf6-73b5-4687-ac12-fdf304dbfa62\" id=\"85aa0bf6-73b5-4687-ac12-fdf304dbfa62\">\u003Cstrong>所感\u003Cbr>\u003C/strong>Rubyに新しいメソッドを追加する場合には、どのような思考やアプローチが行われるのかについて非常に興味深い話が聞けました。上記は要点をまとめたものですが、実際の講義ではRubyの構文解析や処理のタイミングについて、具体的な方法がどのように適用されるかについて詳しく説明されました。&nbsp;\u003Cbr>普段、メソッドを使用する際には、裏側でどのように解析され、処理が行われ、値が返されるのかについてあまり意識していませんでした。単なる構文エラーでさえも、どの部分で解析が行われ、エラーが発生するのかを考えると、新たな視点が開けると感じました。\u003C/p>\u003Cp name=\"97455d21-2a8a-467f-9ba0-ab423ff2f67b\" id=\"97455d21-2a8a-467f-9ba0-ab423ff2f67b\">また、講義の結論として、インクリメント演算子++をRubyでどのように定義するかが重要であり、++メソッドを追加した場合、その言語はRuby++と冗談交じりに話されていました。\u003Cbr>しかし、メソッドの定義一つで言語が大きく変わると考えると、冗談として受け流すだけではなく、非常に興味深い話となります。\u003C/p>\u003Cp name=\"844792d4-971d-4c5d-8de9-bffa038fb55e\" id=\"844792d4-971d-4c5d-8de9-bffa038fb55e\">言語は一つの思想であり、どのような考え方の下で作られたかを一つ一つ理解することが重要であると、再認識させられる素晴らしい講義でした。\u003C/p>\u003Cp name=\"f7d4769d-32fa-451b-b55b-8703a204b160\" id=\"f7d4769d-32fa-451b-b55b-8703a204b160\">&nbsp;\u003C/p>\u003Ch3 name=\"8b11a0cd-a2a5-4650-980e-3fc5ddff22a3\" id=\"8b11a0cd-a2a5-4650-980e-3fc5ddff22a3\">③\u003Ca href=\"https://rubykaigi.org/2023/presentations/sue445.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">Fix SQL N+1 queries with RuboCop&nbsp;（Go Sueyoshi）\u003C/a>\u003C/h3>\u003Cp name=\"fe8f379a-0702-49de-87b3-87666a842e6f\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/sue445.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/sue445.html#day2\u003C/a>\u003C/p>\u003Cp name=\"6b443b8c-f289-4303-a517-f84f2f8a2aca\" id=\"6b443b8c-f289-4303-a517-f84f2f8a2aca\">ISUCONという主にWebアプリケーションのパフォーマンス改善や最適化に焦点を当てたコンテストに参加するため、rubocopの中でSQLのASTをparseしてN+1クエリを自動修正するgem（rubocop-isucon）を作ったというお話でした。&nbsp;\u003C/p>\u003Cp name=\"67be3053-45ab-4f72-a7be-3500612dd735\" id=\"67be3053-45ab-4f72-a7be-3500612dd735\">通常、rubocopはRubyのソースコードを解析し、RubyのASTを取得して違反の検出や自動修正を行います。しかし、rubocop-isuconでは、RubyのASTだけでなく、SQL文字列もパースしてSQLのASTを取得し、違反の検出や自動修正に利用しています。\u003C/p>\u003Cp name=\"1803ca8a-9836-4992-92b8-eb62b8cf61bc\" id=\"1803ca8a-9836-4992-92b8-eb62b8cf61bc\">copがデータベースに接続してスキーマ情報を取得し、それを解析に利用する方法を採用したそうです。&nbsp;\u003C/p>\u003Cp name=\"8f715f9d-22ad-4db4-806d-0af23fef55eb\" id=\"8f715f9d-22ad-4db4-806d-0af23fef55eb\">N+1クエリの検出自体は難しくありませんが、rubocopをデータベースに接続することで、DBのスキーマ情報を解析できるようにしたというのが大きなポイントとのことです。&nbsp;\u003C/p>\u003Cp name=\"7760b7e8-2c79-46ab-a311-3254da164696\" id=\"7760b7e8-2c79-46ab-a311-3254da164696\">\u003Cstrong>所感\u003C/strong>\u003Cbr>rubocopをデータベースに接続することで、違反の検出や自動修正の範囲を大幅に広げられるという点が興味深いと感じました。&nbsp;\u003Cbr>実際にrubocopがどのように解析を行い、違反を検出しているのかについては、詳しく知りませんでしたので、内容は難しい部分もありましたが、rubocopには多くの可能性が秘められているということを知れて良かったです。\u003Cbr>N+1クエリの問題を検出するための有名なgemとして「bullet」がありますが、bulletとrubocop-isuconの解析方法やアプローチにはどのような違いがあるのかについても、さらに深く調べてみたいと思います。&nbsp;\u003C/p>\u003Cp name=\"a16cfd2f-c0ae-4004-b873-8a9d924539c7\" id=\"a16cfd2f-c0ae-4004-b873-8a9d924539c7\">&nbsp;\u003C/p>\u003Ch3 name=\"660f71c3-61cd-49bb-906b-26748a31e9e5\" id=\"660f71c3-61cd-49bb-906b-26748a31e9e5\">④\u003Ca href=\"https://rubykaigi.org/2023/presentations/ono-max.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">Introduction of new features for VS Code debugging&nbsp;（Naoto Ono）\u003C/a>\u003C/h3>\u003Cp name=\"062e24bc-8833-47d6-a944-58b50d17cdfe\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ono-max.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ono-max.html#day2\u003C/a>\u003C/p>\u003Cp name=\"35af84a0-e2c9-4d9c-8752-41f5745f676b\" id=\"35af84a0-e2c9-4d9c-8752-41f5745f676b\">VSCodeのデバッグにおいて、Trace Inspectorという新機能を使用することで、開発体験が向上するという内容の講義でした。&nbsp;\u003C/p>\u003Cp name=\"feb4d07a-deb2-45d0-b634-057d0df3587f\" id=\"feb4d07a-deb2-45d0-b634-057d0df3587f\">冒頭で、「コードリーディングの際にデバッガーを使用していますか？」という質問が投げかけられましたが、私は恥ずかしながら使用していなかったため、手を上げられませんでした。\u003Cbr>コードリーディングの際にデバッガーを使用すると、処理の流れがより明確になります。\u003C/p>\u003Cp name=\"a25fc73e-aa72-478f-abff-9ab3e4e16106\" id=\"a25fc73e-aa72-478f-abff-9ab3e4e16106\">いっぽうで、これまでは複雑なコードの場合にわかりづらく、ステップ実行中に以前のメソッドを忘れてしまったり、ステップ実行をやり直さなければならないといった問題がありました。この問題を解決してくれるのがTrace Inspectorです。\u003Cbr>Trace Inspectorには、行ごとに実行結果を確認できるラインベースのトレースログ、実行されたメソッドを確認できるターゲットログ、および返り値を確認できるGithubトレースログという三つのログがあります。&nbsp;\u003Cbr>これにより、より多くの情報を得るだけでなく、特定のログを簡単に見つけられます。\u003C/p>\u003Cp name=\"12ed19b8-8e5a-42c9-896a-7ccbe53852aa\" id=\"12ed19b8-8e5a-42c9-896a-7ccbe53852aa\">\u003Cstrong>所感\u003C/strong>\u003Cbr>率直に言って、今すぐにでも使いたい機能だ！と感じました。\u003Cbr>そもそもコードリーディングの際にデバッガーを使用するという発想は持っていなかったので、今後はフル活用するようにしていきたいですし、デバッガーの使い勝手も悪いと感じていたので、それを解消する機能が開発されていることに驚きを感じました。\u003Cbr>\u003Cbr>エンジニアとしてのスキルを向上させるためには、単に知識を増やすだけでなく、便利な機能をフル活用し効率的な開発を行うことも重要です。\u003Cbr>自分自身、便利な機能を十分に活用することが苦手であり、普段も効率の悪い開発をしていると自覚しています。しかし、どのような便利な機能が存在し、それをどう取り入れていけば良いのかという情報を得るのに苦戦していました。この講義は、その点での一つのきっかけとなりそうです。\u003Cbr>自分自身の開発体験を向上させる機能があるのかを探し、実際にいろいろと試してみる意欲を持ちました。\u003C/p>\u003Cp name=\"160bd85b-983a-4765-8113-04e12efb5c3a\" id=\"160bd85b-983a-4765-8113-04e12efb5c3a\">&nbsp;\u003C/p>\u003Ch3 name=\"720239e2-faf1-43f2-b8d9-962e3b938974\" id=\"720239e2-faf1-43f2-b8d9-962e3b938974\">⑤Eliminating ReDoS with Ruby 3.2&nbsp;（Takashi Yoneuchi）\u003C/h3>\u003Cp name=\"34fa5991-169c-4aa8-a42b-1054bab58889\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/lmt_swallow.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/lmt_swallow.html#day2\u003C/a>\u003C/p>\u003Cp name=\"3c659667-ba5f-4093-b4b1-87c9116f4027\" id=\"3c659667-ba5f-4093-b4b1-87c9116f4027\">&nbsp;ReDoS攻撃の問題が注目される中、Ruby3.2でその対策が導入されており、その内容を中心に講義が展開されました。\u003Cbr>ReDoS攻撃は、正規表現を悪用してWebアプリケーションやサービスを攻撃する手法です。大量の繰り返しやバックトラッキングを引き起こすことにより、サーバーの応答時間を低下させます。&nbsp;\u003C/p>\u003Cp name=\"a7561dfd-4f67-4341-af83-924c0c19cb64\" id=\"a7561dfd-4f67-4341-af83-924c0c19cb64\">例えば、(a|a)*という正規表現があった場合、aの数だけ左と右のaを選択していくので、無数に分岐してしまいます。このような「良くない正規表現の書き方」をすると、パフォーマンスが低下してしまいます。こうした問題に対して、Ruby 3.2では正規表現エンジンの内部に大幅な更新が導入されました。\u003C/p>\u003Cp name=\"df2b6323-cdab-4ca4-98b4-a140dc487c0e\" id=\"df2b6323-cdab-4ca4-98b4-a140dc487c0e\">ソースコード側では、ネストされた正規表現や前後にスペースがある場合に問題が発生するようですので、ネストを避けるかスペースを取り除くなどの対策が取られました。\u003Cbr>アプリケーション側では、キャッシュを効果的に利用して高速化を図ったり、タイムアウトを設定して問題が悪化しないように対処しているとのことです。\u003C/p>\u003Cp name=\"8c333394-75c6-4243-b57b-cc977564e01c\" id=\"8c333394-75c6-4243-b57b-cc977564e01c\">\u003Cstrong>所感\u003C/strong>\u003Cbr>正規表現については初心者が理解に苦戦するポイントかと思います。私もまだまだ理解が甘く、本講義で話があった正規表現エンジンの改善点についてもほとんど理解できませんでした。\u003Cbr>ただ、正規表現には脆弱（ぜいじゃく）性が存在し、特にユーザーに正規表現を入力させる場合は重大な問題となる可能性があることを知りました。\u003C/p>\u003Cp name=\"fea9aca9-aa5e-4dd2-a5c6-106176e2870d\" id=\"fea9aca9-aa5e-4dd2-a5c6-106176e2870d\">ReDoS攻撃が起こりうるケースについて調査し、実務でも正規表現を使用する際に脆弱（ぜいじゃく）性に注意して実装できるように勉強していきたいです。&nbsp;\u003C/p>\u003Cp name=\"e26e4fea-4e71-4b8a-a046-9a9e7062e7a1\" id=\"e26e4fea-4e71-4b8a-a046-9a9e7062e7a1\">&nbsp;\u003C/p>\u003Ch3 name=\"36b05722-10b5-47be-a8f0-c2423b3226e2\" id=\"36b05722-10b5-47be-a8f0-c2423b3226e2\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/mametter.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">⑥Revisiting TypeProf - IDE support as a primary feature&nbsp;（Yusuke Endoh）\u003C/a>\u003C/h3>\u003Cp name=\"4934c5d9-a903-4ad4-82e5-e915aa90e170\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/mametter.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/mametter.html#day2\u003C/a>\u003C/p>\u003Cp name=\"d0a30e65-fc52-4fdb-b89a-0364b15fe489\" id=\"d0a30e65-fc52-4fdb-b89a-0364b15fe489\">&nbsp;TypeProfは、Rubyプログラミング言語の静的な型解析ツールです。Rubyは動的型付け言語であり、変数の型は実行時に決定されますが、TypeProfを使用すると、静的な解析によって変数の型を推論できます。&nbsp;\u003Cbr>v1&nbsp;では解析速度に大きな課題がありましたが、v2では解析速度の向上に取り組んでいるとのことで、その進捗（しんちょく）報告がありました。\u003C/p>\u003Cp name=\"510015c3-43e5-42b3-8a40-90c7d61b88d5\" id=\"510015c3-43e5-42b3-8a40-90c7d61b88d5\">解析速度の向上のために行ったのは、変更された場合に差分だけを検出して解析する方法です。\u003Cbr>v1ではコードに変更があった場合にはコード全体を再解析する必要があり、速度に問題がありましたが、v2では変更された箇所のみ型推論を行うようにしたとのことです。&nbsp;\u003C/p>\u003Cp name=\"b7629173-a6ec-445c-b498-2441be20285e\" id=\"b7629173-a6ec-445c-b498-2441be20285e\">これにより、コードの変更時の解析速度が大幅に改善されました。\u003Cbr>0.1秒以内に処理が完了すると体感的にスムーズに実行されていると言われています。その0.1秒以内を目標としていたそうで、計測した結果は0.029秒となり、いったんの目標を達成できたそうです。&nbsp;\u003C/p>\u003Cp name=\"10ea51d4-0401-4026-ac4b-116fb82a6644\" id=\"10ea51d4-0401-4026-ac4b-116fb82a6644\">\u003Cstrong>所感\u003C/strong>\u003Cbr>私は、RubyやJavaScriptなどの動的型付け言語を学んだ後に、TypeScriptなどの静的型付け言語を学んだため、正直なところ静的な型付けには煩わしさを感じてしまいます。\u003Cbr>一般的には、大規模なアプリケーションでは厳密な型付けをすることで、型の違いによる不具合が起きにくくなり、その恩恵を受けられると言われていますが、私は小規模なアプリケーションの開発しか経験がないため、そのような場面にはまだ出会っていません。\u003C/p>\u003Cp name=\"25d45a11-a026-4d29-b988-fc1a7453b59e\" id=\"25d45a11-a026-4d29-b988-fc1a7453b59e\">Rubyで静的な型解析がどのような場面で必要とされているのか、そして登壇者がTypeProfの開発を始めた背景や、どのような問題解決に取り組んでいるのかについて知らないため、この発表の素晴らしさを理解できず悔しい思いです。&nbsp;動的型付け言語と静的型付け言語の違い、そしてどのようなケースでどちらを選択するのが良いのかについて、学び直したいと思っています。\u003C/p>\u003Cp name=\"638b7660-9848-4119-be7b-f563af018d99\" id=\"638b7660-9848-4119-be7b-f563af018d99\">&nbsp;\u003C/p>\u003Ch3 name=\"8655babf-3b17-4ee7-9a72-f74d27baf4d7\" id=\"8655babf-3b17-4ee7-9a72-f74d27baf4d7\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/hasumikin.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑦Build Your Own SQLite3&nbsp;（Hitoshi HASUMI）\u003C/a>\u003C/h3>\u003Cp name=\"1eb4001c-4458-4470-a81f-8ddd0c391694\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/hasumikin.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/hasumikin.html#day3\u003C/a>\u003C/p>\u003Cp name=\"a609b9b6-d2f1-4973-a91e-c19ed7afc535\" id=\"a609b9b6-d2f1-4973-a91e-c19ed7afc535\">&nbsp;はじめにSQLite3についての説明がありました。\u003Cbr>SQLite3は、高速かつ効率的なオープンソースのRDBMSであり、実行ファイルは非常に小さく、リソース消費も少ないため、iOS/Androidアプリやカーナビ、ブラウザなど、リソースが限られている環境でも効果的に使用できます。&nbsp;\u003Cbr>今回はMiconで動作するPicorubyでSQLite3を動作させる方法を中心に講義が展開されました。\u003Cbr>SQLite3でRubyのメソッドを実行する仕組みについての説明がありましたが、正直なところ、内容を完全に理解することは難しかったです。&nbsp;\u003C/p>\u003Cp name=\"af78e3e2-8b2f-47be-abb8-29c41b01f737\" id=\"af78e3e2-8b2f-47be-abb8-29c41b01f737\">最後に、この仕組みを使って独自のキーボードを作成するデモが行われました。キーボードが押下されたときに、そのキーと時刻をSQLite3に記録していくことでデータを蓄積し、どのキーがどのタイミングで使用されているかなどを分析していきます。\u003Cbr>そして、分析結果から最も効率の良いキーボードの配置を導き出します。例えば、\"RUBY\"とタイプする場合、\"R\"と\"U\"、\"B\"と\"Y\"が左右に分かれていたほうが早くタイプできます。この仮説と分析結果を基に、キーマップを生成していきます。\u003C/p>\u003Cp name=\"a3e56b4c-25cb-494c-888e-a0c5c92f4d6b\" id=\"a3e56b4c-25cb-494c-888e-a0c5c92f4d6b\">結果として作成されたキーマップでは、'h', 'j', 'k', 'l'が人さし指の部分に集中することになりました。これは登壇者が頻繁にvimを使用しているため、vimのキーとなる文字がタイプしやすい人さし指の近くに集中してしまい、本来の意図とは異なる結果となりました。\u003C/p>\u003Cp name=\"1f805ee9-19d6-423c-9cdc-7e1ea994dd0c\" id=\"1f805ee9-19d6-423c-9cdc-7e1ea994dd0c\">\u003Cstrong>所感\u003C/strong>\u003Cbr>MiconでSQLite2を動かすことの意義として、「誰もやってはいないけどできそうだからやった。できそうなことはやってしまえば、使い方は後から誰かが見つけてくれる」と話されていました。&nbsp;\u003C/p>\u003Cp name=\"5ca0859a-a008-490b-aaba-fafd98102ba2\" id=\"5ca0859a-a008-490b-aaba-fafd98102ba2\">もちろん、世の中の課題を解消するために開発をする人も多いと思いますが、この方のようにできそうなことがあれば片っ端から手を出していくという発想を持っている人がいるということが新鮮でしたし、その考え方が非常に素晴らしいと思いました。\u003C/p>\u003Cp name=\"9660f577-3e99-41cd-8b3a-cc3500148cc4\" id=\"9660f577-3e99-41cd-8b3a-cc3500148cc4\">OSSの開発者は雲の上の存在というイメージで、どんな考えの下、日々開発を行っているのかというのはあまり着目されません。だからこそ、RubyKaigiで開発者がどういった意図で活動しているのかというのを知ることは非常に有意義なことだとも改めて感じました。&nbsp;\u003C/p>\u003Cp name=\"cc55956a-1fb9-4cbf-b4cc-b023c5f3d694\" id=\"cc55956a-1fb9-4cbf-b4cc-b023c5f3d694\">普段の仕事でも、課題を洗い出し、それを解決するアプローチになりがちですが、できそうで面白そうなものにいったん手を付けてみるというアプローチも一つの手段だと思います。そこから新たな発見が生まれることもあるということに気づかされる講義でした。\u003C/p>\u003Cp name=\"d419da71-8c91-45cc-8a0f-be204e07d47d\" id=\"d419da71-8c91-45cc-8a0f-be204e07d47d\">キーボードの自作という趣味の領域から始まった開発かもしれませんが、それがRubyKaigiで何百何千人の前で発表される内容になっていることが素晴らしいと感じました。\u003C/p>\u003Cp name=\"bccde664-1122-47bf-9484-f8c65e1d8639\" id=\"bccde664-1122-47bf-9484-f8c65e1d8639\">&nbsp;\u003C/p>\u003Ch3 name=\"42aa986c-1f28-484a-92c5-7de0bf02e3fd\" id=\"42aa986c-1f28-484a-92c5-7de0bf02e3fd\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ktou.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑧Ruby + ADBC - A single API between Ruby and DBs&nbsp;（Sutou Kouhei）\u003C/a>\u003C/h3>\u003Cp name=\"0d937a5f-edab-42c7-acd1-4b039ce8afe0\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ktou.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ktou.html#day3\u003C/a>\u003C/p>\u003Cp name=\"9721ded8-d32f-47c3-bc76-05a149348892\" id=\"9721ded8-d32f-47c3-bc76-05a149348892\">&nbsp;「Embulk」というJavaで実装されたバルクデータローダーがあり、これはJRubyをサポートしています。しかし、EmbulkはJRubyのサポートを徐々に縮小する計画にあることを発表しています。&nbsp;\u003Cbr>この講義では、Embulkに代わる次の可能性として「ADBC」を取り上げ、その特徴や利点について話されていました。\u003C/p>\u003Cp name=\"69eeac77-3d52-40e7-b9c5-84ff06c38f9d\" id=\"69eeac77-3d52-40e7-b9c5-84ff06c38f9d\">ADBCはデータベースへのアクセスのための共通APIであり、RubyにおけるActive RecordやSequelに相当するものです。その特徴としては、多言語対応をしていることや、大規模な列指向データの最適化に向いていることが挙げられます。&nbsp;\u003Cbr>「大きな列指向データ」とは、具体的には一つのカラムに100万レコード以上存在する場合を指し、例えば整数値のカラムが一つだけで1,000万レコードある場合、libpqと比較して2倍ほど速い処理が可能です。\u003C/p>\u003Cp name=\"94a1c2c9-d807-4680-b953-b281e20a9173\" id=\"94a1c2c9-d807-4680-b953-b281e20a9173\">また、ADBCは接続先のデータベースが異なっていても、libpqドライバーが抽象化を担当することで、同じAPIを使用できる便利な仕組みになっています。\u003C/p>\u003Cp name=\"2381f777-3f07-4821-9cf1-06a84076c91e\" id=\"2381f777-3f07-4821-9cf1-06a84076c91e\">\u003Cstrong>所感\u003C/strong>\u003Cbr>講義の後半では、PostgreSQLでFlight SQLを使う方法やその有効な使用場面についての話がありましたが、具体的な使用方法や用途についてまでは、理解が追いつきませんでした。\u003C/p>\u003Cp name=\"c61a6eaf-4d70-4429-a810-a8e797276008\" id=\"c61a6eaf-4d70-4429-a810-a8e797276008\">近い将来、ADBCを使用してRubyで大量のデータを読み書きできるようになったり、ActiveRecordを介してADBCを使用できるようになるということは漠然と理解しました。\u003C/p>\u003Cp name=\"28e5fe69-6e92-495a-8db5-2410f5b476f6\" id=\"28e5fe69-6e92-495a-8db5-2410f5b476f6\">この講義でADBCやEmbulkの存在を初めて知りましたし、大量のデータを読み書きするための最適な方法がいくつか存在することも、私にとって新しい知識でした。\u003C/p>\u003Cp name=\"f42523c9-7d81-4a29-b9fb-5373dd4f4005\" id=\"f42523c9-7d81-4a29-b9fb-5373dd4f4005\">正直なところ、難しい内容でしたが、Rubyでデータの読み書きを行う際にどのような仕組みが使用されているのか、どの方法を使うと効率的になるのかという点について、ADBCを含めて知識を広げていきたいと思います 。\u003C/p>\u003Cp name=\"66bc92f5-fa68-4038-a180-545bf13c5837\" id=\"66bc92f5-fa68-4038-a180-545bf13c5837\">&nbsp;\u003C/p>\u003Ch2 name=\"cd3aa1d2-5887-425b-835a-08f8c99ad305\" id=\"cd3aa1d2-5887-425b-835a-08f8c99ad305\">新卒１年目／大杉貫剛の感想まとめ\u003C/h2>\u003Cfigure name=\"93436ce5-b2ed-46cd-99c8-1b9b5a883cce\" id=\"93436ce5-b2ed-46cd-99c8-1b9b5a883cce\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684470462943-e5UCrOOLti.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>貴重な経験をありがとうございます\u003C/figcaption>\u003C/figure>\u003Cp name=\"26d7bf2d-57fc-42fa-84ba-20829745e2e8\" id=\"26d7bf2d-57fc-42fa-84ba-20829745e2e8\">はじめまして。新卒１年目の大杉貫剛です。\u003Cbr>自分は13本の講演を見てまいりましたが、その中から６本の感想を以下にまとめました！&nbsp;\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"07bb2f51-1fdd-40c3-8bcf-65a470fbc827\" id=\"07bb2f51-1fdd-40c3-8bcf-65a470fbc827\">①\u003Ca href=\"https://rubykaigi.org/2023/presentations/gsamokovarov.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">RuboCop's baddest cop（Genadi Samokovarov ）\u003C/a>\u003C/h3>\u003Cp name=\"a0a4eab8-ba5a-4698-9cea-c62b7175b7f0\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/gsamokovarov.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/gsamokovarov.html#day1\u003C/a>\u003C/p>\u003Cp name=\"dba3dcc8-4c29-4cf8-8e91-da878bbc46eb\" id=\"dba3dcc8-4c29-4cf8-8e91-da878bbc46eb\">スピーカーのGitHubに存在する、あらゆるRubocopのエラーとその改善案について実演形式で紹介いただきました。\u003Cbr>Rubocopの性能は、コードに書かれる「（）」の存在、特に書かれる位置によって大きく左右されると説明されていました。印象的だったのは再三出てきた言葉「Ambiguous（曖昧）」でした。細かなコードの書き方の違いでRubocopのエラーが発生することに、ついイライラしてしまうユーザーの裏で、この「Ambiguous（曖昧）」を改善しようとする開発者のトライandエラーを見られたのは非常に貴重でした。\u003C/p>\u003Cp name=\"8bf62fef-9ec1-43fa-8e2a-f5863a42be83\" id=\"8bf62fef-9ec1-43fa-8e2a-f5863a42be83\">そして改善に対する行動が非常に印象的で、最後の言葉を特に覚えています。「We ran robocop only git changed.（Gitを変化させたときにしか、Rubocopは稼働しない）」&nbsp;\u003C/p>\u003Cp name=\"7e852fcf-8872-43fb-b284-be24e66f3a37\" id=\"7e852fcf-8872-43fb-b284-be24e66f3a37\">そう、だから彼は１対１のGitHub対Rubocopの結果を講演で見せ続けていたのだと思います。本当に伝えたいのはきっと、こうして一つ一つ動かして、Rubocopの性能向上に一緒に取り組んでいこう、ということ。そのために彼は旗を振っている、叫んでいるのだと感じました。彼のスライドの作り方、話の段取り、それらはすべてここに集約されている気がしました。&nbsp;\u003C/p>\u003Cp name=\"d989da2a-38fb-430c-9a48-af9533a872ef\" id=\"d989da2a-38fb-430c-9a48-af9533a872ef\">&nbsp;\u003C/p>\u003Ch3 name=\"fa57a931-fdf5-4102-a707-2a1f3b9fd43e\" id=\"fa57a931-fdf5-4102-a707-2a1f3b9fd43e\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/KnuX.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">② Understanding the Ruby Global VM Lock by observing it （lvo Anjo）\u003C/a>\u003C/h3>\u003Cp name=\"df7a3507-447a-4012-801d-099a89b529ba\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/KnuX.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/KnuX.html#day1\u003C/a>\u003C/p>\u003Cp name=\"b14e5f6c-ac51-4b87-9ca7-ecddf9402765\" id=\"b14e5f6c-ac51-4b87-9ca7-ecddf9402765\">Rubyの実行速度が遅いのは、多数のメソッドを走らせることに起因しています。それを実際に可視化して、示してくれる講演でした。Rubyの積年の課題である実行速度という問題について、一つの側面からとらえられました。&nbsp;\u003Cbr>特に可視化して描画のスライドで示されていたことが非常にわかりやすかったです。「実行したいのに実行できない」そんなスレッドが詰まっている状態があることがわかりました。&nbsp;\u003C/p>\u003Cp name=\"6bad58ae-dcd4-4515-a9c7-85d04189f5e2\" id=\"6bad58ae-dcd4-4515-a9c7-85d04189f5e2\">そして、この「実行したいのに実行できない」の時間はスレッドが多くなるにつれて延びることがわかりました。強調したいのは、遅いのはスレッドの処理そのものではないということです。&nbsp;\u003C/p>\u003Cp name=\"fa908533-05b6-4e84-a89f-5ee49dad247f\" id=\"fa908533-05b6-4e84-a89f-5ee49dad247f\">さらに興味深いのは、Rubyのスレッドはオペレーションシステムと1:1ということです。実はこの「実行したいのに実行できない」の時間を持たないカウンタースレッドがあるらしいです。これはおそらく、オペレーションシステムごとの相性によるものだそうです。これを見つけられたら、Rubyの世界の境界線がまた一つ広がるのじゃないだろうかという将来性を見据えた講演でした。\u003C/p>\u003Ch3 name=\"f621bd05-f10e-4de2-aca1-b67a3a42f8de\" id=\"f621bd05-f10e-4de2-aca1-b67a3a42f8de\">&nbsp;\u003Ca href=\"https://rubykaigi.org/2023/presentations/ima1zumi.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">③UTF-8 is coming to mruby/c （ Mari Imaizumi ）\u003C/a>\u003C/h3>\u003Cp name=\"1efec76c-bb4c-415f-9b3a-dcc76bf9f095\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ima1zumi.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ima1zumi.html#day1\u003C/a>\u003C/p>\u003Cfigure name=\"351a371a-46ca-49d0-aeed-2bd2ebb3c85a\" id=\"351a371a-46ca-49d0-aeed-2bd2ebb3c85a\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684470750857-RoFkpZhSBz.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>mruby/cにUTF-8を実装するという内容の講演でした&nbsp;\u003C/figcaption>\u003C/figure>\u003Cp name=\"5fd91612-ade9-4f41-8bb0-550a388d4f5d\" id=\"5fd91612-ade9-4f41-8bb0-550a388d4f5d\">大きなトピックは「絵文字の数をカウントしたいけれど、できない」という問題でした。&nbsp;\u003Cbr>絵文字.sizeでカウントできるかと思われたそれは、絵文字のByteをカウントしてしまうためにうまくいかないという実行と理想の乖離（かいり）が起こっていました。&nbsp;\u003C/p>\u003Cp name=\"b4e1ef7e-1714-4af3-a50e-6a53ea3bc9d2\" id=\"b4e1ef7e-1714-4af3-a50e-6a53ea3bc9d2\">前提として、StringがByte列なのでエラーが起こります。ただByte列は、それぞれ先頭の列がByteによって決まっています。よって、このByte列から、何文字あるのかを割り出せます。そんな論理だった計画と実行で、課題を解明していく内容がわかりやすかったです。当たり前に使うUTF-8が存在しない世界があったことにも驚き、さらにそれを実装する中身を具体的な課題の中で認識できたことが何よりも面白かったです。&nbsp;\u003C/p>\u003Cp name=\"d215e824-bebc-404d-a714-0c856956926f\" id=\"d215e824-bebc-404d-a714-0c856956926f\">&nbsp;&nbsp;\u003C/p>\u003Ch3 name=\"d882319c-b245-44de-9ba5-159227d7925f\" id=\"d882319c-b245-44de-9ba5-159227d7925f\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/tompng.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">④Power up your REPL life with types （ Tomoya Ishida ）\u003C/a>\u003C/h3>\u003Cp name=\"a864511e-3766-482e-b5f7-2a69e4bd9bd0\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/tompng.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/tompng.html#day1\u003C/a>\u003C/p>\u003Cp name=\"838e7d28-e0c2-45f3-82b5-326a8d74ca59\" id=\"838e7d28-e0c2-45f3-82b5-326a8d74ca59\">irbの予測検索を作成したという内容の講演でした。&nbsp;\u003Cbr>従来はメソッドチェインが長すぎて、予測を上げだせばきりがないので、実装しないことがトレンドになっていました。この課題を解決するために開発したのが「katakata.irb」というGemでした。&nbsp;\u003C/p>\u003Cp name=\"b1f31eae-a3bb-4657-832c-be68f35a5dc8\" id=\"b1f31eae-a3bb-4657-832c-be68f35a5dc8\">作り方は３ステップありました。&nbsp;\u003Cbr>その１：irbはそもそも不完全なコードを書くので、意味のある部分だけを抜き出せるようにすること。&nbsp;\u003Cbr>その２：RBSを使って、メソッドチェインを評価すること。&nbsp;\u003Cbr>その３：irbの完了を上書きして、忘れないようにすること。&nbsp;\u003C/p>\u003Cp name=\"50503d2a-e50c-45a5-b0e8-25c8bbc5bebb\" id=\"50503d2a-e50c-45a5-b0e8-25c8bbc5bebb\">これらステップの具体的な内容までは非常に難しく理解が及びませんでした。普段何気なく使用する予測検索の裏側がどれほど高度な内容で作られているのか、それを肌で感じられたことがとても貴重な機会でした。&nbsp;\u003C/p>\u003Cp name=\"6769d0b0-9b39-4c41-ba79-7d0f0505d380\" id=\"6769d0b0-9b39-4c41-ba79-7d0f0505d380\">&nbsp;\u003C/p>\u003Ch3 name=\"038df53d-7e3c-4d15-b0c1-c0663ae7dac1\" id=\"038df53d-7e3c-4d15-b0c1-c0663ae7dac1\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/maximecb.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">⑤Optimizing YJIT's Performance, from Inception to （ Maxime Chevalier-Boisvert ）\u003C/a>\u003C/h3>\u003Cp name=\"dfd0dcd4-18ca-467d-a98c-c4dd0ac7d900\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/maximecb.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/maximecb.html#day2\u003C/a>\u003C/p>\u003Cp name=\"00a01c6c-6e4a-43a5-8843-7fdeb93a64c1\" id=\"00a01c6c-6e4a-43a5-8843-7fdeb93a64c1\">こちらはキーノートの講演でした。YJITの開発者が登壇され、その誕生から最適化されるまでの変遷をお話しいただきました。&nbsp;\u003C/p>\u003Cp name=\"356f0287-1cdd-4682-bb85-327e40c82981\" id=\"356f0287-1cdd-4682-bb85-327e40c82981\">まず課題感としては、やはり早くて正確なものを作りたいという思いからでした。しかしYJITの前身として作られたマイクロJITなどは、やはり実験的なものに過ぎず、十分な成果を上げられずにいました。これを解決するためのキーワードが「Benchmarks」でした。この「Benchmarks」を適切に設定することで、問題の所在を顕在化させ、徹底的に改善し最適化できるようになったといいます。&nbsp;\u003C/p>\u003Cp name=\"282c724f-111a-440e-96d2-cf542c0d3c4a\" id=\"282c724f-111a-440e-96d2-cf542c0d3c4a\">具体的な「Benchmarks」の例として、Headline Benchmarks, Other Benchmarks, Micro Benchmarks などが挙げられており、その具体的な改善方法は難解だったものの、このプロセスはとても印象的でした。YJITの今後の課題としては、やはり継続的に速さの改善とメモリ使用量の部分が挙げられていました。&nbsp;\u003C/p>\u003Cp name=\"b2923831-54d3-4c0e-a246-3286a81bb02f\" id=\"b2923831-54d3-4c0e-a246-3286a81bb02f\">「あなたが推測できないものは、改善できない」という言葉がまとめの部分で紹介されていましたが、やはり課題の所在を推し量れなければ、改善することはそもそも不可能であるという、エンジニアの世界以外にも共通する教訓を得られたことは、とても貴重な機会でした。&nbsp;&nbsp;\u003C/p>\u003Cp name=\"5b3c3599-8e65-4c18-9ffa-8f260c512ce9\" id=\"5b3c3599-8e65-4c18-9ffa-8f260c512ce9\">&nbsp;\u003C/p>\u003Ch3 name=\"7c8036a4-3aed-4cac-886c-4c0842c37fac\" id=\"7c8036a4-3aed-4cac-886c-4c0842c37fac\">\u003Ca href=\"https://%20https//rubykaigi.org/2023/presentations/heronshoes.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑥The Adventure of RedAmber - A data frame library in Ruby（Hirokazu SUZUKI）\u003C/a>\u003C/h3>\u003Cp name=\"65925400-fd34-420e-8904-6ac9a12f3ab4\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/heronshoes.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/heronshoes.html#day3\u003C/a>\u003C/p>\u003Cp name=\"82480b19-2a76-4e8c-ba05-ec441d244a8a\" id=\"82480b19-2a76-4e8c-ba05-ec441d244a8a\">RedAmberというRubyで書かれたデータフレームライブラリについての講演でした。データ学習（機械学習）といえばPythonなどが有名ですが、Rubyでもできないかと初めてOSSの開発に着手した挑戦の結果を紹介いただきました。&nbsp;\u003C/p>\u003Cp name=\"29af2306-cbd6-4e99-9b3c-1d2f0d91d95a\" id=\"29af2306-cbd6-4e99-9b3c-1d2f0d91d95a\">RedAmber の特徴的な部分は主に四つありました。&nbsp;\u003Cbr>一つに、同じ型のデータ（ベクター）を作って並べ２次元データにしていること。これはSQLのテーブルとほぼ同じです。次に、ラベルには唯一性を帯びさせること。そして欠損値にnilを持るようにしているそうです。\u003Cbr>三つ目にRubyの配列やハッシュで返してくれるようにすることで、Rubyらしさを実現していること。これがRedAmberの何よりの特徴で、Rubyらしく感覚的にコードが書ける、扱えることにこだわったそうです。最後にベクターを変化させることのできるメソッドを多数用意していること。&nbsp;\u003C/p>\u003Cp name=\"4c829b1e-603c-4732-9425-3f22b7d6f1f8\" id=\"4c829b1e-603c-4732-9425-3f22b7d6f1f8\">作成して終わりではなく、使ってもらうことがゴールだと話していたことが非常に印象的でした。\u003C/p>\u003Cp name=\"7c562088-b99c-4b81-8906-a62a8e286ef8\" id=\"7c562088-b99c-4b81-8906-a62a8e286ef8\">&nbsp;\u003C/p>\u003Ch2 name=\"96a04931-1b9f-4ce3-b922-52a55407b57f\" id=\"96a04931-1b9f-4ce3-b922-52a55407b57f\">新卒１年目／高城友梨香の感想まとめ\u003C/h2>\u003Cfigure name=\"2aae675a-d795-4677-92cf-1c41fd38279d\" id=\"2aae675a-d795-4677-92cf-1c41fd38279d\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684471297005-B6M9EdF3jh.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>現場レポートを書かせていただきました！\u003C/figcaption>\u003C/figure>\u003Cp name=\"c8a40e39-2349-49eb-934e-0fcb7f3919fa\" id=\"c8a40e39-2349-49eb-934e-0fcb7f3919fa\">&nbsp;同じく新卒１年目の高城友梨香です。\u003Cbr>私は８本の講演を見てきました。正直、まだわからない話が多くありましたが、いつかこれが全部わかる日がくるよう頑張ります！\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"ec6945b5-6b8a-4b91-9f61-aeb7d75307b0\" id=\"ec6945b5-6b8a-4b91-9f61-aeb7d75307b0\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/nukumaro22.html\" target=\"_blank\" rel=\"nofollow noopener\">①DIY Your Touchpad Experience: Building Your Oun Gestures&nbsp;（Kohei Yamada）\u003C/a>\u003C/h3>\u003Cp name=\"e2da826a-a04e-452c-8f23-b15fc3e3d278\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/nukumaro22.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/nukumaro22.html\u003C/a>\u003C/p>\u003Cp name=\"7a7c1856-ca11-4fe2-b84a-33dc8f8bed4a\" id=\"7a7c1856-ca11-4fe2-b84a-33dc8f8bed4a\">Linuxでタッチパッド操作が可能となるfusumaというGemを紹介していただきました。\u003Cbr>Fusumaの使用方法や、ジェスチャーとアクションのカスタマイズについての説明や、どのようにしてこのFusumaを作成したかについてのお話がありました。\u003Cbr>その中でも１番印象的だったのは、作成方法の一つとして挙げられたジェスチャー認識に関してです。&nbsp;libinput-toolsでは、指の認識に関して実際の出力を見ました。何本の指で触っているかや、どのくらいの面積でどの程度触っているのかを検知したものが実際に画面出力されていてとても面白かったです。&nbsp;\u003C/p>\u003Cp name=\"db7dd3e0-a85c-4552-a95d-013cade3234f\" id=\"db7dd3e0-a85c-4552-a95d-013cade3234f\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>自分の手になじむツールを自分で作る！！という言葉が印象的でした。タッチ操作一つをとってもおのおの使いやすい方法などは違います。それを自らカスタマイズできるようにしていたのがとても魅力的でした。&nbsp;\u003C/p>\u003Cp name=\"6260cbb0-17b1-46e8-af85-4934d225dcc4\" id=\"6260cbb0-17b1-46e8-af85-4934d225dcc4\">&nbsp;\u003C/p>\u003Ch3 name=\"396ca320-aa23-4864-ba87-382911d39382\" id=\"396ca320-aa23-4864-ba87-382911d39382\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/3yUma_rb.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">②Develop chorome extension with ruby.wasm&nbsp;（Yuma Sawai）\u003C/a>\u003C/h3>\u003Cp name=\"800f2940-935a-43ef-a36f-82a090a7fb9c\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/3yUma_rb.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/3yUma_rb.html#day1\u003C/a>\u003C/p>\u003Cp name=\"c830f121-24d0-44d8-9c83-7efbccc73bca\" id=\"c830f121-24d0-44d8-9c83-7efbccc73bca\">Ruby.wasmを利用したchrome拡張機能を楽に実装するためのフレームワーク、「unloosen」の開発についての紹介でした。\u003Cbr>chromeの拡張機能を使えば、ブラウザの機能をもっと自分で使いやすくできます。その中で、unloosenを使用するメリットとして、シンプルに書け、スクリプトをすべてアプリケーションに入れられるためファイル数を少なく管理ができる、毎回読み直す必要がないなどがありました。\u003Cbr>拡張機能の実装においてRubyで実装することにより、インポートすることが不要なため簡単に拡張できたりと、Rubyの良さが伝わりました。\u003C/p>\u003Cp name=\"1c94f2a0-27e6-4cd3-b4c1-911487ca9ec9\" id=\"1c94f2a0-27e6-4cd3-b4c1-911487ca9ec9\">Manifest.jsonからRubyのVMを起動し、chrome各省機能で必要なファイルはすべてRubyで記述できるようになっていました。スピーカーである Sawai Yuma さんは作った感想として、ライブラリの設計が難しかったことや、まだまだ改善の余地が見込めるためフィードバックをたててくれるとうれしいとおっしゃっていました。Ruby言語の可能性の大きさを感じられました。&nbsp;\u003Cbr>&nbsp;\u003C/p>\u003Cfigure name=\"6904cb39-c30a-414c-859f-645b25ec6b2b\" id=\"6904cb39-c30a-414c-859f-645b25ec6b2b\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684471858656-jHpwB629uo.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>会場は大盛況！\u003C/figcaption>\u003C/figure>\u003Cp name=\"876cfc71-1c8e-4203-b1a4-4ec1462807c1\" id=\"876cfc71-1c8e-4203-b1a4-4ec1462807c1\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>今回参加した講義の中で１番の盛況ぶりでした。座れず立ちながら視聴しました！！\u003Cbr>そしてなんと、スピーカーであるSawai Yumaさんはまだ大学３年生であると聞き驚きました。去年初めてRuby会議に参加したときRubyがブラウザで動くオンラインデモを見たことがきっかけとなり、自分が登壇することを目標にしたそうです。それを１年でかなえられたそうです。驚きの速さで、私も負けていられないなと思いました。&nbsp;\u003C/p>\u003Cp name=\"bae835f6-c9ee-492f-a641-eecad1c68d10\" id=\"bae835f6-c9ee-492f-a641-eecad1c68d10\">&nbsp;\u003C/p>\u003Ch3 name=\"c67c812f-8406-472b-aa52-78a7abc5657b\" id=\"c67c812f-8406-472b-aa52-78a7abc5657b\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/spikeolaf.html\" target=\"_blank\" rel=\"nofollow noopener\">③The future vision of Ruby Parser&nbsp;（Yuichiro Kaneko）\u003C/a>\u003C/h3>\u003Cp name=\"09d98536-d554-4fc4-adba-1facf6178296\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/spikeolaf.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/spikeolaf.html\u003C/a>\u003C/p>\u003Cp name=\"7eff02a0-7b9b-44ab-b919-6b7732465db5\" id=\"7eff02a0-7b9b-44ab-b919-6b7732465db5\">現在はLALRパーサを利用しているもののこれには保守性と使いやすさの点でいくつか問題点があることがわかっています。そこで開発したLramaというパーサについての紹介がありました。&nbsp;\u003C/p>\u003Cp name=\"9857414b-778e-4712-9bac-ccd00b848527\" id=\"9857414b-778e-4712-9bac-ccd00b848527\">不足したトークンを挿入することで、補間処理を可能にし、natural attributesとBisonを組み合わせることでバージョン交換を行い、ユニバーサルパーサを実現することに成功したという内容でした。&nbsp;\u003C/p>\u003Cp name=\"a025a5dc-3db2-4c7a-a1af-0dcedbcc1524\" id=\"a025a5dc-3db2-4c7a-a1af-0dcedbcc1524\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>そもそもパーサというものを知らなかったので、事前に予習していきました。&nbsp;パーサにもいろいろなものがあるとは知っていましたが、自ら開発し問題点を解決したものを作成していて圧倒されました。&nbsp;\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"62d2830d-1896-41db-9c78-c8b9230c4b1a\" id=\"62d2830d-1896-41db-9c78-c8b9230c4b1a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/lt/\" target=\"_blank\" rel=\"nofollow noopener\">④Lightning Talks\u003C/a>\u003C/h3>\u003Cp name=\"9e0c856e-6074-4999-b281-95b4b4fff41a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/lt/\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/lt/\u003C/a>\u003C/p>\u003Cp name=\"2ae9f8be-ae06-400f-9192-7ee51de4baa9\" id=\"2ae9f8be-ae06-400f-9192-7ee51de4baa9\">そもそも私は、予習をするまでLightning Talkというものを知りませんでした。調べてみるとライトニングトーク（Lightning Talk）とは、約 ３ 分から 5 分にかけて行われる短いプレゼンを指すと書いてありましたが、プレゼンテーションの一言では収まりきらないほどの熱量でした。\u003C/p>\u003Cp name=\"fa0dd62e-06a7-4cad-8651-256e5dd3a29b\" id=\"fa0dd62e-06a7-4cad-8651-256e5dd3a29b\">始まると5分ごとにRubyに関しての成果や思いなどをそれぞれが熱く語っていて会場も大盛況でした！　内容が全くわからないものもあったのですが、その熱量だけは毎回伝わってきました。\u003C/p>\u003Cp name=\"b93fbbe1-3118-4224-a792-77143ca413c0\" id=\"b93fbbe1-3118-4224-a792-77143ca413c0\">中でも私が印象に残っているトークは、あおいゆらさんの「RubyKaigi2022で転職」です。RubyKaigiのDrinkupでお話しした人にブックウォーカーに入りたいと相談したところ、なんとたまたまブックウォーカーの方だったらしく、そのまま転職採用が決まったらしいです。RubyKaigiでのつながりの偉大さを感じました。\u003Cbr>また、転職先でプロジェクトの仕様がわからないものでもリファクタなどは自分だったらできると行動したことから、簡単なところから少しずつ事業改善を行い実装していくことの大切さについてお話されていたのも印象的でした。\u003C/p>\u003Cp name=\"a4a9fdb5-7664-40fb-a974-cee639b606ce\" id=\"a4a9fdb5-7664-40fb-a974-cee639b606ce\">\u003Cstrong>感想\u003C/strong>\u003Cbr>RubyKaigiに参加したことがきっかけで転職が決まったというなんともドラマみたいなお話でした。この話を聞いて自分もイベントや、このような多種多様な人が集まる場で積極的に動いていくことでもしかしたらチャンスをつかめるかもしれないという可能性を見た気がします。\u003C/p>\u003Cp name=\"b0e8f8a1-7528-45de-ac3e-706e653380ca\" id=\"b0e8f8a1-7528-45de-ac3e-706e653380ca\">また、私はまだ入社して１カ月と少ししか経っていない未熟者です。実際自分は、まだ実務には携われていないですが、少しずつ自分のできることを見つけ自ら積極的に働きかけていくことで仕事の幅を広げていきたい思いました。\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"9c818573-9032-45b9-9ef5-2d8061fff534\" id=\"9c818573-9032-45b9-9ef5-2d8061fff534\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/kddnewton.html\" target=\"_blank\" rel=\"nofollow noopener\">⑤Yet Another Ruby Parser&nbsp;（Kevin Newton）\u003C/a>\u003C/h3>\u003Cp name=\"22c081ec-ac6b-42d8-a647-4ce599e2c70a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/kddnewton.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/kddnewton.html\u003C/a>\u003C/p>\u003Cp name=\"0a838a7f-9810-4d7e-a3f5-a187812932ab\" id=\"0a838a7f-9810-4d7e-a3f5-a187812932ab\">&nbsp;既存のパーサを書き換えたYARPという新しいパーサの紹介でした。エラートレランス、ポータビリティ、メンテナンス性を向上させたいという思いを反映していました。不足しているトークンやノードを補ってASTを得て、さまざまなランタイムに対応したユニバーサルパーサを目指したと話されていました。今後としては、トークンの先読みやメモリの削減を目指すそうです。\u003Cbr>&nbsp;\u003C/p>\u003Cp name=\"bec2754e-5f18-46cc-a861-b2e8e8566f40\" id=\"bec2754e-5f18-46cc-a861-b2e8e8566f40\">\u003Cstrong>感想\u003C/strong>\u003Cbr>この講義では、私が参加した講義の中で初めてのオンライン講義でした。ですが、やはりオフラインのほうが実際にお会いできるという点や、質問などがしやすかったりとオフラインとオンラインを交えたことで両サイドのメリット、デメリットを改めて感じました。\u003Cbr>この講義もパーサのお話でした。現段階でパーサが抱えている問題点にアプローチしていて、さらにトークンの先読みやメモリの削減をしていくことで有用性を高めていて素晴らしいと思いました。純粋にこのパーサを使いたい！と感じました。\u003C/p>\u003Cp name=\"0a5a34af-c7a5-48d5-8c4e-6f65df5e3d36\" id=\"0a5a34af-c7a5-48d5-8c4e-6f65df5e3d36\">&nbsp;\u003C/p>\u003Ch3 name=\"50727bb1-d8e6-4219-be08-f8776097539e\" id=\"50727bb1-d8e6-4219-be08-f8776097539e\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/koic.html\" target=\"_blank\" rel=\"nofollow noopener\">⑥The Resurrection of the Fast Parallel Test Runner&nbsp;（Koichi ITO）\u003C/a>\u003C/h3>\u003Cp name=\"0e7ea834-bd7e-4f58-bb13-123637ef12ab\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/koic.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/koic.html\u003C/a>\u003C/p>\u003Cp name=\"30ada9c6-9563-460d-a37e-8868c0d6fca9\" id=\"30ada9c6-9563-460d-a37e-8868c0d6fca9\">並列テストの重要性と実現方法やtest-queueに関するお話をいただきました。&nbsp;\u003Cbr>高速なテストを行うためには、お金を投じてＣＰＵやメモリを増強したり、チューニングをして早くする方法などがあるが、今回の講演では、並列処理でそれらを実現する方法について紹介されました。&nbsp;\u003Cbr>並列テストを行うことにより、テストの実行時間を大幅に短縮することが可能になります。&nbsp;\u003C/p>\u003Cp name=\"2c89b9dc-d3a9-4080-9b59-766254837faa\" id=\"2c89b9dc-d3a9-4080-9b59-766254837faa\">並列処理の方法についても四つご紹介されていました。&nbsp;\u003Cbr>一つ目は、Rubyのフレームワークであるminitestを利用する方法。二つ目はRails７を利用する方法。\u003Cbr>そして事前にテストを分割し、parallel gemを利用して並列処理を実行する方法、最後にtest-queueに関して紹介されました。\u003Cbr>中でも、test-queueのお話が興味深かったです。テストをqueueにいれ、workerがそれを取り出して処理することで分割しなくとも実現できます。\u003Cbr>しかし、このtest-queueは当時メンテナンスがされていなかったため、スピーカーがメンテナになることを決意したことで、４、5年ぶりにメンテナンスが再開されました。&nbsp;\u003C/p>\u003Cp name=\"54d3d2c1-713e-4112-bcce-213b9c2a6b5f\" id=\"54d3d2c1-713e-4112-bcce-213b9c2a6b5f\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>どうやって並列処理がされているのか普段全く考えていなかったので、勉強するきっかけになりました。テストを書くということも大事ですが、根本どうやってテストが実行されているのかというところにも注目していくことでさらに理解が深まると感じました。&nbsp;\u003C/p>\u003Cp name=\"7a45a44d-05c8-46af-9851-d0f2407ed706\" id=\"7a45a44d-05c8-46af-9851-d0f2407ed706\">&nbsp;&nbsp;\u003C/p>\u003Ch3 name=\"05406cba-aec6-4b56-8e6f-1f503993b140\" id=\"05406cba-aec6-4b56-8e6f-1f503993b140\">⑦Multiverse Ruby&nbsp;（Chris Salzberg）\u003C/h3>\u003Cp name=\"344972e2-b12a-4c58-afe4-c8c988c279ce\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/shioyama.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/shioyama.html#day2\u003C/a>\u003C/p>\u003Cfigure name=\"439df5bb-82ce-4a0d-bd12-659a8166fddd\" id=\"439df5bb-82ce-4a0d-bd12-659a8166fddd\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684473243197-9VuNQ7ZuNu.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>&nbsp;\u003C/figcaption>\u003C/figure>\u003Cp name=\"6270b1ce-af65-4184-86b5-8e65b6148c81\" id=\"6270b1ce-af65-4184-86b5-8e65b6148c81\">Rubyのコードを限定したモジュール内でのみ展開を行い、競合がないポータブルな共有を可能とするImというGemについての紹介が行われました。\u003Cbr>名前の競合に関しては、適宜課題感を得ていたため、解決しようと至ったとおっしゃっていたところ、それに同意している観客の方が多くいらっしゃいました。\u003C/p>\u003Cp name=\"59c4280e-36be-4766-8098-a1038706c191\" id=\"59c4280e-36be-4766-8098-a1038706c191\">ImはRuby3.2の新機能である二つを利用してモジュール先を指定してコードをロードしたり定数の変更をキャッチしたりできるgemです。この方法でロードすることでコードの各ユニットが独自空間に配置され、名前の競合を避けることが可能になります。&nbsp;\u003Cbr>名前の競合を解決するにあたり、知っていくうちにその仕様の理解が深まったことも利点に上げていて、課題解決だけでなく過程も大事にしていることにとても感銘を受けました。\u003C/p>\u003Cp name=\"7b6f2f70-0d67-4e99-ae60-0e637b0d9d8f\" id=\"7b6f2f70-0d67-4e99-ae60-0e637b0d9d8f\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>純粋にImというGemを使いたいと感じました。名前の競合に課題感を得ているのが納得できたほか、そこで自ら開発に至り成功させているのが\u003Cbr>と感じました。会場の雰囲気も明るく、笑いも何度が起こっていてプレゼンテーションもわかりやすく、全体的に満足のいく講演でした。&nbsp;\u003C/p>\u003Cp name=\"e9c68bb7-4f65-47b9-a9c2-a0a9f99e9f51\" id=\"e9c68bb7-4f65-47b9-a9c2-a0a9f99e9f51\">&nbsp;\u003C/p>\u003Ch3 name=\"ef4a5706-1fa4-4ceb-b496-1456dd4e816a\" id=\"ef4a5706-1fa4-4ceb-b496-1456dd4e816a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/flyerhzm.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑧Find and Replace Code based on AST&nbsp;（Richard Huang）\u003C/a>\u003C/h3>\u003Cp name=\"8562b38e-71de-43b0-989e-90501cd0b280\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/flyerhzm.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/flyerhzm.html#day3\u003C/a>\u003C/p>\u003Cp name=\"9f7ce093-be74-4467-ae72-d0f1f32fbaa3\" id=\"9f7ce093-be74-4467-ae72-d0f1f32fbaa3\">ASTを使って、コード検索や置換を行うツールであるSynvertに関しての紹介でした。&nbsp;\u003C/p>\u003Cp name=\"ceca5c61-ccc1-4f8c-a4b3-cb95e2f3548f\" id=\"ceca5c61-ccc1-4f8c-a4b3-cb95e2f3548f\">まずASTのメリットについて、正確であることと、複雑な置換ができることを上げていました。発表者は、もともとRailsのアップデート作業を楽にするためにこのツールを作成されたそうです。SynvertはいくつかのGemに分かれている構成になっていて、NodeQuery&nbsp;、NodeMutation、SynvertCoreがありました。Synvertは、Web上のPlaygroundで気軽に動かすことが可能だそうです。&nbsp;\u003C/p>\u003Cp name=\"a2fe7946-cefb-4e6a-acfc-1534c5f99042\" id=\"a2fe7946-cefb-4e6a-acfc-1534c5f99042\">Rubocopとの比較では、Synvertの機能をRubocopでもほぼ同じように使用できるが、Synvertは通常のコードと同じような感覚で使えることがとても有用だそうです。&nbsp;\u003C/p>\u003Cp name=\"c3b26349-fc81-47ad-90b0-93a054a4904e\" id=\"c3b26349-fc81-47ad-90b0-93a054a4904e\">\u003Cstrong>感想\u003C/strong>&nbsp;\u003Cbr>そもそもASTを知らなかったため事前に予習をしてこの講義は参加しました。予習のおかげでおおむねこの講義を理解できたと思います。このSynvertは実際にWebのPlaygroundで利用できるそうなので、少し触りました。&nbsp;この講義を経て、実際にその後の自分の行動へと移せたことは開発者としての１歩だと感じました。&nbsp;\u003C/p>\u003Cp name=\"5fd52e5a-c038-4af6-8dbc-e0a24fba1e5a\" id=\"5fd52e5a-c038-4af6-8dbc-e0a24fba1e5a\">&nbsp;\u003C/p>\u003Ch2 name=\"c16ba44c-1464-4839-9c29-d0fefeebb4ee\" id=\"c16ba44c-1464-4839-9c29-d0fefeebb4ee\">学生インターン／ 大塚和哉の感想まとめ\u003C/h2>\u003Cfigure name=\"ee664283-c176-4add-aad9-d593039a4b51\" id=\"ee664283-c176-4add-aad9-d593039a4b51\">\u003Cp>\u003Cimg src=\"https://rizap-tech.g.kuroco-img.app/files/user/recruit/contents/body/n26074a076529_1684473780899-bMKvH86NoW.jpg\" alt=\"\" width=\"620\" height=\"325\">\u003C/p>\u003Cfigcaption>24入社予定です！\u003C/figcaption>\u003C/figure>\u003Cp name=\"3862c445-7c8e-4c53-8a73-ad7b50b83d98\" id=\"3862c445-7c8e-4c53-8a73-ad7b50b83d98\">&nbsp;こんにちは。学生インターンの大塚和哉です。\u003Cbr>（＞＞＞大塚さんが登場する記事は\u003Ca href=\"https://www.rizap-tech.co.jp/recruit/articles/entries/315\">こちら\u003C/a>）\u003C/p>\u003Cp name=\"2dddeca0-23bc-4959-b52f-3eb5a7fcb2bb\" id=\"2dddeca0-23bc-4959-b52f-3eb5a7fcb2bb\">私は６本の講演について、レポートをまとめました。\u003Cbr>非常に勉強になりました。とにかく面白かったです…！\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"8a901930-3b8b-45d4-9c07-02efa88e4d2a\" id=\"8a901930-3b8b-45d4-9c07-02efa88e4d2a\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/duerst.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">①On Ruby and ꝩduЯ, or How Scary are Trojan Source Attacks（Martin J. Dürst）\u003C/a>\u003C/h3>\u003Cp name=\"770d5b32-2c4d-48ec-bc3b-577937d6ed38\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/duerst.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/duerst.html#day2\u003C/a>\u003C/p>\u003Cp name=\"0c588968-00f8-4e87-86e8-ef5f3b702d34\" id=\"0c588968-00f8-4e87-86e8-ef5f3b702d34\">トロイソース攻撃の脅威とその対策についてのお話です。\u003Cbr>トロイソースというのは、トロイの木馬という有名なマルウェアに由来しており、一見なんの問題もないソースコードに実は脆弱（ぜいじゃく）性が仕込まれているといった攻撃です。\u003C/p>\u003Cp name=\"9313fa76-0016-4de5-8b51-d55c99e92c80\" id=\"9313fa76-0016-4de5-8b51-d55c99e92c80\">通常セキュリティーの話は外部からの攻撃についてが多いように感じますが、トロイソース攻撃はソースコードを書いているプログラマーによる内部犯行の可能性が高く、普段とは違った視点でとても興味を引かれました。\u003C/p>\u003Cp name=\"21b64d62-1343-467a-9d4f-3d33d2ab3c3e\" id=\"21b64d62-1343-467a-9d4f-3d33d2ab3c3e\">講演の中ではいくつか例題が出され、例えば\u003C/p>\u003Cfigure name=\"3aae2fdb-a217-4f1e-8c48-1722e17f7026\" id=\"3aae2fdb-a217-4f1e-8c48-1722e17f7026\">\u003Cblockquote>\u003Cp name=\"cd1e2818-b28c-4b39-8d76-159d0682b0a2\" id=\"cd1e2818-b28c-4b39-8d76-159d0682b0a2\">white = 40\u003Cbr>black = 45\u003Cbr>whіtе = white + 6.5\u003Cbr>score = white – black\u003Cbr>if score&gt;0 then puts 'white wins'else\u003Cbr>puts 'black wins'\u003Cbr>end\u003C/p>\u003C/blockquote>\u003Cfigcaption>&nbsp;\u003C/figcaption>\u003C/figure>\u003Cp name=\"a23a56a0-4f69-4d94-b9e9-2d6fff915fb7\" id=\"a23a56a0-4f69-4d94-b9e9-2d6fff915fb7\">というコードがあった場合、白が正解なら左、黒が正解なら右を挙げるよう言われました。これならRuby初心者の私でも簡単です。正解は白！左手を挙げます。\u003Cbr>\u003Cbr>しかし正解はなんと黒！\u003Cbr>実は、３行目の左辺にあるwhіtеはіとеがそれぞれキリル小文字で書かれた偽物のwhiteだったのです。そのため、本物のwhiteに6.5を足した数は偽物のwhiteに代入、本物のwhiteは40のままなので、結果としては黒が正解です。これはホモグラフ攻撃という、肉眼では判断できない文字でだます攻撃です。トロイソース攻撃以外にも、URLをだますフィッシング攻撃に使われます。\u003Cbr>これ以外に他の攻撃手法を使った例題でもすべて白と思わせて正解は黒、会場にいたほとんどの人がだまされて笑いが起きていました。\u003C/p>\u003Cp name=\"917328d3-0cac-4dfb-a94f-0ac4127ed7f0\" id=\"917328d3-0cac-4dfb-a94f-0ac4127ed7f0\">この講演のスピーカーであるMartin氏は日本国内の大学で教授をされているとのことで、受講している人たちを飽きさせないプロの工夫があり、英語をあまり聞き取れない私でもわかりやすく、とても面白かったです！\u003C/p>\u003Cp name=\"fa4cc3d5-40c4-4b97-9244-6d324ff24f24\" id=\"fa4cc3d5-40c4-4b97-9244-6d324ff24f24\">&nbsp;\u003C/p>\u003Ch3 name=\"3183c0f1-8512-456c-a519-e07efbe638df\" id=\"3183c0f1-8512-456c-a519-e07efbe638df\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/_st0012.html#day2\" target=\"_blank\" rel=\"nofollow noopener\">②Build a mini Ruby debugger in under 300 lines（Stan Lo）\u003C/a>\u003C/h3>\u003Cp name=\"735e7891-0a67-49cd-9f49-e08362437d0e\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/_st0012.html#day2\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/_st0012.html#day2\u003C/a>\u003C/p>\u003Cp name=\"fc233d4b-3add-47d2-9242-4f52958430dd\" id=\"fc233d4b-3add-47d2-9242-4f52958430dd\">&nbsp;タイトルには300行と書かれていますが、実際の講演では200行未満のコードを手軽にデバッグできるツールの紹介でした。\u003Cbr>(講演に使われたツールは\u003Ca href=\"https://github.com/st0012/mini-debugger\" target=\"_blank\" rel=\"nofollow noopener\">こちら\u003C/a>です)\u003Cbr>このmini-debuggerのdemoを見せながら、デバッグがどのように実装されているかを解説、それを把握した上で他のデバッグツールとの違い、どのデバッグツールを選べば良いのかという説明をされていました。\u003C/p>\u003Cp name=\"acbcbedc-6931-4923-ab01-eaae1d919edb\" id=\"acbcbedc-6931-4923-ab01-eaae1d919edb\">私自身、デバッグツールはエディターやブラウザで軽く触れたことがあるくらいで、ほとんどデバッグというものを意識したことがありませんでした。強いて言えば、エラー発生時のバグ特定で、どこまで正しく値が入っているのかを追うためにputsメソッドを使って出力していたくらいです。（講演の最後に知りましたが、このputsを使う方法も立派なデバッグなのですね！「printデバッグ」とも言われるそうです。）\u003C/p>\u003Cp name=\"cc06c36a-d96e-4e56-8dca-254566035a40\" id=\"cc06c36a-d96e-4e56-8dca-254566035a40\">これを機にデバッグツールを使ったデバッグを私も試してみたいと思います！\u003Cbr>&nbsp;\u003C/p>\u003Ch3 name=\"6a576a2b-5716-40ed-afe2-347a40f96f5e\" id=\"6a576a2b-5716-40ed-afe2-347a40f96f5e\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/makenowjust.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">③Make Regexp# match much faster（Hiroya FUJINAMI）\u003C/a>\u003C/h3>\u003Cp name=\"a8d25c2d-589f-48df-a9ca-81bac1007790\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/makenowjust.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/makenowjust.html#day1\u003C/a>\u003C/p>\u003Cp name=\"4e2bc124-5c81-43d8-a539-2550fc7d02db\" id=\"4e2bc124-5c81-43d8-a539-2550fc7d02db\">Regexpとは正規表現のことで、この講演のスピーカーであるFUJINAMI氏は、Ruby3.2.0で新たに最適化された正規表現マッチングを実装した功績から、学生ながらにしてRubyコミッターへ参画されたとてもすごい方です。\u003C/p>\u003Cp name=\"7df0fded-a523-4945-9c4e-012165a4f2bb\" id=\"7df0fded-a523-4945-9c4e-012165a4f2bb\">Ruby3.2.0以前は正規表現マッチングによる脆弱（ぜいじゃく）性を利用したReDoS攻撃の脅威にさらされていました。この脅威を取り除くために、どのように正規表現マッチングを最適化、ならびに高速化させたのかについて詳しくお話しされていました。\u003C/p>\u003Cp name=\"65f158e1-4edf-4f5f-bfa1-90cf1b9e5c22\" id=\"65f158e1-4edf-4f5f-bfa1-90cf1b9e5c22\">私自身、Rubyの学習過程でメタ文字を使った正規表現を触ったことはありますが、簡単なパターンでも理解するのに少し時間がかかるくらい私にとっては難しい内容です。そのためこの講演において、使用した関数などの詳しい実装部分はあまり理解できませんでしたが、FUJINAMI氏のゆっくり丁寧な解説のおかげもあり、これまでの課題と解決点、今後の課題についてだけでも理解することはでき、とても面白かったです！\u003C/p>\u003Cp name=\"a5c573a3-a976-4ec6-ac05-5c96c084e8a4\" id=\"a5c573a3-a976-4ec6-ac05-5c96c084e8a4\">既にエース級の活躍をされていますが、まだ新しくRubyコミッターに参画されたばかりということで、今後さらにRubyでどのような実装をしていくのか、FUJINAMI氏の今後を追いたくなる素晴らしい講演でした！\u003C/p>\u003Cp name=\"02386b5f-7713-40d7-9f38-59f386d4eb4a\" id=\"02386b5f-7713-40d7-9f38-59f386d4eb4a\">&nbsp;\u003C/p>\u003Ch3 name=\"4a2ad983-b874-4fc4-86b4-b8ea51060e67\" id=\"4a2ad983-b874-4fc4-86b4-b8ea51060e67\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ko1.html#day1\" target=\"_blank\" rel=\"nofollow noopener\">④\"Ractor\" reconsidered（Koichi Sasada）\u003C/a>\u003C/h3>\u003Cp name=\"8c31198d-2cf1-480a-bcf4-33931f3d212f\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ko1.html#day1\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ko1.html#day1\u003C/a>\u003C/p>\u003Cp name=\"3fc1fd4d-14df-42aa-b01f-1441b739a816\" id=\"3fc1fd4d-14df-42aa-b01f-1441b739a816\">&nbsp;本講演のスピーカーである笹田さんが開発したRactorについてお話しされていました。RactorはRuby3.0で導入された、Ruby上で並列コンピューティングを行う仕組みで、「Ruby3をRuby2の３倍速くする」ことを目標に掲げている「Ruby3×3」の軸の一つである「並行処理」を行うために開発されました。\u003C/p>\u003Cp name=\"44b62434-573c-4480-a022-f5aa0339b011\">\u003Ca href=\"https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/\" target=\"_blank\" rel=\"noopener noreferrer\">https://www.ruby-lang.org/ja/news/2020/12/25/ruby-3-0-0-released/\u003C/a>\u003C/p>\u003Cp name=\"f3cf975d-175a-40e4-863f-4573a993ff55\" id=\"f3cf975d-175a-40e4-863f-4573a993ff55\">ベストケースであれば３倍どころか４倍近く処理が高速化するようですが、現状では逆に２倍遅くなってしまうケースもあるようでまだまだ課題は山積みのようです。課題解決の鍵として、M:Nスレッドによる性能向上を挙げていました。M:Nスレッドについては理解が及ばない概念なのですが、昨年のRubyKaigi2022で発表されていたようなので、チェックしてみようと思います。\u003C/p>\u003Cp name=\"323de912-726c-4894-965f-4212409458d5\">\u003Ca href=\"https://rubykaigi.org/2022/presentations/ko1.html\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2022/presentations/ko1.html\u003C/a>\u003C/p>\u003Cp name=\"9d7fe0ad-3b8e-4e06-9e9c-0d4e3fbcb2f3\" id=\"9d7fe0ad-3b8e-4e06-9e9c-0d4e3fbcb2f3\">今後、うまく開発が進んでいけば、Rubyがまた一つ進化しそうな予感がするので非常に楽しみです。\u003C/p>\u003Cp name=\"566d466f-5b27-4564-9d06-3e64069993d7\" id=\"566d466f-5b27-4564-9d06-3e64069993d7\">&nbsp;\u003C/p>\u003Ch3 name=\"50b18624-5bd9-44c3-9aa7-364cb07fa4ec\" id=\"50b18624-5bd9-44c3-9aa7-364cb07fa4ec\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ledsun.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑤Load gem from browser（SHIGERU NAKAJIMA）\u003C/a>\u003C/h3>\u003Cp name=\"55b1642e-9f85-4dfa-b517-6d1da9ffe843\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ledsun.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ledsun.html#day3\u003C/a>\u003C/p>\u003Cp name=\"27415cee-d73b-428b-a5e3-a6fd5b6c98d0\" id=\"27415cee-d73b-428b-a5e3-a6fd5b6c98d0\">Ruby3.2.0からWebAssembly（以下Wasm）がサポートされました。Wasmとは、ブラウザ上でJavaScript以外のプログラミング言語を動かせる仕組みのことです。Rubyでは、\u003Ca href=\"https://github.com/ruby/ruby.wasm\" target=\"_blank\" rel=\"nofollow noopener\">ruby.wasm\u003C/a>を使うことで、Rubyスクリプトを動かせるようになります。\u003C/p>\u003Cp name=\"9966769d-870c-4f6b-8cb6-d51468f01404\" id=\"9966769d-870c-4f6b-8cb6-d51468f01404\">ruby.wasmを使ったサンプルアプリケーションを見てみると、さまざまなアプリケーションを作れることがわかります。\u003C/p>\u003Cp name=\"79cf13fc-85ee-45c8-a2df-f08c6f47f59a\">\u003Ca href=\"https://github.com/ruby/ruby.wasm/wiki/Showcase\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/ruby/ruby.wasm/wiki/Showcase\u003C/a>\u003C/p>\u003Cp name=\"bcc1e7cd-f7bd-47e2-9457-09ba007a8d02\" id=\"bcc1e7cd-f7bd-47e2-9457-09ba007a8d02\">しかし現状、ruby.wasmはruby.wasmが用意した読み取り専用のファイルシステムのみ使用できます。つまり、標準ライブラリのみ使用できて、サードパーティー製のgemは使用できません。本講演は、サードパーティー製のgemもruby.wasmで使えるようにしようというお話です。\u003C/p>\u003Cp name=\"f6ffe5f8-fef8-47e0-bdcc-e7fa88ca3277\" id=\"f6ffe5f8-fef8-47e0-bdcc-e7fa88ca3277\">かつてはJavaScript（以下JS）も、あるJSファイルから他のJSファイルを読み込んだりなどはできませんでした。しかし、Node.jsの登場からモジュールという概念が登場し、ES2015ではブラウザに標準対応しました。そして現在はimport-mapsという、パッケージをダウンロードするURLにエイリアス名を付ける仕組みが登場し、外部パッケージを容易に管理できるようになっています。\u003C/p>\u003Cp name=\"9e2e9738-7cb2-407c-a2a1-0540c883d7c9\" id=\"9e2e9738-7cb2-407c-a2a1-0540c883d7c9\">このJSの歴史になぞらえ、今回はrequireやrequire_relativeを駆使して、サードパティー製gemを使えるようにしていました。\u003C/p>\u003Cp name=\"2ad98cd5-c45b-4e34-bfbf-913b6f0ba2fd\" id=\"2ad98cd5-c45b-4e34-bfbf-913b6f0ba2fd\">ブラウザ上でRubyを動かせるのは、環境依存が低減されて非常に魅力的です。サードパーティー製のgemも駆使できるようになれば、ブラウザ上だけでかなりクオリティーの高いWebアプリを作れると思うので、とても興味が湧きました。\u003C/p>\u003Cp name=\"20e82747-4430-49a1-94a6-4349ecd41941\" id=\"20e82747-4430-49a1-94a6-4349ecd41941\">&nbsp;\u003C/p>\u003Ch3 name=\"2520248d-d0f5-4ae8-8deb-7321cbbc59ed\" id=\"2520248d-d0f5-4ae8-8deb-7321cbbc59ed\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ioquatix.html#day3\" target=\"_blank\" rel=\"nofollow noopener\">⑥Unleashing the Power of Asynchronous HTTP withRuby\u003C/a>\u003C/h3>\u003Cp name=\"4e2cdebe-51f9-4ddb-aaac-926bf159d7d3\">\u003Ca href=\"https://rubykaigi.org/2023/presentations/ioquatix.html#day3\" target=\"_blank\" rel=\"noopener noreferrer\">https://rubykaigi.org/2023/presentations/ioquatix.html#day3\u003C/a>\u003C/p>\u003Cp name=\"2caa1d03-b3bd-48f0-b473-d0982b8e5681\" id=\"2caa1d03-b3bd-48f0-b473-d0982b8e5681\">\u003Ca href=\"https://github.com/socketry/async-http\" target=\"_blank\" rel=\"nofollow noopener\">「Async::HTTP\u003C/a>」というRubyで非同期HTTPを行うためのライブラリについて、その用法やベストプラクティスのお話です。\u003C/p>\u003Cp name=\"a9ab27d8-a714-47e6-a32b-b33d1f1a0063\" id=\"a9ab27d8-a714-47e6-a32b-b33d1f1a0063\">本題に入る前に、まずはHTTP/0.9からHTTP/3にかけて、クライアントとサーバー間のインターフェースの変移について詳しく解説されていました。かなり長い歴史のお話になってしまうので詳細は省きますが、GETメソッドのみサポートされ、コンテンツはテキストのみしか受け取れず、それも１回のリクエストが終わるまで次のリクエストを送れなかったような時代から、どのようにしてHTTPが進化し、リクエストの多重化と非同期通信ができるようになっていったのかを説明していました。\u003C/p>\u003Cp name=\"a2e4655f-7a9f-4cff-8afe-a09bcff1f8e1\" id=\"a2e4655f-7a9f-4cff-8afe-a09bcff1f8e1\">HTTPの歴史を踏まえ、スピーカーのSamuel Williamsさんが開発に携わっている「Async::HTTP」ライブラリを使用して、Rubyによる非同期HTTPを実装、ライブラリの内部に関しては詳しく説明されていませんでしたが、このライブラリを使って書かれたコードにはHTTP33年分の複雑さが隠されているとおっしゃっています。\u003C/p>\u003Cp name=\"19086c16-d13f-406a-b991-ef38c808e0ec\" id=\"19086c16-d13f-406a-b991-ef38c808e0ec\">また、ベストプラクティスとしては、共有インスタンスを使用することで、既存のHTTP接続を再利用した永続的な通信を行うことなどが挙げられていました。\u003C/p>\u003Cp name=\"700082c1-6e0b-4a58-89ae-237b50c08367\" id=\"700082c1-6e0b-4a58-89ae-237b50c08367\">初めはテキストしかやり取りできなかったHTTPですが、HTTPの進化に伴い、さまざまなコンテンツがサポートされたことで、コンテンツの円滑なやり取りのために非同期通信は必須のものとなりました。今回のようにRuby単体で非同期通信を行うような機会はあまりないと思いますが、この講演のおかげでそもそも非同期通信がどういう仕組みで行われているのかについて、HTTPの歴史に沿って学べたことが良かったと思います。\u003Cbr>&nbsp;\u003C/p>\u003Chr>\u003Cp name=\"70d4bab5-1005-4a50-8e46-9a606492e003\" id=\"70d4bab5-1005-4a50-8e46-9a606492e003\">\u003Cbr>メンバーの感想は以上となります。\u003Cbr>もりだくさんの内容で、大盛況に終わったRubyKaigi2023。\u003Cbr>ここで得た学びを若手メンバーがどのように生かしていくのか、今後のRIZAPにご注目ください！\u003C/p>\u003Cp name=\"82f55c12-fdbf-4eb3-8b18-22767fcb57ea\" id=\"82f55c12-fdbf-4eb3-8b18-22767fcb57ea\">&nbsp;\u003C/p>","長野・松本で開催されたRubyKaigi 2023にRIZAPテクノロジーズが初参戦。若手・新卒・インターン計8名が参加し、Ractorや正規表現、デバッグツール、パーサ開発など多彩な講演の学びをメンバーそれぞれの視点でまとめたレポート集。",[286,287,167,166],"Ruby on Rails","RubyKaigi",[289,290],{"title":9,"to":11},{"title":113,"to":115},[292,300,302,310,316,322],{"to":293,"image":294,"date":295,"label":163,"title":296,"tags":297},"/recruit/articles/entries/264","https://rizap-tech.g.kuroco-img.app/v=1775010933/files/user/recruit/contents/thumbnail/n6f3af1a646b3_3a79a10f824d381ed8c105d15f5a7e3a.jpeg","2024.10.08","DroidKaigi 2024カンファレンスレポート【各講演の学び】",[169,298,167,299,166],"Android","DroidKaigi",{"to":254,"image":255,"date":246,"label":163,"title":256,"tags":301},[166,167,249,250,169],{"to":303,"image":304,"date":305,"label":163,"title":306,"tags":307},"/recruit/articles/entries/254","https://rizap-tech.g.kuroco-img.app/v=1775010955/files/user/recruit/contents/thumbnail/nc922b548a05d_e9a996775eeeadac0eaf0e410d971658.png","2024.12.12","Kaigi on Rails 2024 事後勉強会を開催しました！",[263,286,308,166,309],"Kaigi on Rails","勉強会",{"to":311,"image":312,"date":313,"label":163,"title":314,"tags":315},"/recruit/articles/entries/226","https://rizap-tech.g.kuroco-img.app/v=1775010932/files/user/recruit/contents/thumbnail/n6bbaf24c7ce4_e9bf4e1aed7b4e4b2e661a747526b32c.jpeg","2025.10.10","エンジニア歴3年、Kaigi on Railsの舞台へ",[166,167,286,308,252],{"to":317,"image":318,"date":319,"label":163,"title":320,"tags":321},"/recruit/articles/entries/297","https://rizap-tech.g.kuroco-img.app/v=1775010961/files/user/recruit/contents/thumbnail/nf8fe43d71a09_8f22968ff5b14711b97ca18cfe5e07d9.jpeg","2024.01.11","RIZAP がAuthlete Customer and Partner Meetup 2023にも初参戦！【各講演のレポート集】",[168,167,166],{"to":323,"image":324,"date":325,"label":163,"title":326,"tags":327},"/recruit/articles/entries/224","https://rizap-tech.g.kuroco-img.app/v=1775010955/files/user/recruit/contents/thumbnail/nc123cf696a1a_10ac747bb44c1b1fae364813f5887cd4.jpeg","2025.10.15","「DroidKaigi 2025にスタッフ参加！　現場で感じたイベント運営のやりがいと学び」",[299,298,166,167],1776738988288]