背景
業務では一人で開発するわけではないので、どのレベルの人が入っても気持ちよく開発できるように、最初にプロジェクトを始める人は多少の時間をかけてでも開発しやすい環境を整えておくことは大切だと思います。
ずっと自分が開発に関われるわけではないし、1年後にバグ見つかるかもしれません。
この環境づくりは未来の自分の時間の削減と仲間の時間の削減につながります。
そして、後々恨まれないようにできることはやっておきたいなぁ・・・。
下心
>>>もっといい方法がある、いつもこの設定をしている、など教えてください!!!
自分の環境
どのプロジェクトにも共通するとは思いますが、今回使用したベースの環境は以下の通りです。
- mac
- Laravel sail
- PHP8.1
- Heroku
**テストの環境変数は .env.testing
を使っています。
快適な開発環境を
開発段階で設定したいこと
テストコマンドはカンタンに
例:
→ composer test
でテストできます
phpmyadminを追加
例:
READMEを書く(誰でもクローンして勝手に始められるようになっている?)
- ReadMeを読めばクローンできるようにしたいですよね。
- コードの書き方や命名規則はある程度統一したいので、参考になる資料を貼っておけば、レビューした時に楽そう(いろいろ。。)
- テストを書いて欲しいなら、どうやってテストが動くのかは書いておきたら丁寧ですよね。
- あと、ブランチ運用や構成が書いてあってもわかりやすいなぁと思います。
例:
GithubActionsにフォーマッターを追加(みんなのコード、ある程度は統一させたいな)
- GithubActionsに設定してプルリクした時に勝手にフォーマットしてもらうように設定します。
- 勝手にcommitするようにしてあるのでフォーマットは最低限にしたものを使っています。
(一時期、フォーマットしたコードの変更箇所を自動プルリクされるようにしていたのですが...運用が面倒でした😢)
今回使用しているパッケージ: PHP-CS-Fixer(言語それぞれ何かしらあると思います)
インストールコマンド:
composer require friendsofphp/php-cs-fixer
設定ファイルの例:
.github/workflows/php_cs_fixer.yml
(Github Actions自動コミット)
.php-cs-fixer.dist.php
(フォーマッターの設定)
その機能本当にテストは通っているの🤔
例:
main用のGithubActionsはslack通知を入れます
- Slackにci用のチャンネルを作る
- Github Secretに
SLACK_WEBHOOK
を追加 - ymlファイルを追加
-
prod.yml
の76行目、84行目(Slackのチャンネル名)を編集
リリースする際に設定したいこと
デプロイ完了のSlack通知(ちゃんとデプロイされた?)
- slackと連携して通知を。
例: Heroku
-
Github Secret
にHEROKU_API_TOKEN
を追加 - ymlファイルを追加
- テストが通っていなかったらデプロイしないとか色々設定できます。便利。
Sentryの追加(本番環境で予期せぬエラーは出ていない?)
- Sentryを入れてエラー監視を。
- Sentryに登録して、プロジェクトを追加したら、コマンドを表示してくれるのでその通りにコマンドを打ちます。
- Sentryはとても便利で、環境ごとにエラーを分けてくれます。
APP_ENV
とSENTRY_LARAVEL_DSN
を本番の環境変数に設定します。 -
SENTRY_LARAVEL_DSN
をローカルの環境変数に追加すると、ローカルのログも監視させるので、ローカルには書かないようにします。 - エラーが通知されるようにSlackと連携させます。sentryのコンソールからできます。
- 無駄な通知はオフに。
そのままだと、フロント側(400番台)のエラーもSlackに通知されるので、Handler.php
の$dontReport
に通知したくないExceptionを追加します。
プラスα編
MessageやErrorMessageは統一されるように設定しておきます。
自分は Laravel-fractal
を使用しているが、LaravelにあるResources
を使うなどなんでもいいと思います。
例:
Handler.php
を活用
422のエラーをそのまま返すとフロント側が使いにくかったり、500のエラーには攻撃できる情報(SQLエラーなど)が入っていたりするので、そこら辺をいい感じにします。
例:
Logを日付別に出力させます。
個人の設定ですが、.env
ファイルを変更します。
LOG_CHANNEL=daily
ログの保存期間を7日間に変更したり...
例:
swagger
ymlファイルを作るとこまでやっておく。
コマンド:
//インストール
composer require "darkaonline/l5-swagger"
//設定ファイル
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"
例:
/api/documentation
でアクセスできる。
あとは、ER図を自動的に作成したいなぁ。。