SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

エンジニアのためのCI/CD再入門

モダンなCI/CDでは欠かせないワークフローを使った高度なビルド管理

エンジニアのためのCI/CD再入門 第3回


Orbs

 さて、ここまでの解説でワークフローの便利さが分かってもらえたでしょうか? ワークフローを使うと複雑なビルドの設定をパイプラインに分けて管理することができます。

 しかし、問題もあります。ワークスペースまで設定した.circleci/config.ymlはかなり大きくなってしまいました。また、よく見てみるとDockerイメージの設定や依存関係のインストール方法などがそれぞれのジョブで重複しています。

Dockerイメージの重複部分
docker:
  - image: circleci/ruby:2.4.1-node
    environment:
      RAILS_ENV: test
  - image: circleci/postgres:9.4.12-alpine
キャッシュ設定の重複部分
- restore_cache:
    key: v1-rails-demo-{{ checksum "Gemfile.lock" }}
- run: bundle install --path vendor/bundle
- save_cache:
    key: v1-rails-demo-{{ checksum "Gemfile.lock" }}
    paths:
      - vendor/bundle

 これまで重複する部分を共通化しようとするとYAMLの標準機能であるアンカーなどを使うことが多かったのですが、YAMLとCircleCIの制限でどうしても限界がありました。そこで、2018年11月にOrbsという新機能が追加されました。ここではOrbsと前回紹介したConfig Ver. 2.1を使って設定を共通化する方法を学んでいきましょう。

OrbsとVer. 2.1のおさらい

 前回の記事でも書いたように、CircleCI 2.0でビルド設定の柔軟性は格段に増したのですが、設定が重複して肥大化する問題がありました。そして、Ver. 2.1を使うとそれらを解決することができたのでした。

 しかし、実はVer. 2.1だけでは問題の半分しか解決できていません。例えば、依存関係のインストールコマンドを共通化できても、その設定は必ずプロジェクトごとに最低一度は定義しないといけません。似たようなプロジェクトが社内に複数あった場合、結局プロジェクト単位で同じような設定の重複が発生してしまいます。もし、この共通化した部分をCircleCIの外部で管理してどのプロジェクトでも使えることができれば、CircleCIの設定をライブラリのように使うことができるようになり、とても便利です。

 それを可能にするのが新機能のOrbsです。Orbsを一言で言うと、CircleCIの設定を再利用してさらにそれを自由に配布する仕組みです。

 Orbsを使うと他の人が書いたCircleCIの設定を自分のプロジェクトの.circleci/config.ymlに差し込むことができ、自分で最初から書く必要がありません。また、Orbsレジストリ上で誰でも公開することができ、他のユーザーが作ったOrbを誰でも使うことができます。

補足

 執筆の時点(2018年12月)ではパブリックなOrbしか作れませんが、今後は同じ組織のプロジェクトだけが参照できるプライベートなOrbsも作成できるようになる予定です。

 それでは、重複部分を取り出してOrbとVer. 2.1ですっきりさせましょう。最終的な.circleci/config.ymlこちらをご確認ください。

 既存のプロジェクトでOrbsを使用するためには "Enable Build Processing" という設定をオンにする必要があります。プロジェクトの右上にあるギアのアイコンから "Advanced Setting" で設定することができます。なお、新規のプロジェクトはデフォルトで有効化されているので、この手順は必要ありません。

build_processing
build_processing

 また、OrbsにはCircleCIが公式に認定するOrbsとそれ以外のサードパーティーOrbsがあり、後者を使うためにはさらに設定変更が必要です。左のナビゲーションバーから "SETTINGS" -> "Security" と行き "Orb Security Settings" でYesを選択します。

orb-security
orb-security

 それではOrbsの使い方を詳しく見ていきましょう。

