macOSにおけるnode.js環境構築手順 2020

2020年11月12日時点での、macOSにおけるnode.js環境の構築方法について記録しておきます。

インストールするもの

homebrew、nodenvはわかりますがanyenvというのは見慣れないですね。

どうやら *env といった環境管理ツールを管理してくれるというメタなツールのようです。

言語やツールごとに増えがちで管理も難しいので嬉しいです。

実はjenvとかも管理できるようなので、Java/Scala使いにも嬉しい可能性があります(未検証)。

Homebrew

Homebrewをインストールする方法はScalapediaにて解説済みなのでそちらをご覧ください

macOSにsbtをインストールする方法|Scalapedia

anyenv

brew install anyenv

nodenv

anyenv install nodenv
nodenv init

以下のようなコマンドをどこかに記述する必要があります。

eval "$(nodenv init -)"

nodenv initの実行時の出力に、どこに記述すればよいのかが明らかにされます。
これを参考に追記しましょう。

今は一般的には ~/.zshrc に追記することになるんですかね。

node.js

nodeの一覧を最新に更新します(インストールしたては不要)

brew upgrade nodenv node-build

一覧を表示します。

nodenv install --list

表示した中で必要なnodeをインストールします。

nodenv install 14.15.0
nodenv global 14.15.0

installだけではまだ全体に反映されません。
global コマンドを使用すると、バージョンが固定されます。

特定のディレクトリのnodeを固定するには local コマンドを使用します。

nodenv local 14.15.0

Reactのサンプルアプリケーションの作り方 2020

2020年11月12日現在のReactのサンプルアプリケーションの作り方について記録しておきます。

Reactでサンプルアプリケーションをつくる

Reactでサンプルアプリケーションをつくるには日本語公式のチュートリアルを使用するといいです。

ReactとTypeScriptでサンプルアプリケーションをつくる

JavaScriptでなくTypeScriptで書きたいという場合は、TypeScript Deep Dive日本語版を見ましょう。

これは上述の公式ReactサンプルをTypeScriptで記述したものです。

git-new-workdir の有効化手順

「git-new-workdir の有効化」とは

git-new-workdir の有効化とは、パスの通ったディレクトリにgit-new-workdirコマンドへのシンボリックリンクを貼ること。

有効化手順

実際に「パスの通ったディレクトリ」に「git-new-workdirコマンド」への「シンボリックリンクを貼」っていきます。

「パスの通ったディレクトリ」

「パスの通ったディレクトリ」として適当なのは /usr/local/bin です。

「git-new-workdirコマンド」

次に「git-new-workdirコマンド」のあるディレクトリを特定していきます。

gitインストールディレクトリの中の share/git-core/contrib/workdir の中に git-new-workdir があります。

homebrewでgitをインストールしているので、gitのインストールディレクトリを特定するには、brew info git を実行するとわかります。

私の場合は /usr/local/Cellar/git/2.27.0 でした。

したがって git-new-workdirのフルパスは /usr/local/Cellar/git/2.27.0/share/git-core/contrib/workdir/git-new-workdir と判明しました。

「シンボリックリンクを貼る」

ということで、以下のコマンドを実行すればOKです。

 ln -s /usr/local/Cellar/git/2.27.0/share/git-core/contrib/workdir/git-new-workdir /usr/local/bin/git-new-workdir

うまくできたか確認

$ which git-new-workdir
/usr/local/bin/git-new-workdir

のように返ってくればOK。何も返ってこないとなると失敗です。

参考


Gitで同時に複数ブランチを利用する場合は、やっぱり git-new-workdir だね! - 都内SEのプログラミング勉強と雑記


/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは? - Qiita

JavaとScalaのStringBuilder/StringBuffer事情

2020年7月30日 追記:こちらで詳しく解説しています



上級(歴史的経緯についての理解が必要)

scala.collection.mutable.StringBuilder, java.lang.StringBuilder, java.lang.StringBuffer の使い分けについて
  • java.lang.StringBuilderはsynchronizedされてない。その分速い。Java 5から追加。
  • java.lang.StringBufferはsynchronizedされてる。その分遅い。最初からある。
  • Javaであれば、内容を変更可能な文字列を扱う際、基本的にはjava.lang.StringBuilderクラスを使う。
    • 文字列の変更を繰り返す場合はStringよりもStringBuilerの方が効率的
  • スレッドセーフを確保したい場面であれば、java.lang.StringBufferを使うとAPI Docsには書かれている。
  • ただし、同期化の問題はStringBufferにすればたちまち解決するというものではないので、結局のところはStringBuilderを使いつつも同期化は手ずから愚直に実装すべきである。
  • したがってStringBufferは基本的に使用すべきではなく、現在存在しているのは専ら後方互換の目的である。
  • これを踏まえ、Scalaでは内容を変更可能な文字列を扱うにはscala.collection.mutable.StringBuilderクラスを使えばよい
    • scala.collection.mutable.StringBuilderは内部実装がStringBuilderである
    • scala.collection.mutable.StringBuilderはjava.lang.StringBuilderと機能的に互換性がある。
    • さらにScalaっぽい使い方ができるようになっている(要出典)
    • 長い文字列

参考




追記

まだ読んでいないがこちらの記事も参考になりそう



How to run shell in the Docker container

You can run bash without SSH connection to the Docker container.

TODO

  • fetch the container ID
    • docker ps -qf "name=[the name of container]"
  • run bash on the docker instance
    • docker exec -it [container ID] bash

e.g.,

docker exec -it $(docker ps -qf "name=[the container name]") bash