LoginSignup
0
0

コマンド解説:今何やったの?

Last updated at Posted at 2021-12-03

雑な投稿ですが、
環境構築とかで迷ってる人の助けになればと思います。

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は複数の「コンテナ」を同時に、
しかも連携が取れた状態で起動します。

phpmysqlコンテナを同じ仮想サーバーの中に立ててくれる感じです。
-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」って出るだけで、htmlcssは見えたりします。
これ「依存性を解決してないまま実行してる」って事です

「依存性を評価する」ということは
参照してる関数から「例外」とか「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/consoleXXX: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');

対象のデータベースに、一行レコードが追加されます。

以上です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0