2020/08/30

現在のブランチと同名で push や pull 

通常 Git でブランチの変更を行うような管理の場合、リモートとブランチ名を指定します。


$ git push -u origin master 

ただ、一人で開発する場合、大規模でない限りブランチを利用することはあまりないと思うので、


$ git push

のようにブランチ指定せずに実行もよいかも知れません。

これは、現在のブランチ名がリモートと同じという条件でなりたちます。

config にデフォルト設定する

現在の状態をデフォルトとする設定をします。


$ git config --global push.default current
$ git config --global pull.default current

config を確認すると、 push.default が current に設定されます。


$ git config -l
...
push.default=current
pull.default=current
... 

これで、ブランチ指定せずに現在の状態で pull、 push できるようになりました。

ただしグループ開発するような時は、省略はしない方がよいでしょう。

  2020/08/30

git pull や git push できなくなったとき、ブランチの間違いやファイルがコンフリクトしている可能性があります。

git pull エラー


$ git pull origin master
warning: Pulling without specifying how to reconcile divergent branches is
discouraged. You can squelch this message by running one of the following
commands sometime before your next pull:
...

git pull は fetch と merge を両方実行しているので、コンフリクトが発生するとエラーになります。


$ git fetch
$ git merge origin/master

git push エラー


$ git push origin master
...
fatal: refusing to merge unrelated histories
...

マージを実行

マージを実行するとコンフリクトしています


$ git merge --allow-unrelated-histories origin/master
CONFLICT (add/add): Merge conflict in README.md
Auto-merging README.md
CONFLICT (add/add): Merge conflict in .gitignore
Auto-merging .gitignore
Automatic merge failed; fix conflicts and then commit the result.

コンフリクトファイルを修正して、 commit & push します。


$ git add.
$ git commit -m 'confrict'
$ git push -u origin master

-u は --set-upstream の短縮形です。

  2020/08/17

Docker のコンテナからホストOSに接続するのに「host.docker.internal」というホストが用意されています。

Docker for Mac Stable release notes

Docker For Mac での機能なので、Linux ベースでは利用できないかと思います。

Dockerコンテナから Mac の MySQL に接続

mysql コマンドで Dockerコンテナから、ホストOS(Mac)の MySQL に接続する場合、ホスト名に「host.docker.internal」を指定します。


# mysql -u ユーザ名 -h host.docker.internal -p
mysql>

よって、開発のプログラム上でも「host.docker.internal」をホストで設定して利用できます。

Dockerコンテナから PHP で MySQL の PDO接続


$db_name = 'DB名';
$user_name = 'ユーザ名';
$password = 'パスワード';
$host = 'host.docker.internal';
$dsn = "mysql:dbname={$db_name};host={$host}";

try {
    $pdo = new PDO($dsn, $user_name, $password);
    echo "接続成功" . PHP_EOL;
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage() . PHP_EOL;
    exit;
}

Dockerコンテナから Mac の PostgreSQL に接続


# psql -l -h host.docker.internal -U ユーザ名
                         List of databases
   Name    | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------+----------+---------+-------+-------------------
 postgres  | yoo   | UTF8     | C       | C     | 
 sample    | yoo   | UTF8     | C       | C     | 
 template0 | yoo   | UTF8     | C       | C     | =c/yoo           +
           |       |          |         |       | yoo=CTc/yoo
 template1 | yoo   | UTF8     | C       | C     | =c/yoo           +
           |       |          |         |       | yoo=CTc/yoo

  2020/08/17

Mac でそのまま ifconfig を利用すると、IP アドレスがすぐに見つけられません。


$ ifconfig
lo0: flags=8049 up,loopback,running,multicast  mtu 16384
	options=1203 rxcsum,txcsum,txstatus,sw_timestamp 
	inet 127.0.0.1 netmask 0xff000000 
...

ネットワークインターフェイスを指定する

ネットワークインターフェイスを指定すると比較的見やすくなります。


$ ifconfig en0
en0: flags=xxxxxxxxxx mtu 1500
    ether xx:xx:xx:xx:xx:xx
	inet6 xx:xx:xx:xx:xx:xx%en0 prefixlen 64 secured scopeid 0x7 
	inet 192.168.1.6 netmask 0xffffff00 broadcast 192.168.1.255
    ....

「en0」は PC のネットワークボードによってことなりますが、デフォルトはだいたい「en0」です。

フィルタリングする

更に awk で inet の欄をフィルタリングします。


$ ifconfig en0 | awk '/inet / { print $2 }'
192.168.1.6

.bashrc にエイリアスを作成する

