Road to Ruby for A Linguistics Nerd

2.8K Views

May 05, 25

スライド概要

これは、RubyKaigi 2025 への参加に関連した以下の4点の項目をまとめた、個人的備忘録兼発表用資料である。

1. RubyKaigi 2025 の個人的目標
2. A Kaigi Effect -沼り分野-
3. 最も思い出深い議論
4. As Is vs. To Be

profile-image

某教育系サービスの内製開発にソフトウェアエンジニアとして携わっています。 使用技術スタックは、サーバーサイドは Ruby on Rails、フロントエンドは React.js + TypeScript です。 プライベートでは Python も少し書きます。 学部生時代は英語学を専攻していたので、言語に強い興味を持っています。 LT 会のプレゼンテーションなどで使用したスライドを掲載しています。 宜しければご自由にご覧下さい。

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

(ダウンロード不可)

関連スライド

各ページのテキスト
1.

Road to Ruby for A Linguistics Nerd 作成者: 石田 隼人 英語版はこちら 最終更新日: 2025年05月09日 1

2.

自己紹介 • 各種アカウント • • • • • GitHub: @hayat01sh1da Speaker Deck: @hayat01sh1da Docswell: @hayat01sh1da X: @hayat01sh1da Linkedin: @hayat01sh1da • 職業: ソフトウェアエンジニア • 趣味 • • • • • 言語学 カラオケ 音楽鑑賞 映画鑑賞 猫飼育 2

3.

免許 / 資格 • 英語 • TOEIC® Listening & Reading 915点: 2019年12月 取得 • エンジニアリング • • • • 情報セキュリティマネジメント: 2017年11月 取得 応用情報技術者: 2017年06月 取得 基本情報技術者: 2016年11月 取得 IT パスポート: 2016年04月 取得 • その他 • 珠算2級: 2002年06月 取得 • 暗算3級: 2001年02月 取得 3

4.

スキルセット • 言語 • 日本語: 母語 • 英語: ビジネスレベル • 開発 • Ruby: 中上級(FW: Ruby on Rails) • Python: 中級 • TypeScript:中級(Library: React.js) • HTML:中級(Library: Bootstrap) • CSS:中級(Library: Bootstrap) • SQL:中級 • その他 • ドキュメンテーション: 上級 4

5.

職歴 1. システムエンジニア @SES • レガシー Windows Server 運用・保守 • 社内アカウント管理 • 社内セキュリティ啓蒙 • 英語通訳(海外拠点とのオンライン会議・ベンダー対応・海外スタッフのアテンド) 2. ソフトウェアエンジニア @受託開発会社 • サーバーサイド開発(Ruby on Rails, RSpec) • フロントエンド開発(HTML / CSS, JavaScript) • QA(Native iOS / Android Apps) • 企業技術ブログ記事執筆 3. ソフトウェアエンジニア @チャットボットプラットフォーム開発会社 • 既存チャットボットプラットフォーム開発・運用・保守(Ruby on Rails, RSpec) • 新規チャットボットエンジン性能検証(Ruby, Ruby on Rails, RSpec, Python) 4. ソフトウェアエンジニア @メガベンチャーの教育系サービス内製開発部門 • 学事・進路支援機能開発(Ruby on Rails, RSpec, Minitest, TypeScript + React.js) • 年次高校マスタデータ更新(Ruby on Rails, RSpec) • 負債解消活動(Ruby, Python, GitHub Actions etc.) 5

6.

国際交流活動 • 大学時代 • • • • 英語学ゼミ(マスメディア英語) 国際交流サークル兼部(2年次) 内閣府主催国際交流プログラム(2013年 - 2016年) 日本語学の授業の S 単位取得(最終年次) • 海外生活 • オーストラリアでのワーキングホリデー(2014年04月 - 2015年03月) • • • 2ヶ月間のシドニーの語学学校通学 6ヶ月間の Hamilton Island Resort での就労 1ヶ月間の NSW 州の St Ives High School での日本語教師アシスタントボランティア活動 • その他活動 • • • • • 英語での日々の日記(2014年04月 - 現在) Sunrise Toastmasters Club 参加(2017年02月 - 2018年03月) Vital Japan 参加(2018年01月 - 2019年07月、2022年10月 - 2023年02月) 英語自己学習 Ruby 関連カンファレンス参加 6

