エンジニアが増えるまでにやったこと


モノグサのエンジニアの井岡です。私は2019年に4人目のエンジニアとして入社しました。
将来、エンジニアがどんどん増えることが予想され、その際に行った開発環境の共通化およびLintの導入についてご紹介します。(ありがたいことに現在は21人にまで増えました!)

開発環境の共通化 構築を時短に

Monoxerの主な開発対象としてiOSアプリ、Androidアプリ、Webアプリ、APIサーバーの4つのプロジェクトがあります。この他にも開発環境を構築するためには、nginx、Redis、MySQL等のインストールや当社が独自に開発した補助サービスのインストールが必要でした。特に独自開発の補助サービスは、環境にインストールされているライブラリのバージョン違いによるエラー等が多発し、すべての構築が完了するまで1週間程度かかるような状況でした。

そこで、よくある対応ではありますが、開発環境で動作するようにコンテナ化を進め、Docker上で簡単に起動できるようにしました。また、 docker-compose-waitを使用し、MySQLの起動後に補助サービスが起動するようにしています。この対応により、新しく入ったエンジニアの開発環境構築を2日程度にまで短縮することができました。

Lintの導入

エンジニアが増えると様々な記法で実装される可能性が高くなります。コードレビュー時に指摘することも可能ですが、プロジェクトごとにLintの導入を進め、自動的に検出できるようにしました。

例えば、iOSアプリのプロジェクトにはSwiftLintを導入しました。デフォルトのルールおよびオプトインのルールを有効にした状態だと、エラーが約700件、警告が約23,000件検出されました。その後、当社として必要なルールを見極め、不要なルールの無効化やLintへの対応を実施し、エラー・警告ともに0件な状態にできました。 (以下に示すようなコードを許容するために、一部ルールを無効化しています。)

【enumマッチ時のAssociated Value省略】

switch foo {
case .bar(_): break
}

【画像・色リテラルの使用】

#colorLiteral(red: 0, green: 0, blue: 0, alpha: 1)

Lintを導入した後も、定期的にチェックしないとソースコードの品質を維持することはできません。そのため、CI*1のステップにLintによるチェックを追加し、エラー時にはビルドを失敗させることで、プロダクションのブランチにマージできないようにしています。

おわりに

開発環境の共通化やLintの導入によって、新しく入ったエンジニアがスムーズに開発を開始でき、また品質の高いソースコードを維持できています。継続して開発環境およびLintのルールの見直しを行っています。

他にもソースコードの品質向上のために、フォーマッタの導入を検討しましたが、自動でフォーマットされた結果が読みやすいとは限らないため見送りました。現在はLintが許す範囲でエンジニアにフォーマットを任せています。

モノグサ株式会社では一緒に働く仲間を募集しています。少しでも興味を持っていただけた方はぜひお話しましょう!
careers.monoxer.com

*1: iOSアプリのCIにはbitriseを使用しています。これにはインテグレーションとしてSwiftlintが用意されているので簡単にLintチェックのステップを導入できます。