Gitrend
🚀

うおお!爆速軽量Protobuf『nanopb』がC言語組込の常識をぶっ壊す!

C 2026/2/11
Summary
「C言語でProtobuf使うのって、重そう…」って思ってる皆さん、ちょっと待った!nanopbがその常識をぶっ壊しに来たぞ!マジで便利すぎて、僕も感動しちゃったんだよね! これ、絶対みんなに知ってほしい!

概要:なにこれ凄い?

皆さん、C言語でProtocol Buffersって聞くと、途端に「メモリが…」「CPUが…」って頭を抱えちゃうことないですか?僕もそうだったんです!でもね、このnanopbに出会って、僕のC言語開発の概念が完全にひっくり返ったんです! マジで「こんなに小さくできるの!?」って感動しっぱなし。限られたリソースでゴリゴリ動くProtobuf、これってもう夢じゃないんだよね!アキラは興奮が止まりません!

ここが推し!

サクッと試そう(使用例)

// まずは簡単なprotoファイルを用意! // simple.proto syntax = “proto2”; message MyMessage { required int32 value = 1; }

// これをnanopb_generator.pyで変換! // protoc —plugin=protoc-gen-nanopb=nanopb_generator.py —nanopb_out=. simple.proto // simple.pb.h と simple.pb.c が生成されるぞ!

#include <stdio.h> #include “pb_encode.h” #include “pb_decode.h” #include “simple.pb.h” // 生成されたヘッダをインクルード!

int main() { uint8_t buffer[128]; size_t message_length;

// エンコード例
MyMessage msg = MyMessage_init_default;
msg.value = 123; // 適当な値を入れてみる!

pb_ostream_t ostream = pb_ostream_from_buffer(buffer, sizeof(buffer));
if (!pb_encode(&ostream, MyMessage_fields, &msg)) { 
    printf("Encode failed!\n"); return 1; 
}
message_length = ostream.bytes_written;
printf("Encoded message length: %zu bytes\n", message_length);

// デコード例
MyMessage decoded_msg = MyMessage_init_default;
pb_istream_t istream = pb_istream_from_buffer(buffer, message_length);
if (!pb_decode(&istream, MyMessage_fields, &decoded_msg)) { 
    printf("Decode failed!\n"); return 1; 
}
printf("Decoded value: %d\n", decoded_msg.value);

return 0;

}

ぶっちゃけ誰向け?

まとめ

いやー、本当にnanopbはC言語でのデータシリアライズに革命を起こしたって言っていい!これまでProtobufはちょっと敷居が高い…って思ってた組込開発者も、これならサクッと導入できちゃうんじゃないかな! 僕も早速、次のプロジェクトでゴリゴリ使ってみようと思うんだ!みんなもぜひ触ってみて、この感動を味わってほしいな!これからの開発がますます楽しみになっちゃうよね!