7.

LT に入る前に… RubyKaigi チーフオーガナイザーの松田明さんより許可を頂き、RubyKaigi 2025 の公式ロゴを背景に使わせて頂いております(著作権侵害はありません)。 Ref) https://x.com/a_matsuda/status/1918612709169672210 7

8.

コンテンツ 1. RubyKaigi 2025 の個人的目標 2. KaigiEffect -沼り分野3. Matz さんとの最も思い出深い議論 4. As Is vs. To Be 5. 参考文献 8

9.

1. RubyKaigi 2025 の個人的目標 9

10.

1. RubyKaigi 2025 の個人的目標 いち言語学オタクとして Ruby に コミットするための突破口を見つけること 10

11.

1. RubyKaigi 2025 の個人的目標 この目標に至った経緯 • 長年の Ruby での開発経験はあったが、複雑で難解な低レイヤーの理解か ら逃げ回ってきた • この事実により、Ruby を使えはするが最大限活用出来ない未熟な開発者 になり果ててしまった • 私自身、Ruby の低レイヤーのエコシステムやライフサイクルに真剣に向 き合い、理解する時が来たことは感じていた • 何から始めるべきかは分かりかねていたので、RubyKaigi 2025 で言語学的 な自分の興味を大きく引く何かを見つけることにした 11

12.

1. RubyKaigi 2025 の個人的目標 取った戦略 • 興味のある分野だけに絞って観るスピーチを決めた • 全てを理解しようとはせず、その時に理解出来なかった and/or 興味を引 かれたキーワードのみを書き残した • RubyKaigi 2025 が終了したら、書き残したキーワードの詳細について学び 始めた 12

13.

2. KaigiEffect -沼り分野- 13

14.

2. KaigiEffect -沼り分野言語処理のエコシステムとライフサイクルへの大きな興味 • 特別な理由はなかったが、かつては興味を持っていなかった • @ydah_さんの Dissecting and Reconstructing Ruby Syntactic Structures を拝見 し、Ruby のソースコードがどのように処理されるかについて大きな興味 を持った 14

15.

2. KaigiEffect -沼り分野同僚 Rubyists との議論と学習教材の収集 • 言語処理のエコシステムやライフサイクルは私が知っている以上に複雑 だった • 尚のこと、Ruby の言語処理系の詳細について知りたくなった • それを知るために有用な教材は何かを言語処理に深く精通した同僚の Rubyists にヒアリングと議論をした • おすすめされたウェブサイトやファイルなどの教材をブックマークしま くった • X 上でもおすすめをして頂いた(親切な Rubyists に感謝します) ※ 知見に富んだ同僚がいること自体が福利厚生だと実感以上の確信をした 15

16.

2. KaigiEffect -沼り分野同僚 Rubyists との議論と学習教材の収集 16

17.

2. KaigiEffect -沼り分野同僚 Rubyists との議論と学習教材の収集 17

18.

2. KaigiEffect -沼り分野同僚 Rubyists との議論と学習教材の収集 18

19.

2. KaigiEffect -沼り分野同僚 Rubyists との議論と学習教材の収集 19

20.

2. KaigiEffect -沼り分野知識インプット教材 • LLVM Language Reference Manual • Parsing Techniques • 低レイヤを知りたい人のための C コンパイラ作成入門 • MIPS アーキテクチャ ✓ うさぎでもわかる計算機システム Part10 コンパイラの基礎・分割コンパイルの流れ ✓ うさぎでもわかる計算機システム Part11コンパイラの処理の流れ(字句解析と意味解析の しくみ) ✓ Ruby Parser 開発日誌(14) - LR parser 完全に理解した ✓ オートマトンと言語理論 学習記 #1: オートマトンとは何か ✓ オートマトンと言語理論 学習記 #2: 有限オートマトン ✓ Ruby の中身の予備知識 RubyKaigi の前に知り鯛! ✓ たのしい Ruby の構文解析ツアー ✓ LL 法と LR 法の違いは?調べてみた!-完全版-/Comparing LL and LR parse algorithm -EX Edition20

