Composerと、Homebrewのまとめ

#~はじめに~
僕は、つい最近エンジニアとしてqnoteに就職した21歳のオトコです。
まだまだ技術として自慢出来るものや、人間として誇れるものも何もありませんがこれから少しずつでも前に進んで行こうと思っています。
元々、自動車販売の営業や自販機の補充をする仕事などをやっていて、そこでは自分の好きな事をやれている実感がなかったので転職しました。（ほんとはもっといろんな理由がありますが、、、笑）
最初はRubyとrailsを学習していて、PHPやLaravelは触った事もありませんでした。
（ゆうてもRubyも使いこなしていた訳ではありませんが。笑）
そこで、Laravelの開発環境を整えている最中、『何やねんこれ』って思った"Composer"と
"Homebrew"について初心者なりに調べて自分なりにまとめてみました。出来るだけ分かりやすい説明を心掛けます
（間違っていたら指摘してくださいっっっm(_ _)m）

##そもそもComposerとはなんぞや？？
Laravel開発環境とかで調べてると、「とりあえずComposerインストールしてな( ＾∀＾)」くらいの感じで言われる事が多く、Composerが何なのかという説明がない事が多かったです。
「じゃあ調べよう！！！！！！！！！！！！！！！！」
と思って調べました😘
一言で言うとComposerは、**「PHPのパッケージ依存性管理システムである。」**
「ん☺️？？？何それ☺️」って初心者は思う訳ですよ。

####じゃあ噛み砕いていきましょう。パッケージの依存管理とは何か？？####
まず最初にパッケージの概念について。
例えですが、一つ一つの部品（**モジュール**）を集めて箱に入れるとその箱の名前は（**パッケージ**）になります。
要するに、様々な部品が入った塊がいろんな機能を持った的な感じかと僕は思ってます。
※パッケージをいくつか集めてインストール出来る様にすると『**ライブラリ**』になります。

**じゃあ依存とは？？**
こんな男性も少なくないと思いますが、彼女に「*お前がいないと俺もう無理だ。生きていけないよ*」っていうのが人間の**依存**だと思うのですが、それと一緒で、パッケージをインストールしても、他のパッケージ（彼女）がないと動けないパッケージがあります。

###~だからなんやねん~###
って思ったそこのあなた。ここでComposerの出番です。

例えば、欲しいパッケージがあるとします。
「このパッケージほしいなああ〜〜。でも、このパッケージをインストールしたらあのパッケージもインストールしないとだし。あれもこれも。。。。（泣）」
あ。おワタ。。。依存地獄や。。。
でも、**Composerを使うとコマンド一発で必要なパッケージを全てインストールできちゃうんです。**
※packagistという所からパッケージを取得します。packagistはインターネット上に公開されているメインリポジトリです。

##Composerのいい所##
- リポジトリを汚さなくて済む。（Composerでインストールしたパッケージは「Vender」というディレクトリに一括で保存される。）
- ライブラリの依存性はcomposer.jsonに書き出される為、分かりやすい。自分で作成するか、対話形式で作成することも出来る。
- 一回のコマンドで依存するパッケージを全て持ってこれる。
- composer.lockのおかげでチームに共有しやすい。

##共有するには##
同じチームのメンバーが、Composerで管理されたライブラリを落とすにはcomposer.jsonを共有すればいい。
composer.jsonがあるディレクトリ上で**$ composer install**を実行するだけで依存しているライブラリをインストールする事ができる。

**ここでのcomposerの挙動**
1 各ライブラリを見に行く
2 見に行ったライブラリに依存性があるか確認。
3 1,2を繰り返し確認を行っていく。

そこで思うのは、毎回これを共有した皆んながやると思うと時間かかってしょうがなくね？？

###でも大丈夫！「composer.lock」###
composer.lockというファイルが生成されている。
これは、composer.jsonの中にあるライブラリを取得するのに実際にどのファイルを落としたのかをひとまとめにしたもの。
つまり、composer.lockがあるからいちいち依存性を確認しに行かなくてもいい。初めてライブラリをインストールした人と同じファイル、バージョンのものをインストールできる。

##composerでよく使用するコマンド##
ここではよく使うComposerのコマンドを紹介していきます。


- `$composer init`
composerを使ったプロジェクトを自作するときに使う。ちゃちゃっとライブラリを書きたいときなど。対話式でいくつか設定を加えることもできるが、全部スキップしても問題はない。

