Ubuntu環境構築してみる。

どうも!わたしはlinuxばかり触ってきた身なもので、
今回はubuntuを触ってみます!
わたしの妄想では、この2つにあんまり違いはないんでないかなって思ってました。
構築しただけだと、その認識のままです。
触りこんでくと違うんですかね。

<使うもの>
・Mac
・Vagrant
・VirtualBox

<構築環境>
・ubuntu
・Apache
・ホストOSとの共有ディレクトリ → ubuntu_share/
・(おまけ)pythonをデフォルトで3の方にする。

ubuntu環境構築

ubuntu環境との共有フォルダーをホスト側に作成

$ mkdir ubuntu_share

 

ubuntu環境用のディレクトリ作成、そのディレクトリ内に移動

$ mkdir ubuntu_dev
$ cd ubuntu_dev

 

ubuntu-18.04をいれて、立ち上げて、SSHで入ってみる。

$ vagrant init bento/ubuntu-18.04
$ ll  //Vagrantfileができてることを確認。
$ vagrant up
$ vagrant ssh
vagrant@vagrant:~$ exit //一旦出る。

 

設定ファイルVagrantfileよりIP・共有ディレクトリを設定し、

再起動後、SSHで入ってみる。

$ vi Vagrantfile

Vagrantfile

...
  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10"   //コメントアウト(#)を外す
....
  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
config.vm.synced_folder "../ubuntu_share", "/home/vagrant/ubuntu_share"
...
$ vagrant reload
$ vagrant ssh
vagrant@vagrant:~$ ll  

ubuntu_share/があることを確認し、

テストファイルを作って、ホスト側にもあったら\(^^)/よし

 

Apache導入(サーバ)

/var/www/html/がルートになるはず。
Vagrantfileにて ip: “192.168.33.10”としてるので、
http://192.168.33.10でアクセスできるようになります。

$ sudo apt-get update
$ sudo apt-get install apache2
$ sudo /etc/init.d/apache2 start

 

pythonをデフォでPython3の方にする

元から Python 3.6.5/Python 2.7 は入ってます。 デフォルトをPython 3の方にする。

$ python -V
Python 2.7.15rc1
$ python3 -V
Python 3.6.5

 

デフォルトでは pip がインストールされてないので、インストールする。
pip とは…
The Python Package Index に公開されているPythonパッケージ・ライブラリのインストールなどが行える
らしい。

$ pip install {入れたいパッケージ名}
$ sudo apt install python3-pip python3-dev
$ sudo apt install python-pip python-dev

 

pyenvインストール

$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
## 環境変数の設定とか(上手く行くことを確認したら、~/.bash_profileなどに書いておく。)
$ export PYENV_ROOT=$HOME/.pyenv
$ export PATH=$PYENV_ROOT/bin:$PATH
$ eval "$(pyenv init -)"
$ source ~/.bashrc
$ pyenv --version
# 使えるもの一覧を表示する
$ pyenv install --list
# インストールしてみる
$ pyenv install -v 3.6.6
# デフォルトに設定する。
$ pyenv global 3.6.6
 
python -V
-> 3.6.6

 

ついでに、よく使うやついれておく

$ sudo apt-get install git gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
$ sudo apt-get install python3-tk tk-dev python-tk libfreetype6-dev

 

こんな感じでできました。
pythonも使ったことないので、
自分的疑問で、なんでpythonとpython3があるんだよ、統一させちゃいかんの?
ややこしんだよっって思ってます。。
なにか理由はあるんでしょうね、きっと。

Laravel環境構築してみる!

話題のこの本、
「PHPフレームワーク Laravel Webアプリケーション開発」読んでます!
まだ読み途中ですが・・・。
今回は最初の「環境構築」部分を自分なりにまとめたこと描きます。

Github

環境構築のパターン

  1. VagrantでLaravel環境構築
  2. DockerでLaravel環境構築

二つとも、Macでやります!

1. VagrantでLaravel環境構築

■事前準備
・VirtualBoxのインスートル
・Vagrantのインスートル

■構築する環境
・ドキュメントルート … /home/vagrant/code/testapp/public
・laravelプロジェクトdir … /home/vagrant/code/testapp
・共有dir … /home/vagrant/code = /home/(ユーザdir)/code

