質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

2回答

327閲覧

CircleCI config.ymlの作成方法について(laravel)

aid2020

総合スコア1

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

0クリップ

投稿2024/05/16 03:20

編集2024/05/17 00:04

実現したいこと

config.ymlを作成して、CircleCIでテストを自動で行えるよう設定したい。
最終的にはデプロイの自動化まで設定したい。

発生している問題・分からないこと

CircleCIのconfig.ymlファイルの作成手順について、教えていただきたいです。
Laravel学習中です。アプリケーションを作成し、AWS(EC2)にデプロイしました。テストファイルも作成済みです。

開発環境ではDocker(docker-compose.yml)を用いてphp、nginx、mysql、phpmyadminのコンテナを作成したので、これと同じような手順でビルドできれば良いかなと考えています。
具体的には以下の通りです。

  • Docker Compose upでphpとmysqlのコンテナを作成(CIの環境ではnginx、phpmyadminは不要かと思いますので、省略)
  • composer install
  • .envファイルの設定(Environment Variablesで設定すべき?)
  • アプリケーションキーの生成
  • データベースのセットアップ
  • テストの実行

現状Docker Compose upのところで、以下のようなエラーが発生しています。

FileNotFoundError: [Errno 2] No such file or directory: 'docker': 'docker'
[65] Failed to execute script docker-compose

エラーの解消も必要なのですが、そもそも環境構築の経験や知識がほとんどないので、全く的外れなものを作っているのではないかという気がしています。
大枠としてこのような作成手順で良いのかという観点でアドバイスいただけたらありがたいです。

よろしくお願いいたします。

該当のソースコード

config.yml

1version: 2.1 2 3jobs: 4 build: 5 docker: 6 - image: php:8.1-fpm 7 steps: 8 - checkout 9 10 # Dockerのセットアップ 11 - setup_remote_docker: 12 version: 20.10.7 13 14 # Docker Compose のインストール 15 - run: 16 name: Install Docker Compose 17 command: | 18 curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 19 chmod +x /usr/local/bin/docker-compose 20 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 21 22 # シンボリックリンクの確認 23 - run: 24 name: Verify Symbolic Link 25 command: | 26 if [ -L /usr/bin/docker-compose ]; then 27 echo "Symbolic link exists." 28 ls -l /usr/bin/docker-compose 29 else 30 echo "Symbolic link does not exist." 31 fi 32 33 # Docker Compose のパス確認 34 - run: 35 name: Check Docker Compose Path 36 command: | 37 if command -v docker-compose >/dev/null 2>&1; then 38 echo "Docker Compose is available in PATH" 39 which docker-compose 40 else 41 echo "Docker Compose is not available in PATH" 42 fi 43 44 # Docker Compose がインストールされているか確認 45 - run: 46 name: Check Docker Compose version 47 command: docker-compose --version 48 49 # Docker Compose プロジェクトの構築と起動 50 - run: 51 name: Docker Compose up 52 command: | 53 pwd 54 docker-compose -f docker-compose.yml up -d --build 55 56 # 依存関係のインストール 57 - run: 58 name: Install dependencies 59 command: docker-compose exec php composer install 60 61 # 環境変数ファイルのコピー 62 - run: 63 name: Copy .env 64 command: | 65 cp .env.example .env 66 67 # .envファイルの設定更新 68 - run: 69 name: Update .env for testing 70 command: | 71 sed -i 's/DB_HOST=127.0.0.1/DB_HOST=mysql/' .env && \ 72 sed -i 's/DB_DATABASE=laravel/DB_DATABASE=laravel_db/' .env && \ 73 sed -i 's/DB_USERNAME=root/DB_USERNAME=laravel_user/' .env && \ 74 sed -i 's/DB_PASSWORD=/DB_PASSWORD=laravel_pass/' .env 75 76 # アプリケーションキーの生成 77 - run: 78 name: Generate application key 79 command: docker-compose exec php php artisan key:generate 80 81 # データベースのセットアップ 82 - run: 83 name: Wait for MySQL 84 command: docker-compose exec php sh -c 'while ! mysqladmin ping -hmysql --silent; do sleep 1; done' 85 86 - run: 87 name: Run migrations 88 command: docker-compose exec php php artisan migrate --force 89 90 # PHPUnitテストの実行 91 - run: 92 name: Run tests 93 command: docker-compose exec php ./vendor/bin/phpunit 94 95workflows: 96 version: 2 97 build_and_test: 98 jobs: 99 - build 100

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果
docker: - image:
environment: MYSQL_ROOT_PASSWORD: pass MYSQL_DATABASE: laravel MYSQL_USER: laravel

mysqlのイメージを追加すべき?またはdocker-compose.ymlにまとめて記述されているので追加は不要?

補足

Dockerfileとdocker-compose.ymlの内容は以下の通りです。

Dockerfile

