インフラ構築をコードで自動化できる「Docker」の魅力――主婦と先生と作家をコンテナ仮想化で両立する阿佐志保さんの生き方|翔泳社の本

インフラ構築をコードで自動化できる「Docker」の魅力――主婦と先生と作家をコンテナ仮想化で両立する阿佐志保さんの生き方

2015/11/30 08:00

 翔泳社では11月19日に『プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化』を刊行しました。今回、Dockerが大好きだという著者の阿佐志保さんに、本書の紹介だけでなくDockerに関わる人生観についてもお話をうかがいました(インタビュー内容は10月21日時点のものです)。

家事、育児、講師、執筆の両立

――よろしくお願いします。最初に、阿佐さんの自己紹介をお願いできますでしょうか。

阿佐:結婚・出産前は、システムの基盤を構築・運用するエンジニアなどをしていました。インフラの設計構築だけでなく、アプリケーション開発標準化や運用設計など、障害やトラブル以外では表に出ることのない地味な仕事です。毎日、朝早くから終電まで働いていました。仕事が好きだったし、非常に優秀なメンバーに囲まれていたのであまり苦ではありませんでした。

 分かりやすくいうと「社畜」です。社畜という言葉がない時代からの社畜なので、流行の最先端だったと思います。チームにはほとんど女性がいませんでしたから、元祖「オタサーの姫」といってもいいのでないかと思います。常に時代を牽引してきたという自負があります(笑)。

 子どもがほしかったのですが、なかなかできず、やっと妊娠したものの妊娠初期で切迫流産になりました。仕事が忙しかったから切迫流産になったわけではなく、もともと子宮と卵巣に病気があったためです。子どもを産むには、安静と24時間の点滴が必要になったため、エンジニアを辞め、専業主婦への道を歩みました。

 子どもが幼稚園に入ると、昼間に少し時間が空くようになったので、横浜市にある情報処理の専門学校で非常勤講師を始めました。資格試験対策やアプリケーション開発などの科目を担当しています。残業も一切ないですし、子どもが夏休み冬休みのときに休めるので、子育て中の身としてはすごく助かっています。

 ただ、講師の仕事はエンジニアリングの仕事ではないので、実務経験がつくわけではありません。「将来への投資だ!」と思って技術を勉強しないと、どんどんついていけなくなります。平日の夜や土日は子どもとコミュニケーションを取る時間と決めているので、勉強会もほとんど参加していません。

 そのため、技術のインプットは技術書だけです。でも、技術書を買うのはけっこうお金がかかります。そんなとき、「自分が知っていることを記事や書籍にして、いただいた原稿料で私のまだ知らない技術や分野の本を買えばよいのでは?」ということに気付きました。そこで、WINGSプロジェクトに所属して、CodeZineで連載をさせてもらったり、技術書や雑誌の記事を書かせてもらったりするようになりました。私がアレルギー性喘息なので、夜咳が止まらなくなって眠れなくなることがあるのですが、そういうときが執筆のチャンスです(笑)。原稿がまとめてどっさり出てくるときは、喘息発作のときですね。

 子どもがまだ小さく自由に出歩けないですし、家事育児や講師の仕事との両立で時間的余裕もほとんどないので、執筆した原稿の監修だけでなく、スケジュール調整や打ち合わせなど、一切合切をWINGSプロジェクトの山田夫妻にやっていただいています。山田夫妻も同じく小さな子どもがいらっしゃるので、私の事情もよく分かってくれていて、本当に感謝しています。

阿佐志保さん
阿佐志保さん:WINGSプロジェクト

Dockerが大好きで、仕事もコンテナ仮想化している

――ありがとうございます。阿佐さんが本書を執筆するきっかけは何だったのでしょうか。

