nkimraの日記

技術的なメモのブログ。

Visual Studio CodeでのPHP開発環境

Visual Studio CodePHP開発を行うための開発環境構築メモ。

1.テーマの変更
デフォルトテーマから「Default Dark+」に変更する。

2.フォントの変更
フォントを「Ricty Diminished」に変更する。
GitHub - edihbrandon/RictyDiminished: Ricty Diminished --- fonts for programming

3.プラグインをインストールする。

PHP IntelliSense
PHP Debug

PlayFramework(Java)開発環境構築

環境

macOS Mojave
Java 11
PlayFramework 2.6

プロジェクトの作成。
いつのまにかactivatorでは無くなっていた。
sbtが入って無ければインストールする。

brew install sbt

下記のコマンドを実行するとプロジェクトが作成される。
プロジェクト名は途中で聞かれる。

sbt new playframework/play-java-seed.g8

IntelliJでのビルド方法
1.Import Projectで上記で作成したディレクトリを指定する。
2.sbtで開く。
3.Run - Edit Configurationsを開く。
4.+で「sbt Task」を選ぶ。
5.Tasksに「run」を入力する。

Docker用のLaravelテンプレート

Laravelでプロジェクトを作成する機会が増えたので、できるだけ自動化できるようにテンプレートを作成してみました。

環境

Nginx:Latest
PHP:7.3.0
Laravel:5.7
MariaDB:Latest

ディレクトリ構成

docker-laravel-template
├── data
│   ├── db
│   └── logs
├── docker-compose.yml
├── init.sh(初回起動バッチ)
├── src(配下にLaravelプロジェクトを作成)
└── web
    ├── app.docker
    ├── default.txt(defaut.confの雛形)
    └── php.ini

基本的にinit.shに必要な情報を記載する。

init.sh

#!/bin/bash

# Laravel Project Name
export LARAVEL_PROJECT_NAME=sample

# nginx setting for docker-compose.yml
export CONTAINER_NAME_NGINX=laravel_nginx

# php setting for docker-compose.yml
export CONTAINER_NAME_PHP=laravel_php

# mariadb setting for docker-compose.yml
export CONTAINER_NAME_DB=laravel_db
export ROOT_PASSWORD=password
export DB_NAME=db_laravel

# replace default.conf
cat web/default.txt | sed -e "s/laravel/${LARAVEL_PROJECT_NAME}/g" > web/default.conf

# run docker-compose
docker-compose up -d

# create laravel project
docker-compose exec php composer create-project --prefer-dist laravel/laravel ${LARAVEL_PROJECT_NAME} "5.7.*"

# create env
cd src/${LARAVEL_PROJECT_NAME}
cat .env.example | sed -e "s/DB_HOST=127.0.0.1/DB_HOST=${CONTAINER_NAME_DB}/g"\
 -e "s/DB_DATABASE=homestead/DB_DATABASE=${DB_NAME}/g"\
 -e "s/DB_USERNAME=homestead/DB_USERNAME=root/g"\
 -e "s/DB_PASSWORD=secret/DB_PASSWORD=${ROOT_PASSWORD}/g" > .env

# generate laravel key
docker-compose exec php php ${LARAVEL_PROJECT_NAME}/artisan key:generate

docker-compose.yml

version: '3'
services:
    nginx:
        container_name: ${CONTAINER_NAME_NGINX}
        image: nginx:latest
        ports:
            - "80:80"
        volumes:
            - ./web/default.conf:/etc/nginx/conf.d/default.conf
            - ./src:/var/www/html
            - ./data/logs/:/var/log/nginx/
        depends_on:
            - php
        external_links:
            - db
        restart: always

    php:
        container_name: ${CONTAINER_NAME_PHP}
        build:
            context: ./web
            dockerfile: app.docker
        volumes:
            - ./src:/var/www/html
        restart: always

    db:
        image: mariadb
        container_name: ${CONTAINER_NAME_DB}
        environment:
            MYSQL_ROOT_PASSWORD: ${ROOT_PASSWORD}
            MYSQL_DATABASE: ${DB_NAME}
        volumes:
            - ./data/db:/var/lib/mysql
        command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
        restart: always

app.docker

FROM php:7.3.0-fpm