FROM php:8.1-fpm COPY php.ini /usr/local/etc/php/ RUN apt update \ && apt install -y default-mysql-client zlib1g-dev libzip-dev unzip libpng-dev libjpeg-dev \ && docker-php-ext-configure gd --with-jpeg \ && docker-php-ext-install pdo_mysql zip gd RUN curl -sS https://getcomposer.org/installer | php \ && mv composer.phar /usr/local/bin/composer \ && composer self-update WORKDIR /var/www

docker-compose.yml

version: '3.8' services: nginx: image: nginx:1.21.1 ports: - "80:80" volumes: - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf - ./src:/var/www/ depends_on: - php php: build: ./docker/php volumes: - ./src:/var/www/ mysql: image: mysql:8.0.26 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel_db MYSQL_USER: laravel_user MYSQL_PASSWORD: laravel_pass command: mysqld --default-authentication-plugin=mysql_native_password volumes: - ./docker/mysql/data:/var/lib/mysql - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf platform: linux/amd64 phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=laravel_user - PMA_PASSWORD=laravel_pass depends_on: - mysql ports: - 8080:80 platform: linux/amd64

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eggpan

2024/05/16 10:22

> Failed to execute script docker-compose となっていますが、docker-compose.ymlやDockerfileの内容を追記いただくことはできますか? docker-compose upが失敗しているように見受けられます。 また、エラーに直接関係あるかはわかりませんが、docker-compose v1.xはEOLになって1年ほどたちますので利用しないほうがよいかと思います。
aid2020

2024/05/17 00:08

コメントありがとうございます。 補足に追記しましたので、お気付きの点があれば教えていただけると幸いです。 EOLの部分は修正してみたいと思います。
guest

回答2

0

エラーの解消も必要なのですが、そもそも環境構築の経験や知識がほとんどないので、全く的外れなものを作っているのではないかという気がしています。
大枠としてこのような作成手順で良いのかという観点でアドバイスいただけたらありがたいです。

作成手順としては問題ないです。
しかし、何を目的として何を達成したいのかによると思います。

CircleCI で Docker をビルドしてテスト、そのままEC2へDockerをデプロイする。という流れを作るのは自然ですし、環境の差異を無くす方法を達成したいのかと思います。

しかしDockerでビルドしてもテスト環境や本番環境は別でビルドする事になれば(例えばcomposerのdevを含めないとかで十分あり得ます)少しずれてしまう行動になってしまいます。
完全に同じ環境で整えるのは手間がかかり過ぎてしまうので、どこかで妥協する必要もあります。個人的にはDockerで環境構築してもaptのバージョンアップデートにより作り直しになった経験もあるので、手間がかかってしまう割に使える期間が短いと感じます。

LaravelであればDockerに依存しなくても基本的なLAMP環境であれば使えるので、手間を嫌うのであればそちらも選択肢に入れても良いかもしれません。
いわゆるレガシーと呼ぶ人も居ますが、長期間の使用実績がある魅力もあります。
Dockerでの環境構築は新しい技術ですが、環境構築を行う時間も大量に必要になるので、アプリケーションとしてユーザーに機能を提供する時間が少なくなってしまうパターンが考えられます。

精神論的な話になってしまいましたが、最終的にサービス公開後のユーザーにとってメリット(バグが無い or 素早く新しいサービスが体験できる)になるのであればなんだっていいと思います。

投稿2024/05/28 06:07

ytsuyuzaki

総合スコア53

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aid2020

2024/05/29 04:47

環境構築はこれまでDockerしか利用してきませんでしたが、XAMPPまたはMAMPを使用するということも十分選択肢になるという事ですね。作成手順としては問題ないということでもう少し見直してみたいと思います。回答ありがとうございました。
ytsuyuzaki

2024/05/29 05:00

エラーの解消とは別のことを書きましたが、回答になっていたのであれば幸いです。 他、回答が必要であれば私で出来る事ならお力添えしたいと思います。 無ければベストアンサーに選んでいただき、質問を解決状態にしてもらえればと思います。
guest

0

質問は全部無視して後から見る人のために
CIでLaravelをテストするベストな方法を書く。

とはいえPHPが動く環境さえ用意すればGitHub Actions以外でも流れは同じ。

composer install cp .env.example .env php artisan key:generate vendor/bin/phpunit

Dockerを使うような余計なことをするから難しくなる。

環境変数はphpunit.xmlで設定。
https://github.com/laravel/laravel/blob/11.x/phpunit.xml
テストでデータベースを使うならphpunit.xmlでインメモリSQLiteを使うように設定が必要。
コメントになってる部分を外す。

xml

1<env name="DB_CONNECTION" value="sqlite"/> 2<env name="DB_DATABASE" value=":memory:"/>

Laravel11でSailを使ってない場合、プロジェクト作成後すぐにここを変えないとローカルのテストでもDBが消される。

Laravelプロジェクトの99%はインメモリSQLiteで十分。
本物のMySQLを使ったテストが必要になることはない。

投稿2024/05/16 06:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aid2020

2024/05/16 07:34

Docker関連の理解が不足しているので、引き続き学習したいと思いますが、 大筋の流れは合っているようなので、もっと他のシンプルな方法で設定しても良いように感じました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問