21.

2. KaigiEffect -沼り分野知識アウトプット教材 ✓Ruby でつくる、ミニで Ruby なコンパイラ • 9cc • lr-parser-101 • 『Ruby でつくる Ruby ゼロから学びなおすプログラミング言語入門』 21

22.

2. KaigiEffect -沼り分野新生 Ruby コミュニティ参加 Shikumi.rb organised by @hashimoto-kei and @utsubo • 2025年05月に誕生したばかりのコミュニティ • セッションは主にオンライン開催 • Ruby の言語処理の仕組みを勉強することを主眼に置いているので、 KaigiEffect に当てられた私には渡りに船だった • 目下皆勤賞(2025年05月09日 現在) 22

23.

3. Matz さんとの最も思い出深い議論 23

24.

3. Matz さんとの最も思い出深い議論 以前「言語の生と死 -自然言語 vs. プログラミング言語-」で言及したように、 Matz さんが Twitter(現: X)にて私のアドベントカレンダーの記事を引用して 下さるくらい、言語学に関心をお持ちであることは存じ上げていた。 また、以前「比較言語学のススメ -Ruby vs. Python に学ぶ言語のアイデン ティティ-」で言及したように、私自身も Ruby は自然言語の英語のような滑 らかな「書き味」を強く意識していることには確信を持っていた。 24

25.

3. Matz さんとの最も思い出深い議論 株式会社アンドパッド様主催のコード懇親会が渡りに船となり、同じ島の テーブルでご一緒した Matz さんと以下のような議論を交わすことが出来た。 ※ H = hayat01sh1da, M = Matz さん H) 「松本さんは Perl に倣って Ruby を開発されたと記憶しており、ゆえに Perl といくつかの類似点があると認識しています。その1つが言語学・認知 学的考慮ですが、Ruby を開発し、育て、世にリリースする際にそのような 言語学・認知学的な哲学をお持ちだったのでしょうか?」 M) 「Perl の開発者である Larry Wall さんは言語学者としてのバックボーンが ありますが、一方で私はコンピューターサイエンス専攻でした。バックグ ラウンドはお互いに違いますが、言語学・認知学的考慮を互換性に注意を 払いながら強く意識しています。」 25

26.

3. Matz さんとの最も思い出深い議論 H) 「1人の Rubyist・英語学専攻者として, Ruby 自然言語の英語のような滑らかな 「書き味」を提供していると考えています。Ruby を書くことは英語で詩を書くの にかなり近しい体験があると感じます。松本さんの言語学・認知学的哲学を理解 しましたし、 「比較言語学のススメ -Ruby vs. Python に学ぶ言語のアイデンティ ティ-」で述べた仮説が正しかったと証明出来ました。」 M) 「私はメソッドがどのように動くかだけでなく、そのメソッドが何の目的で動 作するのかも重要視しています。例えば、Enumerable#collect と Enumerable#map に ついて考えてみましょう。両者ともにレシーバーの各要素のブロック内での処理 結果を新しい配列にして返すメソッドです。前者はデータの集合体を生成する、 後者はレシーバーの各要素とブロック内の処理結果をマップするという目的があ ります。この例から分かるように、同じデータ処理をするのにも様々な目的を孕 んでいるという訳です。」 H) 「日本語版の『プログラマが知るべき97のこと > 107. 名前重要』で松本さんが 仰っていた『命名は設計を如実に反映する』という事実を連想しました。」 26

27.

3. Matz さんとの最も思い出深い議論 M) 「命名の観点で、私は過去に1つ失敗したことがあります。私はその時、 レシーバー自信をブロック引数に取り、その処理結果を返却するメソッド の命名を考えていました。初めはそれに `Object#yield_self` という名前を付 けました。「自身渡す」という挙動の観点では意味を成しています。しか し、それ以前の「それが何をするのか」を命名に反映出来ていませんでし た。後に `Object#then` というエイリアスを作りました。データ処理はレ シーバー以前で一旦完了しており、文字通り「それから」何をするかに焦 点を当てるような命名にしたのです。これによって、メソッドがどう動く かだけでなく、それが何を目的としてるかが分かりやすくなりました。」 H) 「完全理解です。(英文構造で言うと)多くのメソッドはレシーバーを主語、 メソッド自身を述語動詞、引数を目的語、ブロックを従属節(名詞節・形容 詞節・副詞節)として扱う理解をしています。しかし、松本さんは副詞であ る 'then' をメソッドとして、ブロック内を並列する主節として扱う文構造を 採用されたのが目から鱗でした!」 27

