kakakakakku blog

Weekly Tech Blog: Keep on Learning!

入門から実践まで CircleCI のノウハウが凝縮された「CircleCI 実践入門」を読んだ

9月に出版された「CircleCI 実践入門」を読んだ.素晴らしかった!なぜ CI/CD が必要なのか?という背景から,CircleCI 入門,CircleCI 実践まで,網羅的に解説されている.ボリュームは多く,読みごたえはあるけど,必要な箇所から読むこともできる.また「継続的デリバリー」「継続的デプロイ」の違いが明確に解説されているのも良かった.今回は著者の1人である CircleCI の Kim さん (@kimhirokuni) に献本をいただいた.ありがとうございます!出版おめでとうございます!

目次

  • 第1章「なぜ CI/CD が必要か」
  • 第2章「CircleCI の基本」
  • 第3章「環境構築」
  • 第4章「ワークフローでジョブを組み合わせる」
  • 第5章「実践的な活用方法」
  • 第6章「テストの基本と最適化」
  • 第7章「継続的デプロイの実践」
  • 第8章「Web アプリケーション開発,インフラでの活用」
  • 第9章「モバイルアプリ開発での活用」
  • 第10章「デスクトップ/ネイティブアプリ開発での活用」
  • 第11章「さまざまなタスクの自動化」
  • 第12章「Orbs の作成」

以下のサイトに正誤表が公開されている.他にも数点気付いたところは,記事の最後にメモ程度に残しておく.

gihyo.jp

前提

僕自身は CircleCI を2016年頃から使っている.プロダクション環境で使っていて,2018年頃には CircleCI 1.0 から 2.0 への移行も経験した.2019年頃からは,個人プロジェクトのみで使っている.よって,直近2年ほどはプロダクション環境で使っていないこともあり,本書を読みながら,キャッチアップできていなかった機能を知ることもできた.

次世代コンビニエンスイメージ (Next-generation Convenience Images)

今まで,お手軽にジョブを作るときは CircleCI の公式イメージ circleci/* を使っていた.本書を読んでいたら,第2章「CircleCI の基本」のコラムに「次世代コンビニエンスイメージ」と言われる cimg/* が紹介されていた.イメージサイズが軽くなり,キャッシュヒット率が高くなり,ダウンロード時間も短くなる.今後は積極的に使っていく.これは知らなかった!

  • cimg/base:stable
  • cimg/go:1.15
  • cimg/ruby:2.7
  • etc

なお,英語のドキュメントには cimg/* の紹介が載っているけど,日本語のドキュメントには載ってなく,翻訳されていなく残念だった.また画面左下の言語設定を押すと「該当ページ」ではなく「トップページ」に遷移してしまうのも残念だと思う.改善に期待!

永続化(ワークスペースとキャッシュ)

第4章「ワークフローでジョブを組み合わせる」には「ワークスペース」「キャッシュ」など,CircleCI をよく使っていても個人的に理解が曖昧になりがちだった機能の解説があって良かった.特に永続化のライフサイクルと範囲,そして上書きの可否など,ドキュメントに書いてあるとしても,わかりやすく解説されているのはとても嬉しい!

Docker イメージキャッシュ

第6章「テストの基本と最適化」には「Docker イメージキャッシュ」の解説もある.Docker イメージのビルドを高速化する戦略として,Docker Layer Caching (DLC) 機能も紹介されていて,実践的に学べる.有料プランで利用可能になるため,個人プロジェクトでは試すことができないけど,機能は覚えておきたいと思う.

サンプルプロジェクトの多さ

本書を読んで驚いたのは,多くのプログラミング言語やランタイムの解説をサポートしていることだった.TypeScript に Android に Windows まである.以下にリストを載せた.サンプルプロジェクトは全て GitHub に公開されているため,すぐに試せるし,データベースにマイグレーションを実行するなど,実践的な .circleci/config.yml は CircleCI を実戦投入するときの参考になる.

  • 第8章「Web アプリケーション開発,インフラでの活用」
    • 8.1 TypeScript
    • 8.2 Ruby (Ruby on Rails)
    • 8.3 PHP (Laravel)
    • 8.4 Java (Spring Boot)
    • 8.5 Docker
    • 8.6 Terraform
  • 第9章「モバイルアプリ開発での活用」
    • 9.1 Android
    • 9.2 iOS (macOS)
  • 第10章「デスクトップ/ネイティブアプリ開発での活用」
    • 10.1 Windows
    • 10.2 クロスプラットフォーム
    • 10.3 Unity

github.com

また個人的に少し前から Spring Boot に入門したいと思っていた.本書に「Java (Spring Boot)」のサンプルもあった.Mac で動かすなら PostgreSQL と組み合わせて ./gradlew bootRun を実行すると,簡単に Spring Boot を起動できた.

github.com

Quote として任意の文字列を登録するアプリケーションにアクセスできるようになる.今回はタイトルのところに「😃」を追加してみた.そのまま GitHub に push をすると CircleCI も正常に動く.

f:id:kakku22:20200928115607p:plain

また検証のために,JUnit で実装されたテストコードに確実にエラーになる Assert を追加して,GitHub に push してみる.すると,期待した通りに CircleCI でエラーになる.今回のように新しくフレームワークを学ぶときに,継続的インテグレーション環境まで揃っていると,実戦投入しやすく素振りできるように思う.便利!

f:id:kakku22:20200928115623p:plain

ブロガーに役立つ textlint 連携

第11章「さまざまなタスクの自動化」では,textlintreviewdog を組み合わせて自動的にドキュメント校正をするサンプルが紹介されていた.CircleCI はプロダクション環境じゃなくても使うことができ,ブロガーにも役立つ内容だった.うまく読者層を広げているように感じた.

Orb 公開

第12章「Orbs の作成」は良かった.今まで Orb を使うことはあっても,自分で作る機会はなく,試したいと思っていた.本書では,Orb 解説だけではなく,サンプル Orb を実際に公開できるように紹介されている.詳細は本書を読んでもらうとして,以下のように circleci CLI を使って,簡単に公開できる.

$ circleci setup
$ circleci namespace create kakakakakku github kakakakakku
$ circleci orb create kakakakakku/sample
$ circleci orb publish orb.yml kakakakakku/sample@0.0.1

公開した Orb は原則削除できないという仕様を理解してなく,今思えば「開発用 Orb」として公開すれば良かったと思う...😇個人プロジェクトで似たような YAML を書いているため,Orb 化を検討しながら,Orb 開発でも CI/CD を実現したり,もっと深く学びたくなった.

f:id:kakku22:20200928115652p:plain

誤植

  • 第7章 P.187 AWS ECRAmazon ECR
  • 第7章 P.187 AWS ECSAmazon ECS
  • 第12章 P.327 AWS S3Amazon S3

まとめ

9月に出版された「CircleCI 実践入門」を読んだ.CircleCI 初学者でも読めるし,実際に CircleCI を使っている人でも新しい学びがあると思う.それほどに網羅的に解説されている1冊だった.読みながら付箋だらけになってしまったし,今回紹介したポイント以外にもたくさん学べた.少しでも CI/CD や CircleCI に興味を持っていたら読んでみると良いと思う💡

関連記事

本書を読みながらすぐに試したくなった「Slack Orb」の検証記事は既に公開してある!

kakakakakku.hatenablog.com