■手順

$ cd  /*(user_dir)に移動する*/

$ vagrant box add laravel/homestead

$ git clone git@github.com:laravel/homestead.git Homestead

$ cd Homestead/

# 初期化
$ sh ./init.sh

# ゲストOSの設定ファイル調整
$ vi Homestead.yaml  /* ip、sites、authorize、keyの設定 */

# hosts設定 「192.168.10.10 homestead.test」
$ vi /etc/host  /* Homestead.yamlに合わせてip設定する */

$ cd /*(user_dir)に移動する*/

# ゲストOSとホストOSの共有dir先を作成 
# /home/vagrant/code = /home/(ユーザdir)/code
$ mkdir code/

$ cd Homestead/

# 調整し直したHomestead.yamlの設定でvagrantで環境を立てる 
$ vagrant up

# sshでゲストOSに入る
$ vagrant ssh

# ここからゲストOSにいる
$ cd code/

$ composer create-project laravel/laravel testapp --prefer-dist "5.5.*"

http://homestead.test/
にアクセスするとlaravelのページにアクセスできることを確認!完成\(^^)/

■つまったところ
・何回も作りなお直してたら、もうあるってめちゃ言われました。(以下参照)

The box you're attempting to add already exists. Remove it before
adding it again or add it with the `--force` flag.

Name: laravel/homestead
Provider: virtualbox
Version: 6.3.0

そんなときの対処方法
・その壱

$ vagrant global-status /* 動いてるやつの確認 */
$ vagrant global-status --prune /* 何も出てこない時はこっち */
$ vagrant destroy homestead-7 /* 「homestead-7」を指定してdestroy */

・その弐

$ cd ~/.vagrant.d/boxes/
$ ll
$ rm -rf {target}

2. DockerでLaravel環境構築

■事前準備
・Dockerのインスートール

■構築する環境
・ドキュメントルート … /var/www/public
・laravelプロジェクトdir … /var/www/
・共有dir … /var/www = /home/(ユーザdir)/laravel_docker/testapp

■手順

$ cd

$ mkdir laravel_docker

$ cd laravel_docker

$ git clone https://github.com/laradock/laradock.git

$ cd laradock

$ cp env-example .env

# コンテナ起動(初期化)
$ docker-compose up -d nginx mysql workspace phpmyadmin

# 起動中のコンテナ一覧の確認。各コンテナが起動(up)していることを確認
$ docker-compose ps

# ゲストOSに入る
$ docker-compose exec --user=laradock workspace bash

# testappという名前でlaravelをいれる。
$ composer create-project laravel/laravel testapp --prefer-dist "5.5.*" 

# ゲストOSからでる。
$ exit

# laradock/.envの調整。「APP_CODE_PATH_HOST=../testapp」に書き換える
# /var/www = (user_dir)/laravel_docker/testapp にさせるために!
$ vi .env

# コンテナ一旦シャットダウン
$ docker-compose stop
 
# コンテナ起動。再起動により.envが反映されます。
$ docker-compose up -d nginx mysql

http://localhostでアクセスすると、
laravelのデフォ画面がでるはずです!完成^^

この本ですが
内容はとても親切丁寧なので読みやすいです!
ADRの話なども書いてあって、私には難しいですが頑張れそうです!
もっと読んだらまた記事書きまうす。

コンフリクとが起きた時によく使うコマンド

 

久しぶりです。暑くなってきましたね。

Gitでコンフリクと起きた時って、「うわーめんどー><」ってなりますよね。

けど絶対王政みたいな感じで、こっちのブランチが「絶対正しいんだ!」ってときありますよね。そんな時に便利なgitオプションが下記コマンドがあります。

# 2つのブランチ間でコンフリクトしているファイル aaa.txt があるとする

# aaa.txt を現在チェックアウトしているブランチ側の対応に合わせる場合
$ git checkout --ours aaa.txt

# aaa.txt をマージさせたブランチ側に合わせる場合
$ git checkout --theirs aaa.txt

 

いつも忘れるので、エイリアスを作ろうとおもいます。

 

alias git-i-am-king='git checkout --ours $1'
alias git-you-are-king='git checkout --theirs $1'

 