阿佐:ずばり「Dockerが好きだから」です。もともとSolaris Containersを業務で触ったことがあったため、「楽して勉強できるんじゃないかな?」と思って始めました。Dockerが流行り始めた頃は「なぜに今頃?」というのが拭えなかったのですが、Dockerを実際に触ってみて、その人気の理由が分かりました。

 この業界は技術の流れが早く、流行り廃りも激しいのですが、インフラ技術において考えてみると、DNSのしくみやHTTPプロトコルのような「シンプル」で「誰もが理解できる」技術は、基礎技術として多く利用され、長く残ります。逆に、仕様が難解で複雑なアーキテクチャや高度なオペレーションが必要なものは、たとえどんなに優れた技術であったとしても徐々に下火になっていくことが多いなと感じています。Dockerの魅力は「シンプル」で「誰もが理解できる」ことです。とりあえずdocker runコマンドでWebサーバが動く、というのはとても大きな魅力だと思っています。

 私がDockerを好きなもう一つの理由は、「Dockerのアーキテクチャ」にあります。

 私は育児中の主婦です。毎日ご飯を作ったり掃除をしたりするルーチンワークがありますし、やんちゃな男児の育児は疲れます。そして家事の合間に、専門学校で若手人財の育成をして、夜に技術書の執筆をしています。不定期なのですが、知り合いからクラウド導入のお手伝いや、簡単なアプリケーション開発を請け負うこともあります。

 残念ながら、私は脳の性能が高くないですし、体力も根性もないです。私と面識のある人は、周知の事実ですが、キラキラ輝きながら働く、ハイスペックなスーパーウーマンではありません。そんな限られたスペックでなんとかこなせているのは、Dockerのアーキテクチャに習って、仕事をコンテナ仮想化しているからです。

 アーキテクチャ構成図は次のようになります。これは勉強会などで自己紹介に使っているスライドです。

アーキテクチャ構成図

 私はサーバプロビジョニングの経験、ネットワーク基礎技術、Javaの基礎知識、インフラ運用設計の経験、クラウドのオペレーション、子育ての経験、家事の効率化・自動化の実践的ノウハウなどの機能を持っています。そしてASA Engineがそれぞれの仕事を論理的に隔離して、コンテナとして動かすことで、タスクをこなすしくみになっています。タスクは失敗することも多いですが、失敗してもすぐにコンテナを立ち上げればよいだけなので、複雑なオペレーションも不要です。ほかのタスクとは隔離されているので、お互いが影響を受けることもありません。

 技術書で書いた知識をもとに専門学校で講義をする、幼稚園児の我が子を褒めたらテンションが上がったので専門学校生にもそのまま流用する、Javaがなんとなく書けるのでAndroidアプリの開発をしてみる、学生の理解度をみながら初学者向けの技術書を執筆するなど、お互いの仕事は完全に分離されていて、外部からはまったく別のことをこなしているように見えますが、内部では限られたリソースを共用してタスクを処理しています。

若手のアプリケーションエンジニアに向けて

――では、具体的に本書はどういう方に向けたものなのでしょうか。

阿佐:特に本書を読んでもらいたいのは、SI業界に就職した若手のアプリケーションエンジニアです。一昔前までは、Javaを勉強して、OracleやCiscoの勉強をして、基本情報処理技術者試験でも取っておくと、SI業界では何かしらの仕事ができたのではないかと思います。

 しかし、いまはクラウドがものすごいスピードでサービスを提供し、IoTなど新しいビジネスの創出やイノベーションが起こっている時代です。いまの若いエンジニアは、私が若いころとは比べものにならないほど学ぶべきことが多いため、何をどのタイミングでどのように習得すればよいかを見極めるのが非常に難しくなっています。

 Dockerはこれまでインフラエンジニアが担当していたプロダクション環境でのシステム構築や運用を、アプリケーションエンジニアでもできるようにするためのプロダクトです。アプリケーションエンジニアは、実装力やアプリケーションの設計力などの技術的要素も重要ですが、そもそも「深い業務知識」や「新しいビジネスモデルの創出」が欠かせません。また、開発スピードも非常に短くなってきています。そんな多忙極まりない状況なのに、「足回りのインフラもひとつヨロシク」と言われても、何をどうヨロシクなのか……となってしまうのではないかと思っています。

 そこで、本書ではDockerという製品を紹介しながら、これまでインフラ構築はこういう感じでやってきましたよ、運用はこのようなことをやってきましたよ、ということを解説しています。実際に本書を手に取っていただいて、Dockerを動かしながら、斜め読みしてもらえればありがたいなと思っています。

 いまは「クラウドがあるのだからボタン一つでサーバが起動できて、インフラなんて簡単でしょ」という時代です。私は、レガシーなオンプレミスのインフラエンジニアだったので、基幹オンプレサーバからのアラートメールで飛び起きて徹夜で障害対応したり、再現しないバグを調査するために検証環境で何度もアプリケーションやインフラのテストを繰り返したり、手動でのオペレーションでミスをしてしまって顧客に多大なる迷惑をかけたりしながら学習し、さまざまなノウハウを蓄積してきました。それらのノウハウはDockerだけでなく、さまざまなインフラ構築・運用ツールの随所に生かされています。

 ここで「最近の若い者はけしからん、泥臭い苦労をして鍛えなければ……」となってしまっては、技術の進化への敗北宣言だと思っています。このような苦労を若い次の世代が担うことなくインフラ技術を学ぶためには、インフラツールの使い方を通してインフラ構築や運用の全体像を学べばとても効率がよいのではないか、と考えました。

