Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
Search
Tomoki Kobayashi
September 06, 2025
Programming
3.5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby×iOSアプリ開発 ~共に歩んだエコシステムの物語~
ながらRuby会議01で発表した資料です
https://regional.rubykaigi.org/nagara01/
Tomoki Kobayashi
September 06, 2025
More Decks by Tomoki Kobayashi
See All by Tomoki Kobayashi
Liquid Glass を Metal Shader で描きたいだけの人生だった…
temoki
0
300
Skip Skip Run Run Run ♫
temoki
0
1.1k
さようならRxSwift こんにちは*****
temoki
1
670
Androidで不安定なPlatform Viewsとの闘い
temoki
0
1.3k
iOSパッケージマネージャー奮闘記 完結編
temoki
2
800
事業譲渡を受けたアプリとの統合で失敗、 そしてユーザーからの評価回復に至るまで
temoki
1
830
Apple Vision Proデベロッパラボに参加してきた
temoki
0
650
年末年始の成果、そして現状の紹介
temoki
0
340
Apple HIGのススメ
temoki
0
450
Other Decks in Programming
See All in Programming
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
8.8k
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
110
速習iPhone Duo対応
yuukiw00w
2
840
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
160
スマート反転とウェブアクセシビリティ
camiha
0
220
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
350
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
390
Webの地図
yosuke_furukawa
PRO
6
4.8k
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
5k
wkhtmltopdfの次どうするか問題2026
willnet
2
1.8k
Featured
See All Featured
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Site-Speed That Sticks
csswizardry
13
1.5k
The agentic SEO stack - context over prompts
schlessera
0
940
Done Done
chrislema
187
17k
Utilizing Notion as your number one productivity tool
mfonobong
4
600
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
950
Designing for Timeless Needs
cassininazir
1
510
Thoughts on Productivity
jonyablonski
76
5.4k
Transcript
Tomoki Kobayashi 著 Ruby×iOSアプリ開発 共に歩んだエコシステムの物語 ながらRuby会議01
Tomoki Kobayashi @temoki 📱 iPhone 3 G 日 本上陸 (2008年)
とほぼ同時に iPhone アプリ開発を始めた 信者 @nagara.rb https://bento.me/temoki • 自 動 車 メーカー系 SIer (新卒 入 社) • モバイルアプリ中 心 の受託開発 • スタートアップでモバイルアプリ開発 • 自 動 車 メーカーでモバイルアプリ開発 経歴 Matz 氏 とのご縁
Ruby iOS
Ruby × iOS 年表 1995年 Ruby を発表 2001年
Mac OS X を発表 2004年 Ruby on Rails を発表 2007年 iPhone と iPhoneOS を発表 2008年 iPhone 3 G と iPhoneOS 2 そして App Store を発表
iPhone 3 G と iPhoneOS 2 そして App Store デベロッパーの強い要望により
iPhone のアプリを開発できるようになった! iPhone 3 G iPhone 2 代 目 、3G通信に対応(🇯🇵に上陸した最初のiPhone) iPhoneOS 2 iPhone 3 G に初期搭載された OS(現在のiOS) App Store iPhoneOS アプリ配信サービス(当初 Jobs は懐疑的) Cocoa Touch iPhoneOS のアプリ開発環境 Foundation/UIKitフレームワーク、Objective-Cランタイム Xcode Apple提供の統合開発環境、Interface Builder とセット
Objective-C Appleプラットフォームを 支 えるオブジェクト指向 言 語 • 静的な C 言
語に Smalltalk の思想を加えた動的なオブジェクト指向 言 語 • 動的ディスパッチ(実 行 時にメソッドを解決)による拡張性 • メッセージパッシング(オブジェクトにメッセージを送る) • [receiver message: arg] … 🤔 これってRuby? • Matz 「 言 語を設計する上での影響は、 大 きな順からC、 Lisp、 Smalltalk … 」 * ( R u b y ) * Biancuzzi, F., & Warden, S.『 言 語設計者たちが考えること』オライリー ・ ジャパン, 2010.
MyObject.h MyObject.m
https://speakerdeck.com/temoki/swift-playgroundsdetatorugurahuitukususiyou?slide= 4 5 iOSDC Japan 2 0 1 9 発表資料より
(今後のOS名の表記について) 最新の名称に表記を統 一 します iOS (iPhone/iPad 用 OS) • iPhoneOS
👉 2011年に iPad の発表に伴い iOS に改名 • 2016年に iPad 向けのものを iOS から分離 👉 iPadOS macOS (Mac 用 OS) • Mac OS X 👉 OS X に改名 (2011年) 👉 macOS に改名 (2016年)
Ruby iOS
2010年頃のiOSアプリ開発者の悩み 3 rd Party ライブラリのインストールが 大 変… • Objective-C =
C 言 語の拡張 • C 言 語で 3rd Party ライブラリをインストールする 大 変さと同じ • ライブラリによって導 入方 法がまちまち • ビルド済み static リンクライブラリとヘッダーファイル • もしくはソースコード丸ごと、など • 統合開発環境 Xcode に GUI で設定しなければならない
統合開発環境 Xcode https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html 左図: “Cocoa Fundamentals Guide / What is
Cocoa?” より引 用 右図: “Tools for iOS Development” より引 用 https://developer.apple.com/library/archive/referencelibrary/GettingStarted/URL_Tools_for_iPhone_OS_Development/_index.html コードエディタ Interface Builder
統合開発環境 Xcode 図: “Xcode 4 Transition Guide / Orientation to
Xcode 4 ” より https://developer.apple.com/library/archive/documentation/IDEs/Conceptual/Xcode 4 TransitionGuide/Orientation/Orientation.html 図: “Xcode 4 Transition Guide / Orientation to Xcode 4 ” より引 用 Xcodeプロジェクトファイルの中 身 Xcodeプロジェクトのビルド設定 独 自 フォーマット 仕様が 非 公開
救世主 CocoaPods 誕 生 🐣
CocoaPods 誕 生 待望のiOS/macOSアプリ 用 パッケージマネージャー • 2011年に Eloy Durán
が Ruby で開発、発表 • 3 rd Party ライブラリのソースコード配布(中央集権型) • pod install コマンドだけで依存関係解決、ライブラリのダウンロード、 そして Xcode プロジェクトへの統合までを 自 動化 (Xcode プロジェクトを 自 在に操る Gem xcodeproj も CocoaPodsの 一 部) • iOS/macOSアプリ 用 パッケージマネージャーのデファクトスタンダードへ • Cocoa = iOS/macOSアプリ開発環境のこと
CocoaPods の重要なファイル Pod fi le アプリが依存するライブラリを Ruby DSL で記述する .podspec
ライブラリの仕様を Ruby DSL で記述する Podfile .podspec
CocoaPods ↔︎ RubyGems + Bundler CocoaPods は RubyGems + Bundler
に 大 きな影響を受けて開発された CocoaPods RubyGems + Bundler 役割 iOS/macOSアプリの ライブラリ管理 Rubyのライブラリ管理 依存設定/ロック ファイル Pod fi le / Pod fi le.lock Gem fi le / Gem fi le.lock ライブラリの呼び名 Pod Gem ライブラリの仕様ファイル .podspec .gemspec 中央リポジトリ CocoaPods.org rubygems.org インストール/更新 コマンド pod install / update bundle install / update ファイルの記述 言 語 Ruby DSL Ruby DSL
Ruby × iOS 年表 1995年 Ruby を発表 2003年
RubyGems を発表 2008年 iPhone 3 G と iPhoneOS 2 そして App Store を発表 2009年 RubyGems.org を開設 2011年 CocoaPods 開発スタート 2012年 nomad-cli 開発スタート 2014年 fastlane 開発スタート Ruby製のiOSアプリ開発 支 援 ツールが続々と 生 まれる }
nomad-cli iOSアプリ開発のためのコマンドライン ・ ユーティリティ群 • 開発者 Mattt Thompson (@mattt) •
nomad-cli.com • Shenzhen iOSアプリのビルドと配布 • Cupertino Apple Developer Center での開発 用 デバイス管理 • Houston Apple Push Noti fi cation Service によるプッシュ通知配信 • など…
fastlane iOSアプリのベータ配信とリリースに関するあらゆる作業を 自 動化 • 開発者 Felix Krause (@KrauseFx) •
fastlane.tools • nomad-cli の実質的な後継ツール • iOSアプリのビルド、コード署名、ベータ配信、App Store配信 • 特に iOS アプリの複雑なコード署名を CI/CD ツール上で 行 うために必須 • ワークフローを Ruby DSL (Fast fi le) で 自 由に記述できる
なぜ Ruby で作られたのか? 開発者はなぜ Ruby を選んだのか • CocoaPods (Eloy Durán)
• 開発者は Ruby のエンジニア、RubyGems + Bundler の影響 • nomad-cli (Mattt Thompson) • 開発者 は元 Rails のエンジニアで、iOSアプリ開発をはじめた • fastlane (Felix Krause) • nomad-cli の影響、CocoaPodsの機能活 用 、CocoaPods との統合 ✍ macOS にはシステム Ruby が標準搭載されてきた
Ruby iOS
Molinillo モリニージョ メキシコの伝統的な泡 立 て器(ホットチョコレートなど) https://en.wikipedia.org/wiki/Molinillo_(whisk) 写真: Wikipedia Molinillo (whisk)
より引 用
Molinillo モリニージョ CocoaPods の依存関係リゾルバー • CocoaPods 0 . 3 5
(2014年) から搭載された依存関係リゾルバー • 開発者 Samuel Giddins (@ segiddins) • Stripe社のオープンソース 支 援プログラムを受けて CocoaPods のために開発 • 依存ライブラリ間のバージョンの 制約充 足 問題 の効率的な解決のために バックトラッキングというアルゴリズムを採 用 • 泡 立 て器がいくつかの材料をうまく混ぜ合わせて美味しい飲み物にしてくれるように、 依存関係をうまく混ぜ合わせて利 用 できるように助けてくれる
Molinillo の逆輸 入 Bundler と RubyGems に Molinillo が搭載される! •
Bundler 1 . 9 (2015年3 月 ) • Bundler Blog: Hello, Bundler 1 . 9 ! by Samuel Giddins • RubyGems 2 . 5 (2015年11 月 ) 👉 Rubyエンジニアを悩ませてきた Dependency Hell 問題を 大 きく改善 ✍ Molinillo は CocoaPods 専 用 ではなく汎 用 的な設計で作られていた https://bundler.io/blog/ 2 0 1 5 / 0 3 / 2 1 /hello-bundler- 1 9 .html
Molinillo による依存関係解決 バックトラッキング アルゴリズム • 依存関係のツリーを探索し、制約のコンフリクトが発 生 した場合は、 前の選択に戻って別の可能性を試す、という動作を繰り返す •
コンフリクトが発 生 した際、どの依存関係が原因であるかを特定し、 無駄な探索を省略して効率的に正しい組み合わせを発 見 できる
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0 🔥 コンフリクト!
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0 原因となった 選択まで戻る
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0
Molinillo による依存関係解決 バックトラッキング アルゴリズム my_app • 1 . 0 .
0 - network_lib ~> 2 . 0 - ui_kit ~> 1 . 0 json_parser • 2 . 0 . 0 • 1 . 1 . 0 • 1 . 0 . 0 network_lib • 2 . 1 . 0 - json_parser ~> 1 . 1 • 2 . 0 . 0 - json_parser = 1 . 0 . 0 ui_kit • 1 . 1 . 0 - json_parser ~> 2 . 0 . 0 • 1 . 0 . 0 - json_parser >= 1 . 0 . 0 👍
Ruby iOS
Ruby × iOS 年表 2014年 Swift 発表 2015年
CocoaPods 0 . 3 6 で Swift 製ライブラリのサポート 2015年 Swift Package Manager (SPM) 発表 2017年 fastlane 2 . 6 9 . 0 で Swift サポート (Fast fi le が Swift で書けるように)
Ruby × iOS 年表 2019年 将来的にmacOSからRubyが搭載されなくなるという発表 ‣ Ruby だけではなく
Python などのスクリプト 言 語全般 ‣ 現在は互換性のために残っているだけ 2021年 Xcode Cloud および Cloud signing の発表 ‣ Xcode Cloud は Apple 製の CI/CD ツール( 面 倒なコード署名も 自 動) ‣ Cloud signing はクラウド上でアプリのコード署名を 行 う仕組み(CI/CD上でも) ‣ コード署名が重宝されていた fastlane のメリットが薄れる
Ruby × iOS 年表 2023年 Bundler 2 . 4
で依存関係リゾルバー Molinillo が引退 ‣ Dart (Flutter) 用 パッケージマネージャー pub のために Rust で開発された PubGrub を Ruby に移植したものにバトンタッチ ‣ なお、RubyGems は現在も Molinillo を使 用 2024年 CocoaPods のメンテナンスプラン発表 ‣ 主要ライブラリの SPM 対応で CocoaPods 剥がしが進む ‣ しかし Flutter と React Native により CocoaPods のトラフィックは増加傾向 ‣ 2016年12 月 をもって CocoaPods がリードオンリー化(新規登録 ・ 更新不可)
Ruby iOS
まとめ Big thanks to Ruby!!! • Ruby のおかげで iOS アプリ開発のエコシステムは
支 えられてきた • iOS アプリ開発のために 生 まれた CocoaPods の依存関係リゾルバー Molinillo により、Ruby のエコシステム(RubyGems, Bundler)が 大 きく改善された • Ruby × iOS のエコシステムのこの共 生 関係は、Swift の登場により縮 小 の道へ • すべての iOS アプリ開発者は Ruby がもたらしてくれた恩恵を忘れないでしょう!
iOSDC Japan 2 0 2 5 のパンフ記事もぜひ(noteにも公開予定) https://fortee.jp/iosdc-japan- 2 0
2 5 /proposal/ 9 0 e 5 9 0 1 4 - 6 9 7 8 - 4 9 5 3 - 8 be 9 -c 6 1 3 8 0 4 3 eef 6