version: 2.1
orbs:
  ruby-orbs: sue445/ruby-orbs@1.3.10
  • orbs:使用するOrbを宣言します。以下の命名規則に基づいています。
  • ruby-orbs:参照を簡単にするためのエイリアス
  • sue445:このOrbの作者
  • ruby-orbs@1.3.10:このOrbの名前とバージョン

 Orbsはセマンティックバージョニングを採用しています。@1.30のところがそれを表していて、この場合だとそれぞれ、メジャー1、マイナー3、パッチ30というバージョンだと分かります。Orbsを使うだけであればあまり意識する必要はありませんが、自分で作成する場合は必要な知識となるので詳しくは公式ドキュメントをご確認ください。

executors:
  ruby-executor:
    working_directory: ~/circleci-demo-ruby-rails
    docker:
      - image: circleci/ruby:2.4.1-node
        environment:
          RAILS_ENV: test
      - image: circleci/postgres:9.4.12-alpine

 この部分は前回の復習となります。Ver. v2.1のexecutorを使ってDockerイメージ周りの設定をruby-executorにまとめています。

- ruby-orbs/bundle-install:
    cache_key_prefix: v1-rails-demo

 それぞれのジョブを見てみると、今までbundle installを使った依存関係のインストールやキャッシュの設定が上記の2行に置き換えられていることが分かります。ruby-orbs/bundle-installと書くと最初に宣言したruby-orbsに用意されているbundle-installというコマンドを使うことができるようになります。

 ruby-orbs/bundle-install前回紹介したBuild Prpocessingの機能によりCircleCI上で実行時に展開され、キャッシュのレストアや依存関係のインストールをすべて行ってくれます。実際に実行されたビルドの設定を見てみると以下のように展開されているのが分かります。

processed_orb
processed_orb

 このようにsue445/ruby-orbsを使うことで、今まで繰り返して書かないといけなかった依存関係のインストールコマンドや、頭を悩ませて考えたキャッシュキーの設定をたった2行に置き換えることができるようになりました。今回は紙面の関係でOrbsの作成方法については解説できませんが、すでに日本のユーザーの方々が素晴らしい記事を書いてくださっているのでそちらに譲らせていただきます。

 Orbsレジストリには他にも便利がOrbsが公開されているのでぜひ見てみてください。

CI/CDとCircleCIの未来

 さて、ここまで駆け足で来ましたが、CircleCIを通してのCI/CD入門連載も今回が最終回となります。本当はまだまだ書きたいことがあるのですが、それは次のためにとっておこうと思います。ここまで読んでくださりありがとうございました。

 最後に筆者が考えるCI/CDとCircleCIの未来にについて書きたいと思います。この連載の最初にも書きましたが、近年のデプロイメント環境は急速に進化しています。また開発者側でもアジャイル開発のプラクティスは現場でどんどん広まっています。それらの環境を使って開発者がより早く、より安全に新機能をリリースするための橋渡しとしてCI/CDは今後さらに重要になっていくでしょう。

 CircleCIもどんどん進化しています。Orbsが登場したことで、今後CircleCIはパートナーやユーザーを巻き込んでCircleCIエコシステムを構築していきます。その目的はただ一つ、より簡単にCI/CDを導入することで世界中の開発者がもっと早く素晴らしいプロダクトを開発できるよう手助けすることです。

 日本でもその活動はすでに加速しています。今年の12月には日本語でのサポート開始や、ユーザー間で知見を共有するためのユーザーコミュニティも立ち上がりました。今後も継続して日本でCI/CDが広まるよう貢献していきたいと思います。

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
エンジニアのためのCI/CD再入門連載記事一覧

もっと読む

この記事の著者

金 洋国(CircleCI Japan)(キム ヒロクニ)

CircleCIで2.0などのプロダクト開発に携わった後、CircleCI Japanを立ち上げてからはTech Leadとして技術全般を担当。趣味は電動キックボードで日本で普及するように様々な活動をしています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/11306 2019/01/16 10:41

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー