RubyKaigi 2023に参加しました

松本で開催されたRubyKaigi 2023に参加しました。

rubykaigi.org

2020、2021はコロナ禍の影響で中止、2022は不参加だったため、3年振りの参加でした。

各発表の感想

各発表の詳細については他の方が詳細にまとめていると思うので、通して感じた事を簡単に。

今回はParserの話が多かったのかなあと思います。また、型についての話も2019の頃から引き続き多かったように思います。各発表の動機を聞いていると、共通して開発体験をより良くしたい(REPL、IDEなどの方面)といったものが多かったように思います。Ruby 3やその前後でのJIT関連などによってRubyの性能については向上してきており、周辺の環境にも目を向ける余裕が以前より出てきたところなのかなあと何となく感じました(もちろん、JITなどの性能関連の話題もありましたが)。

個人的な問題ですが、最近あまりRubyをがっつり書けておらず、また、2020~2022頃の変化についても追い掛けられていなかったため、発表内容に着いて行けないところもありました。来年はちゃんと勉強してから臨みたいです。

各日の記録

0日目

今回は丘珠空港から松本空港へ。丘珠空港は自宅からでは新千歳空港と移動時間は大差無さそうでしたが、空港がコンパクトなので各種手続きや空港内の移動などに時間が取られなくて良いですね。

松本入りしてからはホテルのチェックインまで時間があったので松本城へ。城にはあまり興味無いんですが、それでも楽しいですね。天守閣からの眺めも良かったです。

ホテルのチェックインを済ませた後は松本城へ行く途中で見掛けて気になっていたBeer Tap Honmachiへ。信州のクラフトビールを中心に扱っており、この日繋がっていたビールも全て信州だったと思います。いずれのビールも美味しく、またお店の方もビールに詳しく、とても楽しませていただきました。この日はGW後の休みのお店が多かったらしく、Rubyistの方々が集まっていたようでした。偶然隣に座っていた方もRubyistで、Rubyやビールについてお話させていただきました。

飲んだ後は駅前のラーメン屋で食べてからホテルへ。

1日目

ホテルで朝食を食べてから会場のまつもと市民芸術館へ。デザインが興味深い建物でした。

今回昼食は食事券が配られたため、それが使えるお店から選んでいました。この日はそば屋のまつしたへ。昔ながらのそば屋といった感じでした。味は普通かな……。

終了後はOfficial Partyへ。信州の日本酒や松本ブルワリーのビールが用意されていました。Twitterで友人からおすすめされた中乗さんが特に美味しかった。色々な方とお話させていただきましたが、途中から喫煙所でずっと話していたら会場が閉まっていました。

もう少し飲みたかったのでバーのBRORAへ。こちらでもRubyistの方々とお話させていただいたんですが、酔っていて誰だったか思い出せない……。

2日目

朝は1日目と同じなので特に書く事が無い。

昼食はOfficial Partyで飲んだビールが美味しかったので松本ブルワリーのタップルームへ。ここはスタウトがやっぱり美味しい。ピザも美味しかったです。

終了後はLeanerさんのDrinkupへ。最早恒例の@joker1007さん選定の日本酒が中心のDrinkupでした。料理も美味しかったです。お話させていただいた方が信州在住の方で、信州の日本酒について色々薦めていただいたりしました。飲みすぎて後半は何を話していたか覚えていない。

3日目

前日に飲みすぎてぐったりした状態からスタート。Leanerの方々にはご心配お掛けしました(ホテルで会ったLeanerの方に大丈夫でしたかって声を掛けていただきました)。会期中に飲みすぎてはいけない(n敗目)。

昼食は名前を見て気になっていた時代遅れの洋食屋 おきな堂へ。名前の通り、昔ながらといった雰囲気でした。オムライスをいただきましたが、美味しかったです。

終了後はSTORESさんのAfter Partyへ。松本つなぐ横丁という屋台がたくさん集まったような場所を貸し切ってのPartyでした。信州料理中心のお店も多く、とても楽しめました。流石にキャパシティがぎりぎりだったのか奥の方は混雑していたため、入口付近で涼みながらSTORESの方々を中心にお話させていただきました。

