まさひと)Tweetフォルダの共有機能Vagrantは、開発をスムーズにするためのフォルダ共有機能を備えています。これはVagrantで仮想マシンを起動すると、開発用PCと仮想マシン内のディレクトリを自動的に同期してくれるものです。これにより、PCで使っている自分の好きなエディタを使って、仮想マシン上のソースコードを編集できるだけでなく、手元のツールでテストや任意の処理ができます。仮想サーバ上で何か処理する際に、いちいちログインする必要がありませんので、開発作業に集中することができます。図3:Vagrantのフォルダ共有機能で、開発用PCと仮想マシン間のディレクトリ内容がリアルタイムに同期される(クリックで拡大)それでは実際に共有することを確かめて見ましょう。up」で仮想マシンを起動すると、Vagrantfileを実行したフォルダと仮想マシン内の「/vagrant」ディレクトリがリアルタイムで同期します。リスト7のように、仮想マシン内でディレクトリを移動して、ファイルを作成すると、手元のPC上にも同様のファイルが作成されることが確認できます。hello.txtその逆に、作成されたhello.txtをPC上のエディタで編集・保存すると、その結果がサーバ内のファイルにも反映されていることが分かります。共有するフォルダは変更可能で、例えばPC内の「./data」フォルダと仮想マシンの「/share/data」を同期したい場合は、Vagrantfileにリスト8のように記述します。"/share/data"そのほか、共有機能ではNFS、rsync、SMBに対応しています。詳細はドキュメントをご覧ください。share開発過程で、手元のPCの環境をリモートの開発者と共有したいとき、これを簡単に実現する機能がVagrantとAtlasを通して提供されています。share」コマンドを実行すると、実行した環境に対して「.vagrantshare.com」のホスト名が自動的に割り当てられます。」コマンドを使って直接SSHログインすることもできます。ウェブだけの利用であれば、任意のホスト名・ドメイン名を指定することも可能ですので、開発環境だけでなく、デモ環境の提供やインターネット上のサービスとの連携にも活用できます。図4:VagrantとAtlasの機能を使って、開発環境を共有する(クリックで拡大)Atlasにログイン共有機能を使うには、まずAtlasにログインする必要があります。アカウントがなければ、登録から始めましょう。VagrantCloudのアカウントを持っていれば、アカウントは共通なので、そのままAtlasにもログインできます。login」コマンドを実行し、Atlasのユーザ名(Username)とパスワードを入力します(リスト9)。in.HTTP(S)を共有それでは、実際に仮想マシン環境を共有してみましょう。HTTPとSSHを共有する環境を準備するために、リスト10のVagrantfileを準備します。この例では仮想マシンにUbuntuのboxを使い、Apacheのセットアップを行ったあと、ドキュメントルートを/vagrantに置き換えています。Forward)する設定も行っています。HTTP(S)の環境を共有するためには、このようにホスト側にポートを割り当てる必要があります。share」を実行します(リスト11)。すると自動的にホスト名が割り当てられ、画面に表示されるURLでアクセスできるようになります。終了したい場合は「Ctrl+C」を入力します。http://famous-dingo-xxxx.vagrantshare.comブラウザでこのURLにアクセスすると、Vagrantfileが見えます。このディレクトリでファイルの新規作成や編集をしますと、内容がブラウザにも反映することが確認できます。引き続きSSHを共有する方法を見ていきます。--ssh」を実行します(リスト12)。正常に処理が終われば、ホスト名とドメイン名が確認できます。connect」を実行します(リスト13)。SSHの共有を終了したい場合も「Ctrl+C」を入力します。共有時には、自動作成される*.vagrantup.comではなく、任意のドメイン名も利用できます。ここでは「.vagrant.example.jp」でアクセスする方法を見ていきましょう。始めに必要なのは、ゾーン情報の変更です。具体的には、share.vagrantcloud.comにCNAMEレコードを追加します。BINDを使って「.vagrant.example.jp」というホスト名を使いたいとき、リスト14のようにレコードを記述します。a」を実行し、share.vagrantcloud.comで名前解決ができていれば準備完了です。次に、Atlas上にドメイン名を登録します。アカウントの設定画面で図5のように「ORGANIZATIONS」の欄に自分の名前が表示されていますので、そこをクリックします。Domain」を入力します(この例では「vagrant.example.jp」と入力)。後ほど共有を解除したい場合にも、この画面から削除できます。share」コマンドを使います。リスト15のようにオプション「--domain」でドメイン名を、「--name」でホスト名を指定すると、「http://test.vagrant.example.jp」として接続することができます。vagrant.example.jp注意点としては、SSHで共有する場合はホスト名の指定ができないことが挙げられます。ドメインを毎回オプションで設定せずに、常に特定のドメイン名を使うこともできます。default」をクリックします。有効化したあとは、自動的に登録したドメイン名が毎回割り当てられます。開発が進むと、コードを別のサーバ環境に送り、テストやデプロイなど開発中のコードを共有したい場合が出てきます。push」コマンドで利用します(Vagrantバージョン1.7以降に対応)。コマンドを実行すると、Vagrantfileのあるディレクトリ以下を別のサーバにFTPで転送したり、rsyncやscpのようなコマンドを実行したり、あるいはAtlasやHerokuへ送信したりすることもできます。図6:VagrantのPush機能でデプロイ作業を効率化する(クリックで拡大)Push機能を使うためには、どの手段でどの環境に送信するかをVagrantfileに記述します。この手段のことをVagrantでは「strategy」と呼びます。FTPを使ってデプロイするには、「ftp」という名称のstrategyをリスト16のように指定します。endコードの共有には、Vagrantのboxを共有する方法もあります。boxは作成や転送に手間と時間を要するため、ある程度の完成形に近くなってからのアップロードに適しているでしょう。pushを使う方法であれば、既存の環境に対して手軽に送信できるという利点があります。以下では、ローカルのファイルをFTPかコマンドラインでデプロイする方法を見ていきます。FTP・SFTPを使うにはリモートのサーバ上にFTP・SFTPでファイルを転送したい場合は、あらかじめVagrantfileにリスト17のように記述しておきます。push」コマンドを実行すると、自動的にFTP・SFTPでファイルの転送が実行されます。Vagrantfileで利用できるオプションは、以下の表の通りです。EXEC)FTPだけでなく、作業をしているPCやサーバ内でディレクトリのコピーをしたり、rsync・scpコマンドを使ったりするような応用も可能です。リスト17の「ftp」の箇所を「local-exec」に書き換えます。リスト18の例は、scpを使って複数のサーバに特定のディレクトリをコピーするものです。endなお、このようにscpを使う場合は、パスフレーズを使わずSSHログインできるような設定が必要です。""」で指定し、実行することもできます。コマンドやファイルに対するパスは、Vagrantfileのあるディレクトリが起点となります。複数のデプロイ先を切り替えるには用途に応じてデプロイ先を使い分けることもできます。ステージング環境(staging)にはftpを、本番環境(prod)にはlocal-execを用いてデプロイするには、リスト19のように記述します。prod」と入力することで、デプロイする環境を切り替えられます。まとめ開発環境の基盤としてのVagrantの役割と、Atlasとの連携方法を見てきました。今回紹介した機能の詳細については、Vagrant公式サイトのドキュメントも参照してください。Documentationhttps://docs.vagrantup.com/v2/今回は、VagrantとAtlasでbox環境を作成しました。次の課題は、このbox環境を他人と共有したり、クラウド上に展開したりするにはどうしたらよいかということになります。これを解決すべく、次回は手元のPCだけでなく、クラウド環境とVagrantの連携方法や、Packerを使ってマシン・イメージを管理する方法を見ていきます。1.7.2に対して確認を行っています。Evangelistホスティングサービスで運用保守サポートに携わった後、現職へ。サポート業務や新技術検証や開発業務を行う傍ら、実家で農作業のため東京と富山を往復する日々。趣味で監視や自動化に関するOSS検証や翻訳を行う。運用・監視の省力化・最適化に興味。辛口の日本酒が大好き。ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。我々は、なぜ設計書を作成するのか2020/1/16システム運用技術解説クラウド環境でのOrchestrator構築とアナリティクス2020/1/8クラウド技術解説Rancherコードリーディング入門(2/3)2019/12/25システム運用技術解説CloudサービスとRPAの連携2019/12/20ネットワークPRSD-WANとはなにか。VeloCloudが選ばれる理由SD-WANとはなにか。Linuxエンジニア育成への思いF5とNGINXの組み合わせで、サービス公開をよりセキュアに。ITがお届けするポッドキャストです。