- 投稿日:2020-08-30T22:14:24+09:00
Macで右クリックを使用して新規テキストファイルを作成する
背景と目的
WindowsからMacに乗り換えて「Mac良いぞ!」と思う今日この頃。しかしながらWindowsでやっていたあの操作をMacでもやりたいと思うこともなくはない。そう、右クリックで新規テキストファイルを作成したいのだ。
調査が足りないのかもしれないが、Macの標準機能に欲しい機能がなかったのでAutomatorを使用して作成する。
使用したもの
- macOS Catalina バージョン 10.15.6
- Automator
- Bash
機能作成
元となるシェルスクリプトを作成する
まずはシェルスクリプトでカレントディレクトリに「newTextFile_N.txt」(Nは整数)と言う名前のテキストファイルを作成できるようにしよう。ここでカレントディレクトリにファイル「newTextFile_N.txt」が存在するときはファイル「newTextFile_N+1.txt」を作成することにし、Nの上限として100を指定した。下記「createNewFile.sh」を実行するとカレントディレクトリに「newTextFile_1.txt」などのファイルが生成される。なお
while
ループの行に書かれているコロンはヌルコマンドである。createNewFile.sh#!/bin/bash # ファイル名の基本部分と拡張子 file_name_stem="newTextFile_" file_extension=".txt" # 新規テキストファイルの上限の指定 max_num=100 # 初期値を設定して無限ループを開始 i=1 while :; do # テキストファイルのファイル名の指定 file_name="${file_name_stem}${i}${file_extension}" # 上記ファイル名が存在しない場合、空ファイルを作成し終了 if [ ! -e "${file_name}" ]; then touch ${file_name} exit 0 fi # 上記ファイル名が存在する場合、iをインクリメント i=$((i+1)) # iが上限を超えたらエラーを表示して終了 if [ ${i} -gt ${max_num} ]; then echo "Error: The new text files are too many." 1>&2 exit 1 fi doneAutomatorで新規クイックアクションを作成する
Finderでディレクトリを右クリックして選択できるサービスのメニューの中に新しくテキストファイルを追加するメニューを作成しよう。以下の手順で作成することができる。手順番号と図中の丸で囲まれた番号は対応しているので適宜図を参照してほしい。
1. Automatorを開いて新規作成でクイックアクションを選択する。
2. 左カラムの検索窓からアクション「シェルスクリプトを実行」を検索する。
3. 左カラムにあるアクション「シェルスクリプトを実行」を右カラムにドラッグする。
4. 右カラム上部にある「ワークフローが受け取る現在の項目」欄を「フォルダ」にする。
5. 右カラム上部にある「検索対象」を「Finder.app」にする。
6. 右カラムの「シェルスクリプト実行」欄にある「シェル」を「/bin/bash」にする。
7. 右カラムの「シェルスクリプト実行」欄にある「入力の引き渡し方法」を「引数として」にする。
8. 右カラムの「シェルスクリプト実行」欄内のスクリプト記述欄を右クリックして自動変換の全てのオプションのチェックを外す。
9. 右カラムの「シェルスクリプト実行」欄内のスクリプト記述欄にスクリプトを記述する(次節参照)。
10. 適当な名称で保存する(例えば「create a new text file」)。
この後Finderで適当なフォルダを右クリックしてサービス欄を見ると先程保存した名称があるはずだ。これをクリックすれば選択したフォルダに新規テキストファイル「newTextFile_1.txt」が作成される。もし「newTextFile_1.txt」が既に存在すれば「newTextFile_2.txt」が作成される。
Automatorに記述するスクリプトについて
Automatorには先述したシェルスクリプトを少し改変した以下のものを記述する。具体的にはまず
$1
で選択したディレクトリのパスを取得する。それに伴いファイル名の先頭にディレクトリのパスを追加。また作成ファイル数が上限を超えた場合に通知する場所を標準エラー出力からFinderのポップアップに変更。#!/bin/bash file_name_stem="newTextFile_" file_extension=".txt" # 選択したディレクトリのパスを取得 selected_directory="${1}" max_num=100 i=1 while :; do # ファイル名の先頭に選択したディレクトリのパスを追加 file_name="${selected_directory}/${file_name_stem}${i}${file_extension}" if [ ! -e "${file_name}" ]; then touch ${file_name} exit 0 fi i=$((i+1)) if [ ${i} -gt ${max_num} ]; then # ファイル数の上限を超えた場合はポップアップで通知 osascript -e 'tell app "Finder" to display dialog "Error: The new text files are too many."' exit 1 fi done参考
自動変換のオフについてはこのページを見た。
理解不足な点
Finderで選択したディレクトリのパスを取得する方法として
$1
を利用する方法はこのページを見て思いついた。意図通りの動作をしているが理解しているわけではない。この辺の仕様がわかる人がいれば是非教えて欲しい。
- 投稿日:2020-08-30T19:53:58+09:00
最近(2020/08)のDocker for Macのファイルアクセス遅い問題事情メモ
調べたことまとめる。
- いにしえよりDocker for Macでhost-container間のファイルアクセス遅い問題は議論されている
- macOSでなんで遅いかが↓ここら辺に書いてあるっぽい(が読んでない
- その問題の対応として、2017年にvolumesオプションに
cached
,delegated
フラグが追加された。consistencyを少し犠牲にしてファイルアクセスを高速化している。consistent
(デフォルト) >cached
>delegated
の順にconsistencyが高い。- 以下のベンチマークだと、consistent(デフォルト)と比べて
cached
,delegated
は2-3倍くらい速い。- が、これでもまだLinuxなどに比べると遅く、公式じゃない手段でいくつかそれより高速化する方法がある。
- https://www.jeffgeerling.com/blog/2020/revisiting-docker-macs-performance-nfs-volumes
- ここでいろいろ手動で設定してNFSマウントする方法、 docker-sync と言うgem、 bg-syncと言うcontainerがベンチマークとともに紹介されている。いずれも
delegated
flagより2倍かそれ以上速い。- 一方Docker公式ではMutagenと言うツール(?)がEdgeリリース v2.3.1.0(2020-05-20)で導入された。ネイティブに近いパフォーマンスが出るらしい。
- しかし、これがパフォーマンス改善に効果がある一方、いくつか問題がありEdge v2.3.5.0で削除された
- https://docs.docker.com/docker-for-mac/edge-release-notes/#docker-desktop-community-2350
- ↓で理由が説明されている。キャッシュが追いつかない場合があったり、サブディレクトリがキャッシュされない問題があったりするらしい(詳しく知らないので読み間違えてるかも)
- 代わりにgRPC-FUSEと言うファイルシステムが同じEdge v2.3.5.0で導入された。
- 公式曰く "This has much faster file sharing and uses much less CPU than osxfs" らしい(osxfsが古い(現状の)ファイルシステム)が、上記issueにポストされたベンチマークでは全然速くなってなかった。
- 上記issueにMutagenの開発者が、「Docker for Mac導入されなくてもMutagen自体は使えるから試してみてね」的なこと言ってる。
- mutagenが削除されることを不満に思っている人が多いようで「mutagen入ってるEdge release build使い続けるわ」とか同issueにコメントついてる。
- mutagenはEdgeの時点で削除され、stableに入る予定は今のところない(が、いろいろ考え直してデザインし直して入り直す可能性はある)。gRPC-FUSEは9月にstableに入る予定。デフォルトでgRPC-FUSEになるが、設定で古いやつ(osxfs)に切り替えることができる。
- 投稿日:2020-08-30T16:47:48+09:00
yvmでyarnの複数バージョンを管理する
yvmでyarnの複数バージョンを管理する
概略
Yarnのバージョン管理マネージャー「yvm」を通して、
.yvmrc
でyarnのバージョン情報を共有しつつ、自動で切り替わるように設定します。Xcode→Homebrew→yvm→yarnの順番でインストールの手順で実施します。
自動切り替え最高。
リリース情報確認URL
動作確認済みバージョン
- Homebrew(v 2.4.13)
- yvm(v3.6.7)
- macOS Catalina(v10.15.6)
- terminal(zsh)
更新履歴
- 2020/8/30 初稿
xcodeのインストール
インストール済みかどうか、ターミナルから確認します。
terminal% xcode-select --version ↓ xcode-select version xxxx.
もし、インストールをしていない場合は、Xcodeのダウンロードページからインストールしてください。(時間かかります。)
すでにyarnインストール済みの場合は削除する
はじめに…
yarn -v
を実行して、yarnがインストール済みか確認します。terminal% yarn -v ↓ 1.xx.x
インストール済みの場合は削除しておきます。本記事を見る方のほとんどはHomebrewを利用していると思いますが、各々のインストール方法に合わせて削除してください。
terminal// Homebrewでインストールしている場合 ↓ % brew uninstall yarn // homebrew以外でインストールしたしている場合は、該当の方法で削除してください。 ↓ - tarball:rm -rf "$HOME/.yarn" - npm:npm uninstall -g yarn - ubuntu:Sudo apt-get remove yarn && Sudo apt-get purge yarn - centos:yum remove yarn - windows:choco uninstall yarnHomebrewをインストールする
Homebrewがインストール済みか確認します。昨日の自分は赤の他人です。
インストール済みの人は次の項へ移動してください。terminal// インストール済みか確認のために、Homebrewのバージョンを表示する % brew -v
公式ドキュメントを参考にHomebrewをインストールします。
途中インストールユーザのパスワード入力を求められるので記載してEnterキーを押します。terminal% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ↓ % Password:鍵マーク ↓ ==> Next steps: - Run `brew help` to get started - Further documentation: https://docs.brew.shインストール完了時に出てくるNext stepsに従って、Homebrewの動作を確認します。
terminal% brew help ↓ Example usage: brew search [TEXT|/REGEX/] brew info [FORMULA...] brew install FORMULA... ...色々と出てきたら、Homebrewのインストール完了です。
yvmのインストール
公式ドキュメントを参考に、Homebrewのbrewコマンドを使ってインストールを行います。
terminal% brew install tophat/bar/yvm % curl -s https://raw.githubusercontent.com/tophat/yvm/master/scripts/install.js | node
インストール完了後、一度ターミナルを再起動して、yvmのバージョンを確認します。
terminal% exec $SHELL -l % yvm version ↓ v3.x.xyvmのインストール完了です。
yvmを使ってyarnのインストール
はじめに、yvmを最新へアップデートします。
terminal% yvm update-self
install
コマンドでyvmでyarnの最新版をインストールします。terminal% yvm install latest
yarnのバージョンを確認します。
terminal% yarn -v ↓ 1.22.x
バージョンが表示されたら、yarnのインストール完了です。
yvmでyarnの他のバージョンをインストールしてみる
試しに、yvm v1.22.4をインストールしてみます。
terminal% yvm install 1.22.4
list
コマンドで、yvmへインストール済みのyarnのバージョンを表示します。terminal% yvm list ↓ Installed yarn versions: - 1.22.4 ✓ 1.xx.x (Global Default)
チェックマークがついているバージョンが、現在利用中のyarnバージョンです。
yvmでyarnの他のバージョンへ切り替えてみる
use
コマンドで、先ほどインストールしたv1.22.4へ切り替えてみます。terminal% yvm use 1.22.4 ↓ Now using yarn version 1.22.4
list
コマンドで、チェックマークが移動していることを確認します。terminal% yvm list ↓ Installed yarn versions: ✓ 1.22.4 - 1.xx.x (Global Default)
念のため、yarnのバージョンも確認。
terminal% yarn -v ↓ 1.22.4
OK。
.yvmrcファイルでyarnバージョンを共有する
yarnのバージョンを指定したいプロジェクトルートに、バージョンを書いた
.yvmrc
ファイルを置きます。.yvmrc// .yvmrcファイル 1.22.2
プロジェクトルート(
.yvmrc
ファイルをおいたディレクトリ)で、yarn -v
を実行してみます。terminal% yarn -v ↓ Installing yarn v1.22.2 in /Users/.../.yvm Downloading... ... Installation successful 1.22.2自動で指定バージョンのyarnがインストールされ、無事、yarnのバージョン情報が表示されました。
これで、yarn生活もシンプルに。やったね。
- 投稿日:2020-08-30T16:29:41+09:00
久しぶりにmac向けXAMPPをインストールしたら一味違っていた件
結論
- VMになっていた
http://localhost~
じゃなくhttp://{IPアドレス}~
でアクセスするXAMPPのインストールをする
2020/08/30時点のバージョンは7.4.9
finderにできるはずのXAMPPフォルダがなくなっていることに気づく
とりあえずXAMPPをスタートさせてみた
するとなんだかローカルIPアドレスが割り振られたように見える
ApacheとMySQLもスタートさせておく
80ポートをenableにする
mountをクリックする
この
opt/lampp
の中にあるhtdocsがドキュメントルートになるようだ。ここまでいくとfinderの"場所"にVMのIPアドレスが表示されていてフォルダが操作できるようになる
- 投稿日:2020-08-30T13:51:27+09:00
macOS Catalina が bash から zsh に変わるとお知らせがあったので今更移行して環境を整えた話
私の手元の Mac ではターミナル起動時に随分前から下記のような警告が表示されていました。
The default interactive shell is now zsh. To update your account to use zsh, please run `chsh -s /bin/zsh`. For more details, please visit https://support.apple.com/kb/HT208050.様々な Qiita 記事を参考にしつつ、自分用の備忘録として bash から zsh に乗り換えたついでに色々ターミナル環境をカスタムしようと決意したので、作業内容を残しておこうと思いました。
個人的にはサーバオペレーションが多いので、 bash にそろえておきたい気持ちがとてもあります(Tab 補完の感覚とか Completion の感覚)が、仕方ないので。
カスタム結果
フォントも見やすいし、色も柔らかくて個人的にはイイ感じです。
要約
- ターミナルのスタイルは iceberg
- フォントは「白源(HackGen)」
- プロンプトに Starship を採用
- zsh の設定管理に oh-my-zsh を採用
情報収集
まずは情報収集をしました
iTerm2とstarshipでterminalとshellをお洒落にしました!
【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話
これだけ集まれば、そこそこ便利なターミナル + zsh 環境が整うだろう、とのことでセットアップスタートです
端末のスタイルを変更
お前らのターミナルはダサい から得た情報として、 iceberg というスタイルがあるため、そちらを使うことにしました。
http://cocopon.github.io/iceberg.vim/
こちらからファイルをダウンロードして、スタイルを適用しました。手順は引用元の記事に記載されています。
starship インストール前に必要なフォントをインストール
starship の公式サイト には「Powerline フォント がターミナルにインストールされて有効になっている必要があります」との記述があるので、Fira Code フォントを試したのですが、個人的には Ricty を採用したかったので、Powerline フォントに対応している RictyDiminished with FiraCode というものを使います
... と言いたいところなのですが、RictyDiminished with FiraCode を starship で利用しようとすると、ブランチ記号の大きさが意図したものと異なるため、「白源 (HackGen)」を利用することにしました。
【文字幅 半角3:全角5 も追加】Ricty を神フォントだと崇める僕が、フリーライセンスのプログラミングフォント「白源」を作った話
こちらもターミナルのフォントの設定から、「HackGen35Nerd Console Regular 14pt」を選択して設定をしました
starship をインストール
starship は公式サイトにある通り「シェル用の最小限の、非常に高速で、無限にカスタマイズ可能なプロンプト」です。Cross-Shell Prompt という言葉もある通り、zsh だけでなく bash でも対応しています。
こちらは日本語訳もありますので、公式サイトの手順で問題ないと思います。brew もありますのでお好みで。
curl -fsSL https://starship.rs/install.sh | bash
これは git で管理しているディレクトリの状態をサッと確認するために導入しました。他にも拡張が増えると良いですね。
oh-my-zsh をインストール
oh-my-zsh は zsh の設定管理フレームワークです。
と、いう位置づけですが、コミュニティが開発した様々な拡張機能の恩恵を受けることができます。
prezto と悩んだのですが、私はよく使う
docker
,docker-compose
コマンドの completion の公式手順が oh-my-zsh の手順だったため、prezto は諦めました。Command-line completion | Docker Documentation
あと、こういった話もあるようです。(bash のときには
docker exec -it ...
で補完できていましたが、 zsh ではdocker exec -i -t ...
としなければならなそうです).zshrc をカスタマイズ
### ここから上は oh-my-zsh のデフォルトのままなので、カスタムした内容だけ記載してます。 # tab による Auto Completion をしないように NO_AUTO_MENU を指定 setopt NO_AUTO_MENU # oh-my-zsh から取ってきた適当な LSCOLORS を採用 export LSCOLORS="exfxcxdxbxegedabagacad" eval "$(starship init zsh)" export PATH="/usr/local/sbin:$PATH" # Load rbenv export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)" # Load NVM, if you are using it [[ -s $HOME/.nvm/nvm.sh ]] && source $HOME/.nvm/nvm.shhttps://github.com/ohmyzsh/ohmyzsh/issues/5568
最後に
使いたてもいいところですし、個人的に zsh は補完が親切すぎた節があったので食わず嫌いでしたが、これなら bash と遜色ない感じで生活していけそうです。
zsh ならではの便利機能もぜひに活用していきたいですね ◝( ⁰▿⁰)◜
- 投稿日:2020-08-30T12:41:36+09:00
macOSで初めてGitを使おうとした時に出るエラーの対処法
- 投稿日:2020-08-30T01:06:49+09:00
Vimでのpaiza下準備をステップバイステップで丁寧に
この記事の対象読者
ドットインストールや入門書で基本の勉強を済ませたのでpaizaで問題を解いてみたい方
vimの練習も兼ねてとりあえず最低限+αの準備をしたい方
※AtcoderやICPC等の競技プログラミングコンテストを始めてみたい方にはちょっとレベルの低い話かもしれません。
※今回はPHPで書いていますが、他の言語でも基本同じです。まずは実行ファイルと標準入力用のファイルを準備
Desktopに移動してaojというディレクトリ(フォルダのこと)を作成しましょう。
$ cd ~/Desktop $ mkdir aojaojディレクトリ下に実行ファイルと標準入力ファイルを作成します。
$ touch main.php input.datちなみに.datファイルのdatはIT用語辞典/e-Wordsで説明されている通り『「データ」(data)の略号で、プログラムなどではなくデータを保存していることを示して』います。
[前半]簡単にvimで実行が出来るようにする
vimを開いているときに + eで設定しているシェルスクリプトが実行されるようにしましょう。
.vimrcを編集しましょう。
//ホームディレクトリに移動 $ cd ~/ //.vimrcを編集 vim .vimrc.vimrcには下記のように書いてみましょう。
set number " exec nnoremap <space>e :wa \| !echo -e '\e[38;5;0m\e[48;5;51m --- exec --- \e[m';./exec.sh<cr>これでvimを開いているときに + eでexec.sh(後ほど作っていきます!ご安心を!)に書かれているシェルスクリプトが実行されます。
またset numberのおかげでvimに行番号が自動的に入るようになります。[後半]簡単にvimで実行が出来るようにする
次にexec.shの中身を編集します。
//aojディレクトリに移動 $ cd ~/Desktop/aoj //exec.shを編集 $ vim exec.shmain.phpにinput.datが入力されて実行し、その結果が^aファイルに書き込まれるスクリプトを書いてみましょう。
exec.shphp main.php < input.dat | tee ^a
では簡単なプログラムを書いて上手く動くか実験してみましょう。
input.dat1 5 6main.php//標準入力を受け取る $first_data = fgets(STDIN); echo $first_data . PHP_EOL; $second_data = fgets(STDIN); echo $second_data . PHP_EOL; $third_data = fgets(STDIN); echo $third_data . PHP_EOL;main.phpを編集中に+eと押してください。
1,5,6が順番に出力されるはずです。また同じディレクトリ下に^aファイルが出来ているはずです。中身を確認すると出力結果と同じデータが入っています。
$ ls exec.sh main.php input.dat ^a $ view ^a ->^aの中身は下記のようになっているはず! 1 5 6次はoutput.datというファイルを同じディレクトリの中に作ってみましょう。
まずはoutput.datの中身を^aと同じにします。output.dat1 5 6下記のように^aとoutput.datの中身を比較してみます。
差異がないので何も出ないはずです。
$ cd ~/Desktop/aoj
$ diff ^a output.dat
次にoutput.datの3行目だけ^aと違う数値にすると。。。
output.dat1 5 7今回は3行目に差異が教えてくれます!!!
$ diff ^a output.dat 3c3 < 6 --- > 7お疲れ様です!これでpaizaのスコアアップ問題を解く準備完了です!お疲れ様でした!
[最後に]参考になるかもしれないサイト
AOJ-ICPC
paizaに比べると少しムズカシイ(最低ランクの問題でもBランク以上?)が他の人の解答が見れるのでオススメです。vimtutorでVim力をアップ
vimの練習をしたい方はまず上記で紹介されているvimチューターから始めるのがオススメです。