その後はpixivさんのRubyMusicMixinへ。郷ひろみのGOLDFINGERの元曲(あれってカバーだったんですね)だけで繋いだ人は笑った。あと、喫煙所で知り合ったpixivの方が開催できて良かったと語っていたのが印象的だった。疲れが貯まっていたので途中で撤退しましたが、とても楽しめました。

4日目

朝は松本市美術館へ。企画展のアーツ・アンド・クラフツとデザインが興味深かったです。常設展は草間彌生の作品が中心ですが、魂の灯などが良かったです。

昼食は駅前の小木曽製粉所へ。立ち食いそばでこんなに美味しいのは凄いですね。

その後は気になっていたBACCAブルーイングへ。こちらのビールも美味しかったです。土日はカレーも出しているようでしたが、そばを食べてきてしまったので食べられず。機会があったらカレーも食べてみたいです。また、お店の方々や隣の席の地元の方とお話させていただきましたが、松本の方は地元愛が凄いなあと感じました。

その後は松本空港から丘珠空港へ。移動中は大体寝ていた気がする。

感想

松本は初めてでしたが、とても楽しめました。特に美味しい酒が多いのが良いですね。町並みも眺めているだけで面白いところが多かったように思います。日本各地へ行くきっかけをくれるRubyKaigiには感謝しか無いです。

2022では公式のPartyなどは無かったそうですが、今回は2019以前のように開催されており、コロナ禍以前に戻ってきたのかなと感じました。発表の濃さはもちろんですが、Partyの活発さもRubyKaigiの良さだと思っているので、今後も今回のように開催できる状況が続けばなあと思います。

次回は沖縄との事で、札幌から行くのは大変ですが、それでも行きたいと思わせてくれるのがRubyKaigiです。次回も行けるようにお金貯めないとね……。

Path of Exile - 3.17 Omniscience Arc

今期主にやったビルドの雑な解説。当初は Enki's Arc を参考に進めていたのですが、SSFでは火力を伸ばすのが厳しく感じたため、新UniqueのCrystallised Omniscienceを導入した形です。

PoB

https://pastebin.com/wTLz7mNS

Passives

Enki's Arcを元にBlock型に修正した形です。

AscendancyについてはMastermind of DiscordをShaper of Stormに変更しています。これはOmniscienceでPenetrationを十分稼いでおり、Exposureの価値が低いためです。

Cluster Jewelについては必須ではないですが、今回はStormriderを採用し、Power Chargeを安定供給できるようにしました。Doryani's Lesson、Sadistも強力ですが、同時に引ける気がしなかったため、Stormriderだけ狙いました。

Gears

Crystallised Omniscience

Crystallised Omniscience | PoE Wiki

AttributeをOmniscienceというステータスに変換し、Omniscienceに応じてElemental PenetrationとElemental Resistanceを貰えるAmulet。1000 Omniscience程度は容易に稼げると思いますが、それでも100% Penetrationと、Amuletだけで稼げる量としては異常。

Amuletは Ashes of the Stars なども強力ですが、手に入らなかったためこちらを採用。

Black Sun Crest

Black Sun Crest | PoE Wiki

最大で45% Increased Omniscienceとなるため、採用しない理由が無いです。デメリットは視界が悪くなるため、暗いマップに行きたくなくなる点。

Call of the Brotherhood

Call of the Brotherhood | PoE Wiki

Lightningを一部Coldに変換する事でTrinityの発動を狙います。Freezeによってファームの安全性が確保できるのも魅力です。

Dawnbreaker

Dawnbreaker | PoE Wiki

ElementalistではBlock Attack Chanceがやや稼ぎ辛いため採用。PhysicalからFireへの変換があるため、Primal Aegisとの相性も良いです。HitによるFire Damageを受けるとBlock Attack Chanceが低下するデメリットがありますが、十分にBlockを稼げている場合はそこまで気にならなかったです。

手に入るなら Aegis Aurora かRareの方が多分強いです。

その他

Attribute、Life、Chaos Resistanceを稼いでいます。Life Regenなども欲しいですが、suffixなので枠が厳しいです。

