Calendarも裏モードということで、ゆるゆるやっていきましょう。ProからWindows機に移行してみた話という記事がありました。開発環境としてのMacは、徐々に離れられているのでしょうか?栄枯盛衰ですね。前職ではJavaのデスクトップアプリケーションを開発していました。サポートしているOSはWindows、MacだけでなくLinuxも・・・、ということだったので普段の開発環境はLinuxでした。OSに依存しない形でプラグインをパッケージングしておいたEclipseを準備しておき、僕はLinux上にそれをインストールし、その上で開発をしていました。(他のメンバーはMacやWindowsにパッケージングしておいたEclipseを使っていました。ベースのアプリケーションを開発しています。RubyMine上に開発環境を構築し、開発していました。3年前の10月に転職したので、ちょうど11月にRubyMineのライセンスが切れます。なにか他によい環境はないものか、思案してみてEC2に開発環境を移行してみました。(お客様に業務システムのクラウド化を推進する手前、ぼくらの開発環境が各々のマシンにある、というのもなんだかなぁ、と思ったりもします。)はやいfreeeでは開発メンバー情報を管理するデータベースがあり、そこに公開鍵を登録済みであればすぐに開発用のインスタンスが立ち上がるようになっています。今はまだできていませんが、開発用のAMIイメージを用意すれば少なくとも半日かかっていた開発環境の構築が1時間以内に終わるようになるでしょう。設定しているものと同等のインスタンスサイズです。monthくらいに収まります。いうので起動・停止を制御できるみたいです。うまいAWSの環境にログインして操作するので、AWS_ACCESS_KEY等の払い出しは不要です。実行環境としてLinuxを選べるのでDockerを実行する場合のオーバーヘッドはほぼありません。仮にリソースが足らないときはより大きなインスタンスに切り替えることができたり、DBを介さない処理用のサービスであればチームメンバーで共有できたり、ちょっとしたサービスであればインスタンスを立ち上げなくてもサーバレスに開発ができたり、というAWSの利点をフルに使うことができます。今年は1年を通して開発リソースのコンテナ化と開発環境のクラウド化を進めてきました。その経験をこのAdventCalendarで共有します。取り上げているとおり、freeeでもマイクロサービス化を推進しています。連携するマイクロサービスの数がかなり増え、起動するのも大変になってきたので、実行にはコンテナを使うようになりました。イメージにしておくことで、特定のバージョンをいつでも同じ環境で起動させることができます。不安定だ、という意見がありました。Macに向いていない使い方をしていたりします。いうハイパーバイザー上で動作する、Linuxの上で動作します。このHyperKitに与えるCPUやメモリが少なすぎたり、大量にホスト側のファイルを参照するような設定をすれば、HyperKitで動かしているコンテナは不安定になります。~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/ttyするとlinuxkit-025000000001:~#というような文字列が表示されます。imageのシリアルコンソールに接続できます。接続し、コンテナを起動します。開発環境のコンテナ化をしたいのであれば、Macでのファイル編集を諦めなければならなかった話を戻すと、大量にホスト側のファイルを参照する使い方の代表例は、開発環境のコンテナ化です。freeeではサービスごとに開発チームがあります。それぞれの開発チームが独立した進化をするため、yarnなどのバージョンが開発チームごとに異なることがありました。普段の開発には問題ありません。隣のチームとの連携部分を開発するときに、よく支障が出ていました。コンテナは独立した環境なので、コンテナの中に開発環境を作ることができればこの問題は起きません。一時期試していましたが結局のところMacのファイルシステムをマウントするのは重すぎて断念しました。コンテナの起動時に、Macのファイルシステムをマウントしたとしましょう。すると、Mac上のファイル変更を検知したら先述したLinux側にファイルを転送します。このファイルの変更検知とファイル転送が結構な負荷をかけます。これもMac側のファイルシステムに大量のファイルがあるパスでは期待した高速化はできませんでした。転送を高速化するものではありませんでした。開発環境自体をコンテナ化するのであれば、ファイル転送はしないほうがいい。いうことがキッカケで、僕は開発環境をLinuxベースに移行することを検討し始めました。(話が長くて申し訳ない。