RMS プロジェクト

RMSバックエンドの技術的なおはなし

更新日:

はじめに

 こんにちは、おひさしぶりです、awatakiです。
 今回はRMSも無事(?)リリースできたので、RMSのバックエンドで使用された技術に関する解説などをしていこうかなと思います。

tl;dr

  •  APIにはThriftっていうRPCフレームワークをつかってるよ
  •  DBはMariaDBをつかってるよ
  •  開発環境にはVagrantをつかってるよ
  •  開発言語はGolangだよ
  •  DDD(ドメイン駆動設計)を採用しているよ
  •  リリースされてるけど実装済機能は5割だよ

使用技術について

開発環境

ミドルウェア

RPC

DBの管理

テストツール

設計について

RMSではドメイン駆動設計という方式を取っています。
大学の履修は非常に複雑で依存が色々なところに張り巡らされているので柔軟な設計が可能なドメイン駆動設計を採用しました。

 セキュリティ上の理由から詳細なクラス図は書けませんが以下のような設計でモジュール化し、大幅なシステム変更に耐えうるシステムとなっています

ModelはRMS内部で使用する構造体の定義を行っています。
Thrift Modelではthriftで使用される 構造体がThriftによって生成されています。
Handle層ではThrift ModelとModelのキャスト(型変換)や、Module化されたものをAPIに沿う順序で実行していきます。
Module層ではHandlerから入ってきた値のバリデーションや、Repositoryが必要とする値への整形を行っており
Repository層ではDB(MariaDB)へのアクセスやトランザクションの管理、メモリ上に展開するデータのCRUD機能を実装しています。

主要技術について

Vagrant

仮想マシンを操作するためのラップコマンド。
同等の環境をRubyとshellによって全自動で用意することができ、環境による差異を無くすと同時に仮想マシンを使うことでホストマシンの影響を受けることがなく、本番環境に近いテスト環境でテストを実行することが出来ます。

Golang

Googleによって発表されたプログラミング言語でC言語の影響を大きく受けており、構造体プログラミングを採用しています。が、埋め込み継承やInterfaceによってオブジェクト指向ライクな書き方をすることができることも特徴です。
 この言語が採用された理由としては、ソフトウェア工房には初心者も多く在籍しており、以前Scalaを採用された際に、関数型やオブジェクト指向に全く馴染みのない人間が学習するのに大きなコストがかかることが判明し、大学の講義で学ぶC言語の構造体プログラミングを流用でき、かつオブジェクト指向ライクな記述ができるGolangが採用されました。

Apache Thrift

FaceBook社がApache財団に寄贈したRPCフレームワークで、APIの内容と構造体の定義を行うだけで通信部分のコードやそのインターフェースの自動生成を行ってくれるものになっています。
Thriftを使用することで大きく工数を削減することや、APIの定義を一目瞭然にすることが可能になっており、RMSの完成に大きく寄与しました。

うらばなし

 最初はバックエンドに人が居たんですけど、フロントエンドのタスクが人間不足で芳しくなかったのでヘルプに回ってしまい、後半のバックエンドは一人で設計して一人で実装していたので、少なからず闇が生まれてそうな気がしています。なのでバックエンドの開発に参加して分かりづらい実装を指摘してくれる人間が居ると助かったり助からなかったりします。
またRMSのマシンがDebianで動いているのは単純に僕の趣味だったりしたりしなかったり・・・
 また、本来実装する予定の半分も進んでいないので今後はどんどん機能実装を行っていく予定なので、これをみて興味を持った方は開発に参加していただけると泣いて喜びます(多分)(適当)

まとめ

  • RPCフレームワークはべんりでいいぞ
  • Golangは初心者でも分かりやすいのでおすすめ
  • RMS絶賛メンバー募集中です

むすびに

 次回のアップデートではユーザー機能の実装が大きなタスクとしてあります。ユーザー機能の追加によって自分の時間割を保存することが出来たり、次の次あたりのバージョンアップでは卒業要件などに対応するのではないのかなぁ〜と思います
 今後のアップデートは月に1度くらいのスパンで公開していきたいと思いますので楽しみに待っていただければとおもいます。
 では、開発が順調に行けば1ヶ月後。1ヶ月後くらいに反応が無かったら・・・ご察しください。

  • この記事を書いた人
  • 最新記事
awataki

awataki

インフラやってたりバックエンドやってたりします.

-RMS, プロジェクト

Copyright© ソフトウェア工房 , 2019 All Rights Reserved Powered by AFFINGER5.