こんにちは。GitLabの深淵を覗き、CI/CDの極致を追求するエンジニアです。
今日は「本番環境へのリリース」という、多くのエンジニアが冷や汗をかく瞬間を、「ただのスイッチの切り替え」という退屈な作業に変える方法を教えましょう。
GitLabの「Feature Flags(フィーチャーフラグ)」を使えば、新機能を「全ユーザーに一度にぶつける」という博打から卒業できます。特定ユーザーだけに新機能を公開し、問題があれば即座にシャットダウンする。この「カナリアリリース」の技術を、今日から現場のスタンダードにしましょう。
—
1. Feature Flags とは何か?:あなたの武器庫の「安全装置」
初心者の方がまず理解すべきは、「デプロイ」と「リリース」は全く別の概念であるということです。
- デプロイ: コードをサーバーに配置すること(物理的な移動)
- リリース: ユーザーがその機能を使える状態にすること(論理的な公開)
Feature Flagsは、この「リリース」のタイミングをコードから切り離し、GitLabの管理画面から制御可能にする仕組みです。これを使えば、「バグがあっても、コードを戻す(Revert)ことなく、スイッチ一つで元に戻せる」という、最強の安全装置が手に入ります。
—
2. 最初のセットアップ:Unleashとの融合
GitLabは、フィーチャーフラグ管理のデファクトスタンダードである「Unleash」をバックエンドに統合しています。複雑な設定は不要です。まずは以下の手順で環境を整えましょう。
手順①:GitLabでフラグを作成
1. GitLabプロジェクトの左サイドバーから [Deployments] > [Feature Flags] を選択。
2. [New feature flag] をクリック。
3. 名前(例: `new-dashboard-ui`)を決め、作成します。
手順②:クライアントライブラリのインストール
アプリケーションコード側でフラグを制御するために、ライブラリが必要です。今回は Node.js の例でいきましょう。
プロジェクトにUnleashクライアントを追加
npm install unleash-client
—
3. HelloWorld:コードへの組み込み
ここが最も重要な「精度高い実装」の肝です。コード内で「フラグがオンなら新UI、オフなら旧UI」という条件分岐を書きます。
const { initialize } = require(‘unleash-client’);
// GitLabのFeature Flags設定画面から取得したAPI情報を入力
const client = initialize({
url: ‘https://gitlab.com/api/v4/feature_flags/unleash/
appName: ‘my-production-app’,
instanceId: ‘
});
// 新機能の実行ロジック
function renderDashboard(user) {
// ここが魔法のスイッチ!
// ‘new-dashboard-ui’ というフラグがオンかどうかを確認
if (client.isEnabled(‘new-dashboard-ui’, { userId: user.id })) {
return “新UI:洗練されたダッシュボードを表示”;
} else {
return “旧UI:安定したダッシュボードを表示”;
}
}
ここがポイント: `userId` を渡すことで、「特定のユーザーIDを持つ人だけに公開する」という制御が可能になります。これがカナリアリリースの鍵です。
—
4. カナリアリリースの実践戦略
全ユーザーに公開する前に、まずは自分自身やベータテスターだけに公開しましょう。
1. GitLabのFeature Flags設定画面で、対象のフラグをクリック。
2. [New strategy] を選択。
3. [User IDs] を選択し、自分のユーザーIDを入力して保存。
4. この瞬間、世界中であなただけが新機能を見ることができます。
もしここでバグが発生しても、GitLabの画面で「Disable」ボタンを押すだけで、世界中のユーザーには何事もなかったかのように旧UIが表示され続けます。 これが「キルスイッチ」の力です。
—
5. 現場で役立つ「極限の知見」:運用の極意
最後に、伝説的なエンジニアとして一つだけ忠告を。
- フラグは「借金」である: フィーチャーフラグは便利ですが、放置するとコードが「if文だらけのスパゲッティ」になります。フラグを導入したら、必ずJiraやGitLab Issueに「フラグ削除」のタスクを紐付けてください。完全にロールアウトしたら、即座にコードからフラグを削除して消し込むこと。 これが、クリーンなコードを保つ唯一の道です。
- モニタリングと同期せよ: フラグを切り替えた瞬間、SentryやDatadogといった監視ツールでエラー率が跳ねていないか確認する習慣を。GitLabの機能と監視ツールを組み合わせれば、バグが発生した瞬間に自動でフラグをオフにする自動化も可能です。
—
どうでしょう。これで、あなたのリリースは「祈るもの」から「制御するもの」に変わりました。
開発プロセスをコントロール下に置くことは、エンジニアとしての自信に直結します。ぜひ、今日からあなたのプロジェクトで試してみてください。
何かあればいつでも聞いてくださいね。あなたのコードが、より安全で、より速くデリバリーされることを応援しています!