BootsではChill、Ignite対策を積んでいます。ただし、IgniteについてはArcane Sanctuary(25%)を足しても100% Avoidとはならないため、他の部位でも稼ぐ必要があります。

また、Eldritch ImplicitでLightning Damage Leech(Gloves)、Block Spell Chance(Body Armour)を稼いでいます。

Flasks

Rumi's Concoction

Rumi's Concoction | PoE Wiki

両Block Chanceが75%に届いていなかったため採用。

The Overflowing Chalice

The Overflowing Chalice | PoE Wiki

密度が薄いMapでFlaskが回らない場合があったため採用。Mapに投資して密度が上がってからは無くても問題無さそうでしたが、新しいFlaskを作るのが面倒だったため最後まで使っていました。

Flaskが回る場合はMagicのDiamond Flaskにした方がDPSは上がると思われます。また、手に入るなら Bottled Faith も強力です。

その他

Bleed、Curse対策を積んでいます。Poison対策も欲しい場面はありますが、他のAilmentよりは優先度が低いと思います。ちなみにPoison対策を怠った結果、ExpeditionのPoisonとArchnemesisのToxicでそれぞれ1敗しています。

Gems

Arc

Vaal Arc - Increased Critical Strikes - Increased Critical Damage - Trinity - Spell Echo - Inspiration

Orb of Storms

Orb of Storms - Increased Critical Strikes - Increased Critical Damage - Onslaught

サブ火力及びOnslaught役。Onslaughtが他で確保できる場合はElemental Focusなどが候補になると思います。

Golems

Stone Golem / Chaos Golem / Lightning Golem / Ice Golem

Elemancerなどで強化されたバフを与えてくれるお供。Liege of the Primordialによって死んでも自動で再召喚されますが、それまでの間は火力・耐久が落ちるため注意が必要です。

Auras

Determination / Zealotry / Tempest Shield / Clarity

Tempest ShieldはDivergentを入手できたためそちらを採用。Divergent以外の場合はBlock Spell Chanceが少し下がります。

ZealotryはAnomalousを採用していますが、このビルドではほぼ火力は変わらないため必須ではないです。

Clarityは装備でMana関係をどれだけ稼げているかによりますが、Lv10~12程度は必要だと思います。

Curses

Assassin's Mark

AttackではないのでMark on Hitが採用できないのが残念。

その他

Flame Dash - Arcane Surge - Culling Strike

Vaal Molten Shell - Increased Duration

枠が厳しいためCulling Strikeがここにしか刺せない。枠がある場合はHydrosphereを採用し、そちらに刺すと良いと思います。

Pantheon

Brine King + Abberath

Stun、Freeze対策にBrine Kingを採用。Minorは好みで選んで問題無いですが、Searing ExarchのBurning Groundが痛すぎるためAbberathを採用。Ignite対策の部分は腐ってしまいますが。

運用しての感想

やっぱりArcは楽しい。Legionとか最高。

ただし、所詮はChainであるため、強化したHarbingerなどの物量では処理が追い付かない場面が多々ありました。 Inpulsa's Broken Heart があれば改善されるのかなあ。

また、火力を出すためには足を止める必要があるため、エンドボスを相手にするにはまだ火力が物足りないと思います。上手い人ならこれくらいの火力でも倒せるでしょうけど。

耐久面については通常のファームでは問題無いと思います。ただし、Lifeの低さをPrimal Aegisで補っている面があるため、Primal Aegisの残量が少ない状態では注意が必要です。StrengthでのLifeって馬鹿にならないんだなあって感じました。また、Lire Regenなどを稼げていないため、DoTにも注意が必要です。

今回はArcにしましたが、Hit型のElemental Spellなら大体似たような形で組めると思います。Crystallised Omniscienceが現状強すぎる感はあるため、来期以降どうなるかが不安ですね。

Oxygen Not Included - Spaced Out! の序盤攻略

Oxygen Not IncludedのDLC「Spaced Out!」の序盤の立ち回りについて。最初の星での生活を安定させるくらいまでの想定。この手のゲーム全般に言えますが、あくまで一例です。参考程度にどうぞ。

