Ansible でディレクトリ作成と作成したディレクトリにシンボリックリンクを作成してみる

スポンサーリンク
スポンサーリンク

今回、Laravel、Vue.js を使用し、パッケージ開発の下準備となる Ansiblle を使用した開発環境の準備を行なっていきたいと思います。
やることとしては、ベースとなるソースコードと可変可能なソースコードを分離したディレクトリ構成にし、vendor、node_modules ディレクトリプロジェクトディレクトの外に設置し、各プロジェクトから使用するという構成になります。

前提

開発環境は以下のようなディレクトリ構成を予定してます。
※ Laravel ディレクトリに、ベースとなるソースコードを配置し、package ディレクトリには、各プロジェクト毎のソースコードを配置。
そして、vendor、node_modules は別のプロジェクトの外部ディレクトリに置いて、それぞれのプロジェクトから読み込むイメージになります。


dev\projects
 service1
   package
   laravel
 service2
   package
   laravel
 vendor
 node_modules

ディレクトリ作成、シンボリックリンク作成

file モジュールを使用し、ディレクトリの作成と作成したディレクトリから Laravel ディレクトリ配下にシンボリックリンクを貼ります。
※シンボリックリンク作成時の「src」にフルパスを指定すると /vagrant/xxx となり、Vagrant 環境では確認できるが、Vagrant とローカルの共有ディレクトリでは見えない状態になってしまうため、ローカルマシンでも表示されるようにシンボリックリンクの src には相対パスを設定します。


    - name: create vendor directory
      file:
        path: "{{ project_root }}/../../vendor"
        state: directory
        owner: vagrant
        group: vagrant
        mode: "u=rwx,g=rx,o=rx"
        recurse: true

    - name: create symbolic link for vendor directory
      file:
        src: "../../vendor"
        dest: "{{ project_root }}/vendor"
        state: link

    - name: create node_modules directory
      file:
        path: "{{ project_root }}../../node_modules"
        state: directory
        owner: vagrant
        group: vagrant
        mode: "u=rwx,g=rx,o=rx"
        recurse: true

    - name: create symbolic link for node_modules directory
      file:
        src: "../../node_modules"
        dest: "{{ project_root }}/node_modules"
        state: link

ライブラリインストール

上記でシンボリックリンクを貼ったディレクトリに、composer ライブラリと node モジュールをインストールします。


    - name: composer install
      composer:
        command: install
        no_dev: no
        working_dir: "{{ project_root }}"
      become_user: vagrant
      become: yes

    - name: npm install
      npm:
        state: present
        path: "{{ project_root }}"
        global: no
      become_user: vagrant
      become: yes

これを各プロジェクト構築時に実行すれば、Laravel ディレクトリ配下に vendor、node_modules ディレクトリのシンボリックリンク作成され、ライブラリの管理は一つでできました。

※ただし、vendor/composer 配下に、PSR-4 や classmap の配列情報を保持しており、Laravel はここの情報からクラスの autoload を生成するため、プロジェクトを切り替える際には、プロジェクト毎に composer dump-autoload が必要となります。

コメント

タイトルとURLをコピーしました