株式会社シムックスイニシアティブ / Webエンジニア
既存Webサービスの海外版へのリプレイス
【プロジェクト概要】 新規プロジェクト。立ち上げ当初から参画。 既存のWebアプリの海外版(英語)を開発するプロジェクト。 海外版を作成するのに伴って、既存のWebアプリのソースコードを参考に既存のサービスと同等のものを開発した。 【プロジェクト規模】 3 ~ 4 人チームでのアジャイル開発(スクラム) 【使用技術詳細】 Linux, nginx, php-fpm, phpmd, php-cs-fixer, Laravel, PHP, Git, JavaScript, GitLab CI, jQuery, MongoDB, Redis, CodeIgniter 【担当業務概要】 - APIを用いたWebサービスの開発 - インシデント発生時の調査(ログファイルの分析) - クラウドを用いたインフラ構築 - DB設計(NoSQL) - CI/CDパイプラインの構築 - 静的解析ツール、及びフォーマッターの導入 【開発時に遭遇した課題】 海外版を作成する際に、既存のWebサービスのソースコードをベースとして開発を行うことになったのだが、既存のWebサービスに使用されている技術はレガシーな技術が多くなっていた。 また、ソースコードの書き方も非常にわかりにくく、プロジェクトにある程度精通しているエンジニアでなければソースコードを読むのが非常に辛いという状況であった。 加えて、LInter & Formatterが使用されておらず、インデントがバラバラになっているなどして非常にソースコードが読みづらくなっていた。 【工夫した点】 ## 技術選定について 海外版の開発では、新規でゼロベースから開発を行うことが可能であったので、比較的新しい技術スタックを用いてリプレイスを行うことにした。 以下、リプレイス技術のリストである。 ``` - CodeIgniter v2 → Laravel v5.6 - PHP 5.6 → PHP 7.4 - CentOS 5.6 → CentOS 7 - jQueryベースのソースコードは既存のものを使い回す。 ``` ## APIの実装について 新規でAPIを実装する際に、いくつかの点を意識して実装を行なった。 既存のAPIの仕様を正確に掴むために、既存のソースコードを読んで理解した仕様を、新規で作成するソースコードの中にコメントや疑似コードとして記述を行なった。既存のAPIの仕様に関して把握した内容をもとに処理の流れをコメントとして記載したのちに、実装に取り掛かった。 既存のAPIでは親クラスでグローバル変数を定義し、クラス内のあちらこちらのメソッド内で値を代入するようなソースコードになっており、グローバル変数がどのような使われ方をしているのか、 また、グローバル変数の中にどのような値が入っているのかを把握することが困難であった。 既存のソースコードの課題を踏まえて、グローバル変数を極力使わないように実装を行った。 クラス内の各メソッドについてもできる限りシンプルに保ち、後からソースコードを読んだ際に、それぞれの関数の挙動が理解しやすいような設計を行った。