ProtocolBuffersとは
ProtocolBuffersとは、簡単にいうと、言語や型定義が異なるアプリ(swift,java,kotlin)とサーバー(Railsなど)間の通信を、より簡単に、意思疎通ロスなく、便利にしてくれる仕組み、概念、ツール。
Googleが提唱したらしく、swiftでいうと、Himotokiライブラリなどを使って、サーバー側からJSONで送られてきたデータを、都度都度、型やmapなどを考えながら、手でコードを書いていかなければならない。そのコードや型が間違っていたらswiftだとアプリ落ちてしまうし。
そもそも、サーバー側とhttpで通信させないのは、当時スマートフォンなどPC以外のデバイスで、サーバーから送られてきたhttpなどのデータをブラウザを使って、形式通りにパースして表示させようにも、スペックが足りなくて重い。それほどブラウザという仕組みはW3Cなどの機関によって、がっちり固められて複雑で重い。
そのため、アプリという、もっとデータ→画面表示の部分を、俺たちで自由にやって、かつサクサク動くようにしようぜってのが、アプリの考え方。現代ではデバイスの性能が上がってきたので、Webアプリをブラウザで使う形でも問題なくなってきたが、元を辿ると、モバイルデバイス⇄サーバー間の通信形式がhttpでなく、JSON+アプリといった形なのはそういう理由。
型変換などの手書きしていたコードも自動生成?
サーバーサイドとのやり取りするデータ・型は、口頭で話し合うか、ドキュメントにまとめて、フロント(アプリ側)と共有しなければいけない。
それをみながら、ここではこのかたで、とHimotoki(デコード)を手動で書かなければいけなかった。
ProtocolBuffersを使うとそれが自動生成されるっぽい。なんかbinaryっぽい。
サブモジュールとは
サブモジュールはgitの仕組みであり、gitの各リポジトリ同士をハッシュキーによって、結びつけ、共有する仕組み。
アプリのリポジトリには、サブモジュールのリポジトリのハッシュ値のみの記載があり、それぞれ別リポジトリからデータをダウンロードしてくる。
サブモジュールのリポジトリが更新されると、それと紐づけられているiOS, Android, サーバー側のリポジトリは、そのハッシュ値を更新してコミットするだけで、最新版のサブモジュール(今回の場合はProtocolBuffers)のデータを正確に更新・同期でき、iOS, Android, サーバー間で、ドキュメントの作成や口頭での確認などなく、同じパースの仕組みを共有できる。
ドキュメントをオンラインで共有することの違いとしては、サブモジュールの仕組みを使った方が、色々とプログラムでのやり取りが便利だからだ。