自称プログラマの週末

週末に気になることを調べて、何とかまとめていくブログ

そしてUnityへ

ここ数年PHPで開発をしていた私ですが、色々あってUnityを使うことになりました。
Unityの機能にTimelineというものがあるのですが、
そちらを使って色々作っていくにあたりクリップの拡張などをお勉強しております。

まだ勉強中により記事にできるほどの知識もありませんが、
カスタムクリップがTimeline再生後にインスペクタの値がそのまま保存される問題と戦っております。

そちらの綺麗な解決策などが出来ましたら是非書き下ろしたいところです。

  • 今は無理やり下記の中で変数を初期化しているという
public override Playable CreatePlayable(PlayableGraph graph, GameObject go)

起動時、終了時しか走らないので問題がないといえばないですが、何かおかしい気がしています・・・。


個人的にお勉強になった動画

Docker ComposeでLaravel環境構築を目指す

触ったことはあるけども、理解が浅いので一度整理しつつ用意をしていこうという個人企画です。 1歩ずつ進んでいきたいと思っておりますが、勉強不足部分がちらほら出てきてしまうかと思いますが、何卒生暖かい目でお願い致します。

■Docker準備

curl https://get.docker.com | sh
sudo usermod -aG docker $USER
sudo systemctl start docker
sudo systemctl enable docker
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

■設定ファイル用意

  • confファイル置き場の作成
$ mkdir -p workspace/docker/web
$ cd workspace/docker/web
  • confファイル作成
$ vim workspace/docker/web/default.conf
server {
    listen 80;

    root  /var/www/html;
    index index.html;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;
}
  • docker-compose.ymlの用意
$ vim workspace/docker-compose.yml
version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html
  • index.html用意

表示するものを置いてませんでした。

$ vim workspace/index.html
<h1>Hello</h1>

<p>Docker OBENKYOU!</p>

■ 起動してみよう

$ cd workspace/
$ docker-compose up -d
Creating network "workspace_default" with the default driver
Pulling web (nginx:1.15.6)...
1.15.6: Pulling from library/nginx
a5a6f2f73cd8: Pull complete
67da5fbcb7a0: Pull complete
e82455fa5628: Pull complete
Digest: sha256:31b8e90a349d1fce7621f5a5a08e4fc519b634f7d3feb09d53fac9b12aa4d991
Status: Downloaded newer image for nginx:1.15.6
Creating workspace_web_1 ... 
Creating workspace_web_1 ... done

http://localhost:8000 にアクセス

とりあえずdockerでnginxの起動から接続まで確認 次はphpを入れてみる

  • PHPはサービスにappを追加します
$ vim docker-compose.yml
version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    depends_on: # 追加
      - app # 追加
    volumes:
      - ./docker/web/default.conf:/etc/nginx/conf.d/default.conf
      - .:/var/www/html

  # ここから下も追加
  app:
    image: php:7.2.12-fpm
    volumes:
      - .:/var/www/html

depends_onは依存関係を作る際に使うみたいです
linksというのも似たような動作みたいですが、エイリアス名(サービス名)でコンテナアクセスができるようになるらしいです
今回はdepends_onのまま進めます

  • Nginxの設定

PHPを使えるようにする

$ vim docker/web/default.conf
server {
    listen 80;

    root  /var/www/html;
    index index.php index.html;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass   app:9000;
          fastcgi_index  index.php;

          include        fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO $fastcgi_path_info;
      }
}
  • htmlの更新

php確認用にindex.phpを作成

<h1>Hello</h1>

<p>Docker OBENKYOU!</p>
<?php phpinfo();?>

docker-composeを再度up -dで起動
色々追加されていき無事完了したらブラウザから確認

無事phpinfoの内容が表示されたら完了です
次はMySQLを別なdockerで起動します

MySQL

MySQLもdockerのサービスに設定を書きましょう
通常のMySQL設定をそのまま書けばいいようなので、MySQLの設定をしたことがあればすぐにできるはず。きっと。

$ vim workspace/docker-compose.yml
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: sample
      MYSQL_USER: user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - mysql-data:/var/lib/mysql
volumes:
  mysql-data:

ついでにphp設定と同様にdespend_onにmysqlを追加します

depends_on:
      - app
      - mysql # 追加
  • 再度、dockerを立ち上げて確認
