pavlog

ウェブエンジニアがあれやこれやを書きます

【開発環境】dotfilesでも継続的にインテグレーションする

ci-log

今自宅で使っているMacBook Pro 15インチが2016 Lateです。

最近キーボードがチャタリングしたりして辛くなってきています。

当時価格、確か35万円とかで高いなと思いつつ買いましたが、今でも高いなと思っています。

しかし次回MacBook Proの発表があれば間髪を入れずにクレジットカードを切るでしょう。

(13インチに32GB RAM積めるようになってくれ🙏)

本題ですが、PCを変える時に開発環境変えますよね?

僕はずっとPCを買い換える時に開発環境をガバッと作り変えるのが恒例となっていて…普段個人開発環境もトレンドを追うのが面倒だったのでそうしていました。

ぶっ壊れていても結構パッチ当てて使い続けることが多かったです。 そのためここ2年ぐらいはIDEを好むようになりました。

JetBrainsのAll Product Packを買っています。

今回は、その定期的に作り変える慣例をなくすべくdotfilesの作り変えと継続的なインテグレーションを行おう!と思い至ったのでした。

でもなんで急に?

会社でもPCが貸与されるのですが、定期的に交換になります。 また仕事で使うので個人用のPCよりも稼働時間が長く定期的な交換以外で壊れてしまうことも度々ありました。

その際にPCの状態によってビルドができなかったり、 使っているライブラリが更新されていて依存性がぶっ壊れていたりで無限に時間を吸われていました。



普段IDEで開発しているのにそこまでする必要なくない?と思う方いますよね。

僕もそう思います。でもやります。

こいつが今鋭意製作中のリポジトリです。

github.com

開発環境の継続的インテグレーション

実際に使うのは以下のCIサービスです。

  • circleci
  • azure pipelines

二つ使うのには理由があります。 僕が高いお金を払いたくないからなのと、pipelinesをあまり知らないからです。 今後azureに寄せるかもしれません。

簡単に説明しておくと、両者とも Continuous Integration を実現するためのサービスです。

他のサービスには JenkinsやTravis ciなどがあります。

単体テストやビルド、デプロイまでを自動でできるようにしてくれるすごいやつです。

普段は業務で circleciを使っているので、circleciが好きです。

Circle CI

使い勝手を知っているのでlinuxのdockerイメージでCIを回すように使っています。 仮に通知とかやりたくてもversion 2.1から使える orbで大抵のことができます。

AWS ECRなどを使っていてもいい感じにやってくれるので大好きです。 publicなレポジトリなら無料で使えます。お得(?)。

circleci.com

Azure Pipelines

macOSマシンのビルドがなんとタダで行えます。 普段はmacOSなので、こいつでビルドしないことにはどうしようもないですね。

ぜひ使いましょう、最高のサービスです。マイクロソフトさんありがとうございます!

azure.microsoft.com

どうやっているか

普段は Homebrew/brew ( LinuxならLinuxbrew)から各種パッケージを突っ込んでいるので、 そいつ起点でdotfilesを起こし始めました。

最低限のコマンドで、環境を再現できるようにしてビルド設定を書いています。 手元で docker.run できるように自前で設定も書いていますが、CI設定は基本簡素になるようにしています。

azure pipelines

jobs:
  - job: macOS
    pool:
      vmImage: 'macOS-10.14'
    steps:
      - script: make install
        displayName: run install script

dotfiles/azure-pipelines.yml at master · paveg/dotfiles · GitHub

circleci

version: 2.1
default: &default
  working_directory: ~/repo
executors:
  xenials:
    <<: *default
    docker:
      - image: linuxbrew/linuxbrew:latest
        environment:
          LANG: en_US.UTF-8
          LC_ALL: en_US.UTF-8
          LANGUAGE: en_US:en
jobs:
  build:
    executor: xenials
    steps:
      - checkout
      - run:
          name: prepare
          command: sudo apt-get update && sudo apt-get install -y curl git bison
      - run:
          name: install dotfiles
          command: make install
workflows:
  version: 2
  test:
    jobs:
      - build

dotfiles/config.yml at master · paveg/dotfiles · GitHub

CIサービスの状態

これでビルドが走るようになりました。ログも見ることができます。 ただビルドに時間がかかるのでマッタリ確認します。

pr-ci-build

大体10-15分ぐらいのビルドです。 brewやbrew caskから様々なパッケージをダウンロードする部分はぶっちゃけ要らないかもしれないです。 今後見直せないかは考えていこうと思っています。

目標

とりあえず、開発環境の再現を30分〜1時間で終えられるようにしたいと思ってます。 zsh周りの設定が終わりつつあるので、neovim、tmuxを正しく使えるようにしてキーバインド整えて終わろうと思います。

シェルスクリプトを読んだり書いたりしまくってるのでtipsなんかを今後記事にするかもしれません。

すげー面倒臭いと思った方はぜひ、IDEを使ってください!

JetBrains製品を割引価格で! - 株式会社サムライズム