Open8
GitHubみたいなサービスを今一から作るならどの言語・フレームワークを使うか
Webアプリとしての表層のフロントエンドや、主となるバックエンドは正直いってどんな言語・フレームワークでも良いと思う。ただ「GitHubみたいなサービス」のキモはやはりGitリポジトリの取り扱いになるので、その部分のライブラリに良いものを選ぶことが重要となる。ちなみにGitBucketの場合はJGitを使っている
Gitライブラリは多くの言語ではlibgit2のラッパーを使うことになるでしょう。JVM系の言語を選んだ場合はJGitベースになるでしょう
- そのラッパーライブラリが元のlibgit2の機能をどこまで網羅しているか
- その言語固有のパラダイムなどにどれだけフィット出来ているか
- 開発や利用の活発さ
この辺りが評価ポイントかな、と。最後の一つはどんなライブラリにも言えることだろうけど
libgit2, JGit以外の選択肢は多分、Javascript系言語でisomorphic-gitが出てくるくらいかな。
Rustでの実装みたいな、さすがにサービスの基盤に使うまでにはちょっと・・・っていうものなら他にもあるだろうけど
なんとなくお気持ちを垂れ流すと、このgitライブラリの部分は本当に面倒くさくて、大変。更に言えばそのライブラリを使ってGitリポジトリを取り扱うコードを書いたとして、次はトランザクションの問題が出てくる。ユーザとかリポジトリ名とかPull RequestとかはRDBMSなりなんなりを使って別で管理しているだろうから、データストアが2つ以上になってしまうわけで。タイミングによって悪いケースで「PRをマージしたことになってるけどGitリポジトリには反映されてない」とか、「マージされてないはずが、Gitリポジトリは反映されている」とかなるともう大変・・・(GitBucketでもゴニョゴニョ・・・)
というわけで、「Gitライブラリを中心として選択すべし」というのが回答ですねー。おしまい!