ITエンジニアが仕事に対して思うこと

ITエンジニアとして働く中で感じたことを、現場の温度感そのままに言語化するブログです。設計・実装・運用のリアル、学び続ける負荷、品質とスピードのせめぎ合い、コミュニケーションの難しさなど、きれいごとだけでは語れない「仕事の実態」を整理します。誰かを責めるのではなく、なぜそうなるのかを構造で捉え、明日から少し楽に、少し強く働ける視点を提供します。新人から中堅、マネジメントまで参考に。

C言語とRubyの連携: パフォーマンスと柔軟性の共存

                                         ****

皆さん、こんにちは。今回は、C言語とRubyを連携させ、高いパフォーマンスと柔軟性を同時に実現する方法についてお伝えします。C言語の力強い計算機能とRubyのエレガントなスクリプティングを融合させ、開発の可能性を広げましょう。

1. C言語の関数をRubyから呼び出す

最初に、C言語で書かれた関数をRubyから呼び出す例を見てみましょう。これにはRubyのFFI(Foreign Function Interface)を使用して、C言語の関数を呼び出します。

C言語のコード (example.c)

#include <stdio.h>

void helloFromC() {
    printf("Hello from C!\n");
}

Rubyのコード (app.rb)

require 'ffi'

# C言語のDLLをロード
module Example
  extend FFI::Library
  ffi_lib './example.so'
  attach_function :helloFromC, [], :void
end

# C言語の関数を呼び出す
Example.helloFromC

2. RubyからC言語のライブラリを利用する

次に、RubyからC言語のライブラリを利用する例を見てみましょう。これにもRubyのFFIを使用し、C言語の数学ライブラリをRubyから呼び出します。

C言語のコード (mathlib.c)

double add(double a, double b) {
    return a + b;
}

Rubyのコード (app.rb)

require 'ffi'

# C言語のDLLをロード
module MathLib
  extend FFI::Library
  ffi_lib './mathlib.so'
  attach_function :add, [:double, :double], :double
end

# C言語のライブラリを利用
result = MathLib.add(3.14, 2.71)
puts "Result: #{result}"

3. RubyとC言語でデータのやり取り

最後に、RubyとC言語でデータのやり取りを行う例を見てみましょう。RubyのFFIを使用して、C言語で定義した構造体をRubyで使用します。

C言語のコード (data.h)

struct Data {
    int value;
};

Rubyのコード (app.rb)

require 'ffi'

# C言語の構造体をRubyで定義
class Data < FFI::Struct
  layout :value, :int
end

# 新しい構造体を作成
data = Data.new
data[:value] = 42

puts "Value: #{data[:value]}"

まとめ

C言語とRubyを連携させることで、高いパフォーマンスと柔軟性を同時に享受できます。RubyのFFIを活用し、C言語の関数やライブラリを手軽に呼び出し、データのやり取りが可能です。プロジェクトの要件に応じて最適な方法を選択し、効果的な開発を進めましょう。Happy Coding!