フィルタリングのコマンドを打つのも面倒なので、.bashrc に ip というエイリアスを作成します。
※エイリアス名の ip は簡略化しているので自己責任で

vi などで .bashrc を編集します。


$ vi ~/.bashrc

.bashrc に追加しますが、「'」(シングルクォート)は「'\''」とエスケープする必要があります。


alias ipconfig='ifconfig en0 | awk '\''/inet / { print $2 }'\'''

.bashrc を再読み込みします。


$ source ~/.bashrc

ip と入力すると IPアドレスが表示されます。


$ ip
192.168.1.6

  2020/08/17

ホストOS から Docker の MySQLコンテナにログインする場合、以下の方法があります。

  • MySQL コンテナに bash でログイン
  • mysql コマンドでログイン

MySQL コンテナにログイン

他のコンテナ同様、docker-compose で MySQL コンテナに直接ログインします。


$ docker-compose exec コンテナ名 bash

コンテナ名が mysql だった場合


$ docker-compose exec mysql bash

Docker コンテナにログインしたら、MySQL にログインします。


# mysql -u root -p

この方法は、docker-compose が動作するパスで実行する必要があり、MySQL コンテナ内でも mysql でログインします。

mysql コマンドでログイン

次にホスト OS から mysql コマンドでログインしてみます。

つまりは、Docker の MySQL を外部ホストでログインする方法です。


$ mysql -u root -p -h localhost -P 3306 --protocol=tcp

mysql で localhost を指定すると自分の PC を指すため、--protocol で TCP ソケットを指定する必要があります。

  2020/08/16

caching_sha2_password のエラー

MySQL 8 から認証方式がデフォルトで caching_sha2_password に変更されました。

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors

これにより、caching_sha2_password 認証プラグインに対応していないクライアントは接続できません。(phpMyAdmin の最新版は接続できるはずです)

root ユーザの認証プラグインを変更する

本番環境では推奨されませんが、root ユーザの認証方式を旧方式 mysql_native_password に変更する SQL を実行します。


mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password.check_user_name    | ON     |
| validate_password.dictionary_file    |        |
| validate_password.length             | 8      |
| validate_password.mixed_case_count   | 1      |
| validate_password.number_count       | 1      |
| validate_password.policy             | MEDIUM |
| validate_password.special_char_count | 1      |
+--------------------------------------+--------+
mysql> set global validate_password.policy=LOW;
mysql> set global validate_password.length=4;
mysql> set global validate_password.mixed_case_count=0;
mysql> set global validate_password.number_count=0;
mysql> set global validate_password.special_char_count=0;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

認証プラグインの確認

root ユーザの認証プラグインが mysql_native_password に変更されました。


mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
| yoo              | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+

開発環境のため、パスワードの制約もゆるい設定に変更しましたが、本番では厳しめに設定しましょう。

  2020/08/15

node-config とは

node-config は Node.js で設定ファイル(config)を扱うモジュールです。

設定ファイルを JSON、YAML などの形式で記述して、プログラム上でオブジェクトとして利用できます。

環境変数

process.env でサーバの環境変数を取得することができます。Node.js の本番、開発などの環境変数は NODE_ENV を利用しますが、デフォルトは何も設定されていません。


process.env.NODE_ENV

npm インストール


$ npm install config

ファイル構成


プロジェクト
    |- config + default.json
              |- development.json
    |- node_modules/
    |- package-lock.json
    |- package.json
    |- index.js

設定ファイルの作成

JSON 形式でサーバ設定を記述します。

default.json


{
   "server": {
      "host": "127.0.0.1",
      "port": 3000
   }
}

development.json


{
   "test": 1
}

設定ファイルの読み込み

index.js


const config = require('config');
config.env = process.env.NODE_ENV || 'development';

console.log(config.server.host);
console.log(config.server.port);
console.log(config.test);

NODE_ENV を指定してファイルを実行する

NODE_ENV をターミナルで設定すればそのまま node コマンドで実行できます。


$ export NODE_ENV=development 
$ node app.js

明示的に NODE_ENV=develpment でもファイルを実行できます。


$ NODE_ENV=development node app.js

その他プログラムで環境変数の設定や「cross-env」モジュールを利用することもできます。

  2020/08/14

MySQL をセーフモードで起動する

MySQL サーバを停止します。


$ mysql.server stop

セーフモードで起動します。


$ mysqld_safe --skip-grant-tables &

プロセスを検索して kill します。


$ mysql.server status
 SUCCESS! MySQL running (xxxx)
$ kill xxxx

MySQL サーバーを再起動します。


$ mysql.server restart

パスワードを再設定する

root でログインします。


$ mysql -u root