夕飯の支度をしながらシステム構築ができてしまう

――「いまの自分にはDockerが必要ない」と思っている方もいらっしゃるかもしれませんが、潜在的な読者は想定していますか?

阿佐:クラウドやDockerをすぐに使うわけではない、というプロジェクトに従事している方々も読んでいただきたいです。大規模開発案件に携わるプログラマなどで決められた仕様書をもとにコードを書く、という仕事をしている人や、マネジメントが主なタスクになり実装技術から遠ざかっているエンジニアの方などです。

 オンプレミス全盛期は、システムインテグレートを行なうのは、専門スキルを持つエンジニアだけの特権的な仕事でした。しかし、現在のようにクラウドありきのシステム開発・構築が主流になると、まったく別の異なるスキルを持つ他業種の人や、システムを利用する顧客が自らインテグレートできるようになりました。

 Dockerをはじめとする仮想化技術は、インフラを抽象化します。そのため、多額の資金や特別な環境がなくても、アイデアとちょっとしたスキルさえあれば、誰にでもシステムインテグレートができてしまいます。現に、私のようなごく普通のどこにでもいるような主婦が、大規模なDockerクラスタ環境を自宅のキッチンで、夕飯の支度をしながら構築できてしまうのです。

 さらに、専門学校での講義以外は、すべてリモート勤務です。監修の山田夫妻とは頻繁にコンタクトを取り合っていますが、対面で会うのは飲み会のときだけです(笑)。そのため、これからはマネジメントの仕方もずいぶん変わってくるでしょう。

 このように、開発方法論自体を大きく変えるパラダイムシフトが起きているので、Dockerを試してみることで、これまでの経験や将来のスキルセットを考え直す、よいきっかけになるといいなと思っています。

 コンシューマ向けシステムがメインのいわゆる「Web系」のエンジニアであれば、どんどん新技術にチャレンジして失敗しても、再チャレンジができやすい風土にいると思います。コミュニティ活動も盛んで、新技術の習得に対するオープンな風土もありますので、「Docker? それいいね! イケてるね!!」となると、早ければ翌日からでも導入できるでしょう。

 しかしながら、業務系システムのSIをおこなうエンジニアは、社会インフラを支えるシステムを担っていることも多く、「絶対に失敗してはいけない……」「新しいものは検証に検証を重ねてからでないと……」「他社での導入実績がないものは……」となってしまいがちです。私は、それらが悪いこととは思っていません。むしろ逆に、社会を支える重要な仕事なので安定稼働は必須要件だと思っています。

 業務系SIの仕事はけっして派手なものではないため、地味で後退的に見えることもあります。大きなプロジェクトで開発している人は、「どうせ自分一人で何かを変えることなんてできない」と考えてしまうのではと思います。また、SI業務を行なうエンジニアは長時間勤務が常態化していることも多く、仕事で疲れて帰ってきたのに、さらにこれから家で勉強だなんて……となってしまうこともあると思います。しかし、クラウドやDockerなどの仮想化技術の導入が進めば、現状のSIを行なうエンジニアの働き方を大きく変えるパラダイムシフトを起こすと考えています。

