22
3

More than 1 year has passed since last update.

コツコツPRを投げてたら、とあるOSSのコラボレータになれました。(Rust, Swift)

Last updated at Posted at 2023-04-30

コツコツPRを投げてたら、とあるOSSのコラボレータになれました。

こちらのコラボレータになれました。

swift-bridgeは、RustとSwiftを繋ぐffiを自動生成するツールです。swift-bridgeの紹介は別の記事でまとめようと思います。

以下はswift-bridgeを使った例です。

//Rust
#[swift_bridge::bridge]
mod ffi {
    enum SomeEnum {
      Variant1
      Variant2 {
        value: usize
      }
      Variant3(i32, u32)
    }
    extern "Rust" {
        type SomeType;  //不透明な型
        #[swift_bridge(init)]
        fn new() -> SomeType;
        fn some_function(&self) -> i32;
    }
}

pub SomeType(i32);

impl SomeType {
   fn new() -> Self {
      SomeType
   }
   fn some_function(&self) -> i32 {
      self.0
   }
}
//Swift
let someType  = SomeType()
let someValue = someType.some_function()

let variant3  = SomeEnum.Variant2(value: 10)

上記を見るとわかる通り、簡単にSwiftとRustの連携が取れることがわかります。

OSSのコラボレータになれた経緯

元々、swift-bridgeには関心を持っていました。そこで、このOSSに何か自分でも貢献できることがあるのではないかと思い、good first issueから取り組むことにしました。

最初に投げたPRはこちら:

テストコードの整理とGithub Actionsに対する微修正をやりました。

次に取り組んだのはこちら:

上のPRは、swift-bridgeが提供する不透明な型のEquatableのサポートを行っています。

他にも色々やり、少しずつこのOSSに慣れてきました。なので、難しい実装にもチャレンジするようになりました。

個人的に難しかったのは、RustとSwiftの間で、Enum型を連携する実装です。

なぜ難しいのかと言いますと、RustとSwiftで提供されるEnum型は、リッチな仕様であり、メモリ表現が複雑なのです。その為、実現方法を調査し、リポジトリのオーナーとこちらで簡単な議論を行いました。

しばらく淡々とissueに取り組んでいると、good first issueを書く機会を与えられました。

ただし、good first issueというラベルを行うには、権限が必要です。そこでついに、オーナーの方からコラボレータの招待メールが届きました!!!

スクリーンショット 2023-04-30 10.10.09.png

これまで、何度かOSS貢献をやったことはありましたが、コラボレータの招待経験がなかったので、これはとても嬉しく思いました。

OSS貢献をコツコツ続けるには

興味のあるOSSを見つけ、コツコツgood first issueに取り組むのが良いのかなと思います。慣れてきたら、思い切って難しそうなものにチャレンジするとそのOSSに対する理解度が深まっていく気がします。あと、どのOSSもテストコードの追加は必須になっているはずなので、テストコードは日頃から書いておきましょう。

コードを理解するコツ

ドキュメントを読むのはもちろんのことですが、テストコードを眺め、色々と入力をいじるといいです。「こういう入力の時は、こんな出力が得られるんだな。」という知見が得られます。OSSにおいて、テストコードは仕様書としての役割を持ちます。

終わりに

これからも様々なOSSに貢献していきたいと考えています。

22
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
3