root ユーザーのパスワードを空に設定します。 もしパスワードを設定したい場合は、null の部分を文字列で入力してください。


mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';

MySQL からログアウトします。


mysql> exit

root でログイン確認する

MySQL を再起動します。


$ mysql.server restart

root でログインできるか確認してみましょう。


$ mysql -u root

またアプリの MySQL ユーザが root の場合は、設定も変更しておきましょう。

  2020/08/14

Laravel プロジェクトを clone しても動作しない

Laravel のプロジェクトはコアライブラリの vender/ や環境設定ファイル .env など必要のないものは Git で管理しません。

当然 Laravel ライブラリがなければ Laravel の機能が利用できず、artisan コマンドでもエラーになります。


PHP Warning:  require(/Users/yoo/projects/techboost/sample_laravel/vendor/autoload.php): failed to open stream: No such file or directory in /Users/yoo/projects/techboost/sample_laravel/artisan on line 18

Laravel ライブラリをインストール

Laravel のライブラリ(vender/) をインストールします。


$ composer install

※Laravel 用の composer.json が存在しないと、実行できません。

インストールが完了したら、artisan の動作を確認します。


$ cd プロジェクトフォルダ
$ php artisan --version

設定ファイルの作成

.env を作成します。


$ cp .env.example .env

DB の設定などがあれば修正しておきます。

アプリケーションキーを生成

Laravel のアプリケーションキーを再生成します。


$ php artisan key:generate

アクセス権の変更

Web サーバが書き込みエラーにならないようにアクセス権限を変更します。


$ chmod 777 storage
$ chmod 777 bootstrap/cache/

DB のマイグレーション

DB を利用している場合は、マイグレーションもしておきましょう。


$ php artisan migrate

Laravel の動作確認

Laravel の動作確認をしましょう。 Web サーバ経由の場合はそのままブラウザで、Laravel のサーバを利用する場合は Laravel サーバを起動して確認します。


$ php artisan serve

  2020/08/09

Docker や VirtualBox ではなく Mac に MySQL をインストールしてみます。

Homebrew から MySQL 最新版をインストール

Homebrew を更新してから MySQL 最新版をインストールします。


$ brew update
$ brew install mysql

パスを設定します。


$ brew link mysql

postinstall します。


$ brew postinstall mysql

インストールが完了したら、バージョンを確認します。


$ mysql --version
mysql  Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)

MySQL の起動・停止

MySQL を起動します。


$ mysql.server start
Starting MySQL
 SUCCESS!

MySQL の停止は以下のコマンドになります。


$ mysql.server stop

MySQL 初期設定

MySQL は管理者(root)のパスワードはデフォルトで設定されていません。
パスワードを変更したい場合は、root パスワードなど初期設定をします。


$ mysql_secure_installation

パスワード強度を設定する「VALIDATE PASSWORD」プラグインを利用する場合は「Y」を入力します。


Press y|Y for Yes, any other key for No:Y

パスワードの強度レベルを設定します。今回は開発なのでレベル「0」にしました。


Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:0

パスワードを入力します。


New password: 
Re-enter new password: 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

その他の設問は「y」を入力します。


Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

MySQL に root でログイン

MySQL に管理者(root)でログインします。

パスワードを設定している場合


$ mysql -uroot -p

パスワードを設定していない場合


$ mysql -uroot

MySQL にログインすると mysql コマンド入力モードになります。


Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.19 Homebrew
...
mysql> 

データベースを作成

mysql コマンドでデータベースを作成します。


mysql> create database sample;

データベース一覧を確認

mysql コマンドでデータベース一覧を確認します。


mysql> show database;
...
+--------------------+
| Database           |
+--------------------+
| information_schema |
| laravel_auth       |
| mysql              |
| performance_schema |
| sample             |
| sys                |
+--------------------+
...

mysql をログアウトします。


mysql> quit

MySQL の自動起動

Mac で MySQL を自動起動するには、brew services を利用します。


$ brew services start mysql

Homebrew サービスの一覧

Homebrew のサービス一覧を確認します。


$ brew services list
Name       Status  User Plist
mysql      started yoo  /Users/yoo/Library/LaunchAgents/homebrew.mxcl.mysql.plist
php        stopped      
php@7.3    stopped      
postgresql started yoo  /Users/yoo/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

設定ファイル my.cnf を確認する

MySQL の設定ファイル my.cnf のパスを検索します。


$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf 

自分の場合は /usr/local/etc/my.cnf に作成されていました。

<< Top < Prev Next > Last >>
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel7 リリース
v-html でHTML表示する
Laravel で Nuxt.js を使ってみる(Docker環境)
Laravel で Vue コンポーネントを使う
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Mac で Laradock の構築