しかし、
よくみたら、そんなでもないので覚え方を考えようと思います。

私たちが正しいのでわたしたちになりましょう、ね、aaa.txtさん。

$git checkout --ours aaa.txt

彼らが正しいので彼らになりましょう、ね、aaa.txtさん。

$git checkout --theirs aaa.txt

 

以上、くだらない投稿でした。

標準入出力、リダイレクト、パイプ

実家からお歳暮でもらったであろうビールをかっさらってきて、

帰宅と同時に飲むのが至福のひとときな今日この頃。

 

 

さっそく緑化はじめてます。シェル系はここにためていこうと思います!

https://github.com/kin29/shell

 

▶︎標準入出力とは。

lsやcatなどの実行結果は、
指定しない限り、普通は画面に表示される。←これです!
デフォルトではそれぞれ以下のようになっている。
標準入力 → キーボード
標準出力 → 画面

こんな感じ

# キーボードで入力(標準入力)したものがそのままに出力(標準出力)される
echo hello!

 

▶︎リダイレクトとは。

「リダイレクト」を使うと、標準入出力を指定のファイルに変更することができる。

出力リダイレクト

画面(標準出力)でなく、ファイルに結果を出力する

# 「hello!」という出力結果を新規ファイルoutput.txtに出力
echo hello! > output.txt

#「>」は上書き
# dateコマンドの出力結果を既存ファイルoutput.txtに上書き
date > output.txt

#「>>」は追記
# 「add!」という出力結果を既存ファイルoutput.txtに追記
echo add! >> output.txt

入力リダイレクト

キーボード(標準入力)でなく、ファイルからの入力をコマンドに渡す

# cat output.txtと同じ結果
# cat 0< output.txtと同じ結果
cat < output.txt

echo 6+1 > input.txt
# bc 0< input.txtと同じ結果
bc < input.txt

 

▶︎パイプ「|」とは。

標準出力をコマンドに渡す

# 中間ファイルが不要となる 
# echo 6+1 > input.txt && bc < input.txt と同じ結果
echo 6+1 | bc

 

#余談

過去のコミット全部自分のものにしたい時

$ git filter-branch -f --env-filter "GIT_AUTHOR_NAME='名前';\
 GIT_AUTHOR_EMAIL='メールアドレス';\
 GIT_COMMITTER_NAME='名前';\
 GIT_COMMITTER_EMAIL='メールアドレス';" \
HEAD

過去のコミットを編集することは歴史をガラリとかえて未来に影響が大きいのであまりしないほうがいいです、はい。
けど今回グローバルネームでコミットしてしまっていたため変更しました。もちろん

$ git config --local user.name 名前
$ git config --local user.email "メールアドレス"

もしましたよ。

よく使うGitコマンド

 

Git DIFF

ブランチ間の差分を表示

$ git diff master[取り込むほう] develop[取り込まれるほう]

 

ブランチ間の差分があるファイル一覧を表示

$ git diff master[取り込むほう] develop[取り込まれるほう] --name-status

 

ブランチ間の差分があるファイル数を表示

$ git diff master[取り込むほう] develop[取り込まれるほう] --name-status | wc -l

 

 

git stashってadd(インデックス)してないと意味ないんだ!

 

タイトルの通りです。

 

Gitが苦手なもので、とりあえず、stashしちゃうんです。

んで、必要な時にstash popしてます。便利ですよね〜\(^^)/

 

超便利と感じつつ、stashをどんどん貯めていくのですが、

結局、使わず、溜まってくばかりなのですが。

 

そんな GIT stash に関して
私は大きな勘違いをしていることに昨日気がつかされました!

 

git stashってインデックスにあるもの(git addしたやつ)をstashします。

作業ツリーのものはstashしてないのです!

 

 

「だからたまに、"stashしたはずなのに、あのファイルがない!"とかなってたんだ・・・。」

 

 

作業ツリーからインデックス(git add)にあがることにより、

追跡(tracking)が開始されるのです。

よって、git addしなければ、バージョン管理外なのです!

 

##まとめ##

作業ツリーがダーティ(クリーンではない状態)の時は、

stashしたいものをaddして追跡を開始させたのちに、

git stashを実行すること!