20190211のMacに関する記事は12件です。

macOS からの IntelliJ CEのアンインストール方法

  1. ApplicationsフォルダからIntelliJのアイコンをゴミ箱へ
  2. 設定やキャッシュファイルの削除。場所は以下の通り
# 設定
ls ~/Library/Preferences/ |grep IdeaIC
rm -fr ~/Library/Preferences/IdeaIC2018.2
rm -fr ~/Library/Preferences/IdeaIC2018.3

# キャッシュ
ls ~/Library/Caches/ |grep IdeaIC
rm -fr ~/Library/Caches/IdeaIC2018.2
rm -fr ~/Library/Caches/IdeaIC2018.3

#プラグイン
ls ~/Library/Application\ Support/ |grep IdeaIC
rm -fr ~/Library/Application\ Support/IdeaIC2018.2
rm -fr ~/Library/Application\ Support/IdeaIC2018.3

# ログ
ls ~/Library/Logs/ |grep IdeaIC
rm -fr ~/Library/Logs/IdeaIC2018.2
rm -fr ~/Library/Logs/IdeaIC2018.3

環境

  • macOS mojave
  • IntelliJ CE 2018.03 (アップデート前のものも残っていた模様)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macで使うmatplotlibのbackendエラー

はじめに

pythonを使ったデータ解析環境として、まず用意したいライブラリの一つが、matplotlibだと思います。少なくとも僕はそう思っています。
なので、macのpython環境でもまずmatplotlibを入れることを考えました。

matplotlibのインストールと実行

とりあえずpipenv環境をactivateして、いつも通り下記を実行すると問題なくするっと入ります。

$ pip install matplotlib

じゃあいけるだろうと思い、下記を実行。

main.py
import matplotlib.pyplot as plt
a = [1, 2, 5, 4, 3]
plt.plot(a)
ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.

なんかエラー出た。。

macでのmatplotlibインストール エラー対策

どうやらmacあるあるらしく、たくさん解決法が書いてありました。
matplotlibのmatplotlibrcファイルのbackendをmacosxから、TkAggに変えろ、というもの。
早速、matplotlibrcの場所を下記コマンドで調べて書き換える。

import matplotlib
matplotlib.matplotlib_fname()

.venv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc'
matplotlibrc
# backend: macosx
backend: TkAgg

そして、また実行してみると、
white.png
いやいや、グラフ出ないじゃん。

ということで、別情報を得て、backendをQtAggに変更するとできると知る。GUIとしてPyQtを使う手のようです。下記の方法でうまくいきました。

$ pip install PyQt5
matplotlibrc
# backend: macosx
# backend: TkAgg
backend: Qt5Agg

これで、matplotlibのコードを動かすと・・
graph.png
動きました。

まとめ

とりあえず2019/2の段階では、PyQt5をインストールして、backendをQt5Aggにすれば動きそうです。Qt4Aggにすれば動くという話も出回っていますが、私の環境ではうまくいきませんでした。
皆さんのご参考になれば。

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

Macで使うmatplotlibのbackendエラー

はじめに

pythonを使ったデータ解析環境として、まず用意したいライブラリの一つが、matplotlibだと思います。少なくとも僕はそう思っています。
なので、macのpython環境でもまずmatplotlibを入れることを考えました。

matplotlibのインストールと実行

とりあえずpipenv環境をactivateして、いつも通り下記を実行すると問題なくするっと入ります。

$ pip install matplotlib

じゃあいけるだろうと思い、下記を実行。

main.py
import matplotlib.pyplot as plt
a = [1, 2, 5, 4, 3]
plt.plot(a)
Traceback (most recent call last):
  File "main.py", line 1, in <module>
    import matplotlib.pyplot as plt
  File "/Users/yohei/workspace/project/mnist_dim_reduction/.venv/lib/python3.5/site-packages/matplotlib/pyplot.py", line 2374, in <module>
    switch_backend(rcParams["backend"])
  File "/Users/yohei/workspace/project/mnist_dim_reduction/.venv/lib/python3.5/site-packages/matplotlib/pyplot.py", line 207, in switch_backend
    backend_mod = importlib.import_module(backend_name)
  File "/Users/yohei/workspace/project/mnist_dim_reduction/.venv/lib/python3.5/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/Users/yohei/workspace/project/mnist_dim_reduction/.venv/lib/python3.5/site-packages/matplotlib/backends/backend_macosx.py", line 14, in <module>
    from matplotlib.backends import _macosx
ImportError: Python is not installed as a framework. The Mac OS X backend will not be able to function correctly if Python is not installed as a framework. See the Python documentation for more information on installing Python as a framework on Mac OS X. Please either reinstall Python as a framework, or try one of the other backends. If you are using (Ana)Conda please install python.app and replace the use of 'python' with 'pythonw'. See 'Working with Matplotlib on OSX' in the Matplotlib FAQ for more information.

なんかエラー出た。。

macでのmatplotlibインストール エラー対策

どうやらmacあるあるらしく、たくさん解決法が書いてありました。
matplotlibのmatplotlibrcファイルのbackendをmacosxから、TkAggに変えろ、というもの。
早速、matplotlibrcの場所を下記コマンドで調べて書き換える。

import matplotlib
matplotlib.matplotlib_fname()

.venv/lib/python3.5/site-packages/matplotlib/mpl-data/matplotlibrc'
matplotlibrc
# backend: macosx
backend: TkAgg

そして、また実行してみると、
white.png
いやいや、グラフ出ないじゃん。

ということで、別情報を得て、backendをQtAggに変更するとできると知る。GUIとしてPyQtを使う手のようです。下記の方法でうまくいきました。

$ pip install PyQt5
matplotlibrc
# backend: macosx
# backend: TkAgg
backend: Qt5Agg

これで、matplotlibのコードを動かすと・・
graph.png
動きました。

