#yapcasia 2014 でシステムとの時間の旅の話をしてきました

The world is not complete

邦題:
「完成されたシステムなどない。完成された人間もいない。
あるのは成長し続ける未完成なシステムと、それを支える未完成な人間だけだ」

ウェブサービスを頭に描きながら、そのウェブサービスの成長の旅を体験することで
その時その時に何が必要か、ということをお話をしました。後半はトークショーでした。

システムは完全ではないので壊れることを前提につくる
人間は失敗をするので、失敗をしても復旧できるようにシステムをつくる

システムや一部の機能を疎結合にし、再現性を保つことで、障害に強くする
再現性をシンプルに保つことで、システム自体を変更の強いものにする

例えば、現代でいえば、クラウドサービスでしか動かない、
特定のオンプレでしか動かないシステムではなく、
機能毎に環境に依存しないようにシステムをつくることを忘れないでね。

壊れたりした時に慌てるのではなく、保険をつくって
再現性を持たせて同じ状態に戻せるようにしておいてね。ということでした。

その意識があるかないかで、規模が拡大したり、機能が追加され
複雑化した時に、大きな違いになってくることを私は経験してきました。

大規模の経験がある人は、この辺は体験的に理解していますが
大規模の経験がない人は、最初の構成を複雑にしてしまい
後々苦労してしまうのはあるあるネタかと思います。

再現性については、puppet、Chef、Ansible、Consul、Serfなど
プロビジョニング、オーケストラレーションツールを利用し
環境に依存しない構築が可能になり、
簡易性、疎結合については、Dockerや各種クラウドサービスの登場で、
機能毎にプラットフォームを渡りやすくなってきたのではないでしょうか。

ただ、その記録、保険、再現性、簡易性は
どのタイミングで、どの程度の精度を持たせるかは
つくる時間・つくらなかった時のリスク・復旧時間・構築時間など
都度見積もって、判断してね。という当たり前の話をしました。

Infrastructure as Codeの時代、プログラミングで良く言われている
「変化に強く、シンプルであれ」という哲学は、Infrastructureにも
当てはまる時代になってきたのではないでしょうか。
それは、UNIXの哲学や、日本の文化から学ぶことができます。

そうして、みなさんのウェブサービスの旅は、これからも続いていきます。

という発表を大ホールならではのエモーショナルな空気感で発表してきました。
理想論だ、と吐き捨てることはできますが、その理想の世界が
Go言語の登場から各種プロビジョニングツール、様々なクラウドサービスの登場で
段々と実現可能になってきたのではないでしょうか。

発表が結構早く終わってしまったけど、発表の補足を質問を回答する形ででき
結果的に、視聴者参加型のとても素晴らしい空間が生まれました。
みなさん、ありがとうございました。

聞いてくれた人たち、選んでくれた人たち、ありがとうございました。