Railsアプリケーションを用いて、Docker・Github・AWS(CodePipeline)などの外部サービスを利用していくと設定ファイルが多くなりどこに何があるのか分からない印象でした。
最初から「Dockerでコンテナ作って、ソース管理はGithub、CI/CDも行いたいからCodePipeline使う」と考えていたら、それらを意識したディレクトリ構成になると思います。
個人レベルでアプリケーションを作るのに最初から意識すると導入に時間が掛かりモチベーションが下がる恐れもあります。
本記事では上記のような、設定ファイルが必要な外部サービスを使うかもしれない、レベルでディレクトリ構成を紹介出来ればと考えています。
前提
考察として使う環境、言語、外部サービスは以下となります。
- VSCode
- VSCode Remote Development
- Ruby on Rails
- Docker
- Docker-Compose
- Github
- Github Actions
- AWS CodePipeline
配置が決められているもの
プロジェクトのルートディレクトリに置かざるを得ないものがいくつかあります。
それらは基本動かせないので決められた箇所に格納します。
例えば、VSCodeのRemoteDevelopment(.devcontainer)やGithub(.git)はルートディレクトリに置かないと機能しません。
rootディレクトリ(VSCodeで開くパス)
├─.devcontainer
│ └─devcontainer.json
├─.git
└─Rails(Railsプロジェクト)
Docker
DockerfileとDocker-Composeは配置に指定が無いので自由に配置可能です。
今回はRailsとNginxのDockerfileがある想定で、そこにDBを追加したdocker-compose.ymlをまとめたディレクトリを追加します。
rootディレクトリ(VSCodeで開くパス)
├─.devcontainer
│ └─devcontainer.json
├─.git
├─Rails(Railsプロジェクト)
└─Docker
├─app_rails
│ └─Dockerfile
├─web_nginx
│ └─Dockerfile
└─docker-compose.yml
AWS CodePipeline(CodeDeploy)
AWS CodePipelineに含まれている、CodeDeployにも設定ファイルが必要です。
こちらもDockerのときと同様に配置場所に指定は無いので、AWSとしてディレクトリを作りそこにまとめます。
rootディレクトリ(VSCodeで開くパス)
├─.devcontainer
│ └─devcontainer.json
├─.git
├─Rails(Railsプロジェクト)
├─Docker
│ ├─app_rails
│ │ └─Dockerfile
│ ├─web_nginx
│ │ └─Dockerfile
│ └─docker-compose.yml
└─AWS
└─CodeDeploy
├─scripts
└─appspec.yml
最終的にこういう形になりました
最終的には下図のようになりました。
使いやすいかどうかは個人によりますが、どこに何があるのか分からないということは無くなると思います。
Nginxを使う場合は、Nginxの設定ファイルも必要になるのでその場合はDockerと同じ場所に配置すれば使うべき場所は把握出来ると思います。
同じようにRails以外のフロントの言語を使う場合はルートディレクトリに置くか、アプリケーションとしてディレクトリを作り、そこにRailsとフロントのディレクトリを作るとかも必要かと思います。
最後に
以上でディレクトリ構成案の紹介となります。
外部サービスにより便利になりましたが反面、多くのサービスに比例して必要なファイルが増えていくためチームで行う場合の成果物の管理はより難しくなって来た印象です。
仕組みを理解していない方々にも直感的に伝わるディレクトリ構成は考えないといけませんね。