楽をするためには、どんな努力も惜しまない

――とはいえやはり、新しい技術を習得することに対して腰の重い方はいらっしゃるかもしれません。そこでお訊きしますが、Dockerを使うこと、また本書を読むことでどんなメリットがありますか?

阿佐:インフラ技術が専門ではなくてもDockerを利用できるようにしておきたいという人は、公式リファレンスから必要な情報を探して和訳したり、コマンドオプションを調べたりする時間がもったいないので、本書を逆引き辞典として利用してください。隅々まで読むというよりは、必要な箇所を必要になったときに見るのがよいかと思います。

 そして早く仕事を終わらせて帰宅し、余った時間をゲームやアニメなどの趣味に没頭する時間にあてたり、お子さんがいらっしゃる方は一緒に遊んだりして、時間を有効に使ってもらえればと思います。

 私自身、「楽をするためには、どんな努力も惜しまない」という矛盾にあふれたポリシーで活動しています。ですので、時間や体力が要求されるサーバのセットアップやアプリのビルドやデプロイなども、Dockerを使えば、Dockerfileで書いたとおりの環境をコマンドを叩くだけで、寝ている間に勝手にやってくれるというのはなんともいえない快感があります。そのような低レイヤの意識レベルに共感していただける方は、本書を手に取ってみてください。

電子工作1
阿佐さんがいまハマっているという電子工作

ビジネス目的を実現するためのDocker

――Dockerの魅力がひしひしと伝わってきます。本書ではどういったことが学べるのでしょうか。

阿佐:本書ではDockerを使ううえで知っておきたいインフラの基礎知識を説明し、各コンポーネントの使い方や関連性を紹介しています。特に、対象読者であるアプリケーションエンジニアの主タスクとなるであろう「コードによるインフラの構成管理」について、ページを割いて説明しています。

 Dockerは開発スピードが非常に早く、仕様変更や機能追加が頻繁に行なわれています。そのため、なるべく英語の公式ドキュメントに沿う形で本書を構成し、差分情報を追いやすいように工夫しました。

 また、インフラ技術が専門でない層をターゲットにしていますので、難解な用語を避け、詳細な技術スタックを説明するのではなく、具体的なコマンド実行例やリファレンスを中心に説明しています。

 コンテナの運用に関しては、現時点ではまだ「これ」といった決定打が見えない状況です。DockerのコンポーネントであるDocker SwarmやDocker Machineもα版のリリースです。そのため、マルチホストでの運用に関しては、クラウドのマネージドサービスを使っていくことで、アプリケーション開発者でも本番環境で運用ができるように、業務系システムでの実績が多いAmazon Web Servicesや各種SaaSを使った手順を紹介しています。

 本書にも書いているのですが、Dockerは既存のシステムの課題をすべて解決する「銀の弾丸」ではありません。これはDockerに限らずですが、どんなツールでもどんな言語でも、向いている、向いていないがあって、システムの要件によって適材適所で活用していくのがよいと考えています。Dockerには何が向いていて何が向いてないかを知るためには、実際に触ってみて、コマンドを叩いて、環境を作っては壊す、を繰り返して、感触を掴んでいくのが一番早いと思います。

 Dockerにしろクラウドにしろ、システムを作る道具にすぎないので、その先にあるビジネス目的を実現するために、道具をいかに楽に使いこなすかが重要だと思っています。

アプリケーション開発の経験がない自分にとって分かりやすい技術書

――Dockerを使ったことがない方に特徴や使い方を伝えるのが本書の役割ですが、そんな本書を執筆するうえで何か意識した点はありますか?