2020/12/19 追記 アップデートでプレイする小惑星群が選択出来るようになりました。こちらの記事の記述はSwamp Clusterを選択した場合の想定になります。

store.steampowered.com

研究

初期バイオームでは主に研究で必要になるDirt、Waterが非常に少ないです。そのため、これらの資源を確保するための研究の重要度が高めです。これらの資源を確保するための設備として「Sludge Press」が追加されており、初期バイオームに大量にあるMudからDirt、Waterを生産出来ます。

もちろん食料関連の研究はDLCにおいても最重要であるため、食料関連の研究を進めた後に、Sludge Press(もしくはその先のWater Sieve)まで研究を進めたいです。

食料

Meal Woodなどが無いため、新植物の「Bog Bucket」、もしくは「Spindly Grubfruit Plant」が序盤の主食になるかと思われます。どちらを選択するかは好みの範疇ではないかと思われます。新植物の詳細については過去の記事を参照してください。

Oxygen Not Included - Spaced Out! の植物と動物 - @prismriver's blog

Bog BucketはPolluted Waterしか必要としないため、Hydroponic Farmまで解禁していれば人手が掛からない点がメリットです。代わりにPolluted Waterの消費は大きいのがデメリットです。

Spindly Grubfruit PlantはBog BucketよりQualityを高くしやすい点がメリットです(Grubfruit Plantに変化させ、Grubfruit Preserveに調理すると+3)。Grubfruit Plantに変化させるにはSweetleが必要ですが、必要な株数はどちらでも大きくは変わらないため、最初はSpindly Grubfruit Plantとして育て、Ranchingのスキルを取得した後にSweetleを確保してGrubfruit Plantに変化させるという形も取りやすいです。デメリットはSulfurの搬入が必要なため人手が取られる点です。

また、初期バイオームにはPacuが生息しています。Pacuを1箇所に集め、Pacu Filletを回収出来るようにしておくと食料の足しになります。DLCでは植物の種も食べるようになったため、植物の種が確保出来れば頭数を増やす事も可能です。

酸素

Polluted DirtからPolluted Oxygenを生成する新設備「Sublimation Station」が追加されています。研究は不要です。初期バイオームにはPolluted Dirtが大量にあるため、この設備で当面は凌げると思われます。Slimelungも最初の星には無いため、Polluted Oxygen下で生活していても大きな問題はありません。

但し、DLCではPolluted Oxygen下ではDuplicantの酸素消費量が上がる調整が入っています。人数が増えてきたらDeodorizerとの併用、もしくはElectrolyzerへの切り替えを検討したいです。

先述のSludge Pressで当面は凌げると思われます。また、最初の星にはCool Slush Geyser、Cool Salt Slash Geyser(低温のBrineを噴出する)が確定であるため、Water Sieve、Desalinatorを解禁すればMudが尽きてからも困る事は無いかと思われます。但し、どちらも-10℃で噴出するため、0℃以上へ温めてから変換しないと凍結する点には注意してください。

電力

最初の星は電力関連の資源が乏しいため、Manual Generatorに頼る期間が長くなると思われます。夜間に発電する新動物「Plug Slug」が追加されていますが、餌の金属鉱石の消費が多いため、飼育するとしても1~2頭程度に抑えておいた方が良いです。

DLCでは地表に隕石が降らないため、Solar Panelを設置出来ると楽になります。研究ツリーの後半に位置するため、解禁にはやや時間が掛かりますが。

初期バイオームの周辺に寒冷なTundraバイオームが生成される場合が多いため、温度が高すぎて問題になる事は当面は無いと思われます(低すぎて問題になる事はあるかもしれません)。先述の通りCool Slush Geyser、Cool Salt Slash Geyserが確定であるため、長期的にも問題になる事は少ないと思われます。

その他の資源

最初の星にはThimble Reedがありません。また、Dreckoも生息していません。そのため、Atmo Suitを作成するには他の星へ行く必要があります。簡易的な設備として「Oxygen Mask Station」が追加されていますが、無酸素下でも呼吸出来るようにするだけで、高温・低温の環境や液体から保護する機能は備わっていない点に注意してください。

