PHP
Rails
Gem
サービス

PHPerがrailsで本格的にwebサービスを作ったよ!

More than 1 year has passed since last update.

サービスを作ってローンチしたよ!ということで、

使っていたものを軽く紹介しようと思い、

投稿させていただきました!

もともとPHPをやっていまして、今回rails使いましたので、

PHP使っていて、rails興味ある人、

これからwebサービス作る人の少しでも参考になればと思います。


作ったもの

Teamlancer というIT系サービス作りました。

クラウドソーシングに似ていますが、

プロジェクトチームに参加という切り口で、

やりがいを重視してお仕事を受けることができます。

クラウドソーシングの問題点にフォーカスしてるため、

フリーランサーなどの受注側はシステム手数料とか仲介料とか全くなく、無料で利用することができます。

現状は大きく特徴的な機能はまだありませんが、頑張ってます。

フリーランサーの環境が良くなるといいなあと本気で思ってます。


なぜrailsを使ったか

もともとPHPerな私ですが、単純な理由としてモチベーションもありますが、

やはり開発速度が速いからが重要だと思ってます。

特に少人数のチームでは制作にかけれる工数も少ないので、

如何にプロダクトを早くリリースするか、工数をかけないかが重要になってきます。

そこで今回は優秀なgemやintegrationが揃っているrailsにしました。

言語的に記述量が少ないのもそうですが、コミュニティが活性化しているのが開発速度にとても貢献してくれたなと思ってます。


railsを使用してみて

もともとweb開発をやっていたので、そこまで抵抗ありませんでした。

基本的にMVCの考え方も同じ。

また、Laravelを愛用しており、コンポーネント志向のお陰で、

スムーズにrubyのオブジェクト志向に移行できたかなと思います。

少し時間がかかったのは、rubyの型宣言(タイプヒンティング)がないこと。

ダックタイピングはやはりPHPerからすると非常に不安でしたが、

開発速度が上がること、テストを習慣づけすれば、

特に大きな不安でもなくなりました。

でもタイプヒンティング的な機能はほしいので、ruby3に期待してます!


使用したgem

使用感が良かったものだけ羅列していきます。


carrierwave

画像アップロード用gem。

S3を利用しているのですが、tempファイルもS3にアップロードできるのが

意外と便利でした。

フォームエラー時に画像消えちゃうので。


enumerize

enum使うときにrailsのenumよりも柔軟性があります。

とても便利です。


draper

viewレイヤーのメソッドをまとめるときに、

モデルに書きたくなかったので、使ってます。

こちらはLaravelのviewcomposerを意識して採用しました。


pundit

権限周りはこちらで管理。

テストしやすく、シンプルなので使ってます。


sidekiq-cron

こちらは簡単に導入できるのと、運用工数を挙げたくなかったので、

キューと同じくredisにクーロンを一元化してます。


redis-object

こちらちょっと特殊な使い方をしております。

モデルに紐づく場合はそのまま使えばいいんだけど、

モデルに紐付かない処理は独自でclassを作って

Redisクラスの乱用を防いでます。


利用している外部ツール

初期プロダクトはお金あまりかけれないよね、ということで

無料のものを中心に紹介していきます。


bitbucket-pipeline

最近複数コンテナが立ち上げられるようになって、

railsのDBを利用したテストも簡単に実行することができるようになりました!

現状こちらでCIを回すようにしています。


sentry

あらゆるエラーを監視、通知してくれる優秀なツール。

slackに飛ばすようにして、すぐ感知してます。


docker

開発に利用してます。

docker-composeでredisやらDBやらwebやら立ち上げて、環境を汚さずにワンタッチで開発環境構築できます。

DBとかだけコンテナ化して、webサーバーはローカルで、、

なんてコトもできるようにしてあります。

あと、maildevというコンテナが便利で、letter-openerとかgem入れる必要なくなるので、おすすめ!!!


フォームオブジェクト

railsで一番悩んだのがここかも。form周りがきれいに書けない。

reformというgemもあるんですが、私は結局ActiveModelをincludeし、独自実装する形で落ち着きました。

バリデーションはformオブジェクトに全て委譲するやり方です。

ここは需要と時間があれば、また詳しく書きたいと思います。

ザーッとgemやツールなどを紹介しました。

思い当たること、今後使ってみて便利だったものがあれば

都度更新していきます(^o^)