1. コードに変更を加える
前にも言ったけど、ソフトウェア開発ってのはちっちゃな変更をコードに加える作業の繰り返しだよね。この作業は何十年も何百万ものプログラマーによって行われてきて、その結果、徹底的にデバッグされたり、標準化されたり、さまざまな方法でフォーマル化されたりしてる。
コードを管理するための専用ツールがあって、それが Git だ。 Gitは分散型バージョン管理システム だよ。これはただコードを保存するだけじゃなくて、すべての変更履歴を追跡して、プログラマー同士が干渉せずに共同作業できるようにしてくれる 🤝。
Gitを使えば、プロジェクトのいろんなバージョン(ブランチ)を作ったり、変更履歴を完全に保存したり、過去の任意のポイントに戻ったりもできる。まるでコードのタイムマシンみたいだね!Gitは変更の統合やコンフリクト解決もサポートしてるから、今やチーム開発のメインツールになってるよ 👩💻
2. プロジェクトをビルドする
テストやサーバーへのアップロードの前に、プロジェクトをビルドしなきゃいけない。
🏗️ ビルドは、ソースコードをコンパイルして実行可能なプログラムやその他の起動可能なフォーマットに変換する作業だ。テストやデプロイも含まれることが多い。これはソフトウェア開発の重要なステップで、アプリケーションを使える状態に仕上げるためのものだ。
ビルドは単なるコンパイルだけじゃなくて、複数のファイルをまとめたり、最終的に配布用にパッケージ化したりもする。ビルド後には何十、何百ものファイルができていて、それらをサーバーにアップロードしなきゃいけないこともある。
ビルドツールにはいろいろあって、例えば:
- ☕ Maven と Gradle – Javaのプロジェクトで依存関係管理やビルドに広く使われてる。
- 🐜 Apache Ant – もう一つのJava向けビルドツールで、スクリプトの自由度が高い。
- 🖥️ MSBuild – Microsoft Visual Studioで作ったプロジェクトのビルドに使われる。
- ⚙️ Make – 伝統的なビルドツールで、Makefileを使ってルールを定義。CやC++のプロジェクトでよく使われる。
- 🌐 Webpack – JavaScriptアプリのビルドに特化。依存関係やモジュール管理を行う。
- 📜 Gulp と Grunt – ウェブ開発のタスク自動化ツール。ファイルのミニファイやSCSSのCSSへの変換などに使われる。
もちろん、もっと高レベルなビルドツールもある。次に紹介するよ。
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) は、変更を常にメインブランチにマージして、自動でテストやデプロイを行う仕組みだ。これにより、バグを早く見つけて修正できるし、開発のスピードもアップする。
一番ポピュラーだけどちょっと古いのが Jenkins。小さな会社なら、ほぼ確実に使われてる。
🤖 Jenkins は、CI/CDのための自動化ツールで、ビルドやテスト、デプロイまでを自動化できる。コードの品質向上と開発スピードアップに役立つ。
大きな会社だと、他にも選択肢がいくつかある:
- 🚦 TeamCity – JetBrainsの商用CIツール。さまざまな開発環境やテスト環境と深く連携できる。
- 📝 GitLab CI – GitLabに内蔵されたCI/CD。YAMLファイルで設定できる。
- ☁️ CircleCI – クラウドベースのCI/CDサービス。自動テストやデプロイに対応。
- 🦑 Travis CI – 早くからあったクラウドCIサービス。GitHubとよく連携する。
- 🎍 Bamboo – Atlassianの製品で、JiraやBitbucketと連携しやすい。
これらを使いこなす必要はない。普通はDevOpsの専門家が設定してくれるから、あなたは「Jenkins」「CI/CD」「コンティニュアスインテグレーション」って言葉を知っておけばOKだ。
4. プロジェクトをサーバーにデプロイする
コードを書き終わったら終わりじゃない。次はサーバーに配置して動かす必要がある。これをデプロイ(deploy)って呼ぶ。ウェブアプリをインターネット上に公開して、ユーザーがアクセスできる状態にする作業だ 🚚。
具体的には、プロジェクトのファイルをサーバーに転送したり、サーバーの環境設定やデータベースの準備、依存関係のインストール、ネットワークやセキュリティの設定も行う。
さて、あなたのコードはサーバーに届くと思う?誰かがアップロードしてくれる?それともSSHでリモートサーバーに接続して、ファイルを送って設定する?安心して。 今はそんなことしなくていい。なぜなら、Dockerがあるからだ。
🐳 Docker は、コンテナを使ったアプリの開発・配布・実行プラットフォームだ。Dockerはアプリとその依存関係、環境を一つのコンテナに詰め込むことで、どこでも同じ環境で動かせるようにしてくれる。これにより、開発からテスト、本番まで一貫した動作が保証される。
Dockerを使えば、プロジェクトをDockerコンテナにパッケージングできる。これは仮想マシンみたいなものだ。
Dockerを「仮想マシン」と呼ぶと叩かれることもあるけど、実質的にはDockerコンテナは仮想マシンのように動作する。ただし、ずっと軽量で高速だ。
要するに、Dockerコンテナは仮想マシンの「軽量版」みたいなものだ。仮想マシンはOSやハードウェアの完全コピーだけど、DockerはホストOSのカーネルを共有しているから、より軽くて速い。
Dockerを使ったデプロイは、作業をめちゃくちゃ簡単にしてくれる。アプリをDockerコンテナに詰めておけば、どこでも動かせるし、環境の違いによるトラブルも減る。コンテナを増やしたり減らしたりも簡単だ。みんなDockerに乗り換えてるのは、便利で超簡単だからだよ。
GO TO FULL VERSION