Gold Amalgamもありませんが、比較的寒冷な最初の星で序盤から必要になる事は無いかと思われます。

Oxygen Not Included - Spaced Out! の植物と動物

Oxygen Not IncludedのDLC「Spaced Out!」が先日アーリーアクセス開始になりました。初期小惑星で見つかる新植物・新動物について考察してみたいと思います。なお、アーリーアクセス段階のため、今後調整される可能性があります。

2020/12/19 追記 アップデートでプレイする小惑星群が選択出来るようになりました。文中の初期小惑星はSwampy Asteroid、初期バイオームはSwampyを指します。Terra Clusterを選択した場合、初期小惑星のTerra AsteroidにWastelandは存在しますが、Swampyについては存在せず、Teleporterで移動可能なOily Swamp Asteroidに存在するようです。

store.steampowered.com

植物

Swamp Chard

初期バイオームで見つかります。MucklootやHexalentと同様の立ち位置で、1回限り採取可能な植物です。1個で2400kcalで、MucklootとHexalentの中間といったところ。

Bog Bucket

こちらも初期バイオームで見つかります。栽培ではPolluted Waterが40kg/cycle必要と、かなり消費が重めです。6.6cycleで1840kcal、調理すると2240kcalのため、未調理では約3.6株、調理済では約3株で1人分となります。

先述の通り資源の消費が重いため、早めにBristle Blossomなどに乗り換えたいところです。Bristle Blossomなら水の消費は半分で済みますし。

ちなみに光があると育たないため、農場にライトを設置して作業速度を早める事が出来ない点には注意。

Spindly Grubfruit Plant / Grubfruit Plant

新バイオームのWastelandで見つかります。種を植えるとSpindly Grubfruit Plantとなりますが、後述のSweetle、Grubgrubという動物が世話をするとGrubfruit Plantへ変化します。栽培ではSulfurが10kg/cycle必要です。

Spindly Grubfruit Plantでは4cycleで800kcal、調理すると1200kcalのため、未調理では約5株、調理済では約3.4株で1人分となります。

Grubfruit Plantでは8cycleで2000kcal、調理すると2400kcalのため、未調理では約4株、調理済では約3.4株で1人分となります。なお、調理には新素材のSucroseも必要ですが、これはSweetleが生産してくれます。また、Spindly GrubfruitよりQualityも高くなります。

必要な株数はどちらの形態でも大差無いため、Sweetle、Grubgrubと栽培するかどうかはQualityを求めるかどうかで判断する事になると思われます(実際にはSweetle、Grubgrubと栽培した方がやや株数が少なくなりますが)。また、SulfurはWastelandで採掘出来ますが、掘り尽くした場合はSour Gasを冷却しないと入手出来ないと思われるため、序盤の技術では実質枯渇資源です。枯渇するまでには別の作物に乗り換えたいところです。

動物

Plug Slug

初期バイオームで見つかります。金属鉱石を消費して発電してくれる凄いやつ。夜になると天井から垂れ下がって発電するため、天井から2マス目に電線を通しておきましょう。

野生では最大400W、飼育では最大1600W発電するようです。現在のCaloriesに応じて発電量が変わるようで、餌を与えていないと次第に発電量が落ちて行きます。公式Forumに検証した方がいるようなので、詳細はそちらを参照してください。

Plug Slug Calories - Production ratio - [Oxygen Not Included: Spaced Out!] - General Discussion - Klei Entertainment Forums

1600Wはかなり魅力的ですが、金属鉱石の消費は60kg/cycleとやや重め。無計画に飼育しているとあっという間に金属鉱石を食い尽くしてしまうため、飼育する際は電力需要や金属鉱石の在庫と相談してよく考えましょう。

なお、餌を食べた際にHydrogenを排出しますが、餌の5%と微々たる量のためほぼあてにはなりません。餌が60kgだと3kg、Hydrogen Generatorを30秒だけ稼動できる程度の量です。

Sweetle / Grubgrub

新バイオームのWastelandで見つかります。作物の世話をする能力があるため、農場で育てるのが良いかと思われます。特に先述のGrubfruit Plant。

