20200119のMacに関する記事は7件です。

Mac の VSCode に PlantUML を導入

Overview

プライベートの開発タスクの依存関係を可視化するために、PlantUML を導入する。

インストール

brew コマンドを使って必要なパッケージを導入

$ brew install graphviz
$ brew cask install adoptopenjdk
$ brew install plantuml

brew コマンド自体がない場合は、以下でインストールしてから再実行する。

# コマンドがない!
$ brew install XXX
bash: brew: command not found

# インストール
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# インストール確認
$ brew -v
Homebrew 2.2.3
Homebrew/homebrew-core (git revision a0d66; last commit 2020-01-19)
Homebrew/homebrew-cask (git revision 4bb1; last commit 2020-01-19)

plantuml は Java が必要とのことで、入っていない場合は以下のエラーが表示される。

$ brew install plantuml
plantuml: Java is required to install this formula.
Install AdoptOpenJDK with Homebrew Cask:
  brew cask install adoptopenjdk
Error: An unsatisfied requirement failed this build.

VSCode で利用する

PlantXML 用の拡張をインストールする。
image.png
インストールが完了したら VSCode を再起動。

*.pu 形式のファイルを作成し、以下の様に記入してみる。

@startuml
Class01 <|-- Class02
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 -- Class10
@enduml

その後、⌥(option) + D を入力すると。。。
image.png

image.png
少し時間をかけた後に上記の図が描写された!

一度プレビューを表示すれば、後はリアルタイムで更新が反映されていくので確認しつつ修正ができる。これは便利。

画像として保存

⌘(command) + ⇧(shift)+ P でコマンドパレットを開き、 Export Current File Diagrams を選択。
image.png
その後ファイル形式を聞かれるので、好きな形式を選択。
image.png
少し時間が経った後、 以下の通知が出れば作成完了。
image.png

今回の場合、test.um から /out/uml/test/test.png を生成した。
生成ファイルのディレクトリが独自に作られるので、最初は少し迷うかもしれない。
image.png

GitHub 上で管理・閲覧する。

PlantUML Viewerを使うことで、GitHub 上のテキスト形式の UML図 を描写して確認することが可能。
確認する際は、そのファイルをGitHub上のRaw指定で表示する必要あり。

詳しい書き方

Reference

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

アル中カタカタ〜!大事なキーを異世界に転生!また俺何かやっちゃいました?

システムエンジニアになって10ヶ月のピッチピチのJK(Java書き)のキー太郎です!
先日最近購入しましたMacBook Proを友達の家に持って行って、酒呑みながらカタカタいじってたときの失敗談です。ゆる〜く聞き流してください。

週末久しぶりに友人と食事をした私はそのまま友人宅飲み会をすることに。MacBook Proを開きながらあれこれよくわからんウンチクを語りながら例の飲み物(角ハイ金)を飲んでいました。そしてどういう流れからか私は友人に自慢をしたくなりました。

キー太郎「そういえばさ〜最近秒で俺サーバ作れるようになったんだよね〜」
友人「どうやって?」
キー太郎「EC2ていうえーだぶりゅーえす?を使うと簡単にサーバ立ち上げることができるんだぜ〜」
友人「すげーーーーーーーーーー!!!!!!!!!!!!!!!!」
キー太郎「また俺何かやっちゃいました?笑笑」

macでEC2を立ち上げるには
1:AWSマネジメントコンソールからEC2を選択し、キーペアを作成する。
2:作成した秘密鍵(pem)をダウンロードする。
3:キーの権限を変更する。

chmod 400 ●●●●●.pem

4:sshコマンドを実行する。

ssh ec2-user@00.00.00.00 -i ●●●●●.pem

5:サーバが稼働する。

