SlideShare a Scribd company logo
1 of 21
Download to read offline
RubyからC#を扱う
第73回 Ruby関西 勉強会 発表資料
FUNABARA Masao ( @107steps )
2
概要
●
自己紹介
●
ruby-csharp_script
●
C# → Ruby
●
Ruby → C#
●
C# からの返り値
●
課題
3
自己紹介
• @107steps ( https://twitter.com/107steps )
• 舩原 理生 ( FUNABARA Masao )
• 個人事業主
• 仕事ください ( Ruby / C / C++ / C# / Xamarin )
• ブログ ( https://www.masoo.jp/blog )
• Ruby舞鶴やってます
https://ruby-maizuru.doorkeeper.jp
北近畿に住んでいらっしゃる人がいたら
一緒にしましょう。
4
ruby-csharp_script
• https://github.com/masoo/ruby-csharp_script
• Ruby から C# を扱いたくて作ったライブラリ
• C# 製
• COM に登録して使う
(Virtual Studio 2015 Communityを
 管理者権限で実行してビルドすると簡単)
5
RubyからC#スクリプトを動かすデモ #1
ruby-csharp_script_sample001.rb
6
RubyからC#スクリプトを動かすデモ #2
ruby-csharp_script_sample002.rb
7
RubyからC#スクリプトを動かすデモ #3
ruby-csharp_script_sample003.rb
8
C# → Ruby
• るびま 0021 号「 C# と Ruby を連携させる」を参考にしよう
http://magazine.rubyist.net/?0021-RubyWithCSharp
9
Ruby → C# その1
• IronRuby ( CRuby 1.9 compatibility )
http://ironruby.net
10
Roslyn 登場
• Roslyn ( .Net Compiler Platform ) が Virtual Studio 2015 から搭載
• その機能の一つに注目
11
Scripting API
• Microsoft.CodeAnalysis.Csharp.Scripting
• C# のソースコードをスクリプトとして実行
(コンパイルする C# 言語とちょっと違う)
• C# での使い方は、
http://github.com/dotnet/roslyn/wiki/Scripting-API-Samples
に記載
12
Ruby → C# その2
• ruby-csharp_script というのを作った
https://github.com/masoo/ruby-csharp_script
• Microsoft.CodeAnalysis.Csharp.Scripting.CsharpScript を
薄く Wrapping
• Ruby からは win32ole 経由で呼び出す
13
C# で COMクラスを作る方法
• クラスとメソッドに GUID を割り振って、COM用の属性を指定してあげるとできる
• 詳しくはマイクロソフトのサイトへGo
https://msdn.microsoft.com/ja-jp/library/c3fd4a20.aspx​
https://msdn.microsoft.com/ja-jp/library/aa288455(v=vs.71).aspx
14
Rubyからアクセスしたい時の注意点
• ターゲットプラットフォームを
「x86」にしないと
win32ole から見えない
15
C# Script の結果を Ruby Script に渡す int型
ruby-csharp_script_sample004.rb
16
C# Script の結果を Ruby Script に渡す浮動小数点数型
ruby-csharp_script_sample005.rb
17
C# Script の結果を Ruby Script に渡す 文字列型
ruby-csharp_script_sample006.rb
18
C# Script の結果を Ruby Script に渡す 配列型
ruby-csharp_script_sample007.rb
19
C# Script の結果を Ruby Script に渡す オブジェクト
ruby-csharp_script_sample008.rb
20
課題
• 32ビットファイルしか扱えていない
win32ole から 登録された 64ビットファイルが見えない
• 元のメソッドは非同期メソッド (async) だけど、
Rubyに来る前に同期してる。
非同期にできるかどうか不明だし、このままでもいい気もする
• Gem にしたいけど、 dll ファイルとか、COM の登録どうしよう
21
まとめ
• IronRubyは開発止まってる
• C# → Ruby は、るびまを見よう
• Ruby → C# は COM を使おう
• ビルドは 32 ビットで
• ruby-csharp_script は、そのうち gem にしたい
イラスト:いらすとや

More Related Content

What's hot

The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEP
Gregor Schmidt
 

What's hot (20)

Scalaで型クラス入門
Scalaで型クラス入門Scalaで型クラス入門
Scalaで型クラス入門
 
The Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEPThe Microkernel Mach Under NeXTSTEP
The Microkernel Mach Under NeXTSTEP
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
PHP の GC の話
PHP の GC の話PHP の GC の話
PHP の GC の話
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing5.6 以前の InnoDB Flushing
5.6 以前の InnoDB Flushing
 
自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する自分たちのコードを Composer パッケージに分割して開発する
自分たちのコードを Composer パッケージに分割して開発する
 
Redmineサーバ統合事例
Redmineサーバ統合事例Redmineサーバ統合事例
Redmineサーバ統合事例
 
Advanced GitHub Enterprise Administration
Advanced GitHub Enterprise AdministrationAdvanced GitHub Enterprise Administration
Advanced GitHub Enterprise Administration
 
MySQLの限界に挑戦する
MySQLの限界に挑戦するMySQLの限界に挑戦する
MySQLの限界に挑戦する
 
Java 9で進化する診断ツール
Java 9で進化する診断ツールJava 9で進化する診断ツール
Java 9で進化する診断ツール
 
[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces[Container Runtime Meetup] runc & User Namespaces
[Container Runtime Meetup] runc & User Namespaces
 
C#とILとネイティブと
C#とILとネイティブとC#とILとネイティブと
C#とILとネイティブと
 

Viewers also liked

GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
Xamarin
 
iTec innovaatilised õpistsenaariumid
iTec innovaatilised õpistsenaariumidiTec innovaatilised õpistsenaariumid
iTec innovaatilised õpistsenaariumid
Martin Sillaots
 
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisëHisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Libra Islame
 
Hands 1229372584812390 1
Hands 1229372584812390 1Hands 1229372584812390 1
Hands 1229372584812390 1
anda dumangiu
 

Viewers also liked (20)

孤独なフリーランサー
孤独なフリーランサー孤独なフリーランサー
孤独なフリーランサー
 
Github pagesで独自ドメインのサイトを作る
Github pagesで独自ドメインのサイトを作るGithub pagesで独自ドメインのサイトを作る
Github pagesで独自ドメインのサイトを作る
 
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
 
mruby を C# に 組み込んでみる
mruby を C# に 組み込んでみるmruby を C# に 組み込んでみる
mruby を C# に 組み込んでみる
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 
20160716 Gemのお話
20160716 Gemのお話20160716 Gemのお話
20160716 Gemのお話
 
Frasco: Jekyll Starter Project
Frasco: Jekyll Starter ProjectFrasco: Jekyll Starter Project
Frasco: Jekyll Starter Project
 
スタートアップとScala
スタートアップとScalaスタートアップとScala
スタートアップとScala
 
ここが変だよRuby/RoR #rubykansai
ここが変だよRuby/RoR #rubykansaiここが変だよRuby/RoR #rubykansai
ここが変だよRuby/RoR #rubykansai
 
Libqi unityの紹介など
Libqi unityの紹介などLibqi unityの紹介など
Libqi unityの紹介など
 
Unityでデスクトップマスコットを作ろう
Unityでデスクトップマスコットを作ろうUnityでデスクトップマスコットを作ろう
Unityでデスクトップマスコットを作ろう
 
C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門C#/WPFで作るデスクトップマスコット入門
C#/WPFで作るデスクトップマスコット入門
 
Эффективные кампании в интернете для разных задач МСБ.
Эффективные кампании в интернете для разных задач МСБ.Эффективные кампании в интернете для разных задач МСБ.
Эффективные кампании в интернете для разных задач МСБ.
 
Letter s presentatie
Letter s presentatieLetter s presentatie
Letter s presentatie
 
صداقت حضرت مسیح موعود علیہ السلام از احادیث
صداقت حضرت مسیح موعود علیہ السلام از احادیثصداقت حضرت مسیح موعود علیہ السلام از احادیث
صداقت حضرت مسیح موعود علیہ السلام از احادیث
 
iTec innovaatilised õpistsenaariumid
iTec innovaatilised õpistsenaariumidiTec innovaatilised õpistsenaariumid
iTec innovaatilised õpistsenaariumid
 
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisëHisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
Hisham Muhamed Tilbete - Mrekullia e Kur'anit në çështje të astronomisë
 
Clase+de+tarnsporte
Clase+de+tarnsporteClase+de+tarnsporte
Clase+de+tarnsporte
 
Unityを使ったVRアプリ作成入門 ABCD2015金沢編
Unityを使ったVRアプリ作成入門 ABCD2015金沢編Unityを使ったVRアプリ作成入門 ABCD2015金沢編
Unityを使ったVRアプリ作成入門 ABCD2015金沢編
 
Hands 1229372584812390 1
Hands 1229372584812390 1Hands 1229372584812390 1
Hands 1229372584812390 1
 

Similar to RubyからC#を扱う

DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
Tomohiro Nishimura
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
Koji SHIMADA
 

Similar to RubyからC#を扱う (20)

C#とRubyをつなぐ
C#とRubyをつなぐC#とRubyをつなぐ
C#とRubyをつなぐ
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
RubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書くRubyでGUIアプリケーションを書く
RubyでGUIアプリケーションを書く
 
mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?mrubyでC使う? Cでmruby使う?
mrubyでC使う? Cでmruby使う?
 
RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの広め方〜PR・継続できる目標の立て方・改善編 先生:増井 雄一郎
 
oFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer WorkoutoFの話題が殆ど出ない oF jp Summer Workout
oFの話題が殆ど出ない oF jp Summer Workout
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたし
 
DSLについて語るときに僕の語ること
DSLについて語るときに僕の語ることDSLについて語るときに僕の語ること
DSLについて語るときに僕の語ること
 
What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7What's Cooking In Ruby 2.7
What's Cooking In Ruby 2.7
 
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
 
Rubinius Under a Microscope
Rubinius Under a MicroscopeRubinius Under a Microscope
Rubinius Under a Microscope
 
Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話Rubyにメソッドを追加して遊ぶ話
Rubyにメソッドを追加して遊ぶ話
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しよう
 
Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4Ruby Sapporo Night Vol4
Ruby Sapporo Night Vol4
 
Eightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組みEightにおけるエンジニア主導の取り組み
Eightにおけるエンジニア主導の取り組み
 
Mrubyの始め方
Mrubyの始め方Mrubyの始め方
Mrubyの始め方
 
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 

Recently uploaded

Recently uploaded (11)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

RubyからC#を扱う