COPY php.ini /usr/local/etc/php/

RUN apt-get update -y && apt-get upgrade -y && apt-get install mysql-client git vim unzip zip -y
RUN docker-php-ext-install mysqli pdo pdo_mysql 

# install composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

default.txt

server {
    listen 80;
    server_name _;

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

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

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

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
memory_limit = 64M

今回のソースはGithubにあげてます。
github.com

MariaDBで複数DBを作る

環境

macOS  Mojave

DockerでMariaDBで複数DBを同時に作る必要があったので、そのやり方のメモ。
DB1個であれば、MYSQL_DATABASEだけで作れる。
2個以上作りたい場合は、docker-entrypoint-initdb.dというのを使う。
docker-entrypoint-initdb.dにはsqlやsh等を使えるらしい。

手順

まずdocker-compose.ymlを次のように記載する

version: '3'
services:
    mariadb:
        container_name: mariadb
        build: ./db/
        ports:
            - 3306:3306
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_USER: user
            MYSQL_PASSWORD: pass
            MYSQL_DATABASE: hoge
        volumes:
            - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
        restart: always
        command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

まずdb/Dockerfileを次のように記載する

FROM mariadb:latest

COPY ./my.cnf /etc/mysql/my.cnf
COPY ./init.sql /docker-entrypoint-initdb.d/init.sql

my.cnfを次のように記載する

[mysqld]
character-set-server=utf8
datadir = /var/lib/mysql

init.sqlにCREATE文とGRANT文を記載する

CREATE DATABASE moge;
GRANT ALL ON moge.* TO 'user'@'%';

Dockerを作成

docker-compose up -d

データベースが閲覧できることを確認。

mysql -h 127.0.0.1 -uhoge -p
pass

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hoge               |
| information_schema |
| moge               |
+--------------------+

Laravelでデバッグ環境を作る

Laravelにデバッグバーというデバッグツールがあるのでインストール手順のメモ。

Laravel5.7で確認。

composerでインストール可能。

composer require barryvdh/laravel-debugbar

インストール後にLaravel画面をブラウザで開くと画面下部にツールバーが表示される。

f:id:nkimra:20181203225437p:plain
DebugBar

Raspberry Pi ZeroにUSBで接続する

Mac(High Sierra)からUSB経由でSSHRaspberry Pi Zeroに接続する方法メモ。

まずOSをダウンロード、Download Raspbian for Raspberry PiからRASPBIAN STRETCH LITEのZIPファイルをダウンロード。

MicroSDカードの初期化はディスクユーティリティでもできるが、うまくいかないときはSDメモリカードフォーマッターを使う。

ここからターミナルでやる作業。まずダウンロードしたZIPを解凍。

$unzip 2017-09-07-raspbian-stretch-lite.zip

インストール先を確認。FAT形式のものがSDカードになる。(今回は/dev/disk3だった)

$diskutil list

インストールコマンド実行。(diskよりもrdiskの方が速いらしい)

$sudo dd bs=1m if=2017-09-07-raspbian-stretch-lite.img of=/dev/rdisk3

RASPBIANインストール後にSDカード内の2つの設定ファイルを追記する。

・config.txt
dtoverlay=dwc2を追加

・cmdline.txt
最後にmodules-load=dwc2,g_etherを追加

Raspberry Pi ZeroをMacでUSBに繋いで電源をいれて1〜2分待つ。
ターミナルで下記コマンドを実行。

ssh pi@raspberrypi.local

ログインできればOK。

なおネットに接続するためにはMac側でインターネット共有を有効にする必要がある。

f:id:nkimra:20171126223437p:plain

Ethernet Gadgetにチェックをつけ、インターネット共有をオンにする。

OSの再起動を行う

要Root化。以下のようなコードで実現できるらしい。

try {
    Process p = null;
    p = Runtime.getRuntime().exec("su");
    OutputStream o = p.getOutputStream();
    o.write("reboot\n\r".getBytes());
    o.flush();
} catch (IOException e) {
    e.printStackTrace();
}

ACCESS_SUPERUSERについて警告が出たらAndroidManifest.xmlに次の一文を追加する。

<uses-permission android:name="android.permission.ACCESS_SUPERUSER" />