阿佐:私はプロダクション環境でのアプリケーション開発の経験がほとんどありません。そのような私が「アプリケーション開発」の書籍を手に取ったときに分かりやすいなと感じる本は、簡単な具体例が多く載っているものです。アプリ開発経験者にとっては常識だろうというちょっとしたことが分からなくてつまづくこともありますし、クラスの詳細なリファレンスを見てもどう使うのかがぱっと分からなかったりするのですが、シンプルなサンプルコードがあったり、設定ファイルの例があると、見よう見まねでアプリケーションを作ることができます。

 また、経験がないがゆえに、全体像を俯瞰するのが難しく、「いまはどの工程で、何のためにやっているのだろう」と迷子になりがちです。そのため、アプリ開発を行なうときに、どのようなことをどのような手順でやればよいかの全体像が体系立って説明されている本だと分かりやすいと感じます。本書を書くときは、自分の専門分野ではない「アプリケーション開発」の本を参考にしました。

 文章を書いても専門学校で講義をしても感じるのですが、相手が私の話をすべて100%読んでくれたり聞いてくれたりすることは、ほとんどないです。人間は、自分が知っていることや興味があることは頭に入りやすいですが、それ以外は本能的に遮断すると思っています。

 そのため、あえて相手が知っていそうな言葉や事項を説明して、「あ、それは知ってるわ」「聞いたことあるなぁ」というのを共感してもらって、「読めば分かりそう」「聞けば分かりそう」を増やします。そして、本当に伝えたいことをシンプルに絞って、強調して話したり、書いたりするように心がけています。が……実際は難しいので全然できていないんですけど(笑)。

もっと面白くて、もっと楽ができるハッピーな世の中を

――本書の紹介のみならず、阿佐さんの人生観までお話いただきありがとうございます。最後に、言い足りないことなどあればお願いします。

阿佐:いま、電子工作にハマっています。ArduinoやRaspberryPiなどのマイコンボードを使って、ラジオ型のジュークボックスや、カブトムシ育成用の環境データ収集ロボを作ったりしています。最近はアンティークカメラを使った監視カメラを作っています。

電子工作2

 デバイスで収集したデータはすべてAWSやmBaaSなどで管理しています。いかにも電子工作、みたいなブレッドボードや基盤むき出しではあまりにも女子力が低いと思いますので、いつも女子力高めの工作をします。電子工作は、ビーズアクセサリー作りや手芸にそっくりなので、もし興味がある女子がいたらワークショップをやりたいなと思っています。

 大学では機械工学科で流体力学を専攻していましたが、研究室ではずっと、はんだ付けばかりをやっていました。ITエンジニア職に内定していたので「将来、いったい何の役に立つのだろう……」と思っていました。が、いま、はんだ付けはもちろん、制御工学の基礎知識などがかなり役に立っています。いまは「なんでもっとちゃんと勉強しておかなかったのだろう!!」と後悔しています(笑)。

 講義を担当している専門学校生から、「将来ITエンジニアになるには、学生時代に何を勉強すればいい?」と聞かれることが多いのですが、私も分かりません。変化の激しい業界なので、変化を楽しむ気持ちを持つことと、自学自習する習慣をつけておけばいいかなとは思っています。

 やる気のある若い学生に技術力で勝負しても、私に勝ち目がないのは明白です。だから、私が苦労しながら泥臭く勉強してきたことを、できるだけ短い時間で次の世代に引き継ぎたいと思っています。そして彼らと一緒に、もっと面白くて、もっと楽ができるハッピーな世の中を作っていければいいですね。若手エンジニアの人財育成は子育てにそっくりなので、お母さんというのも立派なキャリアです。執筆業で入門書や初心者向けの記事が多いのは、そのためです。

※インタビュー内容は10月21日(水)時点のものです。

プログラマのためのDocker教科書

 Amazon   SEshop   その他

プログラマのためのDocker教科書
インフラの基礎知識&コードによる環境構築の自動化

著者:WINGSプロジェクト 阿佐志保
監修:山田祥寛
発売日:2015年11月19日(木)
定価:3,000円(税別)

  • 第1章 おさえておきたいシステム/インフラの知識
  • 第2章 コンテナ仮想化技術とDocker
  • 第3章 Dockerのインストールと基本コマンド
  • 第4章 DockerFileを使ったコードによるサーバ構築
  • 第5章 Dockerイメージの共有――DockerRegistry
  • 第6章 複数コンテナの一元管理――Docker Compose
  • 第7章 マルチホスト環境でのDocker運用――Docker Machine、Docker Swarm
  • 第8章 クラウドでのDocker運用