RAKSUL TechBlog

ラクスルグループのエンジニアが技術トピックを発信するブログです

オンラインデザインのPHPからRailsへのリプレイス

こんにちは。サーバサイドエンジニアを担当している新卒のカグラです。

今回はオンラインデザインのRailsへのシステムリプレイスについて紹介します。

オンラインデザインとPHP

ラクスルでは、入稿データを無料でデザインできるサービス「オンラインデザイン」を提供しており、たくさんのお客さんに使ってもらっています。

オンラインデザインは、数年前にPHPで作られたアプリケーションです。そのため当時のレガシーな設計や、今後のスケールを考えた時に複数人でパフォーマンス高く運用するのが難しそうな設計が多くあったため、現在PHPの完全廃止とRailsへのリプレイスを進めています。

スムーズに開発を進めるために

オンラインデザインの多くのプロセスは、ajaxを使った非同期処理で作られており、現在50個ぐらいのAPIがあります。呼び出し元のフロントもjQueryを使った複雑な処理が多い状態でした。
使ってくれているお客さんがいる中で、サーバーサイドとフロントエンドとの複雑な処理を一緒に移行してしまうと、デザインのデータ内容の互換性などで思わぬ障害を招いてしまう危険性が高くなるため、一度に両方を修正するのではなく、まずサーバーサイドのロジック部分をRailsのAPIとして開発し、PHPから呼び出すようなプロセスにしました。

このように進めていますす。

① 元の状態

② PHPのAPIロジックがRailsのAPIに置きかわった状態

③ リプレイス完了状態

今RailsのAPIの開発はほとんど終わりました。開発当初ほぼ一人でPHPの立ち上げを行っていたこともあり、複数人での長期運用には向いていない設計となっていたため、今回開発中に作業コンフリクトなどいくつかの問題が起こりました。例えば、PHPを一部修正して、一般的なRailsのAPI呼び出し処理手順をまとめたAbstractクラスを作ってextendするようにして回避したりしました。
また、万一RailsのAPIレスポンスに問題があった時などに、元のPHPの処理にfallbackすることができるようにもしています。
以下のようになります。

abstract class CallApi  {
    abstract function internalApi($params, $endpoint);
    abstract function checkFallback($response);
}
class DesignService extends CallApi {
    function internalApi($params, $endpoint) {
        ...........
        return checkFallback($response);
    }
    function checkFallback($response){
        return $response.error
    }
}
$response = DesignService->internalApi($params);
if $response.error {
   fallBack();
}
function fallBack (){
   //fallbackした処理
    .........
}

 

英語でstand-up meetingは社内で唯一

オンラインデザインチームは国際化が進んでいて、日本人よりもアジア諸国からきたメンバーのほうが多いです。そしてベトナムのチームと一緒に開発しながら、英語でコミュニケーションを取ることを楽しんでいます。自分も外国人として、英語であろうと日本語であろうと母語ではないので、時々難しい感じがするんですが、これまで自信のなかった英語のレベルも時間が経つにつれて上がってきた上に、それぞれの文化に触れて積極的にコミュニケーションを取れることはとても楽しいです。

まとめ

Welcome to join our global team!