オンラインコンパイラサービス CodeCandyを開発した話

はじめに

なかなか記事が書けなくて申し訳ありません。ようやくCodeCandyの紹介をします。 今回はCodeCandyを開発して気づいたこと、思ったことなどをまとめていけたらなと思います。
CodeCandyのURLはこちら ↓

https://codecandy.tomosse.work

オンラインコンパイラCodeCandyとは

Web上で、プログラムの作成から実行まで行うことのできるアプリケーションです。 機能としては、自由にコーディングする機能と、問題に取り組む機能の2つが存在しています。 厳密には、オンラインコンパイラ+オンラインジャッジシステムといったほうが正しいのかもしれません。 特徴としては、以下のことが上げられます。

  • ブラウザ上でコーディング、実行ができる
  • 問題に取り組むことも、自由にコーディングすることもできる
  • 複数の言語に対応している
  • Twitterアカウントがあればすぐに利用できる

構成

Ruby on Railsを利用して開発しました。 主にサーバサイドの開発に力を入れています。 サーバサイドはRailsを採用し、DBはPostgreSQL、実行モジュールにDockerを採用しました。 また、複数のコンテナを利用するので、管理を簡単にするためにdocker-composeを採用しました。 コンパイラモジュールはREST APIとして提供しているのでサードパーティ製のアプリも開発できるようにしています。 フロントエンドはERB+jQueryといった一番使い慣れたものを利用しました。

技術の採用理由

CodeCandyを作成する上で一番意識したことは、開発速度です。 じっくり開発するというよりも、素早く目標としている機能を実装できることを意識しました。 そこで今回は自分が一番使い慣れており、迅速に開発が行えるRailsを採用しました。 また、フロントエンドの機能を手軽に作れるGemが、豊富にあるのも大きなメリットだと感じました。 PostgreSQLを採用した理由も自分が一番使い慣れているからといったのが一番大きな理由です。 MySQLを採用するかも悩んだのですが、あまりDBでアプリの重さに影響がでるような設計にはならないと感じたので使い慣れているPostgreSQLを採用しました。 コンテナ周りは、LXDにするかDockerにするかで悩んだのですが、過去に似たようなシステムをDockerを用いて作ったというのと、今後Dockerを用いてアプリをデプロイできるようにしたいと思っていたので、 今回はDockerを採用しました。 フロントエンドはソースの多さと友人からアイデアや意見を貰いやすい用、ERB+jQueryを採用しました。

開発してみての感想

開発してみて、やはりRailsはとても開発速度が速いと感じました。 作成したい機能をかなりの速度で開発することができました。 またこれは開発してみて思ったことなのですが、意外とRubyでDockerコンテナを操作しやすいことに驚きました。 CodeCandyでは、作成したAPIからコンテナを操作する機能がとても重要となってくるので、この技術を採用してよかったと感じました。

運用してみての感想

運用してみて一番感じたことは、ユーザにとって一番良いプログラムと開発者が良いと思って作成したプログラムは必ずしも一致しないといったことです。 やはりこのあたりのことは、サービスとして展開して、他の人に使ってもらわないとわからないことだと強く思いました。 また運用目線と開発目線ではアプリケーションに対する見方がかなり変わるイメージも持ちました。 今までは開発者視点からしかあまり技術を見ることができていなかったのかなと思いました。

今後の展開

今後の展開としては、テストコードをより揃える、実行モジュールを拡張しやすいものにする、より活用しやすいようログインの方法を増やすことなどを重点的に行っていきたいと思っています。

まとめ

このCodeCandyを開発、運用してから自分自身の技術力はかなり上がったと感じています。 これからもCodeCandyをよりよくすることはもちろん、他のサービスも作成してみたいと思います。