こんにちは、CircleCI Advent Calendar 18日目担当のKimです。
今回はCircleCIのTech stackと活躍しているツールについて紹介したいと思います。
開発系
Clojure
CircleCIといえばご存知Clojureです。最初はRubyとRoRを使ってたみたいですが途中で切り替えた様です。Clojureを本格的に使ってるチームはまだまだ少ないと思います。個人的にはClojureがやってみたくてCircleCIに入ったという部分は大きいです。
起動が遅いとか、エラーメッセージが結構な割合で意味不明とか、関数言語としては怪しい仕様が時々あるとか、色々細かい不満はありますが基本的にはみんなClojureを愛しています。
ClojureScript
フロントエンド開発ではClojureScriptを使っています。フロントエンドはほとんど触らないのであんまり詳しくないですが、直接Javascriptを書くよりもClojureで書かれたバックエンドとの親和性がいいみたいです。
Om
OmはReactのClojureScript用インターフェースです。ClojureScriptからReactを使いたければほぼOmしか選択肢がないから使ってるからだと思われ、、、(あんまり知らない)
エディター
ちょっと路線がずれますが...Clojureをメインで使ってるのでEmacsを使ってる思うかもしれませんが実際はEmacsとVimが半々くらいです。EmcasだとClojureの開発環境は充実していますが、Vimでもvim-fireplaceとかあったりして特に問題ない様です。IDE?多分誰も使ってないと思います :)
ここ数ヶ月はEmacsを自分は使っていて最近ようやく手に馴染んできたところです。ところで、view-mode
を昨日知ったんですがこれのおかげでめっちゃコードリーディングはかどります。
Github
もちろんGithubを使っています。PRベースで基本的にコードレビューはしますが厳格なレビュールールやコード規約とかはありません。むしろ動くコードを早くデプロイして動かしながら問題があれば直していくというスタンスです。
マージしてよければ LGTM、あんまり詳しくは知らないけど大丈夫っぽいからマージしていいよは、IGYB とかコメントしたりします。
Replicated
ちょっと宣伝になってしまって申し訳ないのですが、最近公式にCircleCI Enterpriseをリリースしました。しかし、Enterpriseプロダクトにはどうしても難しい問題があります。どうやってお客様先のバージョンをアップデートするとかトラブルシューティングをどの様にするかなどです。
ReplicatedはこうゆうEnterprise固有の問題をある程度解決してくれます。以前は自前でやってた処理を今はずいぶん任せることができています。
インフラ/運用系
AWS
基本インフラは全てAWSで運用しています。全てのビルドは後述するAWSのインスタンスのLXC上で動いています。値段が高いとかUIがよくないとか不満はありますがスケールが簡単にできるのでAWSなしでは今や成り立ちません。将来的には別のクラウドプロバイダーも透過的に使える様にしたいですね。
LXC
AWSのインスタンス上でLXCコンテナが動いていて、ビルドはコンテナ上で実行されます。コンテナを使うことでセキュリティを確保したりリソースを制限したりすることができます。Unprivilegedコンテナを使っているのでビルドからディバイスへのアクセスなどはできませんが大抵のコードは実行することができます。
なぜDockerを使ってない?と思うかもしれませんが、当時はDockerがなかったからだと思います。あと、Dockerは基本的にはアプリケーション用コンテナ向けなのでCircleCIの様にVM的に使いたい場合はLXCの方が向いています。しかし、最近Dockerでsysvinitを使う方法を発見したのでもしかしたらLXCをDockerに置き換えることができるかもと少し期待してます。
Datadog
データの可視化はDatadogを使用しています。Datadog素晴らしいです。簡単にデータの収集もできるしグラフのサイズも豊富でみたいデータを簡単に可視化してくれます。
Rollbar
スケールな環境だと時々発生する例外は避けれません。(言い訳かもしれませんが、、、)CircleCIではRollbarを使ってバックエンドとフロントエンドで発生する例外をSlackに送っています。障害が発生するとすごい勢いでメッセージが出ます。。。
サポート系
Intercom
CircleCIで質問したことがある人なら知ってると思いますが右下に現れるあれです。Intercomはチケットとアナウンスをするのに使っています。完全なチケットシステムではないので融通が効かないこともありますが、サポート用のUIも提供してくれたりするので重宝しています。
Discourse
最近コミュニティーサイトをラウンチしました。これはDiscourseをベースにして作っています。個人的にはUIがかなり気にっています。デザインチームの人も頑張ったんだと思いますが、DiscourseのUIがすごく綺麗に作られているんだと思います。
何かわからないことがあった時はここを検索すれば答えがあるかもしれないので試して見てください。
コミュニケーション系
Slack
もちろんチャットはSlackでやっています。Slacの良さを今更説明する必要はないと思うますが、それにしても欧米人ってミームとか大好きですよね。randomっていうチャットルームがあるんですがそこはミーム画像で溢れています。
あとEmojiもみんな大好きです。こうやって1日の予定をEmojiで表したりします。
Zoom
技術チームの7割くらいはみんなリモートで働いていて顔を合わせるのは年に数回しかありません。なのでビデオ会議がすごく重要になります。今まではGoogle Hangoutを使ってたんですが大勢が参加した時の接続に問題があって最近Zoomに乗り換えました。レイテンシーが結構ある環境でも問題なくつないでくれるすごいやつです。
Google Calendar
CircleCIではいろんな国の人がリモートで働いているので共通のカレンダーがありません。また休暇も自由に取れるのでますます誰がいつどこで働いているのかわからなくなります。なので可能な限り予定はGoogle Calendarで共有するようにしています。また、Zoomとも連携しているのでGoogle Calendarから参加可能なZoomのビデオ会議とかも設定できるので便利です。
まとめ/求人
興味があるツールはあったでしょうか?他にも細かいツールはいろいろあるけど大体活躍してるのはこんな感じです。
ところで、現在CircleCIでは日本からリモートで働けるサポートエンジニアを鋭意募集中です。完全フレックス制・コアタイムなし、無制限休暇、Clojureが使えるなど色々いいことがあるので、興味があればぜひ応募してみてください。質問などがあれば、yangkookkim@gmail.comまで連絡していただければ何でもお答えします。