今回、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 が必要となります。
コメント