雑な投稿ですが、
環境構築とかで迷ってる人の助けになればと思います。
projectという、オープンソースのパッケージをダウンロードした前提です。
$ cd project
$ cd ← ホームディレクトリに戻る
$ cd project ← projectフォルダへ移動する。
$ pwd ← 自分が今ドコにいるのかを確認する。
「cd」でFinderで言う所の「フォルダ移動」です、
自分がどのフォルダを今触るかを変えます。
ちなみに、入力が面倒な時は「cd 」と入力した後で、Finderで移動したいフォルダを
ターミナルにドラッグ&ドロップすると、カンタンに入力できます。
$ rm -f .gitignore
$ rm -rf /directly ←ディレクトリを削除する時
上は「.gitignore
」を削除するコマンドです。-f
は確認なしで削除する意味です。
rm
は「remove」で、 -f
は「force」の頭文字。
$ git init
新規作成もしくは初期化コマンド。「ココはgitで管理しますよ」宣言です。
オープンソースのパッケージを公式ページからダウンロードしたリポジトリなどには、
公式のgit
の設定があるので、自分用に使う場合に初期化する必要があります。
$ git remote add origin git@bitbucket.org:company_name/my-project.git
リモートリポジトリの追加です。↑URLはgithub
だったりしますが、基本同じ。
オンライン上のこのリポジトリとやり取りしますよ、ということです。
$ git fetch origin
「フェッチ」は、ファイルは更新されないけど、リポジトリは更新されます。
自分のローカルに持ってるmaster
が古くなっちゃったな(もしくは新規で作った)
という時に最新の情報にするために使います。
$ git reset --hard origin/master
コミットを取り消す時などに「git reset
」をよく使います
間違えてコミットしちゃった!
$ git log -1
commit 12345678901234567890
Author: nishi
消しちゃう!
$ git reset --hard 12345678901234567890
そのあと
git reset --hard origin/master
を使うと、強制的にリモートブランチと同じになります。
「もはや何をどう操作したかも覚えてないけど、ローカルがこんがらがってしまった!」
って時に、強制的にgithub(またはbitbucket など)
と同じにしてくれるものです。
$ git remote set-head origin master
ローカルにHEADがない(何もコミットがされてない)という時にHEADを設定するコマンド。
HEADとは「今どのブランチ・どのコミットの状態を見てるか」という事です。
git branch
で、時々masterでもdevelopでもない所にHEADが行っちゃって
$ git branch
* [HEAD detached at xxxxxxxx]
master
develop
みたいなエラー(ヘッドが行方不明)になることがあります。
適当なブランチをcheckoutしたり、git/HEAD
をいじって見たりで治ったりします。
Docker
次はdocker(docker-compose)ですが、
$ docker compose up -d
docker compose up
は複数の「コンテナ」を同時に、
しかも連携が取れた状態で起動します。
php
とmysql
コンテナを同じ仮想サーバーの中に立ててくれる感じです。
-d
はオプションで、バックグラウンドで起動する意味。
作業する時、ターミナルをいちいち別窓で開いたりしなくてよくなります。
他によく使うコマンドはコレ。
$ docker compose down
$ doccker compose ps
#イメージもろとも削除
$ docker compose down --rmi all --volumes
難解なチャットを翻訳する
「コンストラクタのタイプヒントでのDIによりエラーになる」
専門用語は結構 「初心者殺し」 なので、
コマンドではないのですが「むずい!」と思うので解説します。
「DI」って何?
→ Dependency injection
「依存性の注入」のこと。
最近のプログラムは「このソースは他のアレとコレを参照(依存)しています。」
と「静的評価」(=動かす前にチェック)してからプログラムを処理していく感じです。
//↓インターフェイスを定義
interface Fuga
{
public function Piyo();
}
class Hoge{
private $service; //↓型 ↓変数
public function __construct(Fuga $foo)
{
$this-> bar = $foo;
}
public function Piyo()
{
$this-> bar ->Piyo();
}
}
↓Fugaを実装したクラス
class Service implements Fuga
{
public function Piyo()
{
// 処理
}
}
コンストラクタって何?
__construct
← これがPHP7の「コンストラクタ」です。
コンストラクタの意味は「最初に実行するやつ」です。
「Fuga」を実装したクラスの「オブジェクト」が渡ってきたら実行できる。…むずいかも?
タイプヒントって何?
「型宣言」のことです。この例文だと「Fuga」っていう「型」で変数「$foo」を
受け取りますよ〜っていうこと。「型」っていうといろいろ話がややこしいんですが。
「インターフェイス型」というか、「データ形式ひと塊」を「インターフェイス」という。
依存性(dependency)って何?
静的評価しないJavascrpt
で例えるならば、「jQueryプラグイン」がある時に
「jQuery
(=依存しているライブラリ)」がなかった時、もちろん動かないんですが、
ブラウザに「$ is not defined
」って出るだけで、html
やcss
は見えたりします。
これ「依存性を解決してないまま実行してる」って事です
「依存性を評価する」ということは
参照してる関数から「例外」とか「NULL
」が返ってきたとかで、
動かないようになります。
###静的評価って何?
「プログラムがブラウザで動く前」にエラーを返します。
なので「受け取るはずの変数が空っぽだ、引数の数や型が違う」などは、
ブラウザで動く前に、エラーとして弾かれてしまう感じです。
なので、下記のような一見何やってるか分からないコマンドがあるとして、
$ mv ./app/Controller/X.php ./app/Controller/X.php.txt
$ mv ./app/Controller/Y.php ./app/Controller/Y.php.txt
$ mv ./app/Controller/Z.php ./app/Controller/Z.php.txt
$ mv ./app/Controller/A.php ./app/Controller/A.php.txt
$ mv ./app/Controller/B.php ./app/Controller/B.php.txt
$ mv ./app/Controller/C.php ./app/Controller/C.php.txt
$ mv ./app/Controller/D.php ./app/Controller/D.php.txt
$ mv ./app/EventListener/F.php ./app/EventListener/F.php.txt
読み方:mv フォルダ/ファイル名1 (半角スペース) フォルダ/ファイル名2
mv
は「ファイル名1をファイル名2っていう名前にして移動する」=「名前の変更」です。
一旦PHPファイルじゃなくて、テキストファイルにして、
DIで評価されないようにしてるって事です。
$ docker compose exec container bash -c "app/console XXX:YYY"
このコマンドは
docker compose exec container
と "app/console
と XXX:YYY
"
に分けて読んで下さい。
左は「docker-compose
」のコマンドで、
右のやつは「Symfony
」というか、使ってるパッケージの独自のコンソールコマンドです。
app/console
の中に入ってるXXX:YYY
というコマンドを叩いてます。
「Symfony」はPHPフレームワークです。
「Laravel」は、なんとなく聞いた事があると思いますが、アレ系の一種です。
ガチガチの型、というか規約のある書き方で、
誰が書いてもだいたい一緒のコードになります。
docker-compose
の環境で使う場合、コンテナに入らなくても叩けます。
$ docker-compose exec コンテナ名 bash -c '(ココに挟んで使うとdockerの中でのコマンドが使えます)'
メモリ設定をphp.ini
に書きます。
$ echo 'memory_limit = 1G' >> dockerbuild/php.ini
デフォルトが128MBになっているので、
php.ini
ファイルに上限1GBまで使うように書いています。
echo 'テキスト' >> ファイル
エディタで開いて一行追加して保存するのと同じ事です。
このphp.ini
ファイルは、dockerをbuildする時のみ読み込まれるものです。
$ docker-compose down
一度コンテナをおとします。
$ docker-compose up --build -d
今度は--build
を付けて起動します。
※もう一回Dockerfile
の内容でビルドするので時間かかります。
↓リネームした場所を元に戻すコマンド
$ git checkout ./app/DIRECTORY_NAME/
通常、「git checkout ブランチ名
」などでリモートのブランチを持ってきたりしますが、
「git checkout (ディレクトリ指定)
」で、そのフォルダ以下だけを持ってくる事ができます。
##レコードを追加
これはSQL
の話です。このままターミナルに打ち込んでも動きません。
docker-compose exec
で、MySQLコンテナの中で叩くのですが、
それ大変だとおもうので、Sequelとか起動して使うのオススメです。
カラム追加をするSQL(INSERT
)は
INSERT INTO テーブル(カラム1、カラム2) VALUES (値1、値2)
というような書き方をします。
INSERT INTO `dtb_XXX` (`id`, `type_id`, `code`, `name`, `create_date`, `update_date`, `discriminator_type`)
VALUES
(1, 2, 'custom', 'custom', '20XX-XX-XX 10:14:52', '20XX-XX-XX 10:XX:XX', 'discriminator_name');
対象のデータベースに、一行レコードが追加されます。
以上です。