$ docker-compose up -d
Creating volume "workspace_mysql-data" with default driver
Pulling mysql (mysql:5.7)...
5.7: Pulling from library/mysql
f7e2b70d04ae: Pull complete
df7f6307ff0a: Pull complete
e29ed02b1013: Pull complete
9cb929db392c: Pull complete
42cc77b24286: Pull complete
a6d57750cc73: Pull complete
79510826e343: Pull complete
07e462ad61e2: Pull complete
fa594cb5b94d: Pull complete
1b44278270ad: Pull complete
3edb3c323f55: Pull complete
Digest: sha256:de482b2b0fdbe5bb142462c07c5650a74e0daa31e501bc52448a2be10f384e6d
Status: Downloaded newer image for mysql:5.7
Starting workspace_app_1 ... 
Starting workspace_app_1
Creating workspace_mysql_1 ... 
Creating workspace_mysql_1 ... done
Recreating workspace_web_1 ... 
Recreating workspace_web_1 ... done
$ docker-compose ps
      Name                   Command            State            Ports          
--------------------------------------------------------------------------------
workspace_app_1     docker-php-entrypoint       Up      9000/tcp                
                    php-fpm                                                     
workspace_mysql_1   docker-entrypoint.sh        Up      0.0.0.0:3306->3306/tcp, 
                    mysqld                              33060/tcp               
workspace_web_1     nginx -g daemon off;        Up      0.0.0.0:8000->80/tcp

MySQLも無事入りました

  • Dockerファイル作成

これからcomposerの準備に入ります

$ vim docker/Dockerfile
FROM php:7.2.12-fpm

# install composer
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
bash

RUN apt-get update \
    && apt-get install -y libpq-dev \
    && docker-php-ext-install pdo_mysql pdo_pgsql

WORKDIR /var/www/html
  • Dockerfileを読み込むように設定
$ vim docker-compose.yml
services:
  app:
    build: ./docker # 追加
  • build
$ docker-compose build

Dockerファイルによりcomposerも使えるようになっていますので、imageに入ってから操作を行いましょう

$ docker-compose exec app bash
# composer create-project --prefer-dist laravel/laravel LaravelTest
Do not run Composer as root/super user! See https://getcomposer.org/root for details

■Laravelが用意出来ました!!

そして気が付きました。エディタとか用意してないなぁ・・・と
次はエディタ用意します。というか先に用意しておけよ俺!!

この記事も作業が落ち着いたら作り直さないとわかりにくいですね


■番外編 エディタ決定

Visual Studio Codeを入れました
EXTENSIONS

  • PHP IntelliSense
  • php cs fixer
  • Dot ENV
  • Material Icon Theme

  • Laravelにパスを変更する
$ vim docker/web/default.conf
root /var/www/html/LaravelTest/public; # /var/www/html;から変更
  • docker再起動後にアクセス
 UnexpectedValueException
The stream or file "/var/www/html/LaravelTest/storage/logs/laravel-2019-03-23.log" could not be opened: failed to open stream: Permission denied

rootでLravelを作ってしまってた・・・
パーミッションエラーが出てしまいました

$ sudo chown -R docker:docker LaravelTest
$ docker-compose restart

あれ、まだ動かない・・・
logsのディレクトリを変えないとダメか

$ cd ~/workspace/LaravelTest/storage
$ sudo chmod -R 777 .
$ docker-compose restart

やっと動いた! クリアだクリア!

あ、MySQLまだつないでなかった・・・。 もう少し、繋いだら本当のクリアが待っている!

  • .envを編集
DB_HOST=mysql # 127.0.0.1から変更
  • restart
$ docker-compose restart
$ docker-compose exec app bash
# cd LaravelTest/
# php artisan migrate
 Illuminate\Database\QueryException  : <= 改行してます
SQLSTATE[HY000] [1045] Access denied for user 'homestead'@'172.18.0.2' (using password: YES) 
(SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations)

エラーだ・・・。 調べたところ、mysqlの設定がミスしてるんじゃないかということ。 そうまさに、間違ってた。

  • 再度.envを編集
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=sample # <= ここも
DB_USERNAME=user   # <= ここだって
DB_PASSWORD=password

再度dockerをリスタートして、commandを撃ちますと

# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

繋がった!
これでappからmysqlへの接続が完了しました
第一弾としてはここまで、次は開発のシュミレーションをしつつ、デバッグ環境を作ってみようかと思います