まとめ

とりあえず2019/2の段階では、PyQt5をインストールして、backendをQt5Aggにすれば動きそうです。Qt4Aggにすれば動くという話も出回っていますが、私の環境ではうまくいきませんでした。
皆さんのご参考になれば。

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

Macのデスクトップ割当をCUIで設定する方法

はじめに

私は新しいmacOSが出るたびにクリーンインストールをしています。自動的に環境を構築できるようにするために、シェルスクリプトを書いています。
また、下記の記事のようにアプリケーション毎に仮想デスクトップを割り当てており、それをGUIで設定するのが意外と面倒だったので、仮想デスクトップの割り当てについていろいろ調べてみました。
仮想デスクトップの割り当てを自動化するのが本記事のゴールです。
macOSでディスプレイ1枚で作業する技術

実行環境

仮想デスクトップを10画面用意し、以下のように各アプリケーションを割り当てています。

アプリケーション 仮想デスクトップ割当番号
Google Chrome 2
Spark(メーラー) 3
Evernote 4
Fantastical 2 5
iTerm2 7
Tweetbot 9
Line 9
Slack 9
VSCode 10
  • Macbook Air Early2015
  • mac OS Mojave10.14.3(18D109)
  • ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin18]

com.apple.spaces.plistの構造

仮想デスクトップに関する設定項目は${HOME}/Library/Preferences/com.apple.spaces.plistに記述されていますが、バイナリ形式のため、そのままでは見ることができません。よって、defaultsコマンドを使うか、Xcodeで開くことで見れるようになります。