28.

3. Matz さんとの最も思い出深い議論 S V3 ( S V3 [O O (and) [S] [V1] ] • S = 主語 • V = 述語動詞 • • • • • V1: SV V2: SVC V3: SVO V4: SVO1O2 V5: SVOC • O = 目的語 ) S V1 • O1: 間接目的語 • O2: 直接目的語 • C = 補語 • [従属節] • (修飾語句) ※ Enumrable#sort は返り値として新しい配列を enum_sort 関数を通して rb_ary_sort_bang 関数で返却するので、Range オブジェクトは Array オブジェ クトに暗黙的に変換される。 28

29.

3. Matz さんとの最も思い出深い議論 Matz さんとの議論は10分と少し程だったが、実りある時間を持てて大変光 栄であった。 Matz さんには、大の Ruby 好き・言語学オタクとして感謝に堪えません。 29

30.

4. As Is vs. To Be 30

31.

4. As Is vs. To Be AsIs: 現状 • Ruby でウェブアプリケーションやスクリプトを実装するだけの Rubyist ToBe: 目標 • Ruby の低レイヤーエコシステムやライフサイクルを理解し、ウェブアプ リケーションやスクリプトのパフォーマンスを最適化出来る Rubyist • Ruby の言語処理系がどのように動くのかを理解し改善のためのコミット が出来る Rubyist • Ruby の言語学・認知学観点での設計を豊かに、そして最適化出来る Rubyist 31

32.

5. 参考文献 32

33.

5. 参考文献 • RubyKaigi 2025 > Schedule • 最終アクセス日: 2025年05月05日 • LLVM Language Reference Manual • 最終アクセス日: 2025年05月05日 • PARCING TECHNIQUES -A Practical Guide• 最終アクセス日: 2025年05月05日 • 低レイヤを知りたい人のための C コンパイラ作成入門 • 最終アクセス日: 2025年05月05日 • MIPS アーキテクチャ • 最終アクセス日: 2025年05月05日 33

34.

5. 参考文献 • うさぎでもわかる計算機システム Part10 コンパイラの基礎・分割コンパ イルの流れ • 最終アクセス日: 2025年05月05日 • うさぎでもわかる計算機システム Part11コンパイラの処理の流れ(字句解 析と意味解析のしくみ) • 最終アクセス日: 2025年05月05日 • Ruby Parser 開発日誌(14) - LR parser 完全に理解した • 最終アクセス日: 2025年05月05日 • オートマトンと言語理論 学習記 #1: オートマトンとは何か • 最終アクセス日: 2025年05月05日 • オートマトンと言語理論 学習記 #2: 有限オートマトン • 最終アクセス日: 2025年05月05日 34

35.

5. 参考文献 • Ruby の中身の予備知識 RubyKaigi の前に知り鯛! • 最終アクセス日: 2025年05月05日 • たのしい Ruby の構文解析ツアー • 最終アクセス日: 2025年05月05日 • LL 法と LR 法の違いは?調べてみた!-完全版-/Comparing LL and LR parse algorithm -EX Edition• 最終アクセス日: 2025年05月05日 • 9cc • 最終アクセス日: 2025年05月05日 • lr-parser-101 • 最終アクセス日: 2025年05月05日 35

36.

5. 参考文献 • 遠藤侑介、『 Ruby でつくる Ruby ゼロから学びなおすプログラミング言 語入門』、東京、2017年 • Ruby 3.4 リファレンスマニュアル > 組み込みライブラリ • Last Accessed On: 05 May 2025 • Perl 6 Design Philosophy • 最終アクセス日: 2025年05月05日 • 97 Things Every Programmer Should Know • 最終アクセス日: 2025年05月05日 • プログラマが知るべき97のこと • 最終アクセス日: 2025年05月05日 36

37.

EOD 37