寄稿エージェント:宮田 隼輔
エンジニアの働く環境には、「レガシーな環境」「モダンな環境」と呼ばれるものがある。各環境の特徴を理解しておかないと、理想とのギャップに苦しむ可能性があるので注意が必要だ。理想の将来像にもよるが、エンジニアとしてのキャリア構築をする上で、できる限りモダンな環境の職場を選ぶのが好ましい。
そこで今回は、レガシー環境とモダン環境のそれぞれの特徴を解説する。
レガシーな環境とは
一般的にレガシーな環境は、使用している技術やツールが古く、技術の進化や移り変わりについていけていない開発環境のことを指す。例えば、大企業の業務ソフトや政府・金融系の案件などに多く見受けられる。
レガシーな環境の具体的な特徴としては、以下の内容が挙げられる。
- ソース管理がGitではない
- タスク管理をエクセルで管理している
- 開発言語が古い(COBOLなど)
- コードレビューを行っていない
ソース管理がGitではない
業務の効率化に欠かせないGitが導入されていない場合、レガシーな環境と判断して問題ないだろう。
Gitとは、ソースコードのバージョン管理をするツールだ。不具合が起きた際に古いバージョンに戻したり、複数人で開発する際に履歴を共有できたりと非常に重宝する。
ソース管理ツールは、GitのほかにもMercurial、Subversion(SVN)などがあるが、現状ではGitが一強だ。チームでの開発において主流のGitが導入されていないなら、開発環境としてやや遅れているだろう。
タスク管理をエクセルで管理している
タスク管理をエクセルで行っているマネージャーがいたら、そこはレガシーな環境だと判断して間違いない。「エクセルの更新を共同で行って、ロック解除待ちをしている」などの状態であれば、生産性が低いためモダンな環境とは言えない。
モダンな環境なら、基本的にOSS(オープンソースソフトウェア)を活用している。タスク管理の有名どころ「Redmine」は、オープンソースのプロジェクト管理ツールでガントチャートの作成からアジャイル開発まで対応でき、開発プロジェクトとしてよく使われる。
また、プラグインなどでカスタマイズ可能なため、ツールを使いこなすスキルはあらゆるIT企業で役に立つだろう。
開発言語が古い(COBOLなど)
開発言語でCOBOLなどを利用していたら、それはレガシーな開発現場だと認識して間違いない。そのほかにも「Javaだけで開発すること」などに固執している場合は、少し疑いを持ったほうがよいだろう。
近年、Webアプリ領域では「Ruby on Rails」といった開発言語が普及している。さらに、自動化やAI分野では「Python」、APIサーバの開発では「Go」のような軽量な言語が積極的に活用されている。
このような言語を活用できていないプロジェクトは、レガシーな環境である傾向が強いだろう。
コードレビューを行っていない
いまだにコードレビューを行っていない会社もある。
開発者が一人しかいない、あるいは特定の言語を使える人材が一人しかいない場合は難しいが、複数人でのコードチェックは保守性や統一性を高めるために必須な作業である。
特に理由もなくレビューを行っていない環境は、レガシーな環境である可能性が高い。
モダンな環境とは
モダンな環境とは、新しい技術やツールを積極的に取り入れている開発環境を指す。Web系と呼称されるような企業は、モダンな環境であることが多い。
モダンな環境の具体的な特徴としては、以下の内容が挙げられる。
- Linter、Formatterを使用している
- パッケージマネージャーを使用している
- Dockerを活用している
- CI/CDを行っている
Linter、Formatterを使用している
Linterはソースコードの構文チェックなどを担うツールで、Formatterはインデント数やif分の改行位置などのソースコードを自動整形してくれるツールである。
最近では、VSコードのエディタに組み込んでコードを書いている途中で、ファイル保存と同時に自動でLinterやFormatterを実行するスタイルが浸透している。
これらを採用している場合は、モダンな環境だと考えてよいだろう。
パッケージマネージャーを使用している
パッケージマネージャーとは、貯蔵庫となる1つのリポジトリ内で使用するライブラリやパッケージを管理するツールである。
開発言語別での主流のパッケージマネージャーは、以下の通り。
- JavaScript:npm、Yarn
- Python:Pipenv
- PHP:Composer
1つひとつのパッケージをローカルにインストールするのではなく、パッケージマネージャーで管理することは、モダンな環境において必須の要素である。
Dockerを活用している
Dockerとは、コンテナ型のアプリケーション実行環境である。
今やアプリケーション開発において、Dockerは必要不可欠なツールといっても過言ではない。
もしDockerを使用していない場合、レガシーな環境でないか疑うべきだろう。
各開発者が外部サービスを個人のローカル環境にインストールし、開発環境を構築することは非常に煩雑な作業だが、Dockerを活用すれば簡単に解決できる。
特にテスト工程の効率化には欠かせないため、モダンな環境であればDockerを使用している可能性が高いと言える。
CI/CDを行っている
CIは「継続的インテグレーション」の略であり、ソースコードがリモートリポジトリ(※1)にアップロードされる際、毎回ビルド(※2)とテストが実行されるプロセスである。
※1 リモートリポジトリ:Gitなどの分散バージョン管理システム
※2 複数のファイルを1つにまとめ、実行可能なファイルを作成する作業
CIでは「そのアプリケーションが想定通りに動作するか」を自動的に検証できるので、問題の発見・対処が楽になるのだ。
また、CDは「継続的デリバリー」の略である。
これは、CIによるビルドとテストが成功した場合、アプリケーションのデプロイ、つまり本番環境へのリリースを実行することである。
CI/CDは、CircleCIなどのツールをGitHubと連携させて使うことが多い。
これらを積極的に取り入れていればモダンな環境だと言えるだろう。
エンジニアのキャリア構築に適したモダンな環境
エンジニアとしてキャリアを構築するにあたっては、できる限りモダンな環境で開発経験を積んだほうがよい。
ただ、全員がモダンな環境ですぐに働けるとは限らない。
場合によっては多少レガシーな環境でも開発経験を積むことで、その先のキャリアが開かれることもある。
これからエンジニアを目指す方、もしくは現在エンジニアの方でキャリアに迷っている場合は、理想のキャリアに近づけるためにもぜひ転職エージェントに相談してほしい。
エージェントなら「どういったキャリアを取ればよいか」「理想のキャリアのために何を勉強すればよいか」など、正しい情報を得ることができるはずだ。