背景

Kyoto.rb Meetup OSS Gate(2026-08-29開催、初心者向けOSS貢献体験ワークショップ)に参加するにあたり、Notionの過去メモを起点に「興味がありそう・実体験があるOSS」を洗い出した。

調査した候補

Ruby系(関西Ruby会議09準備の実体験ベース)

Salesforce / Slack-bot系

salesforcecli/plugin-deploy-retrieve のコードリーディング

src/commands/project/retrieve/start.ts(v4.1.2)を読み、sf project retrieve startの内部構造を確認した。

呼び出しフロー

sequenceDiagram
    participant Run as start.ts run()
    participant CS as ComponentSet
    participant MAR as MetadataApiRetrieve
    participant MT as MetadataTransfer(基底)
    participant Conn as connection.metadata (jsforce/SOAP)

    Run->>CS: retrieve(retrieveOpts)
    CS->>MAR: new MetadataApiRetrieve(options)
    CS->>MAR: start()
    Note over MAR,MT: start()はMetadataTransferから継承
    MAR->>MT: (継承) start()
    MT->>MAR: this.pre()
    MAR->>Conn: metadata.retrieve(requestBody)
    Note right of Conn: SOAP retrieve() 呼び出し
    Conn-->>MAR: AsyncResult(id)
    MAR-->>Run: mdapiRetrieve を返す

    Run->>MT: pollStatus()
    loop 完了まで
        MT->>MAR: this.checkStatus()
        MAR->>Conn: metadata.checkRetrieveStatus(id)
        Note right of Conn: SOAP ポーリング
        Conn-->>MAR: MetadataApiRetrieveStatus
    end
    MT->>MAR: this.post(status)
    MAR-->>MT: RetrieveResult
    MT-->>Run: retrieveResult

コードレビューで見つけた気になる点