| _| )
| ( / Amazon Linux 2 AMI
_
_|_
|___|

ざっくりと説明しましたがこんな感じです。

さてその後一通り自慢を終えた私はキーを保存しておくためのディレクトリを作成し、作成後にキーを移動しようと思い実行に移します。そのことがある悲劇を生むとは梅雨知らず、、、

キー太郎(酔)「キーをただ外にほっぽり出しておくのもなんかアレだしディレクトリでも作成してそんなかで管理しておきますかね〜」
キー太郎(酔)「まずはディレクトリを作るぞーい」
キー太郎「ディレクトリを作るには確かmkdir or touch だったけな・・・」

touch SSH

キー太郎「そんで次はカレントディレクトリにあるキーを移動させると・・・」
キー太郎「mvコマンドで異世界転生させたるわ!!!!!」

mv ●●●●●.pem /●●/●●/SSH/

キー太郎「実行っと・・・うん!特にエラーもなく実行できたみたいだな」
キー太郎「さて無事に作業終わったし祝酒でも開けますかね笑笑」

その後達成感に浸りながらとりあえず再びssh接続をしようと試みます。まずキーが入っているSSHディレクトリ移動しようとします。

cd SSH

キー太郎「移動っと・・・あれ?」

cd: not a directory: ●●●●●.pem

キー太郎「ディレクトリじゃない・・・?どういうこと?アクセス権限の問題か?いやディレクトリじゃないよってターミナルに言われとるし・・・」

その後あらゆる手段試してもそのディレクトリには移動できませんでした。

キー太郎「はあああああああ・・・・終わったわ。完全に詰んだ。ディレクトリに入れなかったら鍵取り出せんわ・・・・」

さて感の良い方なら最初の方に気づいているかもしれません。その通りです。この悲劇は最初に実行したコマンドであるtouchコマンドが原因なのです。

touchコマンドはファイルのタイムスタンプを変更するコマンドであり、存在しないファイル名を指定することで、内容の入っていないファイルを新規作成する機能を持っています。詳しくはググってください。

最初から整理します。

カレントディレクトリには

●●●●●.pem

touch SSH コマンド実行後のカレントディレクトリは

●●●●●.pem SSH

という状態になっておりtouchコマンドをディレクトリを作るコマンドだと思っていた私はSSHをディレクトリだと認識しています。その後キーをSSHディレクトリに移動させようとmvコマンドを実行します。

mv ●●●●●.pem SSH

ここでも深刻な問題が起っています。mvコマンドは移動させることだけではなく名前を変更させることもできるコマンドなのです!つまり・・・・

mv 名前を変えたいファイル名 変更したい名前

というように上記の私が実行したコマンドは移動させるのではなく名前を変えるコマンドととらえられてしまったのです。笑笑 また名前を変えた後SSHという同じ名前をしたファイルが存在することになるので、旧SSHファイルはSSHという名前に変わったキーである新SSHファイルに上書きされます。そうなるとカレントディレクトリに残るのはSSHという文字のみ・・・あたかもSSHディレクトリにキーの移動が成功したように見えるのです。

mvコマンド実行後のカレントディレクトリは

/*SSHというディレクトリが存在するのではなくSSHという名前の●●●●●.pemが存在しているだけ/
SSH

酔っ払っていてそのことに気づかなかった私はあたかもキーがnot a directoryという自分で作った謎のディレクトリにキーを異世界転生させてしまったと錯覚したのです。

また俺何かやっちゃいました?

●今回の事件からの学び
・大事なファイルを移動させるときは細心の注意を払う。
・コマンドを正確に理解した上でコマンドを実行する。
・酒を飲みながら作業してはいけない。

その後・・・
キー太郎「なんだったんだこれは・・狐に包まれた気分。」
友人「ぱっと見.txtとか.html.javaとかついてないとディレクトリかと思うよな」
キー太郎「まあ擬似異世界転生体験できたし良いか笑!!!」
友人「委員会!」

以上です。ここまで駄文を読んでいただき本当にありがとうございます。何か気づいた点、突っ込みどころがありましたらなんなりとコメントを送ってください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PATH を通すについてまとめてみた

PATH を通すとは ?

ターミナル上でコマンドを打てば処理が行われます。業務・日常的に触れる cd, vi, mkdir などなどです。
ls であればカレントディレクトリのファイル一覧を確認することができます。

ところが以下のようなエラー文が出ることがあります。新たに追加したライブラリ用のコマンドとかでですね。

PATHが通っていない時
-bash: ${コマンド名}: command not found

この command not foundPATH が通っていない ことを教えてくれています。
(そもそも、存在しないコマンドの可能性もあります。)

コマンド 1 つ 1 つは、実行ファイルによって処理が行われます。そのため、実行ファイルがある場所までの 道標 を明示しなければコマンドは実行できなくなるのです。

つまり、 PATH を通す とは、コマンド実行ファイルを探しに行くパスを示してあげること です。

コマンド実行ファイルのPATH
$ which ${コマンド名}

$PATH はどこで示されているの ?

PATH は bash_profile というファイルに書き込みます。
bash_profile はログイン時に 1 度実行されるファイルです。( terminal や iTerm などの起動時 )

ファイルを開かないで確認するときは
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

$ printenv PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

# つまり 5 箇所
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
bash_profileの中身確認
# 書き換えを含むなら
$ vi ~/.bash_profile

# readonly なら
$ less ~/.bash_profile

1 行でずらっと書かれていますが : で PATH は区切られます。ですので現在 PATH が通っているのは 5 箇所になります。

この 5 箇所に関しては bash_profile に書かれていないくても PATH は通るみたいですが、実行ファイルを読み込めなくなったときは書き込む必要はありそうです。( Linux の標準コマンドだからかな ? )

$PATH を通すには

bash_profile に、実行ファイルがあるディレクトリまでのパスを書き込む必要があります。bash_profile が存在しなければ新規で作成する必要があります。(touch コマンドで作りましょう)

書きかた
export PATH="${通したいパス}:$PATH"
mysqlのPATHを通す
$ vi ~/.bash_profile

# ファイル内に以下を書き込み保存
# 末尾の $PAHT はこの export 以前の $PATH を指定
export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
PATHの通し方2
$ echo "export PATH=/usr/local/bin:$PATH" >> ~/.bash_profile

bash_profile に書かれている export が複数ある場合は、最後の export が $PATH の内容となります。ですので、$PATH には

  • 通したいパス
  • これまでの $PATH

を書き込まなければいけません。

bash_profile を更新して完了

書き換えが終わったら最後に、bash_profile を再読み込みすれば完了です。ターミナルを再起動するか、 source コマンドで更新することで可能です。

ファイルを更新する
source ~/.bash_profile

完了と思ったけど意図したコマンドの挙動でないとき

「PATH を通して bash_profile も更新して、さあコマンドを打ったぞ! ...あれ、おかしいな、挙動がおかしい。」

こんなことが時たまあります。ライブラリの version 違いとか。

原因は export の書き方にあります。通したパスには優先順位が存在します。
コマンドの実行ファイルがあるかどうかの検索は左から順に行われ、見つけた瞬間に後続のパスは検索されません。

ですので、挙動がおかしい場合は、同名の実行ファイル(コマンド)が手前のパス内にないか確認することで解決できます。

解決策は片方の実行ファイルを削除するなどで対応できます。(削除してはいけない実行ファイルの場合は他の策を考えます)
削除後はシンボリックリンクを書き換えます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macにJulia(1.3.1)をインストールする

概要

mac に Julia をインストールします。

この記事では、ターミナルでコマンドを実行できるところまでを扱います。
IDEの利用やライブラリのインストールなどについては、今後の記事で書く予定です。

ちなみに、この作業を行ったのは 2020/1/19 です。
バージョンや、公式サイトの更新等によって手続きが変わる可能性があります。

環境

macOS:10.15.2 (Catalina)
Julia:1.3.1

Juliaのインストール手続き

ダウンロード

公式サイトより、dmgファイルをダウンロードしてきます。

The Julia Language
https://julialang.org/

トップページ

Download v1.3 をクリック
top.png

ダウンロードページ

mac OS10.8+ の項目にある 64-bit をクリック。
julia-1.3.1-mac64.dmg がダウンロードされる。
download.png

インストール

dmgファイルを実行して、 app ファイルを Application フォルダに入れるだけです。
dmg.png

Juliaを使ってみる

Juliaの起動

Application フォルダに入れた app ファイルを実行すると、
ターミナルが起動し、 Julia が起動した状態となります。
また、この状態は、REPL(インタラクティブモード)と呼ばれ、
enterが押されるたびに、一行ずつ命令が実行されます。

julia_run.png

REPLの使い方については、以下記事で解説しています。

JuliaのREPL(インタラクティブモード)の使い方
https://qiita.com/beckyJPN/items/bde9913498f789c8d144

起動できない場合

インターネットから落としてきたファイルの場合、セキュリティ上の関係で直接実行できない場合があります。
その場合は、以下サイトなどを参考に、実行できる状態としてください。

Mac - インターネットからダウンロードしたアプリの実行許可 - PC設定のカルマ
https://pc-karuma.net/download-app-security/

何か表示してみる

試しに以下コマンドを入力して、文字を表示してみましょう。

print("Hello Julia!")

次の行に Hello Julia! と表示されました。
スクリーンショット 2020-01-19 18.35.58.png

Juliaにパスを通す

とりあえず、これで準備は完了ですが、現在の状態だとパスが通ってないため、
単にターミナルを起動した状態では、 julia のコマンドを認識しません。
スクリーンショット 2020-01-19 18.39.19.png

なので、ユーザーのHomeフォルダにある、 .bash_profile にPATHを書いておきましょう。
ファイルがない場合は、作成しつつ書き込みます。

$ cd ~
$ echo "export PATH=${PATH}:/Applications/Julia-1.3.app/Contents/Resources/julia/bin" >> .bash_profile

これで、パスが通りました。
ターミナルを再起動して、 julia と打ち込んで立ち上がるか確認してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】localhostでサーバーを立ち上げる際に立ち上がらない

【状況】
Macでローカルサーバー(localhost:8080)を立ち上げる際立ち上がらない!
特にエラーも吐かれていない!

【原因】
すでに立ち上げようとしているポート8080がLISTENされている可能性がある!

【解決策】

下記コマンドでLISTENされているポートとプロセス番号を確認する!

$ sudo lsof -i -P | grep "LISTEN"
java        998           miki  157u  IPv6 0x78963e449976890f      0t0    TCP localhost:8080 (LISTEN)
Code\x20H 24811           miki   38u  IPv4 0x78963e44c014124f      0t0    TCP localhost:38275 (LISTEN)
Code\x20H 27337           miki   38u  IPv4 0x78963e44c00d024f      0t0    TCP localhost:5023 (LISTEN)
Code\x20H 33904           miki   37u  IPv4 0x78963e44b07dfbcf      0t0    TCP localhost:13863 (LISTEN)
node      34867           miki   25u  IPv6 0x78963e449976a5cf      0t0    TCP *:6006 (LISTEN)

やはり8080がすでに立ち上がっている!!

下記コマンドで解放したいポートのプロセスをkillします。

$ kill -9 998

これで8080を使えるようになりました。

$ sudo lsof -i -P | grep "LISTEN"
Code\x20H 24811           miki   38u  IPv4 0x78963e44c014124f      0t0    TCP localhost:38275 (LISTEN)
Code\x20H 27337           miki   38u  IPv4 0x78963e44c00d024f      0t0    TCP localhost:5023 (LISTEN)
Code\x20H 33904           miki   37u  IPv4 0x78963e44b07dfbcf      0t0    TCP localhost:13863 (LISTEN)
node      34867           miki   25u  IPv6 0x78963e449976a5cf      0t0    TCP *:6006 (LISTEN)

【参考】
https://qiita.com/yokozawa/items/dbcb3b31f9308e4dcefc

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac / Windows】localhostでサーバーを立ち上げる際に立ち上がらない

【状況】
ローカルサーバー(localhost:8080)を立ち上げる際立ち上がらない!
特にエラーも吐かれていない!

【原因】
すでに立ち上げようとしているポート8080がLISTENされている可能性がある!

Mac の場合

【解決策】

下記コマンドでLISTENされているポートとプロセス番号を確認する!

$ sudo lsof -i -P | grep "LISTEN"
java        998           miki  157u  IPv6 0x78963e449976890f      0t0    TCP localhost:8080 (LISTEN)
Code\x20H 24811           miki   38u  IPv4 0x78963e44c014124f      0t0    TCP localhost:38275 (LISTEN)
Code\x20H 27337           miki   38u  IPv4 0x78963e44c00d024f      0t0    TCP localhost:5023 (LISTEN)
Code\x20H 33904           miki   37u  IPv4 0x78963e44b07dfbcf      0t0    TCP localhost:13863 (LISTEN)
node      34867           miki   25u  IPv6 0x78963e449976a5cf      0t0    TCP *:6006 (LISTEN)

やはり8080がすでに立ち上がっている!!

下記コマンドで解放したいポートのプロセスをkillします。

$ kill -9 998

これで8080を使えるようになりました。

$ sudo lsof -i -P | grep "LISTEN"
Code\x20H 24811           miki   38u  IPv4 0x78963e44c014124f      0t0    TCP localhost:38275 (LISTEN)
Code\x20H 27337           miki   38u  IPv4 0x78963e44c00d024f      0t0    TCP localhost:5023 (LISTEN)
Code\x20H 33904           miki   37u  IPv4 0x78963e44b07dfbcf      0t0    TCP localhost:13863 (LISTEN)
node      34867           miki   25u  IPv6 0x78963e449976a5cf      0t0    TCP *:6006 (LISTEN)

【参考】
https://qiita.com/yokozawa/items/dbcb3b31f9308e4dcefc

Windows の場合

【解決策】

下記コマンドでLISTENされているポートとプロセス番号を確認する!

$ netstat -nao
 TCP         0.0.0.0:80             0.0.0.0:0              LISTENING       65652
 TCP         0.0.0.0:2179           0.0.0.0:0              LISTENING       19892
 TCP         0.0.0.0:3306           0.0.0.0:0              LISTENING       65652
 TCP         0.0.0.0:3380           0.0.0.0:0              LISTENING       65652
 TCP         0.0.0.0:5040           0.0.0.0:0              LISTENING       39864

下記コマンドで解放したいポートのプロセスをkillします。

 taskkill /F /PID 65652

これで8080を使えるようになりました。

$ netstat -nao
 TCP         0.0.0.0:2179           0.0.0.0:0              LISTENING       19892
 TCP         0.0.0.0:3306           0.0.0.0:0              LISTENING       65652
 TCP         0.0.0.0:3380           0.0.0.0:0              LISTENING       65652
 TCP         0.0.0.0:5040           0.0.0.0:0              LISTENING       39864
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでのRuby環境構築2020

MacでのRuby環境構築についてまとめます。改めて公式文書を読みながら進めたところ、今までやっていたことをスキップできる!と気づいたので、久々にQiitaに書こうと思います。

事前準備

動作確認環境

  • MacBook Pro (13-inch, 2019, Four Thunderbolt 3 ports)
  • Catalina 10.15.1

今回構築する環境の概要、ゴール

複数バージョンのRubyを管理するために、rbenv を使用します。インストールにはHomebrewを使います。
最終的に $ ruby --version で意図したバージョン名が表示されることを確認します。

前提

以下の環境であることを前提とします。

  • Homebrewを使えること
    • Homebrewがインストールできていない方は、 Homebrew を確認してインストールをお願いします
  • gitを使えること
    • Homebrewが使用できれば、 $ brew install git でインストール可能です。

rbenv環境構築

基本的に、https://github.com/rbenv/rbenv#installation にしたがって操作していきます。

1. rbenv のインストール

以下のコマンドを実行します。

$ brew install rbenv

rbenvがインストールされます。
同時に、 ruby-build もインストールされます。

2. rbenv のセットアップ

以下のコマンドを実行します。

$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init -)"

上に書いたようなログが出力されています。指示通りに eval "$(rbenv init -)"~/.zshrc に書き込みます。
私の場合は、zsh を使用しているため、このようなログ(# the following to ~/.zshrc:)が出ていますが、お使いのシェルによって、どのファイルに書き込むかは(ログの内容も)変わってきます。

eval "$(rbenv init -)" を ~/.zshrc に書きむとは何を意味するのか
ちょっと話題がそれますが、簡単に説明しておきます。
zsh を使用している環境において ~/.zshrc ファイルに書き込まれた内容は、ログインしたときやターミナルを開いた時などに実行されます(ここでは詳しくは説明しません)。~/.zshrc ファイルに eval "$(rbenv init -) を書き込むということは、ログインするときやターミナルを開き直す度に、 eval "$(rbenv init -) を実行したい、ということになります。

3. ターミナル再起動

ターミナルを再起動することで、 ~/.zshrc ファイルが読み込まれます。
ターミナル再起動の代わりに、 $ source ~/.zshrc でも内容を反映することが可能です。

4. rbenvインストール環境確認

以下のコマンドを実行し、バージョンが表示されればrbenvのインストールは完了です。

$ rbenv
rbenv 1.1.2
...
...

ruby環境構築

インストールした rbenv を利用して ruby をインストールしていきます。
こちらも基本的に https://github.com/rbenv/rbenv#installing-ruby-versions にしたがって操作をします。

1. インストール可能なバージョンの確認

以下のコマンドで、インストール可能なrubyのバージョンを確認します。

$ rbenv install -l
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
...
...
2.7.0
...
...

2. ruby のインストール

今回は現時点で stable (安定版)となっている2.7.0をインストールします。

$ rbenv install 2.7.0

また、全てのシェルでこのバージョンを使用したいため、global設定を行います。

$ rbenv global 2.7.0

3. ターミナルの再起動

特に手順には書いてありませんでしたが、私の環境ではターミナルの再起動を行うことで意図したバージョンのrubyを使えるようになりました。

4. rubyがインストールされたことを確認する

以下のコマンドで、rubyのバージョンを確かめます。

$ ruby --version

意図したバージョンになっていることが確認できれば、インストールは完了です。

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む