- `$composer createーproject`
git cloneして、composer installするのと全く同じ結果になる。

- `$composer require <package> [:tag]`
composerを使ってパッケージや、ライブラリをインストールする。
ライブラリの情報は「composer.json」に記載され、実際に何をインストールしたかの情報が「composer.lock」に記載される。オプションとして、「--dev」をつけると開発環境専用のパッケージとしてインストールが出来、composer.jsonの中の「require-dev」の項目に追加される。

- `$composer install`
composer.jsonに記載されれている内容、もしくはcomposer.lockに従ってパッケージをインストールする。パッケージが更新されたら再度このコマンドを実行する。
このコマンドを打つことにより、チームメンバーはパッケージの依存性を解決することができる。

- `$composer update`
composer.lockを無視してパッケージをcomposer.jsonを元にインストールする。
現在の依存性を更新して全部最新化したいときなどに使う。

- `$composer remove <package>`
requierの逆バージョン。
必要のないパッケージを取り除く。

#Homebrewとは？
Homebrewとは、**macOS用パッケージマネージャー**のことです。

###パッケージマネージャーって何？？###
ターミナルからコマンドを実行することにより、簡単にパッケージをイントールしたりアンインストールできるツール。

####Homebrewの使い方####
Homebrewでは、「brew」コマンドを使ってパッケージの管理を行う。
代表的なbrewコマンド↓

- `$brew install パッケージ名`
パッケージのインストールを行う。「brew」コマンドで一番よく使うコマンドになる。

- `$brew uninstall パッケージ名`
パッケージのアンインストールを行う。

- `$brew update` 
Homebrew本体のアップデートを行う。
パッケージの最新バージョンが使えるようになる、使えるパッケージが増えたりする。

- `$brew upgrade`
パッケージの更新。インストールしてあるパッケージは全て更新される。

- `$brew upgrade パッケージ名`
インストールしている特定のパッケージを更新する。

- `$brew list`
インストール済みのパッケージ一覧表示。

- `$brew search パッケージ名`
パッケージの検索。

##Homebrew豆知識##
Homebrewの意味を皆さんご存知でしょうか？？
直訳すると、「**自家醸造**」になります。
ロゴから見てもわかりますが、ビールの自家醸造というなんとも酒好きにはたまらないネーミングセンスです。
僕は、ビールよりウィスキーの方が好きですが酒好きには変わりありません( ´∀｀)![homebrew.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439150/34ba5f67-b804-3693-28d6-80c1f57a21e3.png)
このHomebrewでは「自家醸造」にまつわる事が使う上でのヒントとなるようです。
参考記事
https://qiita.com/omega999/items/6f65217b81ad3fffe7e6

「brew」
これは「醸造する」という意味になりますが、「makeする、作る」という意味になる。

「homebrew」
これは「自家醸造する」という意味ですがこれは「userが自分で作り、使う」という意味になる。

「celler」
ワインセラーとかの'セラー'と一緒で「保管しておく、保存先」という意味になる。

「keg」
樽や醸成用、意味としては「作るための材料」になる。

「formula」
直訳すると、「式」になるがそれまでの過程、方法、手順という意味になる。

例えがとてもわかりやすかったので引用させていただきます。。。
>homebrewとは「ユーザが自らパッケージをビルドして使用する」ことのメタファーで「ビールを自家醸造して保存する・飲む」ことを意味しているのです。
手順（調理法formula）通りにパッケージをビルド（醸造）して保存（/usr/local/cellerに格納)して、使う（/usr/loca/binにリンク）ってことのようです。

##まとめ##
ComposerやHomebrewの動きが全然わからなかった僕ですが、一つ一つの役割や特徴が分かると頭に入って来やすかったです。
まだまだ勉強不足で知らないことばっかりですが、分からない事が分かる様になる楽しさがたまらなく好きなので、
これからも勉強して、少しでも会社に貢献できればなと思っております。
これを機に、勉強したことを少しずつ記事にして投稿していければなと思いますのでよろしくお願いします。
**（正しいことを覚えたいので、間違っている事があればガンガン指摘していただいて構いませんので、、、、）**

##最後に##
qnoteの皆さん。まだまだこんなへなちょこりんで迷惑ばっかりかけていますが、皆さんに少しでも追いつけるように頑張りますのでこれからもよろしくお願いします！！！