Sweetleが作物の世話をすると成長速度+5%の効果があります。また、Sulfurを20kg/cycle消費して、50%のSucroseを排出します。作物の世話の効果は薄いため、Grubfruit Plantへの変化、もしくはSucroseの生産を目的に飼う事になると思われます。

GrubgrubはSweetleの亜種で、Grubfruit Plantの世話をしていると発生率が上がります。作物への効果が成長速度+50%と大幅に上がっていますが、餌がSulfurを50kg/cycleもしくはSucroseを30kg/cycle消費、10%のMudを排出と変化しています。Sweetleが生産したSucroseを消費されてしまうため、Sucrose目当てでSweetleを飼育している場合は注意が必要です。Mudの生産効率は良くないため、作物の世話を目的に飼う事になると思われます。

Pacu

既存の動物ですが、変更点があるため記載。餌にAlgae以外に植物の種が追加されています。消費は0.3kg/cycleと維持がかなり現実的な値となっています。農場の規模が十分なら数匹養う事が可能でしょう。なお、種を餌にした場合はPolluted Dirtの排出はほぼ無くなるため、Polluted Dirtの生産を目的とする場合には注意してください。

 

RubyKaigi 2019に参加しました

福岡で開催されたRubyKaigi 2019に参加しました。

全てについては書ききれないので、気になった発表についてつらつらと。

The Year of Concurrency

Matzのキーノート。Ruby 3の3つの目標「性能」「並列性」「静的解析」についての再確認と進捗についての内容でした。他の具体的な発表も合わせてですが、昨年までより目標に近付いており、Ruby 3が徐々に見えて来ているなと感じました。

静的解析関連

Ruby 3では静的解析が気になっていたのもあり、「A Type-level Ruby Interpreter for Testing and Understanding」と「The challenges behind Ruby type checking」を聞きました。「State of Sorbet: A Type Checker for Ruby」は聞けず。

「The challenges behind Ruby type checking」は主に型定義ファイル(rbiファイル)についての内容でした。Rubyに近い文法で書きやすそうだなと感じました。

「A Type-level Ruby Interpreter for Testing and Understanding」は主にType Profilerについての内容でした。静的解析でどこまで出来そうか、何が出来なさそうかがよく見えて来る内容で良かったと思います。

Twitterなどで観測した感じだとSorbetも良さそうという意見が多数見られたので、「State of Sorbet: A Type Checker for Ruby」についても後程確認したいと思います。

All bugfixes are incompatibilities

nagachikaさんのキーノート。安定版メンテナの仕事についての内容でした。安定版メンテナとしてどのパッチをbackportするかについての考えを実体験を基に話されていましたが、業務での開発でも参考に出来る考えであり、とても参考になりました。

その他

その他の発表についても興味深い発表が多く、とても楽しめました。パターンマッチングなどの便利そうな新機能の話、VMやライブラリなどの高速化の話、Nintendo SwitchRubyを動かした話などなど。

一方、自分の知識や英語力が不足しており、ちゃんと理解出来ていない点もあり、まだまだ勉強が必要だなとも感じました(これ毎年言っているな……)。

懇親会

0日目は永和システムマネジメントさんのナイトクルーズ、1日目はOfficial Party、2日目はアジャイルウェアさん、3日目はAfter Partyに参加しました。特にナイトクルーズや商店街を貸し切ってのOfficial Partyはこれまでに無い懇親会で新鮮に感じました。Official Partyでは福岡の日本酒が提供されましたが、なかなか美味しかったです。三井の寿が一番気に入った。あと、2日目のお店は中華料理がメインでしたが、かなり美味しかったです。今まで懇親会で行ったお店で一番美味しいまである。

話して下さった方々、このような場を用意して下さったスポンサーの方々、ありがとうございました。

ラーメン

観光する時間が無かったのでラーメン食べるくらいしか出来なかったけど美味しかった。

RubyKaigi 2020

来年は松本での開催らしいです。長野も日本酒美味しそうで楽しみ。あと、来年は会社の金でRubyKaigi行きたいので転職したい。