HomebrewはMacのパッケージ管理システムです。
MacはGit、PHP、Ruby、Pythonといったアプリケーションが標準インストールされてますが、Macで開発環境を構築する場合、異なるバージョンで利用するケースが発生します。
そこでHomebrewを利用すると、Gitで管理されたパッケージをダウンロードして、インストール、アンインストールなど管理することができます。
最近ではDockerやクラウド開発の登場で Macに直接インストールすることも減りつつありますが、Dockerだけでは賄えない部分も多々あるので、いまだ必須のツールになっています。
以前の記事ではrubyでインストールしていましたが、公式をみるとシェルスクリプトでインストールしています。
実際はGitでパッケージをダウンロードし、Ruby の gem で実行しているのでやっていること自体は変わりません。
ターミナルを開き、以下のコマンドを実行します。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
しばらくしてインストールが完了したら、バージョンを確認します。
$ brew --version
Homebrew 2.2.17
Homebrew/homebrew-core (git revision c87df; last commit 2020-05-22)
試しに、ファイルダウンロードをするコマンド wget を brew でインストールしてみましょう。
$ brew install wget
インストールが完了したら、バージョンを確認します。
$ wget -V
GNU Wget 1.20.3 built on darwin18.7.0.
...
このようにHomebrewは Macで利用できないコマンドやアプリケーションを brew コマンドで管理します。
Cask は MacのGUIアプリ、フォント、プラグイン、その他オープンソースででないソフトウェアをインストールするときに利用します。
例えばブラウザアプリ「Firefox」を、Homebrewでインストールすることができます。
$ brew cask install firefox
Macのアプリケーションフォルダを確認するとFirefoxがインストールされているはずです。
Macのバージョンによっては、標準でインストールされているPHPのバージョンは異なります。
例えばLaravel 7.x をMac上で利用する場合、PHPのバージョン7.2.5以上が必要なため、別途インストールが必要です。
PHPのインストールの前に、パッケージを検索してみます。
$ brew search php
==> Formulae
brew-php-switcher php-code-sniffer php@7.2 phplint phpmyadmin phpunit
php php-cs-fixer php@7.3 phpmd phpstan
php@7.3 パッケージがあるので、これをインストールします。
$ brew install php@7.3
インストールが完了しましたが、現状はPHPの旧バージョンが有効のままです。
PHP7.3が利用できるようにパスの設定を ~/.bash_profile に記述します。
$ echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile
設定をすぐに反映するために .bash_profile を読み込むと、PHPのバージョンが変更されたことを確認できます。
$ php -v
PHP 7.3.18 (cli)
MacBook Pro 256 で開発やクリエイティブ作業していくと容量が厳しくなってきた。
自分の場合
がかなり容量を圧迫しています。
$ sudo du -gxd 5 / | awk '$1 >= 5{print}'
$ sudo du -gxd 1| awk '$1 >= 1{print}'
これらをもとに、手動で削除
Xcodeの場合、ツールコマンドを利用する
$ xcrun simctl list devices
== Devices ==
-- iOS 13.3
-- iPhone 8 (69D4A89A-704C-43E0-8C71-6437C551DEB6) (Shutdown) iPhone 11 (DC5B21DE-21CA-4624-8C1C-7CDC349B9DDA) (Shutdown) ...
-- Unavailable: com.apple.CoreSimulator.SimRuntime.iOS-10-1
-- iPhone 5 (CE4E79DC-CE71-47A9-B2C8-5F77EE73196F) (Shutdown) (unavailable, runtime profile not found) iPhone 5s (C94451DC-A342-46AE-8E69-52D6DF928E77) (Shutdown) (unavailable, runtime profile not found)
$ xcrun simctl delete unavailable
Dockerは不要なコンテナー、イメージが溜まりがち
$ docker image ls
$ docker images -f dangling=true
$ docker image rm $(docker image ls --filter "dangling=true" -aq)
$ docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 85 0 18.97GB 18.97GB (100%) Containers 0 0 0B 0B Local Volumes 24 0 80.44MB 80.44MB (100%) Build Cache 0 0 0B 0B
$ docker system prune
$ docker system prune -a
別途DAWを入れているので、Garageband は削除
$ sudo rm -rf /Applications/GarageBand.app
$ sudo rm -rf /Library/Application\ Support/GarageBand
$ sudo rm -rf /Library/Application\ Support/Logic
$ sudo rm -rf /Library/Audio/Apple\ Loops
$ sudo rm -rf /Library/Audio/Apple\ Loops\ Index
setHook(packageEvent("grDevices", "onLoad"),
function(...){
if(.Platform$OS.type == "windows")
grDevices::windowsFonts(sans ="MS Gothic",
serif="MS Mincho",
mono ="FixedFont")
if(capabilities("aqua"))
grDevices::quartzFonts(
sans =grDevices::quartzFont(
c("Hiragino Kaku Gothic Pro W3",
"Hiragino Kaku Gothic Pro W6",
"Hiragino Kaku Gothic Pro W3",
"Hiragino Kaku Gothic Pro W6")),
serif=grDevices::quartzFont(
c("Hiragino Mincho Pro W3",
"Hiragino Mincho Pro W6",
"Hiragino Mincho Pro W3",
"Hiragino Mincho Pro W6")))
if(capabilities("X11"))
grDevices::X11.options(
fonts=c("-kochi-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*",
"-adobe-symbol-medium-r-*-*-%d-*-*-*-*-*-*-*"))
grDevices::pdf.options(family="Japan1GothicBBB")
grDevices::ps.options(family="Japan1GothicBBB")
}
)
attach(NULL, name = "JapanEnv")
assign("familyset_hook",
function() {
winfontdevs=c("windows","win.metafile",
"png","bmp","jpeg","tiff","RStudioGD")
macfontdevs=c("quartz","quartz_off_screen","RStudioGD")
devname=strsplit(names(dev.cur()),":")[[1L]][1]
if ((.Platform$OS.type == "windows") &&
(devname %in% winfontdevs))
par(family="sans")
if (capabilities("aqua") &&
devname %in% macfontdevs)
par(family="sans")
},
pos="JapanEnv")
setHook("plot.new", get("familyset_hook", pos="JapanEnv"))
setHook("persp", get("familyset_hook", pos="JapanEnv"))
function main() {
var rows = csvtoArray('フォルダ名', 'ファイル名');
for (var i = 1; i < rows.length; i++) {
var row = rows[i];
var first_name = row[0];
var last_name = row[1];
var email = row[1];
Logger.log(last_name);
Logger.log(first_name);
Logger.log(email);
}
}
function csvtoArray(folder_name, file_name) {
var folder = DriveApp.getFoldersByName(folder_name).next();
var file = folder.getFilesByName(file_name).next();
var csv = file.getBlob().getDataAsString("Shift_JIS");
var rows = Utilities.parseCsv(csv);
return rows;
}
getFoldersByName()、getFilesByName() のイテレートは横着して next() で最初のアイテムを取得
(GoogleDrive内で重複する場合、それなりの処理が必要) for f in *.m4a.mp3; do mv "$f" "${f/.mp3/}"; done
f は任意の変数で、結果は「"$f"」とダブルクォートでくくって扱うfor 変数 in ファイル検索文字; do mv "$変数" "${変数/置換対象文字/置換文字}"; done
~/Library/Application Support/Sublime Text 3/Packages
に「Codecs33」として展開 SublimeTextを再起動すると、SJISファイルを開くことができる。$ apm search vim-mode $ apm install vim-mode
$ amp list
とパッケージ管理ぽい直感的コマンド~/.atom
に各種設定ファイルが保存されている。 jsonだけでなくcson形式もあるようだ。