com.apple.spaces.plist
$ defaults read com.apple.spaces
SpacesDisplayConfiguration =     {
        "Management Data" =         {
            Age = "43266.030552205";
            Double =             {
                CreatedCount = 0;
                DeletedCount = 0;
                LifetimeEntryCount = 0;
                LifetimeMax = 0;
                LifetimeMin = 0;
                LifetimeSum = 0;
<略>

$ open ${HOME}/Library/Preferences/com.apple.spaces.plist  //デフォルトだとxcodeで開かれるはず

plistは以下のようにツリー構造をしているのがわかります。私の環境では、下記のような構造になっていました。

com.apple.spaces.plistの構造(抜粋)
SpacesDisplayConfiguration
├ Space Properties
     └ 0
       └ name => ""
     └ 1
       └ name => "B9A0EA1C-76A0-417D-BD30-4832630F6222"
     └ 2
       └ name => "91D6C0A1-645C-465A-9E5B-713E71FBD5F7"
         ︙
     └ 9
       └ name => "B5223836-F5DB-403A-B24C-48491006CFD2"


└ app-bindings
     └ "com.google.chrome" => "B9A0EA1C-76A0-417D-BD30-4832630F6222"
     └ "com.readdle.smartemail-mac" => "91D6C0A1-645C-465A-9E5B-713E71FBD5F7"
         ︙

ここで、GUI上の仮想デスクトップ番号(1~10)と.plistファイル上の割当番号(0~9)のように1つずれていることに注意してください。
すなわち、
SpacesDisplayConfiguration => Space Properties => 各割当番号 => name
の値でUUIDが決定され、それを
app-bindings => 各アプリケーション => UUID
と記述することで、各アプリケーションを仮想デスクトップに割り当てていることがわかります。
よって、これらの紐付けをCUI上で実施することで、各アプリケーションを仮想デスクトップへの割り当てが自動で行うことができます。

com.apple.spaces.plistへ書き込む方法

defaultsコマンドではplistファイルの入れ子になっている要素を操作することができず、難儀しました。(これの調査で1日潰れました。)結論から言うと、/usr/libexec/PlistBuddyコマンドを使うことで、入れ子になった要素を操作することができました。
以下の形式でコマンドを実行します。

com.apple.spaces.plistへの要素の追加
$ /usr/libexec/PlistBuddy -c "add 名前 値" ${HOME}/Library/Preferences/com.apple.spaces.plist

入れ子の区切り文字はコロン(:)です。
例えば、iTerm2(com.googlecode.iterm2)を仮想デスクトップ7番(UUID:8310FB96-4D15-48F4-AD49-4280575AD2A5)に割り当てたい場合は、以下のコマンドを実行します。

com.apple.spaces.plistへの要素の追加例
$ /usr/libexec/PlistBuddy -c "add :app-bindings:com.googlecode.iterm2 8310FB96-4D15-48F4-AD49-4280575AD2A5" ${HOME}/Library/Preferences/com.apple.spaces.plist

仮想デスクトップ画面のUUIDのみ取り出す方法

仮想デスクトップ2番のUUIDを取り出すためには、以下のコマンドを実行します。前述のように、GUI上の仮想デスクトップ2番に対応するplistファイル上の番号は1番であることに注意してください。

$ /usr/libexec/PlistBuddy -c "print :SpacesDisplayConfiguration:Space\ Properties:1:name" ${HOME}/Library/Preferences/com.apple.spaces.plist
B9A0EA1C-76A0-417D-BD30-4832630F6222

これは、${HOME}/Library/Preferences/com.apple.spaces.plist の SpacesDisplayConfiguration => Space Properties => 1 => nameの値を出力するものです。入れ子の区切り文字はコロン(:)です。また、スペースはエスケープシーケンスで入力してください。

仮想デスクトップ割当の自動化

これらを踏まえると以下のように自動化できます。

SetAppSpace.rb
require 'open3'

NUMBER_OF_VIRTUAL_DESKTOP = 9
uuid=[] #仮想デスクトップのUUID一覧

# アプリケーションと仮想デスクトップ番号の組み合わせ
appDomains = [
    {"domain"=>"com.google.chrome","num"=>2"uuid"=>nil}
    {"domain"=>"com.readdle.smartemail-mac","num"=>3"uuid"=>nil}
    {"domain"=>"com.evernote.evernote","num"=>4"uuid"=>nil}
    {"domain"=>"com.flexibits.fantastical2.mac","num"=>5"uuid"=>nil}
    {"domain"=>"com.googlecode.iterm2","num"=>7"uuid"=>nil}
    {"domain"=>"com.tapbots.tweetbotmac","num"=>9"uuid"=>nil}
    {"domain"=>"jp.naver.line.mac","num"=>9"uuid"=>nil}
    {"domain"=>"com.tinyspeck.slackmacgap","num"=>9"uuid"=>nil}
    {"domain"=>"com.microsoft.vscode","num"=>10"uuid"=>nil}
]

# 各仮想デスクトップのUUIDを取得
for spaceNum in 1..(NUMBER_OF_VIRTUAL_DESKTOP + 1) do
    ## spaceNum-1、NUMBER_OF_VIRTUAL_DESKTOP + 1はGUI上の番号とplistの補正
    cmd = %Q(/usr/libexec/PlistBuddy -c "print :SpacesDisplayConfiguration:Space\\ Properties:#{spaceNum-1}:name" ${HOME}/Library/Preferences/com.apple.spaces.plist) 
    uuid[spaceNum],  = Open3.capture3(cmd) #1つ目の戻り値のみ格納し、それ以外は捨てる
    uuid[spaceNum] = uuid[spaceNum].chomp
end

# 紐付け実行
appDomains.each{|app|
    app["uuid"] = uuid[app["num"]]
    cmd = %Q(/usr/libexec/PlistBuddy -c "add :app-bindings:#{app["domain"]} string #{app["uuid"]} " ${HOME}/Library/Preferences/com.apple.spaces.plist)
    Open3.capture3(cmd)
}

参考

plistをコマンドラインから作成・編集する[PlistBuddy]

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

vagrantでCyberduckに接続

はじめに

Qiitaに記事を書くのは初めてです。vagrantでCyberduckに接続するやり方で詰まったので個人用として書きます。やり方はあっていると思います。

開発環境&前提

  • macOS
  • CentOS7.6(vagrant+VirtualBox)
  • Cyberduckインストール

ターミナルでの作業

まずターミナルを開いて、$vagrant upをしてください(サーバー起動)。サーバーが起動したらVagrantfileのディレクトリに移動して、
$vagrant ssh-configを実行する。そうすると下記のようにでます。

Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/username/vagrant/MyCentOS/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

これらの内容は記録しといてください。そうしたらCyberduckに移動してください。

Cyberduckでの作業

Cyberduckに移動したら左上にある新規作成を押します。今回はプロトコルをSFTP (SSHによる暗号化 FTP)にします。
スクリーンショット 2019-02-11 13.36.18.png

あとはサーバ、ポート、ユーザー名、パスワードをしてすれば接続できます。そこで$vagrant ssh-configを実行内容を使います。

  • HostName = サーバ(127.0.0.1)
  • Port = ポート(2222)
  • User = ユーザー名(vagrant)

サーバ、ポート、ユーザー名このようになります。で、パスワードもユーザー名と同じように

  • パスワード = vagrant

になるはずです。それで接続できれば大丈夫です。だけど接続できないときもあります。

接続できなければ

接続できなければSSH Private KeyIdentityFileを指定すれば接続できるはずです。

/Users/username/vagrant/MyCentOS/.vagrant/machines/default/virtualbox/private_key

途中のファイルから隠しフォルダ内にあるのでCommand + Shift + Gでファイルを指定してください。
スクリーンショット 2019-02-11 19.20.20.png
これで接続できるはずです。
スクリーンショット 2019-02-11 18.00.46.png
このような画面になれば成功です。

まとめ

同じような記事はあると思いますけど初心者がわかるような記事になるように、なりより自分が次にした時にすぐ理解できるように書きました。

参考サイト

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

Cyberduckからvagrantへの接続方法

初めての記事です。途中で詰まったので自分用に投稿します。
事前にvagrantcyberduckをインストールしといてください。

Cyberduckでの接続方法

まずCyberduckを開いて、左上にある新規作成ボタンを押します。するとこのような画面になります。
スクリーンショット 2019-02-11 13.32.41.png
まず一番上のプロトコルを選ばなくてはいけません。そこからSFTP (SSHによる暗号化FTP)を指定します。
スクリーンショット 2019-02-11 13.36.18.png
そこからサーバ、ポート、ユーザー名、パスワードを指定します。

ターミナルでの確認方法

ターミナルに移動してVagrantfileが入っているフォルダでvagrant upをします。そこで
vagrant ssh-config
を実行します。すると

Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/ユーザー名/vagrant/指定ファイル名/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL

このように出ます。これでサーバ、ポート、ユーザー名がわかります。
HostName = サーバ(127.0.0.1)
User = ユーザー名(vagrant)
Port = ポート(2222)
パスワードは大抵ユーザー名と一緒でvagrantで大丈夫でしょう。
ですが失敗するときもあります。私も失敗しました。
スクリーンショット 2019-02-11 17.34.21.png

接続に失敗したら

接続に失敗したらSSH Private Keyの選択を押して、ファイルを指定します。指定するファイルはIdetityFileです。このファイルの途中でファイルが途切れると思う(見えなくなっている)のですけどCommand + Shift + Gを押してその次のファイルを指定すれば出てくると思うのでそのままprivate_keyを指定してください。そうすれば成功すると思います。
スクリーンショット 2019-02-11 18.00.46.png
このような画面になれば成功です。

参考サイト

Vagrantで作成したローカルサーバにFTPクライアント(Cyberduck)からログインできないときの解決法

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

Macで始めるPython環境づくり2019 初心者編

はじめに

この記事は最近MacBookProの2018年版TouchBar付きをPayPayで購入した筆者が、
家でPython開発を始めようとしている記事です。
正直初心者なので、深い部分は理解していないものも多いですが、
初心者の方の参考になれば幸いです。

仮想環境選び Pyenv+Pipenv

Pyenvは特に要らないとか、venvが公式だからいいとか色々と記事が書かれていますが、まぁ個人的に困らないものを使えばいいと思っているので、今回はPyenv + Pipenvで環境構築を行ってみます。これがベストかは知りませんが、特に問題なく導入できたので僕は良いと思います。

XCodeのインストール

本体は普通にXCodeをAppStoreからインストールします。
そのあとターミナルで下記を実行して、Command Line Toolsをインストールする。

$ xcode-select --install

Homebrewのインストール

HomebrewはMacでのパッケージ管理ツールみたいなものと理解しています。
pyenvをインストールするためにもまずはインストール。
インストール先にあるコマンドをそのままコピペすればOK。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

pyenvのインストール

Homebrewさえ入れば、あとはpython系を入れていくだけです。
まずはpyenvを入れます。

$ brew install pyenv

その後、PATHを通すので、home/.bash_profileに下記を書き込みます。viでの編集に慣れている人は、下記を実行して、.bash_profileに書き込みます。

$ vi ~/.bash_profile
.bash_profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

慣れていない人は、ファインダーからホームディレクトリの隠しファイルを表示してテキストエディタで.bash_profileの中身を編集しましょう。ちなみに隠しファイルはMacでは下記のショートカットで表示できます。

[command] + [shift] + [.(ドット)]

その後設定したファイルを反映させます。

$ source ~/.bash_profile

一応、動いているかを確認するため、叩いてみましょう。
下記のようなヘルプ表示が出ればOKです。

$ pyenv
pyenv 1.2.9
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

Pipenvのインストール

次にPipenvをインストールします。
brewで一発です。

$ brew install pipenv

こちらも設定を.bash_profileに追記します。
仮想環境をフォルダに作成するフラグを立てておくことがメインです。
ついでにインストールがうまくいっているか叩いてみましょう。

.bash_profile
export PIPENV_VENV_IN_PROJECT=true
eval "$(pipenv --completion)"
$ source ~/.bash_profile
$ pipenv
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where             Output project home information.
  --venv              Output virtualenv information.
  --py                Output Python interpreter information.
  --envs              Output Environment Variable options.
  --rm                Remove the virtualenv.
  --bare              Minimal output.
  --completion        Output completion (to be eval'd).
  --man               Display manpage.
  --support           Output diagnostic information for use in GitHub issues.
  --site-packages     Enable site-packages for the virtualenv.  [env var:
                      PIPENV_SITE_PACKAGES]
  --python TEXT       Specify which version of Python virtualenv should use.
  --three / --two     Use Python 3/2 when creating virtualenv.
  --clear             Clears caches (pipenv, pip, and pip-tools).  [env var:
                      PIPENV_CLEAR]
  -v, --verbose       Verbose mode.
  --pypi-mirror TEXT  Specify a PyPI mirror.
  --version           Show the version and exit.
  -h, --help          Show this message and exit.


Usage Examples:
   Create a new project using Python 3.7, specifically:
   $ pipenv --python 3.7

   Remove project virtualenv (inferred from current directory):
   $ pipenv --rm

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

Commands:
  check      Checks for security vulnerabilities and against PEP 508 markers
             provided in Pipfile.
  clean      Uninstalls all packages not specified in Pipfile.lock.
  graph      Displays currently-installed dependency graph information.
  install    Installs provided packages and adds them to Pipfile, or (if no
             packages are given), installs all packages from Pipfile.
  lock       Generates Pipfile.lock.
  open       View a given module in your editor.
  run        Spawns a command installed into the virtualenv.
  shell      Spawns a shell within the virtualenv.
  sync       Installs all packages specified in Pipfile.lock.
  uninstall  Un-installs a provided package and removes it from Pipfile.
  update     Runs lock, then sync.

pyenvとpipenvを利用したpython環境構築

ここまででインストレーションは終わりました。
ここから実際にPythonの環境を作っていきます。
今回は例として、python3.5.6の環境を作ってきます。
pipenvはpyenvの仮想環境をラップするようなイメージで動きますので、まずpython3.5系列をpyenvでインストールしてあげてから、pipenvでディレクトリの環境を整えます。

$ pyenv install  3.5.6

これでpipenvを使う準備が整いました。プロジェクトディレクトリを作りましょう。

$ mkdir sample_project
$ cd sample_project
$ pipenv --python 3.5.6

これでsample_project内でpython3.5を使って開発をすることができます。
あとは動くかを試してみましょう。

pipenvで作った環境をactivateするには、shellというコマンドを実行します。
ぬける際にはexitです。
下記例を見るとわかる通り、pipenvの仮想環境をactivateしている状態では、pythonのバージョンが3.5.6になっており、deactivateした状態では2.7.10となっています。ちなみに作った仮想環境は、sample_project/.venvに作られていますので、pycharmなどのinterpreterの設定も簡単に行えます。

$ pipenv shell
$ python --version
Python 3.5.6
$ exit
$ python --version
Python 2.7.10

これでpyenvとpipenvを使った簡単なpython環境構築は完了です。
凝ったことはできないので、今後も初心者向けの投稿をしていくつもりです。

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

[macOS] PyenvでPython使う (VSCode)

mac に乗り換えてデフォルトで python 入ってんだ、へぇと思い、
VSCode 使ってコード書いてみたら、こんな感じで軽く注意された

Untitled-3 — default (ワークスペース) 2019-02-03 17-45-08.png

You have selected the macOS system install of Python,
Which is not recommended for use with the Python 
extension. Some functionality will be limited, please select a 
different interpreter.

デフォルの python は VSCode 非推奨と言っとる。。
色々ゴニョゴニョやって怒られなくなったのですが、もう一度同じ事ができる気がしなかったのでメモ

環境

macOS Mojave 10.14.2
Visual Studio Code 1.30.2
Python 2.7.10

の環境に以下を追加する

pyenv 1.2.9  → pythonの複数バージョンを切り替えるため
anaconda3-5.3.1  →  色々入ってて便利なため

VSCodeの拡張機能

そもそもこれ入れないと注意すらされない
拡張機能: Python — default (ワークスペース) 2019-02-04 12-40-04.png

VSCode の拡張機能から、 python と入力して入れる

pyenv インストール

$ brew install pyenv

brewは 公式を参考に1ライナーでインストール可能

pyenv のインストールが無事終わると、最後の方に忠告がある

==> Caveats
To use Homebrew's directories rather than ~/.pyenv add to your profile:
  export PYENV_ROOT=/usr/local/var/pyenv

To enable shims and autocompletion add to your profile:
  if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

・ デフォルトだと ~/.pyenv なので、 /usr/local/var/pyenv を指定してね。的な
・ 自動補完機能使うには、 eval "$(pyenv init -)" やってね。的な

忠告に従い以下の様に追記

$ vi ~/.bash_profile

export PYENV_ROOT=/usr/local/var/pyenv
if which pyenv > /dev/null; then eval "$(pyenv init -)"; fi

$ . ~/.bash_profile

因みにどうでもいいですが、以下を eval で評価して実行してた

$ pyenv init -
export PATH="/usr/local/var/pyenv/shims:${PATH}"
export PYENV_SHELL=bash
source '/usr/local/Cellar/pyenv/1.2.9/libexec/../completions/pyenv.bash'
command pyenv rehash 2>/dev/null
pyenv() {
  local command
  command="${1:-}"
  if [ "$#" -gt 0 ]; then
    shift
  fi

  case "$command" in
  rehash|shell)
    eval "$(pyenv "sh-$command" "$@")";;
  *)
    command pyenv "$command" "$@";;
  esac
}

pyenv のインストールが完了

$ type pyenv
pyenv is /usr/local/bin/pyenv

$ pyenv --version
pyenv 1.2.9

python3のインストール

インストール可能なリストを表示

$ pyenv install -l | grep anaconda3
  anaconda3-2.0.0
  anaconda3-2.0.1
  anaconda3-2.1.0
  anaconda3-2.2.0
  anaconda3-2.3.0
  anaconda3-2.4.0
  anaconda3-2.4.1
  anaconda3-2.5.0
  anaconda3-4.0.0
  anaconda3-4.1.0
  anaconda3-4.1.1
  anaconda3-4.2.0
  anaconda3-4.3.0
  anaconda3-4.3.1
  anaconda3-4.4.0
  anaconda3-5.0.0
  anaconda3-5.0.1
  anaconda3-5.1.0
  anaconda3-5.2.0
  anaconda3-5.3.0
  anaconda3-5.3.1
  anaconda3-2018.12

最新を入れる(5分ぐらいかかった気がします)
今回はanaconda入れてますが、普通に2系とか3系とか入れれます

$ pyenv install anaconda3-5.3.1
Downloading Anaconda3-5.3.1-MacOSX-x86_64.sh.sh...
-> https://repo.continuum.io/archive/Anaconda3-5.3.1-MacOSX-x86_64.sh
Installing Anaconda3-5.3.1-MacOSX-x86_64.sh...
Installed Anaconda3-5.3.1-MacOSX-x86_64.sh to /usr/local/var/pyenv/versions/anaconda3-5.3.1

インストールが終わったら、 pyenv versions で切り替え可能な python を参照

~$ pyenv versions
* system (set by /usr/local/var/pyenv/version)
  anaconda3-5.3.1

pyenv global 'Interpreter' で切り替える

$ pyenv global anaconda3-5.3.1

もう一度 pyenv versions で確認してみると、「*」の場所が変わってる

$ pyenv versions
  system
* anaconda3-5.3.1 (set by /Users/ando/.pyenv/version)

インタプリタちゃんと変わってた

$ python -V
Python 3.7.0

$ type python
python is /usr/local/var/pyenv/shims/python

因みに、 pyenv local Interpreter とすると、そのディレクトリのみ切り替わる

~$ mkdir py2
~$ cd py2 
~/py2$ pyenv versions
  system
* anaconda3-5.3.1 (set by /usr/local/var/pyenv/version)
~/py2$ pyenv local system
~/py2$ python -V
Python 2.7.10
~/py2$ cd ..
~$ python -V
Python 3.7.0

VSCode の Python Interpreter の指定

ようやく本題

Code → 基本設定 → 設定
適当にスクロールしてどこかしらで、 settings.json を見つけて編集をポチ
で以下の様にインストールした python のインタプリタを指定

settings.json
{
    "python.pythonPath": "/usr/local/var/pyenv/versions/anaconda3-5.3.1/bin/python"
}

ワークスペースの設定 にも同様に指定
※ここポイント(これやんなくて、あれって30分ぐらいなってた)


    "settings": {
        "python.pythonPath": "/usr/local/var/pyenv/versions/anaconda3-5.3.1/bin/python"
    }

これで VSCode で pythonファイル開いても、警告がでなくなりました

因みに VScode でF1押して、検索窓出して、 Python: Select Interpreter と入力すると、
インタプリタの指定が出来ます。そして、macデフォルトを指定すると当たり前ですがまた警告が出ます。
python2系使う場合、 pyenv で別途インストールが必要です。

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

Macに乗り換えた時のshell環境のメモ

Macに乗り換えて、シェル環境を色々と触ったので、忘備録として。
(ほとんど100万番煎じですが)

サマリー

  • zsh インストール
  • prezto インストール
  • VSCode setting.json修正
  • ~/.bashrc ~/.bash_profile → ~/.zshrc へ引っ越し
  • gcloud SDK 起動しない。。
  • peco を使った便利機能

zsh インストール

  • brew で最新の zsh インストール
$ brew install zsh
  • /usr/local/bin/zsh にインストールされるので、  /etc/shells にシェルを追記する。
$ sudo vim /etc/shells

/usr/local/bin/zsh を追記する

  • 使うシェルを切り替える 以下コマンドでシェルを切り替える
$ chsh -s /usr/local/bin/zsh

prezto インストール

prezto は zsh を設定するための framework で、こまけぇこたぁいいから、簡単に良い感じでそれっぽくしてくれ。人向き

  • git からダウンロード
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
  • 既存の .z~ 系のファイルとシンボリックリンクを作る
$ setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
  • テーマを変える

いい感じなのは、 pure か steeef か sorin だそうです。
ここ にテーマがあります。

テーマが決まったら、.zpreztorc ファイルに書き込みます。

.zpreztorc
zstyle ':prezto:module:prompt' theme 'sorin'

Gitのブランチを表示するには、Preztoのモジュールにgitを追加する。

.zpreztorc
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'prompt' \
  'git'

こんな感じになる。

image.png

VSCode setting.json修正

  • VSCodeの起動シェルを変更する。

Code → 基本設定 → 設定 で以下を /usr/local/bin/zsh に変更

Terminal › Integrated › Shell: Linux
Terminal › Integrated › Shell: Osx

settings.json を直接変更する場合。

settings.json
    "terminal.integrated.shell.linux": "/usr/local/bin/zsh",
    "terminal.integrated.shell.osx": "/usr/local/bin/zsh",

~/.bashrc ~/.bash_profile → ~/.zshrc へ引っ越し

aliase や環境変数や関数やらなんやら、要るものを持っていきます。

gcloud SDK 起動しない

公式の ここ でインストールし、
bash の時は、~/.bashrcに以下記載がありました。

~/.bashrc
# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/andormeda/y/google-cloud-sdk/path.bash.inc' ]; then . '/Users/andormeda/y/google-cloud-sdk/path.bash.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/andormeda/y/google-cloud-sdk/completion.bash.inc' ]; then . '/Users/andormeda/y/google-cloud-sdk/completion.bash.inc'; fi

何て事はなく、bash を zsh に変更すればうまく動きました。

~/.zshrc
# The next line updates PATH for the Google Cloud SDK.
if [ -f '/Users/andormeda/y/google-cloud-sdk/path.zsh.inc' ]; then . '/Users/andormeda/y/google-cloud-sdk/path.zsh.inc'; fi

# The next line enables shell command completion for gcloud.
if [ -f '/Users/andormeda/y/google-cloud-sdk/completion.zsh.inc' ]; then . '/Users/andormeda/y/google-cloud-sdk/completion.zsh.inc'; fi

peco を使った便利機能

大分有名ですが、history をインクリメンタルサーチするやつです。

  • peco のインストール

brew でインストール

brew install peco

~/.zshrcに以下を追記
control + r にキーバニンドを割り当ててます。

~/.zshrc
# peco peco-select-history
function peco-select-history {
    BUFFER=`history -n -r 1 | peco --query "$LBUFFER"`
    CURSOR=$#BUFFER
    zle reset-prompt
}
zle -N peco-select-history
bindkey '^r' peco-select-history

よく実行するコマンドをテキスト「~/.command」にまとめておいて、同じくインクリメンタルサーチして使えます。
control + t にキーバニンドを割り当てます。

~/.zshrc
# peco-snippets
function peco-snippets() {
    BUFFER=$(grep -v "^#" ~/.command | peco --query "$LBUFFER")
    zle reset-prompt
}
zle -N peco-snippets
bindkey '^t' peco-snippets
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[2019年2月版] Juliaが1.1になっていたので触ってみるか

Julia 1.1 リリース

発表された当時はまたいいとこ取りの新しいの出てきたな〜ぐらいにしか思っておらず、すっかり忘れていたわけですが気づけば1.0もリリースされておりまして、さらに先日、1.1がリリースされたとのニュースを目にしたのでおおっと!と思い出したわけでございます。

すぐさま本家サイトに飛んで情報を仕入れてきました。

さっそく install

対象環境は Mac (macOS High Sierra)です。
以下のサイトからMac用のバイナリをダウンロードしてまいります。

例によって アプリケーションフォルダにJulia-1-1.appをドラッグ&ドロップすればインストール完了です。

FinderにてアプリケーションからJulia-1.1.appをダブルクリックすればREPL用のターミナルが立ち上がります。

$ exec '/Applications/Julia-1.1.app/Contents/Resources/julia/bin/julia'
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.1.0 (2019-01-21)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |
julia>

はい、JuliaのREPL環境が起動しました。

Juliaの計算式

Juliaが変態的なのはなんといっても計算式です。それだけじゃないけど言語仕様がてんこ盛りすぎて紹介しきれないのでとりあえず式の書き方からご紹介します。

julia> 1+1
2

julia> x=5
5

julia> 4x
20

julia> y=4
4

julia> xy
ERROR: UndefVarError: xy not defined

julia> x*y
20

数値と変数の乗算で*みたいな演算子がいらないってところがミソですね。4x+1みたいに学校で習った通りに書けます。
流石に変数と変数の暗黙の乗算はダメです。数値リテラルだけに暗黙の乗算メソッドが定義されてる、と頭にいい聞かせて無理やり納得しましょう。

さらに特徴的な演算は続きます。
算演算子/の逆、\演算子が登場です。

julia> 4 / 5
0.8

julia> 4 \ 5
1.25

julia> 5 \ 4
0.8

除単純に「右 割る 左」→「左 割る 右」なのですが、確かに算数の割り算÷は「左 割る 右」でプログラマーを長く続けてると"右 分の 左"が当たり前じゃん、と思ってしまいますが、初心の頃は「プログラムって"左 割る 右"じゃなくて"右 割る 左"って書かなきゃいけないんだ!」って思ったような思わないような・・・新鮮だったなぁ。。。
(今でもちょっと考えると"4割る5と5分の4て一緒じゃん?なにが違うの?"って思っちゃいますが、ほら!暗黙で左右入れ替えてるでしょ?っていう〜。訓練の賜物なんだけどね。。。)

さらに配列のeach展開してくれる.演算子。

julia> a = [1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> b = [1,0,1]
3-element Array{Int64,1}:
 1
 0
 1

julia> a.*b
3-element Array{Int64,1}:
 1
 0
 3

簡単に配列の合成ができてしまいます。。。

あとは超重要なNaNが数値として==で比較するのとオブジェクト?として比較するiseqaul関数で分けられているので安心。

julia> NaN == NaN
false

julia> isequal(NaN, NaN)
true

julia> isequal(-0.0, 0.0)
false
  • isequalは値ではなくオブジェクトのハッシュ値を計算して比較するらしいので、-0.00.0.の区別もします。

そして比較演算子の連結。

julia> -0.0 == 0.0 == 0 < 1
true
  • 0 < f(a) < (b) < 1のような関数の戻り値も当然、連結して比較できます。 これは便利。

Macでoption+^と押すとが出せるんだね!

julia> 1≠2
true

はい、!=と同じです。

続いてoption+vが出せます。

julia> .√b
3-element Array{Float64,1}:
 1.0
 0.0
 1.0

配列の各要素の平方根求めてますが・・・だんだん、理解が追いつかなくなってきたな。。。w
というか√配列だけで呼ぶと以下のエラーが出ます。

julia> √b
ERROR: MethodError: no method matching sqrt(::Array{Int64,1})
Closest candidates are:
  sqrt(::Float16) at math.jl:1018
  sqrt(::Complex{Float16}) at math.jl:1019
  sqrt(::Missing) at math.jl:1070
  ...
Stacktrace:
 [1] top-level scope at none:0

なるほどsqrt関数の引数はやっぱりFlaot16を受け取るからbだけだとsqrt(Array)になっちゃってダメなんですね!で、.演算子のeachbを展開するからsqrt(Float16)に渡せる、ということですか。あんまりわかりません!w
(.が前置でも後置でも動くのが気持ち悪いw)

お次はrational number、有理数です。要は分子と分母が整数の分数です。

julia> 2 // 3
2//3

julia> 6//8
3//4

julia> g = 90
90

julia> g//5
18//1

自動で約数にしてくれます。

虚数も余裕です。

julia> 1+2im
1 + 2im

julia> 5(1 + 4im)
5 + 20im

julia> r=4; i=3; q=r+i*im
4 + 3im

julia> real(q)
4

julia> imag(q)
3

julia> conj(q)
4 - 3im

julia> abs(q)
5.0

julia> angle(q)
0.6435011087932844

julia> sqrt(-1)
ERROR: DomainError with -1.0:
sqrt will only return a complex result if called with a complex argument. Try sqrt(Complex(x)).
Stacktrace:
 [1] throw_complex_domainerror(::Symbol, ::Float64) at ./math.jl:31
 [2] sqrt at ./math.jl:492 [inlined]
 [3] sqrt(::Int64) at ./math.jl:518
 [4] top-level scope at none:0

julia> sqrt(-1 + 0im)
0.0 + 1.0im

俺があんまり余裕じゃないけど。。。sqrt(-1)でエラーで、sqrt(-1 + 0im)でちゃんと計算してくれるのはさすがです。

配列、行列はプログラマーとしての理解を超えていますw

julia> a = [ 1 -1-im
       1+im im]
2×2 Array{Complex{Int64},2}:
 1+0im  -1-1im
 1+1im   0+1im

julia> a[1]
1 + 0im

julia> a[1:4]
4-element Array{Complex{Int64},1}:
  1 + 0im
  1 + 1im
 -1 - 1im
  0 + 1im

julia> a'
2×2 LinearAlgebra.Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
  1+0im  1-1im
 -1+1im  0-1im

julia> b = rand(10,10)
10×10 Array{Float64,2}:
 0.276978  0.323021  0.169132  0.195895    0.889746   0.926098   0.425271 
 0.798352  0.240408  0.68136   0.167325     0.442709   0.119885   0.353514 
 0.806736  0.847521  0.274664  0.927191     0.519732   0.20163    0.843687 
 0.909628  0.280718  0.262527  0.927031     0.79751    0.852825   0.717645 
 0.859211  0.167855  0.574454  0.929672     0.745732   0.483358   0.820543 
 0.808946  0.323306  0.953342  0.987195    0.0455295  0.0437875  0.0437014
 0.965098  0.219585  0.403237  0.8617       0.966326   0.894821   0.365612 
 0.310564  0.231156  0.539079  0.289952     0.95213    0.626799   0.412521 
 0.622888  0.883617  0.219356  0.970493     0.315544   0.913933   0.911824 
 0.326981  0.645471  0.148864  0.246486     0.278956   0.53009    0.740881 

要注意なのは配列のインデクスが"1"ベースであるということです。大抵のプログラミング言語は"0"ベースのインデクスですがJuliaは"1"ベースです。
随伴行列ってなんですかね・・・?すいません、実はこっち系全然疎いのですw

REPLの終わり方

REPLから抜けるには以下のようにexitメソッドを呼びます。

julia> exit()

パスを通す。

アプリケーションフォルダにコピーしただけなので当然このままではjuliaコマンドが他から呼べません。
パスを通します。

$ vi ~/.bash_profile   # -> export PATH=/Applications/Julia-1.1.app/Contents/Resources/julia/bin:$PATH を追加。
$ source ~/.bash_profile

appのバージョンはダウンロードしたバージョンに合わせてください。

Jupyter で動かしてみる

こちらを参考にしつつ以下の手順で Jupyter 用の Julia kernel IJuliaをインストールしました。
Anacondaは導入済みとします。

julia> using Pkg

julia> Pkg.add("IJulia")

インストールが終わったらnotebookメソッドで起動します。

julia> using IJulia

julia> notebook()
install Jupyter via Conda, y/n? [y]: y
[ Info: Downloading miniconda installer ...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 43.3M  100 43.3M    0     0  2799k      0  0:00:15  0:00:15 --:--:-- 3538k
[ Info: Installing miniconda ...

あっ。。。おもわずyしちゃったけど、Jupyterはinstallしなくてよかったんじゃないかな〜!?

・・・とりあえず起動したのでよしとします。。

jupyterが起動したのを確認したらcontrol+cでnotebookのサーバーを停止し、anacondaのnotebookもしくはjupyterlabを起動し、JuliaのアイコンがNotebookとConsoleに追加されているのを確認します。

VSCode のプラグイン

VS CodeのプラグインはそのものズバリのJuliaプラグインがあったのでインストールいたしました。
例によって hello worldを出力してみます。ついでに引数も表示させてみます。

sample.jl
println("hello world")

for x in ARGS
    println(x)
end

ターミナルを開きsample.jlを実行します。

$ julia sample.jl 0 aa bbb ccc
hello world
0
aa
bbb
ccc

素敵!

続きはJupyterでグラフなどを出してみたいと思います。

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

Google App Script をgitで管理する

claspを導入する

ここの手順でインストール済み。
隠しファイル・隠しフォルダの表示切り替えは[shift + command + .]でできる。

Google Apps Script API の有効化

https://script.google.com/home/usersettings
上記にアクセスして、Google Apps Script API をオンにする。
これでアカウントのGASプロジェクトをclaspで操作できるようになる。

claspにログイン

clasp login

ターミナルで上記を実行すると、ブラウザが立ち上がるのでGoogleアカウントにログインする。

プロジェクトをローカル上にcloneする

ターミナルでクローンするディレクトリに移動して、下記のコマンドを実行する。

clasp clone [スクリプトID]

スクリプトIDはファイル→プロジェクトのプロパティで確認できる。
念の為、ターミナルにコマンドを打ち込むときにスクリプトIDに[]は必要ない。

gitリポジトリの用意

好きな名前で準備する。

ターミナルからgitへpushする

git config --global user.name xxxxx
git config --global user.email xxxxx@example.com
git init
git add .
git commit -m 'First Commit'
git remote add origin https://github.com/xxxxx/xxxxx.git
git push -u origin master

-u オプションをつけることで、以後はgit pushでoriginをmasterにpushできる。

コードの変更をGASプロジェクトへ反映する

.clasp.json がある場所で以下を行う。

clasp push

これでローカルファイルをGASプロジェクトへアップロードしてくれる。

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

claspの導入(Mac)

claspの導入理由

Google Apps Scriptのソース管理をgitで行いたい。
好きなエディタで開発したい。
以上。

Homebrewの導入

公式サイト : https://brew.sh/index_ja

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

上記のコードをターミナルで実行する。
終了したら、無事インストールができたのかバージョンを確認する。

git --version

余談
私はここでエラーが出てgitをインストールできなかったが、MacのOSをバージョンアップすると上手くいった。

node.jsのインストール

Homebrewでnodebrewをインストールする。

brew install nodebrew
nodebrew -v
nodebrew setup
nodebrew install-binary latest

余談
nodebrew setup をせずに最新版のnode.jsをインストールしようとしたら失敗したので、setup大事。忘れずに実行する。

nodebrew list

上記のコマンドでインストール済みバージョンが分かる。
下のcurrentは使用中のバージョン。私の場合はnoneだった。
なので使用するバージョンを指定する。

nodebrew use v11.9.0
nodebrew list

再び使用可能なバージョンを確認すると、currentが指定したバージョンになっているはず。
次に実行パスを通す。

echo "export PATH=\$xxxxx/.nodebrew/current/bin:\$PATH" >> ~/.bashrc

xxxxxの部分は人による。
深く考えずにnodebrewのインストール時に表示されたパスを貼り付ければOK。
(下記の表示があったはず)

========================================
Export a path to nodebrew:

export PATH=$xxxxx/.nodebrew/current/bin:$PATH
========================================

.bash_profileで.bashrcの設定が読み込まれるようにする。
そして、.bash_profileの編集はviで行うと思うので以下を参考に。

cd
ls -a
vi ~/.bash_profile

ホームディレクトリへ移動し、.bash_profileを開く。ない場合は作る。

if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi

iでINSERTモードに変更し、上記の設定を書き込む。
escキーでコマンドモードに変更。
:wで上書き保存。
:qでvi終了。
設定を反映させるためにターミナルを終了する。

node -v
npm -v

これでバージョンが表示されればOK!

余談
このあとviコマンドが使えなくなったので、設定を編集しにいきました。

/usr/bin/vi ~/.bash_profile

.bash_profileに以下を記載

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin

再び設定を反映させるためにターミナルを終了。
これでコマンドが使用できるようになったが、今度はnodeのバージョンが表示されず。
以下を実行して、ようやく完了。困っちゃうね。

source .bashrc

claspのインストール

npm i @google/clasp -g

参考:
claspを使い、Google Apps Scriptプロジェクトをgitでバージョン管理する
GAS のGoogle謹製CLIツール clasp
Google Apps Scriptの新しい3つの機能 その③ CLI Tool Clasp
MacでPATHを通す

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